• 如何正确地设置 NTP 服务器

    Ceph Cluster 的 clock skew detected 问题这是一个由于 Ceph Cluster clock skew 引发的问题。我们公司的生产环境里有一个 3 节点的 Ceph Cluster 用来做对象存储使用。运行了一段时间,发现其中一个节点上的 OSD 经常过上个把月就会重启一次,系统也没什么异常,查来查去发现最可疑的就是这个节点有时候会报 ceph:health_warn clock skew detected on mon。由于我们的服务器都设置了每天通过定时...

  • supervisord 中的 open files 数量限制

    Linux 中的 nofile 设置Linux 系统通过 rlimit 来对一个进程可以使用的计算机资源进行限制,其中 nofile 表示单个进程可以打开的文件句柄数,默认值为 1024。 我们知道,Linux 系统下一切都是文件,这不仅包括了常规的文件,还包括 socket, pipe 等等,对于一些较大的应用,如数据库,Web 服务器等,1024 这个限制肯定是不够的。所以一般在初始化新服务器时都要进行修改,例如修改 /etc/security/limits.conf,把所有用户的 n...

  • 软件开发的“偶然”困难和“本质”困难

    No Silver BulletNo Silver Bullet – Essence and Accident in Software Engineering 是著名计算机科学家 Fred Brooks 的一篇著名论文。Fred Brooks 被称为IBM大型机之父,是著名软件工程著作《人月神话》的作者,在1999年获得了图灵奖。《No Silver Bullet》一文发表于1986年,作者认为,由于软件开发本质上的困难,在当时的十年内不会有技术和方法可以让软件生产力有数量级上(也就是十倍...

  • VIM 从入门到进阶

    VIM 的三种模式命令模式(Command mode)vim 打开后就进入这个模式,所有的输入会被当成命令,不能输入字符。命令模式下有3个选择: 使用各种命令对文本进行操作 按下 i a I A 等输入命令中的一个,进入 输入模式 按下 : 进入 底线命令模式输入模式 (Insert mode)这个模式下,可以像个正常编辑器一样,输入字符编辑。按 <ESC> 回到命令模式底线命令模式 (Last line mode)可以执行 Ex Command,包括保存文件,退出 vi...

  • 文本处理三大利器:grep awk sed

    在计算机编程和系统管理中,文本处理是一项非常重要的任务。grep、awk和sed是三种流行的文本处理工具,它们可以让你在命令行中快速处理文本数据。以下是这三种工具的简要介绍:Unix 哲学 程序应该只关注一个目标,并尽可能把它做好。 让程序能够互相协同工作。 应该让程序处理文本数据流,因为这是一个通用的接口。grepgrep(Global Regular Expression Print) 主要用来在一个文件中搜索特定字符串。grep 'test' file.txt # 输出 fil...

  • 使用 OpenSSL 发送 IOS 推送通知 Apple Push Notification

    苹果的推送服务的设计非常优秀和巧妙,开发者将消息发送到苹果的APN服务器,APN服务器将消息转发到设备上,设备与APN保持一个长连接即可,即保证了消息的实时性,又节省了系统资源,更省电。相比之下,Android这个粗放管理的耗电大户平台,直到2.2后才添加了类似的推送服务,而且还被墙了。苹果的推送模式如下图所示:iOS应用首先要请求用户允许推送通知,用户允许后,应用会获得一个32字节的token。应用开发者要推送通知到用户的设备时,把消息和token一起发送给APN服务器,APN服务器根据...

  • Windows 下编译 ZooKeeper

    ZooKeeper 号称 Windows 下也可以用 C++ 做开发用。并提供了 zookeeper.sln、zookeeper.vcproj 的工程文件。但是如果你用 VC2008 去打开它的话,就会报错,说工程里已添加了一个工程云云。实际上解决办法很简单,用文本编辑打开 zookeeper.sln 和 zookeeper.vcproj 会发现里面写入了两组工程文件内容,估计是自动生成的。把其中的一组删掉就可以了。

  • Mac 下发布 Qt 应用程序

    Qt编写的应用发布到用户手里,同时也要把 Qt 库一起打包给用户。方法有很多。1. 简单又麻烦的办法,静态编译Qt简单是因为静态编译的Qt库会随着应用一起发布,麻烦是我们必须自己编译静态的Qt。而且,很多情况下我们不仅是要使用Qt,还有很多其它的库,如果每一个都静态编译,我们的执行文件就太巨大了。所以简单的应用,静态编译可能是好的,但是,比较大的项目,这种方法就不推荐了。2. 好又不麻烦的办法,使用FrameworksMac中的GUI应用必须以Bundle的形式运行,所谓Bundle,是一...