highlight

看完让你彻底搞懂Websocket原理

孤街醉人 提交于 2020-04-10 10:00:52
偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有。所以转到我博客里,分享一下。比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享。废话这么多了,最后再赞一个~ 一、websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解 有交集,但是并不是全部。 另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。 通俗来说,你可以用HTTP协议传输非Html数据,就是这样=。= 再简单来说,层级不一样。 二、Websocket是什么样的协议,具体有什么优点 首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。 HTTP的生命周期通过 Request 来界定

整个世界都是你的绿幕:这个视频抠图换背景的方法着实真假难辨

我们两清 提交于 2020-04-09 03:58:41
绿幕是影视剧中抠图、换背景的利器,但如果不在绿幕前拍摄,我们还能完美地转换背景吗?华盛顿大学的研究者最近就上传了这样一份论文,不在绿幕前拍摄也能完美转换视频背景,让整个世界都变成你的绿幕。 机器之心报道,参与:Racoon、张倩。 从作者给出的 demo 可以看到,他们的方法效果非常惊艳,即使视频中的人疯狂甩头发也没有影响合成效果: 做各种动作也没有「穿帮」: 即使人物和背景不好区分、手持镜头稍微晃动时抠图效果也不赖: 目前,这篇论文已被 CVPR 2020 大会接收。 论文链接: https:// arxiv.org/pdf/2004.0062 6.pdf GitHub链接: https:// github.com/senguptaumd/ Background-Matting 在论文中,研究者提出了一种创建蒙版(matting)的新方法。多数现有的蒙版方法都需要以绿幕为背景,或者手工创建一个三元图(trimap)。当然,也有些自动方法不需要三元图,但效果会很差。本文提出的这个蒙版方法也不需要三元图,但抠图、换背景效果要更好。 当然,达到这么好的效果是有条件的。除了原始图像/视频之外,研究者还要求拍摄者多拍一张不带人物的背景图。这一过程要比创建三元图节省很多时间。研究者用对抗损失训练了一个深度网络,用来预测蒙版。他们首先利用带有 ground truth

《Flask Web 开发实战》虚拟环境/依赖/Pipenv 等问题解决方法

旧时模样 提交于 2020-04-08 23:49:20
注:这篇文章的主要受众是《 Flask Web 开发实战 》的读者。 注2:文中的 $ 符号标识一条命令行命令的开始,$ 前面是当前工作目录,# 号后面是注释。你实际只需要输入 $ 符号和 # 号之间的内容,不包括开头和结尾的空格。 在群聊和论坛里总是看到和虚拟环境和依赖安装相关的各类问题,这篇文章希望能够提供一个统一的解决方案。下次如果遇到有人问虚拟环境/Pipenv/依赖安装相关的问题,请把这篇文章的链接丢过去。 安装 Python 库非常慢? 在进入正题之前,你需要先解决基础设施问题。你在执行 pip install 命令或 pipenv install 等命令时会不会网速非常慢?20k/s 或者干脆看到 Time out,Connection reset 之类的报错,这种情况下,你需要设置 PyPI 镜像。具体操作可以在这篇《 从国内的 PyPI 镜像(源)安装 Python 包 》看到。 要不要继续使用 Pipenv? 因为书里面在一开始介绍了使用 Pipenv 管理依赖和虚拟环境,同时所有的安装第三方库的命令也都是使用 Pipenv,所以我们要解决的第一个问题是「要不要继续使用 Pipenv?」。导致这个问题的起因在 这里 。 我的建议是,如果你在使用的过程中没有遇到过任何报错,那么就继续使用它。直到你觉得它在某些地方不再让你满意。 但是如果你在使用的过程中遇到了问题

旋转矩阵

两盒软妹~` 提交于 2020-04-08 20:34:18
旋转矩阵 原题链接 题目 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ] 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ] 原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ] 题解 拿到题目,想了会,没思路。我发现了一些规律,但是不知道怎么用代码去实现。 第一行 [0][0] ==> [0][N] [0][1] ==> [1][N] [0][2] ==> [2][N] 第二行 [1][0] ==> [0][N-1] [1][1] ==> [1][N-1] [1][2] ==> [2][N-1] 第三行 [2][0] ==> [0][N-2] [2][1] ==> [1][N-2] [2][2] ==> [2][N-2] 好像发现规律了,试试如何用代码实现。题目要求不占用额外内存空间,应该就是:

广告行业中那些趣事系列8:详解BERT中分类器源码

风流意气都作罢 提交于 2020-04-08 17:54:41
最新最全的文章请关注我的微信公众号:数据拾光者。 摘要:BERT是近几年NLP领域中具有里程碑意义的存在。因为效果好和应用范围广所以被广泛应用于科学研究和工程项目中。广告系列中前几篇文章有从理论的方面讲过BERT的原理,也有从实战的方面讲过使用BERT构建分类模型。本篇从源码的角度从整体到局部分析BERT模型中分类器部分的源码。 目录 01 整体模块划分 02 数据处理模块 03 特征处理模块 04 模型构建模块 05 模型运行模块 06 其他模块 总结 01 整体模块划分 对于机器学习工程师来说,会调包跑程序应该是万里长征的第一步。这一步主要是帮助我们迅速将模型应用到实际业务中,并且提升自信心,但这还远远不够。要想根据不同的业务场景更好的使用模型,我们需要深层次的理解模型,读点源码才能走的更远。 本篇解读的是BERT开源项目中分类器部分的源码,从最开始的数据输入到模型运行整个流程主要可以分成数据处理模块、特征处理模块、模型构建模块和模型运行模块。具体如下图所示: 图1 BERT分类器整体模块划分 因为原生态BERT预训练模型动辄几百兆甚至上千兆的大小,模型训练速度非常慢,对于BERT模型线上化非常不友好,所以使用目前比较火的BERT最新派生产品ALBERT来完成BERT线上化服务。ALBERT使用参数减少技术来降低内存消耗从而最终达到提高BERT的训练速度

eric/funcat

谁都会走 提交于 2020-04-08 16:50:16
Funcat Funcat 将同花顺、通达信、文华财经等的公式移植到了 Python 中。 同花顺、通达信、文华财经麦语言等公式的表达十分简洁,适合做技术分析。 苦于 Python 缺乏这种领域特定语言的表达能力,所以用 Python 基于 numpy 实现了一套。 安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U funcat notebooks 教程 quick-start API 行情变量 开盘价: OPEN O 收盘价: CLOSE C 最高价: HIGH H 最低价: LOW L 成交量: VOLUME V VOL 工具函数 n天前的数据: REF REF ( C , 10 ) # 10天前的收盘价 金叉判断: CROSS CROSS ( MA ( C , 5 ), MA ( C , 10 )) # 5日均线上穿10日均线 两个序列取最小值: MIN MIN ( O , C ) # K线实体的最低价 两个序列取最大值: MAX MAX ( O , C ) # K线实体的最高价 n天都满足条件: EVERY EVERY ( C > MA ( C , 5 ), 10 ) # 最近10天收盘价都大于5日均线 n天内满足条件的天数: COUNT COUNT ( C > O , 10 ) #

可输入的下拉列表

半世苍凉 提交于 2020-04-07 19:25:58
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script language="javascript"> function dhCombobox(){ //author:dh20156; var dh = this; //返回实例名 this.clsName = null; //定义目标对象 this.targetObj = null; //定义提示框属性 this.popWidth = 0; this.popHeight =50; //定义数据源(数组) this.arrayData = []; //定义匹配后的结果 var nowHtml = null; //定义当前选定的结果 var i_selected = 0; //定义光标键所在的位置 var i_move = i_selected; //匹配用户输入字符结果 Array.prototype.contains = function(o) { //alert("o"+o); var tc = []; var nc = 0; for(var i = 0, l = this.length; i < l; i++) { var Data1 = this[i]

请你说说 Vue 中 slot 和 slot-scope 的原理(2.6.11 深度解析)

房东的猫 提交于 2020-04-07 13:24:47
前言 Vue 中的 slot 和 slot-scope 一直是一个进阶的概念,对于我们的日常的组件开发中不常接触,但是却非常强大和灵活。 在 Vue 2.6 中 slot 和 slot-scope 在组件内部被统一整合成了 函数 他们的渲染作用域都是 子组件 并且都能通过 this.$slotScopes 去访问 这使得这种模式的开发体验变的更为统一,本篇文章就基于 2.6.11 的最新代码来解析它的原理。 对于 2.6 版本更新的插槽语法,如果你还不太了解,可以看看这篇尤大的官宣 Vue 2.6 发布了 举个简单的例子,社区有个异步流程管理的库: vue-promised ,它的用法是这样的: <Promised :promise="usersPromise"> <template v-slot:pending> <p>Loading...</p> </template> <template v-slot="data"> <ul> <li v-for="user in data">{{ user.name }}</li> </ul> </template> <template v-slot:rejected="error"> <p>Error: {{ error.message }}</p> </template> </Promised> 可以看到

安卓App流量统计

陌路散爱 提交于 2020-04-07 11:53:24
http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html 安卓App流量统计 12 OCT 2013 android流量简介 流量统计文件 :路径 /proc/net/dev 如上图: lo 为本地流量, rmnet0 为3g/2g流量, wlan0 为无线流量. 在 /sys/class/net/ 下 可以找到相关类别(如rmnet0)的目录.在其子目录statistics下游rx bytes和tx bytes记录收发流量. 在 /proc/uid_stat/{uid}/tcp_rcv 记录该uid应用下载流量字节, /proc/uid_stat/{uid}/tcp_snd 有该uid应用上传流量字节 TrafficStats学习 TrafficStats google develop文档 TrafficStats 源文件 查看 重要API: static long getMobileRxBytes () //获取通过Mobile连接收到的字节总数,不包含WiFi static long getMobileRxPackets () //获取Mobile连接收到的数据包总数 static long getMobileTxBytes () //Mobile发送的总字节数 static long

请你说说 Vue 中 slot 和 slot-scope 的原理(2.6.11 深度解析)

孤者浪人 提交于 2020-04-07 10:20:35
前言 Vue 中的 slot 和 slot-scope 一直是一个进阶的概念,对于我们的日常的组件开发中不常接触,但是却非常强大和灵活。 在 Vue 2.6 中 slot 和 slot-scope 在组件内部被统一整合成了 函数 他们的渲染作用域都是 子组件 并且都能通过 this.$slotScopes 去访问 这使得这种模式的开发体验变的更为统一,本篇文章就基于 2.6.11 的最新代码来解析它的原理。 对于 2.6 版本更新的插槽语法,如果你还不太了解,可以看看这篇尤大的官宣 Vue 2.6 发布了 举个简单的例子,社区有个异步流程管理的库: vue-promised ,它的用法是这样的: <Promised :promise="usersPromise"> <template v-slot:pending> <p>Loading...</p> </template> <template v-slot="data"> <ul> <li v-for="user in data">{{ user.name }}</li> </ul> </template> <template v-slot:rejected="error"> <p>Error: {{ error.message }}</p> </template> </Promised> 可以看到