GTLC非官方“服用”指南

2020-11-02
阅读 7 分钟
2.3k
GTLC,全称全球技术领导力峰会,我至今报名参加了3次,昨天在广州的一场是第3次,而去年3月也是在广州,是第一次。至于说起从哪了解到 GTLC 的,已经不记得了,只依稀记得去年看到广州场的活动宣传之后没多久就决定付费报名了,主要动机也是考虑自己刚到技术管理岗位半年,想要去学习别人的管理,学学什么是技术领导力。...

《Paxos Made Simple》中文翻译:Paxos 如此简单

2020-10-28
阅读 11 分钟
6.8k
个人在学习理解 Paxos 算法的过程中,花了比较多的时间,从最开始直接查看中文博客资料,感觉都是看完不知所以然或者有很多疑问,于是决定死磕《Paxos Made Simple》论文原文。但是由于有些英文的意思我自己理解起来还是有点困惑,于是过程中遇到无法理解的内容,一方面是会翻阅前辈们已经写过的论文的翻译作为参考,二...

谨防猴子补丁以及Python中排查技巧

2019-09-22
阅读 8 分钟
4.3k
前两天晚上线上系统突发故障,在立马打开线上错误日志之后,却只能得到一堆毫无意义的程序调用栈(traceback)的输出,于是团队成员陷入漫长而又抓瞎的问题排查过程中。问题很幸运地得到了解决,但是我一直想不明白为什么日志里打印的调用栈毫无意义,按照经验,它应该打印的是异常产生过程中的调用栈才是。在经过后续的源...

Mac OS 环境 Rails 6.0 下 webpack-dev-server wrong version 问题解决方案

2019-09-06
阅读 1 分钟
15.7k
昨天装上了 Ruby on Rails 6.0,满心欢喜初始化项目并且按照指引安装了 webpacker 之后,执行熟悉无比的 rails c 命令,却给了一个报错:

pymysql 开启调试模式

2019-08-18
阅读 1 分钟
5.4k
今天在排查线上一个奇怪的数据库连接问题,所以打开了 pymysql 的源码在阅读,发现 pymysql 在其 connections 模块里内置了一个 DEBUG 变量用于控制是否开启调试模式,是的话,会将当前连接的操作以及报文内容都打印到控制台。

django 快速启动数据库客户端程序

2019-08-15
阅读 2 分钟
2k
实际工作经历中,免不了有时候需要连接数据库进行问题排查分析的场景,之前一直习惯通过 mysql -uxxx -hxxxx -P1234 ... 这样的方式来启动命令行形式的 MySQL 数据库客户端程序,只是用起来比较麻烦,每次都要拷贝各个配置参数,还要记得不要在命令里显式打印密码。后来想起来在开发 Ruby on Rails 程序的时候,其提供了...

不严谨的不同语言下大 Excel 文件写入的性能比较

2019-03-23
阅读 1 分钟
4.7k
去年因为线上系统需要导出大量数据(大概是 11 万行)到 Excel,代码是 Python 2.7 写的,除去数据库查询耗时,整个的 Excel 文件生成也还要耗费几十秒的时间,这听起来真是一个非常夸张的事情。后来为其更换了号称性能表现最好的 pyexcelerate 库,性能确实有提升,但是仍是差强人意的在小几十秒。

利用 Postman Chrome app 和 Chrome 浏览器共享网站 cookie

2019-01-14
阅读 3 分钟
14.7k
作为一个Web工程师,最熟悉的日常工作莫过于后台接口开发与联调测试,而在接口测试上,大家最喜爱的工具清单里,必然少不了 Postman 这一利器。然而,有时接口测试需要准备好登录态,或者其他状态数据,而这些数据往往就存在浏览器 Cookie 里边。结合本文介绍的工具,便可以无缝在 Postman Chrome app (为什么强调是 Po...

记一次Redis数据库配置导致的连接数泄露的问题

2018-02-10
阅读 3 分钟
7.2k
去年圣诞节当天,突然收到一个我经手过的项目的告警邮件,错误消息显示“Redis::CommandError: ERR max number of clients reached”。

动态密码算法介绍与实现

2017-02-18
阅读 6 分钟
15.6k
动态密码,亦称一次性密码(One Time Password, 简称 OTP),是一种高效简单又比较安全的密码生成算法,在我们的生活以及工作中随处可见,身为开发者,也或多或少在自己的业务系统中集成了二步验证机制,那么,技术运用,既要知其然,更要知其所以然,动态密码算法是怎样的?

周末到了,来段代码压压惊

2016-11-26
阅读 3 分钟
3.3k
最近一段时间,写了两篇关于 sidekiq 的源码分析,但是一直想要补充的一段 sidekiq 里边的代码其实是挺有趣也挺逗的,所以这个星期就不要长篇大论的源码分析,来点轻松点的吧。

Sidekiq 信号处理源码分析

2016-11-20
阅读 12 分钟
3.8k
在之前的文章《Sidekiq任务调度流程分析》中,我们一起仔细分析了 Sidekiq 是如何基于多线程完成队列任务处理以及调度的。我们在之前的分析里,看到了不管是 Sidekiq::Scheduled::Poller 还是 Sidekiq::Processor 的核心代码里,都会有一个由 @done 实例变量控制的循环体:<!-- More -->

sidekiq任务调度流程分析

2016-10-29
阅读 22 分钟
9.2k
sidekiq是 Ruby 中一个非常优秀而且可靠的后台任务处理软件,其依赖 Redis 实现队列任务的增加、重试以及调度等。而 sidekiq 从启动到开始不断处理任务、定时任务以及失败任务的重试,都是如何调度的呢?遇到问题的时候,又该如何调优呢?

[Ruby on Rails] 嘿,小心你的双等号==

2016-01-17
阅读 3 分钟
5.7k
前两天在写代码的时候,突然收到警告说项目代码中存在 XSS 漏洞,遂立即根据报告的 URL 排查页面代码,虽然很快就修复了,而且同样问题的讨论两年前就有了,看《别用 raw 和 html_safe》,一般来说相对有经验的同学也应该都知道这个点,但是还是觉得有必要写出来,再次提醒一下其他小伙伴,避免踩坑。

谨防 ActiveSupport::Cache::Store 缓存 nil 值

2015-10-30
阅读 6 分钟
3.3k
Rails 中的 active_support 组件主要基于 Rails 需要提供了很多非常有用的基础工具以及对 Ruby 内置类进行扩展。其中的 cache 模块主要提供了 Rails 中底层缓存的定义以及简单实现。今天要跟大家探讨的是之前在使用此模块所遇到的一个坑,有兴趣学习其基本用法的可以点击以下两个链接:

使用 Chinese_pinyin + Friendly_id 为中文标题生成 Slug

2015-10-21
阅读 2 分钟
7.8k
在许多项目中,我们可能都会遇到需要为数据生成 slug 的场景,这些场景类似于: 基于商品名称生成 slug 基于文章标题生成 slug 至于为什么需要生成 slug,而不是使用比如 Rails 中默认自增的主键也就是数据的 id,原因其实很简单: 使用自增 id 容易暴露数据,比如通过订单 id 可能导致遍历所有订单,不信,你看这里就有...

MySQL in 查询,并通过 FIELD 函数按照查询条件顺序返回结果

2015-09-13
阅读 2 分钟
13.3k
我们都非常习惯通过 MySQL 的 IN 函数来查询特定集合的数据,比如为了在 books 表中找出李雷、韩梅梅和安华写的书,我们可以有如下的 SQL:

Apdex——衡量服务器性能的标准

2015-08-30
阅读 3 分钟
5.4k
日常工作中,我们总是习惯于通过量化的标准去衡量我们对事物的评价,比如美食点评的星级、酒店的星级、每个个人的信用评分等等。而作为一个 Web 工程师,我们也总是在意于我们网站的性能,因为网站的性能会最直接地影响用户的体验。今天要介绍的就是一种同样能够帮助工程师对应用性能进行量化评估的标准 —— Apdex 。

申请以及集成 Stripe 的 Alipay 支付方案

2015-03-29
阅读 3 分钟
19.5k
        最近在一个项目需要支持人民币支付,并且客户要求希望能够收完款后的结算是用美元,所以就想到了去年 Stripe 宣布已经跟支付宝达成合作意向,所以经过一番咨询跟集成,终于把 Stripe 集成进来,并且启用了支付宝收款。这篇文章介绍功能申请以及集成的完整过程。<!--...

How do I fix Passenger application startup problem

2015-01-10
阅读 3 分钟
3k
Recent days I was working on deploying one of my Rails project on a complete new VPS. I had operated according to my experience for deploying sites before, but at the last step, after I have deployed the site, it always raised error message "An error occurred while starting up the preloader: it d...

在 coding.net 上部署 Jekyll 博客 (此方式已过期,coding 官方已直接支持 jekyll)

2014-12-20
阅读 5 分钟
11.4k
自从 coding 推出 PaaS 演示平台以及开放自定义域名之后,很多人开始尝试在 coding 上部署自己的博客,其中就有 jekyll,coding 上就有官方推荐的 jekyll-demo。但是因为这个 Demo 的 README 文档中只是简单介绍配置步骤而已,没有详细介绍原理以及灵活配置的地方,我在参照着迁移 jekyll 博客的过程中也遇到一些问题。...

RAILS中利用YAML文件完成数据对接

2014-11-13
阅读 9 分钟
4.1k
最近在做的Ruby on Rails项目中,需要将远程数据库中的数据对接到项目数据库中,但是远程的数据不仅数据表名跟字段命名奇葩,数据结构本身跟项目数据结构出入比较大,在数据导入过程中代码经历了几次重构,最后使用了YAML文件解决了基本数据1对接的问题。在此写一篇博文,我会尽量重现一路过来的代码变更,算是分享一下...

sublime text 2基于语法的配置文件

2014-11-05
阅读 1 分钟
3.1k
最近在学习Python编程语言,但是遇到一个小小的问题,就是原来Ruby的编码规范是用2个空格缩进的,所以以前在Sublime的全局用户配置中设置了"tab_size": 2,所以在编辑Python文件的时候就每次都要从菜单中设置tab_size的大小为4。后来经过搜索,发现Sublime Text 2实际上是支持语法特定的配置的,具体的步骤是:

Spree 2.3.0已经发布

2014-11-05
阅读 2 分钟
3k
简要介绍:Spree是一个基于Ruby on Rails开发的开源在线商城框架,提供了从商品展示购买、下单支付到库存管理以及订单管理等一系列基本功能,并且支持通过第三方扩展的形式定制或者扩展框架的功能,最新版本的Spree已经支持最新的Rails版本。

Run a Shell Script Auto-matically When Entering/cd a Directory

2014-11-05
阅读 2 分钟
2.7k
I don't know if it is common that you need to run some shell scripts which are used under only some directories, such as, one of your Rails projects.

Gemfile指定gem来源的四种方式

2014-11-05
阅读 2 分钟
12.4k
Gemfile的作用无非就是告诉bundler你的项目具体都需要哪些gem,这些gem都需要哪些版本,以及从哪获取这些gem。其实你的问题应该就是跟第三点有关,总的来说,gem的来源可以有四种:

Ruby中Hash的7个日常使用范例

2014-11-05
阅读 4 分钟
4.7k
每一天,你都需要跟Hash相处。创建一个新的Hash或者是通过它的某一个键去检索其中的元素这样的工作,都是常见也是非常简单的。但是当你需要合并两个嵌套的Hash或者是从某一个Hash里边过滤某些键,你可能需要考虑得多一点。通过完整的文档,你可以找到对Hash中的每一个方法的充分解释。但是由于文档不是面向应用场景的,...

注意Rake Task中invoke方法跟execute方法的不同

2014-11-05
阅读 2 分钟
3.5k
平时如果跟Rake Task有过接触的同学都会知道,当我们需要在一个Task里边调用另一个Task的时候,我们可以使用Rake::Task['task_name'].invoke的方式。但是在今天的实践中,才知道Rake::Task#invoke在默认情况下在整个运行过程中将只会被调用一次而已。话不多说,动手演示:

解读Rails - 属性方法

2014-11-05
阅读 7 分钟
4.1k
在我们上一篇的探讨中,我们已经看到了Rails在跟踪属性变更中使用到的属性方法(attribute methods)。有三种类型的属性方法:前缀式(prefix)、后缀式(suffix)以及固定词缀式( affix)。为了表述简洁,我们将只关注类似attribute_method_suffix这样的后缀式属性方法,并且特别关注它是如何帮助我们实现类似name这样...

跟踪model中属性(值)的变更

2014-11-05
阅读 4 分钟
3.7k
此文翻译自Reading Rails - Change Tracking,限于本人水平,翻译不当之处,敬请指教! 我们今天来看看Rails是如何追踪model里边属性的变更的。 {代码...} name_changed?方法是从哪来的呢?变更又是如何被创建的?让我们顺着这个场景,看看这一切背后的秘密。 如果需要跟着我的步骤走,请使用qwandry打开每一个相关的代...