但我当然还记得Capistrano,这是一种流行于2010年代初的远程服务器自动化工具——它实际上是容器和Kubernetes之前的工具。 我有时对随着时间流逝失去流行度的常用技术感兴趣。...环境 Capistrano了解您将处理的三个基本环境: 通常是生产,暂存和开发。开发环境可能是笔记本电脑;暂存环境可能是某种QA可以访问的云服务器。...Capistrano的灵活性会允许较少经验的开发人员建立工作但不稳定的部署。 相比之下,单个Docker镜像允许对OS、包、库和代码进行系统性控制。...从现代观点来看,Capistrano的另一个问题是它是用Ruby构建的。...但即使作为一个蒙尘的遗迹,Capistrano仍然是一个伟大的模块化工具,用于自动化Web应用程序的部署和维护。 至于加利福尼亚州的Capistrano?恐怕是坏消息。
基本操作——识别数字 体验课的大致流程是这样的: 先播放一段视频,在关键节点会自动停下来 停下来后你可以自己操作页面上的一些控件实现和视频的交互 通关后你可以跳到下一段视频 重复上面三个操作 作为一个软件工程师...先抓包看了一下,Network 面板有很多的 mp3 和 mp4 请求,然后在 Elements 面板里搜到了 标签,所以说视频还是通过 video 播放的; Console 面板有一个...,从技术上看,回形针的这个互动视频并没有什么创新可言,国内外有很多的互动广告,都是用这套组合拳实现的:过场动画用视频,交互操作用 WebGL;从商业上看,可能确如回形针所说,这个可能是世界上第一款互动教学视频...大部分的交互教程都是依托于 Web,所以他们的发展历史和 Web 的发展是高度绑定的。 比如说十几年前 Flash 是网页实现交互的主流方案,互动教程也是基于 Flash 实现的。...交互类教程还是教程的这个大类,如果没有这个约束,交互教程很有可能变为炫技产物,学生会被海量的视觉噪音所淹没,最后教学质量反而会大打折扣 最后一个问题就是成本很高。
介绍 Rails是一个用Ruby编写的开源Web应用程序框架。Nginx是一种高性能HTTP服务器,反向代理和负载均衡器,以其并发性,稳定性,可伸缩性和低内存消耗而著称。...在本教程中,我们将在Ubuntu上安装Ruby和Nginx,并在我们的Web应用程序中配置Puma和Capistrano。...RVM允许您在同一系统上轻松安装和管理多个rubies,并根据您的应用使用正确的一个。当您必须升级Rails应用程序以使用更新的ruby时,这会让生活变得更加轻松。...Puma, Nginx & Capistrano" $ git push origin master 注意:如果这是第一次使用此系统中的GitHub,您可能必须使用GitHub用户名和电子邮件地址发出以下命令...Rails应用程序,Puma作为你的Web服务器,以及配置了基本设置的Nginx和Capistrano。
除非您有一个非常具体(和改变)的要求,具有绝对的以域为中心的需求,当您的应用程序联机时,利用各种专用工具,自动化方法或脚本来帮助使你实际的开发工作更快- 好极了!...我们将详细介绍Capistrano:一种基于Ruby的远程服务器自动化工具,可以轻松地用于自动化普通部署和系统管理任务。使用Capistrano,您几乎可以完全自动执行通常用于生产产品的所有操作。...Ruby编程语言 Ruby是一种通用的(即不是为解决特定问题而创建的),动态编程语言随着Ruby-on-Rails Web应用程序开发框架的发布而大受欢迎。...随着您的应用程序开始流行并且事情开始增多,管理多个CVM并且一遍又一遍地重复所有内容的需求不再变得有趣。当您部署应用程序并处理其维护时,很自然地会发现您会遇到一些问题 - 特别是开销和时间浪费。...准备系统 为了安装Ruby(和Capistrano),我们需要准备我们最小的CentOS CVM,为其安装开发工具,以便安装其他应用程序和工具(例如,从源代码安装Ruby的编译器)。
也许辅助博弈最有趣的特性是,通过解决博弈问题,机器人可以自己弄明白如何将人类行为转化为有关人类偏好的信息。 机器人罗比会梦见回形针吗? 辅助博弈的一个例子是回形针博弈。...哈里特的偏好是通过一个收益函数来表达的,该函数取决于生产的回形针和订书钉的数量,两者之间有一定的“汇率”。 例如,她可能会把回形针的价值定为45美分,将订书钉的价值定为55美分。...哈里特的一个策略是,根据她的偏好,指定要做多少回形针和订书钉;罗比的一个策略是,根据哈里特的行动,指定要做多少回形针和订书钉。 事实证明,似乎只有一个均衡解。...个回形针和0个订书钉。...在陈述的假设下和哈里特在正确玩游戏的假设下,我们可以证明罗比对哈里特是有益的。 人们也可以构建问题,罗比会像一个好学生一样问问题,而哈里特会像一个好老师一样告诉罗比要避免的陷阱。
使用 Capistrano 进行自动化部署 最近在折腾这个,弄了好多次都不成功,看了官方文档和很多博客,都没有说清楚,因此,我觉得有必要把它记录下来,以帮助更多像我这样被弄得烦躁的人。...首先是安装,其实 Ubuntu 上面安装 Capistrano 非常简单: gem install capistrano 然后,进入项目目录,运行下面命令生成 Capistrano 的配置文件: cap.../ tasks/ 在 config 中存放的的各个环境的配置文件,而我,就是在配置这个的时候产生的问题。...这里都是使用的 ssh key 的方式进行连接。 本地连接远程服务器不通,可以参考 设置_SSH_Key_登录服务器和_Git_服务器 在本地生成两个 Key,把公钥放服务器上,私钥放本地。...对于连接 Git 服务器的问题,此时的 Git 服务器是用 Gitlab 搭建的一个项目,可以通过 Web 访问;用上面同样的方法生成两个 Key,公钥在 Gitlab 中的个人设置中(下图)设置,私钥放在远程服务器访问
大家好,又见面了,我是你们的朋友全栈君。 首页的最终结果 ---- 老师提供的思路: 查询当前学期,找到开始时间。 计算现在是第几周。 查询本周的课程。...---- 遇到的问题 ---- 这个错误的原因是因为where方法里的条件不够所导致的,且不可连续使用两个where方法。...google了一个临时的解决方法,方法如下: 最后查看thinkphp5.1官方文档找到解决方法: 直接使用where方法里面写入两个数组就可以解决这个问题了。 其他问题 英语词汇量过少。...听取组长的建议将不懂得单词写在便签纸上每天都看一遍。 解决思路不够清晰和明确。 对model的使用不够了解。
这是无量测试之道的第203篇原创 今天分享一道很有意思的问题。 题目: 有1000只一模一样的瓶子,编号1-1000。其中999瓶是水,一瓶是看起来像水的毒药。...现在,你有7只老鼠和一天的时间,如何检验出哪个号码瓶子里是毒药? 答案: 根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。...上图表中列代表的是瓶子的数量,行代表老鼠。 看每一行的时候,编号为1表示该行对应的老鼠喝了。...举例,比如编号为3的瓶子,0 1 1,表示老鼠B和老鼠C都喝了;编号为7的表示,老鼠A、B、C都喝了。...,我们直到只需要3只老鼠【 2^3=8 】即可判断出哪一瓶是毒药,那么1000瓶我们只需要10只老鼠即可判断,因为原理是一样的; 比如10只老鼠通过二进制的方式为1的时候喝了,最后是第5只和第6只老鼠死了
Halcon中有一个计算回形针方向的实例clip.hdev,可以在例程中找到。原图如下: ? 处理后的结果图: ?...region ④ 计算每个region的方向和中心 ⑤ 结果输出 转到OpenCV时,主要有几个小问题需要理清: ① 轮廓的方向怎么计算?...还是计算轮廓中心和回形针端点来算角度? ② 回形针的端点坐标如何计算? ③ 绘制箭头?...如下是OpenCV实现的部分代码和效果图 : void drawArrow(cv::Mat& img, cv::Point pStart, cv::Point pEnd, int len, int alpha...(上面的还是下面的要看箭头的指向,也就是pStart和pEnd的位置) arrow.x = pEnd.x + len * cos(angle + PI * alpha / 180); arrow.y
跨域:两个不同域名之间的通信,称为跨域。 例如:http://www.baidu.com 和 http://www.sina.com.cn jQuery如何实现跨域请求呢?...---- js的跨域问题图解,如下图所示: 传统的js的跨域处理: tomcat1的代码如下: 5.ajax_domain.html 的跨域问题-解决方案 --> <!...response) throws ServletException, IOException { doGet(request, response); } } ---- jQuery的跨域问题图解...-- jQuery的跨域问题-解决方案 --> <script type="text/javascript" src="..
这个问题起源于以前给客户端写的一个log模块,然后里面为了线程安全且多线程下不互相写乱,并且因为这些系统基本都用比较高版本的编译器,都支持C++11了,所以就用了C++11的TLS功能。...但是Android的默认std库并不是libstdc++或者libc++,而是Bionic。IOS不知道是什么版本的标准库都不支持thread_local的关键字。...如果使用这个关键字,链接的时候会报错说找不到符号。 当时梅花太多时间,而是在这两个环境下直接用了加锁的方式。...但是我们开发在Windows上,实际发布产品的时候是在Android和IOS上,这么做也就意味着开发时性能高过发布的代码。这显然不够美好,所以这两天做底层优化就顺带解决了一下。...解决方法也很简单,这两种系统虽然不支持C++11的TLS关键字,但是它们支持pthread规范啊。那么就可以这种情况直接用pthread来处理。
一、背景 今天有个朋友问题“MySQL的In语句和or哪个效率更高一些?” 对于这个问题大多数人可能都是通过百度直接拿答案,然后就没然后了。 本文将对此问题简要进行分析。...别急,我们的套路是想想有哪些可以查询和解决这个问题的途径。 2.1 自己动手丰衣足食 自己创建一个表,然后塞n多数据,分表将查询的字段无索引和创建唯一索引,创建普通索引都对比一下。...还有这个回答 我们了解了更多,知道了在很多数据库里In和or是等价的,因为他们逻辑是相等的。 但是在MySQL中会对in中的列表排序,排序用的是二分查找来判断是否在列表中。...四、总结 本文简单研究了MySQL中In和or的效率问题,教大家如何去研究这一类问题,后面类似的问题都可以沿着这个思路搞。 大家如果不研究到源码或者官方文档就不要太过轻信。...另外研究这类问题时相关的问题也要顺便了解和研究一下。 另外大家开发过程中一定优先看核心技术展源码,优先看官方文档而不是不想就问,不想就去百度。 另外不一定要等到遇到问题再去查,没事也可以主动去看。
//make和new的使用问题 package main //make和new的区别 import ( "fmt" ) var m map[string]string func main() { var...m = make(map[string]string) fmt.Println(m) m["k"] = "v" fmt.Println(m) } //两者都是在堆上分配内存,new执行之后返回的是指针类型的指针...,创建之后把变量置为0值,make是用于引用类型(map,chan,slice)的创建,返回是引用类型的本身。...//简而言之:new 创建的是指针类型,make 创建的类型本身
DOCTYPE html> 关于赋值和内存的问题 <!...-- 问题: var a = xxx, a内存中到底保存的是什么?
一:ssh检查 使用命令ps-e|grep ssh后: 结果显示ssh没有安装成功 二:检测本机与主机连通性 Ping 198.168.174.128 说明主机没有问题 三,重新安装ssh 如果缺少...openssh-serve Apt-get install openssh-client 出现错误 :有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试
(原书假定如果所有整数为负数,则最大的子序列的和为0。...我们初始假设最大的子序列和 maxSum 是第一个元素。...然后分别从第1、第2、………个元素开始计算子序列和,并和当前的和 maxSum 比较,如果大于 maxSum,就将此子序列和赋值给maxSum。...那么最大的子序列和可能出现在三处:前半部分某子序列(设其和为maxLeft),后半部分某子序列(设其和为maxRight),中间部分某子序列(设其和为maxCenter)。前两种情况可以通过递归求解。...判断 thisSum是否小于0,如果小于0,那么说明计算到当前这个位置上的子序列的和是个负数。
当前公司因为设计上的问题广泛使用了 Protocol buffers。在使用的过程中发现了很多 Protocol buffers 的使用问题和滥用,一个好端端的工具被用成这样也是比较郁闷。...下面就对使用中的问题进行一些小的总结。...A 再重写一次 B 中已经定义的方法,这个显然是最不经济的,何必重写,并且还造成冗余,不便于维护。B 程序提供接口,然后我们通过 HTTP 的方式访问,获得返回的数据然后进行序列化和反序列化。...你自然就会遇到超过 Protocol buffers 传输限制的大小,然后抛出异常。这个和程序的设计也有很大关系,我们当前系统恨不得传输整个表,都不知道怎么说好。...解决办法就是对每个服务的功能做出界定,不要过多的滥用 Protocol buffers 进行调用。其实上面的问题都是人为导致的,再好的东西一旦滥用了,就是各种奇葩各种翔了。
size没有到3,进队时就把元素放到end的位置上,这是end和size之间的约束关系;如果size不等于0,出队时就总出start位置,这是start和size之间的约束关系。...如何在常数时间内检索到最小元素这是关键,可以开辟一个新的min栈,当min为空或者push的值比min的栈顶元素小时,就将该值push到min中去,否则就再次min栈的栈顶元素 class MinStack...这个题不要觉得很简单就不想写,很多地方有可能会用到,比方说图的深度优先遍历,别人不让你用栈去实现深度优先遍历,怎么办,其实就和这个道题的思路一样,用两个队列合成一个栈,然后再去遍历 那么说一下这道题的思路...用两个栈实现一个队列更简单,假设先在有两个栈data和help,12345首先进data栈,然后将data栈中的元素全部倒到help栈里,然后依次从help栈弹出即可,所以进元素全从data栈进,出元素全从...help栈出,但是这两个栈交互的时候有两个条件: data栈每次倒元素必须倒完 如果help栈里有东西,绝对不能将data栈的元素倒入help栈 class MyQueue { private
/static/images/home_one@1x.png', sizingMethod='scale'); 原理:利用IE中的过滤器对象处理,会有轻微闪烁问题。...@media screen and (max-width: $min-width) { min-width: 0px; ... } 原理:IE7中和Android4.3版本也不支持...unset,但是会当做无效值覆盖之前的min-width,而在Safari5中,会当做无效的代码,元素会保持原来的min-width。...2、IOS9中光标定位问题: 在Vue2.4版本以下,nextTick实现是以MO和Promise为优先的策略,(MO和Promise都为MicroTask,优先执行) 当一个input值改变事件如有有...Watcher监听,并且在Watcher触发了另外的DOM元素重绘,多次重绘会导致input框的渲染不生效 解决方法: 1、把可能影响DOM的渲染domtask放入下一个MacroTask,
小编最近遇到GC不断增长的问题。...启动后选择gc日志文件就可以以图片的方式显示gc的情况 ? 具体一些图标上的线条,及说明也非常简单;如果熟悉JVM的GC原理就非常容易看出这些线条到底有没有问题。...最简单的一条,只要看到堆的占比只增不减,大概率是有内存泄露问题。...JVM故障分析及性能优化系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用 JVM故障分析及性能优化系列之七:使用MAT的Histogram和Dominator Tree定位溢出源...对应OOM问题以上这个网友写的这几篇文章非常不错,可以参考。