开发者体验(Developer Experience,DX)指的是软件开发人员在使用某个产品或服务创建软件应用程序时的整体体验,也可理解为UX of Developer。 技术型产品的DX包含文档、工具、API、社区、性能、安全等众多方面,例如文档,下面几个方面都非常重要: 清晰的结构 良好的搜索 充足的样例 可快速体验的的demo 展示设计理念与内部原理...
人人都可以是「优质」用户
遇见优质用户是幸运,要珍惜 我们都知道,种子用户对早期产品的构建有至关重要的作用,每个用户的背后,可能都代表着一整个用户群体。他们看见核心的价值,包容偶尔的缺陷,更重要的是, 作为「优质用户」,他们主动贡献自己的建议,参与产品的演进。 下图是最近两个用户的反馈,而且是主动提出。简单言语背后代表是个人对产品的认可,对团队的信任。 当然,只是愿意来来进行一两次会议的沟通,并不能称为...
二十四分钟精通ClickHouse Materialized View
ClickHouse是一个非常出色列数据库,对大数据量的实时分析有极佳的性能。本文用来介绍其MV(Materialized View,物化视图)的内部机制,帮助大家理解后更准确的使用。 文末takeway很重要! MV是一个trigger 定义MV,实际上定义了一个insert trigger。数据数据写入source table时,会根据配置分成多个block,MV从block中读取...
「二次创业」的窘境
《创新者的窘境》一书提到一种现象:一个运营良好的企业,有充分的客户基础,他们倾听客户声音,不断增强产品,但却最终倒闭。听起来似乎不合理,但却真实的发生。 过去一段时间,我们以「二次创业」的形式,上线了新产品 浩客。在已经有了金数据从零到千万用户的经验之上,整个过程应该要比较顺利才对,但还是经历了不少的的磨合与反复,还是值得思考。 借用该书的名称,这也许就是「二次创业」的窘境。 依赖的惯...
重视贡献,为成果而工作
有效的管理者重视对外界的贡献。他们并非为工作而工作,而是为成果而工作。 提出“我能做出什么贡献”的问题,是为了挖掘工作中尚未发挥的潜力。事实上许多工作看起来成绩辉煌,但是与潜在的贡献比起来,实在是微不足道。 重视贡献,才能使管理者的注意力不为其本身的专长所限,不为其本身的技术所限,不为其本身所属的部门所限,才能看到整体的绩效,同时也才能使他更加重视外部世界。只有外部世界才是...
为什么Turbolinks发送了两次请求
前面有一篇文章介绍过使用Turbolinks遇到的一个问题,最近又发现了另一个问题。 开发时,tail后台的log会发现某些情况下,同一个请求会触发两次,不过因为都是get请求,而且同一个地址请求后的响应式相同的,所以前台不能完全察觉到。不够下面的场景跟预期就不一致了。 假设需要一个功能可以在后台管理页面禁止用户账户,被禁止的账户在随后的所有访问当会重定向到禁止页面。 从实现上来讲,当...
Elasticsearch--更新策略
前一篇文章介绍了如何在Elasticsearch上做动态映射,这篇文章会介绍下如何更有效的做ES的数据更新。 更新频率 如果把ES看做另一个数据库,那么它总是会比系统原有的数据库滞后,因为数据会先存入原有数据库,再同步到ES。那么滞后的时间就是一个敏感的参数。根据业务的不同,差别很大。我了解到有的系统可以接受10分钟以上的延迟,不过我们作为一个数据平台,用户提交或修改数据后,是希望能立刻查...
Elasticsearch--动态类型字段的mapping
ElasticSearch是一个基于Lucene构建的搜索引擎,通过RESTful的api可以进行数据的更新与搜索。目前github就是用的ES。 通常来讲,如果是要进行精确的查询,可以直接针对数据库进行,合理的构建index,可以在数据库层面进行快速准确查询。然后在某些场景下,当数据集合的列无法确定时,很难加index,这会导致在数据量增大时性能严重下降。例如当前项目是一个在线表单,采用...
Rails CSRF token 探秘
CSRF(Cross-Site Request Forgery)是一种常见的攻击手段,Rails中下面的代码帮助我们的应用来阻止CSRF攻击。 class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you ...
Tricks On Upgrading Rails From 3.2 to 4.0
很久一段时间以来,我们使用的都是Rails3.2 + Mongoid3,虽然Rails4发布已经快一年的时间了,但由于mongoid3不能支持Rails4,所以升级就一推再推,不过终于在近期Mongoid发布4.0以后完成了这次期盼已经的升级。心情是兴奋地,不过过程还是曲折的,不少细节,只看升级文档,或者google,不看源码还是真心不好解决。本文不是升级指导,因已经有很多文章,本文将对这次...
Nginx 与 Unicorn
Capistrano, Nginx 与 Unicorn的搭配作为Rails应用的部署方式是现在成熟与流行的模式,Deploying Rails app using Nginx, Unicorn, Postgres and Capistrano to Digital Ocean这篇文章详细介绍了如何来使用,本文希望稍微深入一些来看看Nginx与Unicorn之间是如何通信的,以及Unicorn...
支付宝集成——校验与应答
前一篇文章介绍了如何生成支付宝的请求URL,当顺利打开支付宝的登录页面后,这里的操作就与应用本身无关了,完全在支付宝内部完成。当用户的交易状态改变,比如付款成功时,支付宝会通过POST发送请求URL中设定的notify_url。由于通常都需要在回调中进行业务逻辑处理,因为,为了防止恶意或伪造请求,需要对该请求进行严格的校验。 MD5校验 按照请求URL中的规则,对参数再进行一次MD5运算,...
支付宝集成——生成请求URL
去年的这个时候,开始开发基于支付宝的收费模块,现在已经运行了快到一年。这期间从担保交易到即时到帐,再到支持手机支付,经历了用户真正的验证后,今天来总结一下支付宝集成中得注意事项。当然要先申请支付宝的商家服务,拿到PID和Key,并至少签约成即时到帐、双工或者担保交易的一种。 以开发的角度,从发起到结束可以分为以下两个主要步骤:生成请求URL(网页版和手机版的生成方式是不同的),支付宝回调校...
常用易混的四个Rails View Helper方法
Rails中有非常多强大的View Helper,今天其实想在这里简单总结其中4个与安全相关但又容易混淆的。 它们分别是: h, html_safe, simple_format, sanitize。 READMORE h 我们经常需要在页面上动态展示文字,这些完全可能来自用户的输入。所以为了防止XSS,在页面渲染时,需要对文字进行转义。在Rails2时,经常见到如下的代码 <...
Build Phonegap Application using CoffeeScipt Scss and Haml
Refer to phonegap-scaffold PhoneGap is a tool that allows developer to build cross platform mobile native application using javascript, html and css. This is great, however, the raw js, html and ...
Rails中隐藏的check_box
Rails中,我们经常会在form中使用check_box这个helpler方法,在controller中,可以通过params[:category]来获取category的值。然而,如果检查一下check_box这个helper方法生成的html代码,会有点不如想象那样直接可懂。 例如下面一个简单的form中 <%= form_for(@post) do |f| %> ...
不要心存侥幸
已经过去了整整12个小时,不过依然清晰的记得早上宕机的那漫长的十分钟,如此煎熬。 第一次经历产品宕机,突然之间,QQ,反馈表单,NewRelic,到处都是500的报告,产品经理也无法忍受突如其来的打击而情绪激动。而这一切都只是因为我一点点的大意。 这是临时发现的一个IE7的样式问题,解决方案就是在layout中加入对IE7 fix的css文件。考虑到这会影响到部分用户的正常使用,我决定立...
Turbolinks导致的表单重复提交警告问题
Turbolinks将在Rails4中会被默认引入,它类似于PJAX,但是会托管整个页面的body部分,在页面跳转时,不会重新加载整个页面,而是使用JavaScript重写页面并且更新浏览器中的地址,从而使页面访问的速度大大加快。 尽管Rails4还没有正式发布,但现在的项目已经在使用Turbolinks了,它不需要任何额外的配置,添加到Gemfile后即可。最近遇到了一个问题如下: 几...
Backbone中的Model
Backobone是一个JavaScript的前端框架,使具有复杂交互的页面实现能更加清晰。其中Model是核心的部分,它主要主要有下面几个方面: 控制着Backbone中View呈现的内容 与Backbone中Collection的交互 承载着校验,数据运算等功能 与服务端交互的桥梁 Backbone代码一个很显著的特点就是看到满篇的this.model,对新手来说...
从交付到产品
这是一个七人的小团队产品组,正式加入刚好有一个月了。说长不长,不过可总结的倒是有一些。之所以会有些感慨,因为相对于前面所有的项目,这是比较特别的一个。 在公司将近三年的时间里,前前后后经历了四个项目,.Net, Java, Rails, Android,完全不同的技术栈。第一个.Net项目,跟着胡凯学习如何写程序,学习什么是敏捷工作。第二个Java项目,在米高的指导下学习如何代表一个团队与...