树莓派系统日志配置

背景 树莓派 raspbian 系统日志默认的配置会导致日志过大而占用太多的存储空间,并且频繁写日志也可能减短 EMMC 和 SD 卡的寿命,需要重新配置来满足项目的需求。 日志位置 /var/log /var/log/syslog /var/log/daemon.log /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages 配置 rsyslog 与 logrotate rsyslog 的配置文件为 /etc/rsyslog.conf, 找到其中 RULES 段 ############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log 将其中 daemon.* -/var/log/daemon.log 行注释掉,syslog中已经包含 daemon 的日志。...

September 19, 2019 · 1 min

如何修改 Linux 用户的 UID 和组的 GID

问题 在使用 Docker 或者 NFS 的时候,需要文件系统挂在到不同的系统中拥有正确的读写权限,需要指定文件所属用户和组的 uid 和 gid。在创建用户和组的时候,系统会自动分配对应的值,这导致在不同的系统中很容易造成 uid 和 gid 不一样而造成读写权限混乱。 例如在系统 A 中,用户 git 的 uid 和组 git 的gid 如下: [sysops@cn-bj-aliyun-3 ~]$ id git uid=1001(git) gid=1001(git) groups=1001(git) 而系统 B 中的值如下: [sysops@cn-bj-aliyun-3 ~]$ id git uid=998(git) gid=998(git) groups=998(git) 我们在系统 A 以 git 用户创建目录或者文件: [git@cn-bj-aliyun-3 data]$ ls -lh total 60K -rw-r--r-- 1 git git 100 Jul 5 23:22 file1 -rw-r--r-- 1 git git 400 Dec 18 2018 file2 -rw-r--r-- 1 git git 349 Dec 18 2018 file3 将这个目录挂在到 B 系统中时,将会出现这种情况:...

July 16, 2019 · 1 min

CentOS 7 上使用 pyenv 安装 Python 3.7.3

概要 本文记录了在 CentOS 7.6 系统上通过 pyenv 安装 Python 3.7.3 的过程。 环境 CentOS Linux release 7.6.1810 (Core) Kernel 3 3.10.0-957.el7.x86_64 Pyenv 1.2.11 安装 pyenv $ curl https://pyenv.run | bash 然后根据提示把以下内容放到 ~/.bashrc 文件末尾 # Load pyenv automatically by adding # the following to ~/.bashrc: export PATH="/root/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" 安装 Python 3.7.3 准备 $ sudo yum -y install xz bzip2 bzip2-devel sqlite-devel gcc openssl-devel readline-devel zlib-devel libffi-devel 安装...

May 29, 2019 · 1 min

Java 进阶要点

自己学习 Java 和用 Java 过程中的理解和备忘的知识点。 JDK 11 Oracle 不在免费提供 LTS 版本了,包括 JDK 8 ZGC, 可伸缩的、低延迟的垃圾收集器,STW 时间不超过 10ms Nashorn 标记为 Deprecate 了 JDK 9 module try-catch 简化 _ 为保留关键字 var 将在 JDK 10 中作为关键字, 作为本地变量类型推断关键字 字符串相关,主要是 Compact String, 用 byte[] 替换了 char[], char 在 Java 中占两个字节 G1 作为默认垃圾回收器 JVM 启动 JVM 相关的命令行参数 G1 垃圾回收器 内存 JVM(Hotspot) 内存结构 制造各种 OutOfMemery 和 StackOverflow 各种 JVM 相关工具(jstat/jmap/jstack/jps 等) 解决 FullGC 的问题 引用:WeakRefrence/PhantomReference/SoftRefrence/FinalRefrence 等 ClassLoader/URLClassLoader Spring Boot 的 ClassLoader 自定义 ClassLoader 多线程和并发 JVM 的线程模型 1:1 协程 创建线程的方法 线程同步 synchronzied/对象锁/类锁/锁方法/锁锁代码块 线程池 锁相关(Lock 接口和实现类) Condition volatile ThreadLocal 用途和实现 并发(CAS/乐观锁/无锁/无等待/无阻塞) 字节码 基本结构 操作字节码的工具 Javassist/ASM AOP 集合 Collection,List,ArrayList,Vector,LinkedList, SkipList, Stack Queue HashMap/HashTable HashMap 扩容死循环问题 LinkedHashMap TreeMap HashSet,TreeSet WeakHashMap 并发相关的集合 ConcurrentHashMap CopyOnWriteArrayList IO IO 模型 NIO Non-blocking IO Java 8 IO 相关的接口和类 Netty Vert....

March 6, 2019 · 1 min

树莓派 CM3/CM3+ 刷写系统

准备 阅读Flashing the Compute Module eMMC 准备一个可以刷系统的底板,我用的是微雪Compute-Module-IO-Board-Plus 步骤(Linux 系统下刷系统,可以使用树莓派来刷机) sudo apt install git libusb-1.0-0-dev git clone --depth=1 https://github.com/raspberrypi/usbboot && cd usbboot && make sudo ./rpiboot 连好线,跳线部分见各自底板的手册 拔掉 USB SLAVE 1/2/3/4 拔掉 SELECT 跳线帽 将 BOOT ENABLE USB SLAVE 跳线帽接到 EN 端 sudo fdisk -l 查看磁盘名称,这里是 /dev/sda sudo dd if=raspbian-lite.img of=/dev/sda bs=4MiB 刷入系统后,挂在启动分区,添加 SSH 来开启 SSH 服务,sudo mount /dev/sda1 /media cd /media && touch SSH 使用慧通科技出品的 HuiBox-700 底板 省略上述的第4步,其它步骤完全一样

March 1, 2019 · 1 min

使用 Docker 方式安装 Gitlab,没你想得那么简单

为什么要写这篇文章? 曾经几年前在 Docker 还没有广泛应用的时候,在公司使用过源码的方式安装和升级过 Gitlab,虽远没有 Docker 方便,因为自己对 Linux 系统的理解,所以整体上感觉还是挺简单的。这几年随着 Docker 的普及,使得安装 Gitlab 更加的容易,不仅方便了我这样的老鸟,也更方便了小白用户们。但是 Gitlab 官方的 Docker 安装文档并没有写得很完善, 除了官方文档之外,检索出来的安装文档也是人云亦云,东拼西凑,结果也就是能运行起来,凑合着能用而已。避免出现下图中“我已经用 Docker 部署好啦”,其实已经翻车的情形。 我希望每做一件小事的时候也都能抱着“知其然知其所以然”的心态对待,用 Docker 方式安装 Gitlab,说简单来说就是一行命令的事儿,但是这样就够了吗?我看是不够的,所以就有了这篇文档。 本文需要达成的事项 在 CentOS 7 系统中安装 Docker 使用 Docker 方式安装中文版 Gitlab 和宿主机器共用 22(SSH) 端口 支持 SSH(22)/HTTPS(443) 方式推拉仓库 使用 SMTP 方式配置通知邮箱(腾讯企业邮箱) 改写默认的项目标签(Labels) 在 CentOS 7 系统中安装 Docker 这部分参考 Docker 的官方文档, 罗列一下安装步骤, 细节请看 Docker 的官方文档。如果使用 root 用户安装,sudo 可以去掉。 1. 删除老版本 Docker $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 2....

December 18, 2018 · 4 min

有关 2017 流水账和胡思乱想的记录

好久没有写过文字了,前几篇文也是自己从 Google Doc 中摘出来的工作日志,拿来凑凑数,刷新下 Github 的时间线,有点儿不太像话。看看自己书桌上叠起来超过一尺高的新书才知道,想看的还没来得及看完,想学的也还没来得及学会,想做的也没有做得很好,一年就过去了。2017 是我来魔都的第 5 年,回想这 5 年,自己的成长还是很多的,但 2017 这一年,好像与 2016 并没有什么大的不同,这让自己感到很担忧。 在 2017 年的最后几天,终于离开了自己熟悉的工作环境,从自己的舒适空间加入了一个新的环境,我想这就是改变的开始,一个新的起点。 2017 是平淡的,可能和未来的每一年也不会有太大差别,尽管我不希望这样。元旦假期这 3 天有空的时候都在回想,但是又想不起有那些特别印象深刻的事情,以至于总结都不太好写下去。我想那不如就回想几个和自己有关系的场景,做一个清单好了: Bye 2017 区块链和比特币 人工智能(AI) 物联网大数据 Insurtech 和 Fintech 关于个人职业发展的思考 Hello 2018 Bye 2017 编程语言学习 Golang:完成基本语法学习(官方文档和《Go 语言实战》),可以无障碍阅读 Golang 项目代码(《自己动手写 Java 虚拟机》),并且可手动完成简单 Golang 项目用 Python 重写,主要有 eureka client Kotlin:除协程外,完成官方文档中所有语言部分的学习内容,并使用 kotlin 开发了 2 个项目,其中一个是用 kotlin 重写了 Aprereo CAS 的核心功能 TypeScript:完成基本语法学习,目前没有实际应用的场景,希望从 2018 起,自己在需要写 JavaScript 的地方,全部用 TypeScript 来代替 书籍阅读 阅读量太少,希望在 2018 年里能增大阅读量。 技术类 《图说区块链》 严格讲不算技术类书籍 《自己动手写 Java 虚拟机》 《Go 语言实战》 《贝叶斯思维》未读完 《Spark 高级数据分析》未读完 《垃圾回收的算法和实现》未读完 《机器学习》未读完 文艺类 《追风筝的人》 今年读到最长的一篇小说, 从作者笔下故事了解了阿富汗的人文历史,很是感动和惊讶。另外就是觉得译者也很厉害,从头读到尾,除了人名,没觉得是在读一本英文翻译过来的书 《灿烂千阳》未读完 《上帝掷骰子吗》 感觉写这本书的作者应该是个天才,搜了一下,很神秘的作者 《乡关何处》 看着也挺有意思的 《野火集》 读晚了,读的大陆删节版,我觉得每一个人都应该读下这本书 《自私的基因》 《创业者的窘境》 看完觉得最该读这本书的人应该是我老婆 还有就是身边的亲密好友或同学 《人类简史》未读完 Kindle 版,用手机看的,亚马逊真牛逼,让我买了一个 kindle 放在家里吃灰 开源技术 计划搭建一个开源物联网平台,还没有想好具体要做的事情,所以没有什么进展 整理了常用的 docker templates,docker 和 python 一样成为自己不可或缺的工具 家庭网络 升级了硬件和软件,让家里无线网络有了更好的覆盖,并且让所有家庭联网设备都可以自由的访问互联网 儿子最喜欢的应用是 Youtube Kids 区块链和比特币 不记得是哪一天了,大约是在几个月之前,和同事在兰州料理吃午饭,这段时间大家都在讨论 ICO,区块链,交易所的事情,我突然想起自己在 2013 年的时候曾经关注过比特币和区块链,并且那个时候买了一些瑞波币,于是回去查了一下,私钥和地址都还在,并且由此莫名其妙赚到了人生的“第一桶金”。...

December 31, 2017 · 2 min

LVM 实战记录

背景 阿里云云主机两块 100G 的云盘合一个逻辑卷(LV)来使用,单个的 100G 磁盘不够用,需要合在一起使用,并且方便以后扩容 基本知识 磁盘 /dev/xvdb /dev/xvdc 分区, 使用 fdisk 进行分区 fdisk > n > p > 1..4, 主分区最多只有 4 个 准备分区后,将分区类型变为 LVM 分区,fdisk > t > 8e, 8e 是 LVM 类型 ID 物理卷(PV),卷组(VG),逻辑卷(LV),从磁盘分区创建 PV,通过 PV 创建 VG 或者把 PV 加入已有的 VG,在 VG 上创建 LV,LV 看起来就是逻辑的上磁盘,使用和真实的磁盘没什么明显区别, 在 LV 上构建文件系统 创建 创建物理卷 pvcreate /dev/xvdb1,对分区进行操作 创建 vg0 卷组 vgcreate vg0 /dev/xvdb1 查看卷组 vgdisplay, 可以看到卷组有多大 在 vg0 上创建 data 逻辑卷 lvcreate -L 99G -n data vg0 或者 lvcreate -l 25556 -n data vg0 创建文件系统 mkfs....

August 3, 2017 · 1 min

日志收集和分析系统架构

背景 微服务,日志分散且种类多(php/java/python),用 docker 起应用,日志通过卷放在宿主机器指定目录下,服务有众多实例,metrics 数据也不仅相同,无论是日志还是 metrics 数据,都可以看作是时间序列数据 分散主要表现为: 多个主机 多个目录下多个文件 应用开发所使用的技术栈不同日志格式不同 web log(主要是 nginx) 各类事件 一些其它事务性的日志 日志为时间序列数据,包括: 系统日志: 各类系统产生的跟业务有关的日志或者与业务无关的日志 web 服务器日志:如 access.log/error.log 等有固定格式的日志 性能监控日志:打点记录各类服务的 metrics(全部为数值类型 long/double/bool) 系统日志 由时间戳、一些枚举值以及日志内容(变长字符串)组成 日志时间颗粒度:支持毫秒/秒 枚举值包括: [必选]主机名/host [必选]服务名/service [必选]实例编号/instance [必选]日记级别/level:info/debug/warn/trace/error 等 [可选]异常名/exception: 如果是异常,把异常名作为枚举值记录 [可选]线程名/thread: [可选]方法名/method: [可选]文件名/file: [可选]行号/line: 日志内容(变长字符串): 为实际记录的内容以及异常堆栈信息 web 服务器日志 access log(nginx) 日志内容:主要是文本(string)或者一些系统 metrics 数据(数值类型 long/double) 日志存储和处理: 数据磁带(1 周):kafka 提供热数据检索(1 个月):solr(or lucence based on cassandra) 日志存储(永久): kariosdb/cassandra: 支持 double/long/string 类型,kariosdb 相当于在 cassandra 上面套了一个壳,这样简化了很多时间序列数据处理的操作 数据展示:grafana,官方支持 kariosdb 扩展:数据深度挖掘分析 系统架构 特点:...

July 23, 2017 · 1 min

Log4j2 快速入门

背景 Java 生态下的日志库太多,配置也不同,大多数情况下会使用 SLF4j (又引入了一个库)来抽象日志接口。在使用 Log4j2 后,发现可以不使用 SLF4j 了,并且配置变得更简单,可以使用 lombok 的 log4j2 注解等。 需要搞清楚 如何设置哪些日志要记录下来 日志记录到哪里去 LEVEL 日志级别: 内置(有 Fatal):All < Trace < Debug < Info < Warn < Error < Fatal < OFF 还可以自定义: https://logging.apache.org/log4j/2.0/manual/customloglevels.html Appender: 日志输出的目的地 内置的目的地有: console, files(FIle/RollingFile), remote socket servers, Apache Flume, JMS, remote UNIX Syslog daemons, various database APIs … Appender 在接受到日志以后,可以通过级别过滤选择记录日志,具体配置: https://logging.apache.org/log4j/2.0/manual/appenders.html Logger 负责决定哪些日志要记录和发配日志 哪些需要记日志,设置什么级别,并且配置日志输出到哪些个 Appender 中去都在 Logger 中配置。Logger 有类似继承的关系,名为 Root 的的 Logger 为所有 Logger 的根,也就是说没有做特殊设置(additivity=false), 那么这个 Logger 的日志将会记录到自己指定的 Appender,并且也都会记录到自己所有“父” Logger 设置的 Appender 中去...

July 15, 2017 · 1 min

MySQL 数据备份和不停机重新搭建主从同步

背景 目前公司主要服务都是直接使用 MySQL 主服务器,从服务主要给离线数据分析服务使用,由于前期弄得比较简单的粗暴,从服务上还有一两个数据库在做生产使用, 并且从服数据已经不能和主服进行进行同步了,有大量错误,忽略都没有办法进行。此外,主服仅配置了三个核心数据的 binlog,随着业务的变化,其它数据库不能走主从这条路来同步数据,于是希望不停机的情形下重新调整主服配置,记录所有的数据库的 binlog,同时添加新的从服务器来同步数据 方案 1 MySQL 的主从是通过同步 binlog 日志来实现数据同步的,于是需要想办法把从服数据先于主服同步,记录 binlog 的 pos 值,再配置从服从该 pos 处开始同步,考虑可以使用 mysqldump 导出所有 innodb 数据,使用 rsync 同步所有 myisam 数据文件,然后再开启主从同步。但是目前这种方案不适用,主服不能长时间停机 方案 2 使用 xtrabackup 来完成目标 主从服务器上都需要安装 xtrabackup(实际使用 xtrabackupex): yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm yum install -y percona-xtrabackup-24 主服: 备份数据 # 注意数据库名称的转义,例如 - 号是 @002d innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=xxxx --parallel=2 --databases="db1 db2" /data/backup/xtrabackup/ 保持事务一致 innobackupex --apply-log /data/backup/xtrabackup/2017-06-06_13-16-21/ 同步数据 rsync -avHz 2017-06-06_13-16-21 sysops@cow:/data/backup 从服: 修改 my.cnf 相关配置,恢复备份数据...

June 6, 2017 · 1 min

办理机动车临牌

政策已变,目前只能办理有效期为 15 天的临牌,并且最多只能办理两次 问题 外地户口,上海购车办理机动车(出省)临牌(出省和不出省的临牌办理方法一样,出省临牌有效期是30天,不出省的是15天) 文档记录状态 可用 发生时间 2016年01月28日9:00至9:30 体验得分 90 办理地点 黄浦公安分局交警支队,地址上海黄浦区陆家浜路88号(地铁4号线南浦大桥站1号出口200米处) 可办理时间 周一至周六 8:30-17:00 需要材料 车辆合格证原件和复印件 购车发票原件和复印件 交强险保单原件和复印件 身份证原件和正反面复印件 零钱5元 办理流程记录 进入大厅后跟保安说办理机动车临牌,拿一张《申请办理机动车临时号牌单》,然后坐在椅子上排队并填好临时号牌单 等待办理, 交警会打印两张临牌出来 恭喜你,没有第3步,可以拿着临牌走了 提高效率的小提示 自带黑色签字笔一支 原件和复印件分开成两份

January 28, 2016 · 1 min

驾照转入换证

问题 外地户口+上海居住证,外地驾照即将到期,需要将外地驾照转入上海并且进行驾照到期换证。 可用状态 可用 发生时间 2015年10月15日8:00至10:00 体验得分 90 办理地点 车辆管理所三分所,地址浦东新区沪南公路2638 号 可办理时间 周一至周五 9:00-17:00 办理流程记录 前往4号楼的3层填表缴费并拍照,缴费需要排队,人较多,费用 25 元 拍好照片并拿到照片和表格后前往4号楼2层填表缴费并体检,缴费需要排队,人较多,费用 60 元 缴完体检费进去之后,需要填表并且贴好照片,体检项都是分开进行,主要体检内容包括视力,听力,身高体重,色盲等检测,其他项都是医生随手填上去的,哪个人少就先去体检哪个。我体检的顺序依次是视力,听力,身高体重,色盲检测。 每项体检完,看下体检表格,看看体检项有没有空的,如果没有就直接去出口处,把表格交上去,然后等报告 拿到体检报告后,直接去1号楼一层大厅门口右手处工作人员拿号,号码那张纸要保存好,最后一步领证还需要使用。 叫号后前往柜台管理,跟工作人员确认下需要办理的内容。我这里是办理转入和到期换证。这里会使用照片一张,工作人员会提供剪刀。办理过程大约需要5分钟 前往缴费处缴费,注意看下缴费窗口的号码,缴费处在大厅另外一侧,费用 10 元 前往发证处等待叫号领证 提高效率的小提示 8点30之前到达4号楼3层排队, 尽管 9 点才开始 自带黑色签字笔一支 身份证复印件和居住证复印件各一份

October 15, 2015 · 1 min

Nginx 性能调优「译」

这是一篇译文,原文链接:Tuning NGINX for Performance Nginx 为人熟知的是在负载均衡、静态缓存和 WEB 服务器等方面的高性能,目前世界上最繁忙的站点中大约有 40% 在使用 Nginx。绝大多数情况下,大多数默认的 Nginx 和 Linux 配置都可以工作得非常好,但也需要做一些优化以获得最好的性能。本文将讨论在优化系统时需要考虑的 Nginx 和 Linux 的部分配置。可配置的选项有很多,但是本文只涵盖推荐大多数用户调整的配置选项。本文没有涵盖的配置选项,只有那些对 Nginx 和 Linux 有了深入的理解的人或者获得了 Nginx 技术支持和专业的服务团队的推荐建议后,才可以考虑调整。Nginx 专业服务器团队已经为世界上一些最繁忙的站点通过优化 Nginx 获得了最高水平的性能,并且可以为任何需要获得自己系统最大产出的客户服务。 简介 本文假设读者对 Nginx 架构和配置的概念已有了基本的了解。Nginx 的文档内容将不会在本文中重复,但本文会提供各项配置简要的介绍和相关文档的链接。 在性能调优时,要遵循一个好的规则:一次只修改一个配置选项,如果这个修改没有在性能方面带来优化,那么要再改回默认值。 我们从 Linux 性能优化的讨论开始,因为 Linux 性能优化的一些值会影响到 Nginx 的一些配置。 Linux 配置 尽管现代 Linux 内核(2.6+)在各种配置情况下都工作得很好,但也有一些配置是想要修改的。如果操作系统的配置设置的太低,那内核日志将会有错误信息,从而得知哪些配置需要调整。Linux 性能优化可能涉及的配置有很多,这里我们只讨论那些优化达到正常工作负载最有可能涉及到的那些配置。调整这些配置请参考详细的 Linux 文档。 Backlog 队列 下面的配置选项与网络连接和其排队方法直接相关。如果连入率很高(译者注:客户端发起的连接很多)且系统性能配置不匹配,例如一些连接表现得有所停顿,那么修改下面得配置将可能有用。 net.core.somaxconn: 设置等待 Nginx 接受的连接队列的大小。由于 Nginx 接受连接非常的快,这个值通常情况下不用设置得很大,但系统默认值可能比较小,所以对于流量比较大的站点,增大这个值是个不错的想法。如果这个值太小,在内核日志中应该会看到错误消息,那么就需要增大这个值,直到错误消失。注意:若将这个值设置为大于 512 的话,那么需要在 Nginx 配置中修改 listen 指令的 backlog 参数来匹配这个数字。 net.core.netdev_max_backlog: 设置数据包在被发送到 CPU 前可被网卡缓存的速率。对于带宽很大的机器来说,这个值需要增大。可以查阅网卡关于这项设置的建议文档或者查看内核日志中此项设置相关的错误。...

October 16, 2014 · 2 min

Github Pages 服务的域名设置

这几天每次 Push 博客到 Github Pages 时总会收到一封邮件: The page build completed successfully, but returned the following warning: GitHub Pages recently underwent some improvements (https://github.com/blog/1715-faster-more-awesome-github-pages) to make your site faster and more awesome, but we’ve noticed that iforget.info isn’t properly configured to take advantage of these new features. While your site will continue to work just fine, updating your domain’s configuration offers some additional speed and performance benefits. Instructions on updating your site’s IP address can be found at https://help....

May 6, 2014 · 2 min · Le

悟性

“悟性”是一个很虚的东西吗? 前段时间和同学聊天,聊如何从众多的各方面初步看起来差不多应聘者中去做选择?聊来聊去最终落到了“悟性”上。我自己在突然想到悟性这个词的时候脑子几乎一片空白,不知道如何去判断一个人的悟性,或者说悟性到底是怎么样的,凭什么说一个人悟性好或者悟性差。 昨天下午有个年龄不小的同学过来面试,聊了一个小时以后,向老板 汇报面试意见时,这同学各方面都很不错,但是总觉得有些地方不对,找不到词来形容自己内心当时的想法,于是结结巴巴的说,这种情况下,我要看一个人有没有悟性,接着我举了一个例子来说明什么时悟性: 假如一个人,被安排了事情 A,我觉得有悟性的人,可能在做 A 事情的时候,把相关的事情 B、C 都做了,或者要求时做到A,但是主动把结果做成 A++ 说完后,我觉得不妥:这可能不是一个人有没有悟性的问题,而是这个人主动不主动、有没有热情的问题。 到底什么怎样才能通过一些具体的例子体会悟性这个词的含义? 佛家讲究悟性。《心经》仅有 260 个字,有悟性的人才可以写出《心经与生活智慧》,甚至心经和量子物理都有关系,你看了之后,才发现:哦,原来心经是说这些的啊。 道家也讲究悟性。当年菩提老祖在孙猴子头上敲三下的时候,要是孙猴子没有悟性只有兽性的话,估计就没有后面的孙悟空了。 自己之前团队中有个新同事,年龄比我长,团队之间大家相互做 Code Review,且不说代码质量, 从代码风格上我就对此人无语了:从不注意已有代码在变量、函数、文件命名上的一些基本的规范,别人不告诉他,就不会意识到这个问题。一些看得见的东西不一定非要教条式的写到文件里,然后去专门花时间去学,去强制。有些问题,还是自己意识到比较好,从别人口里说出来,那就不好玩了。 一句话说得好: 不怕狼一样的对手,就怕猪一样的队友。 不多说了,不强求,悟性有可能就是天生的。做不了大师兄,做二师弟也不赖。

April 26, 2014 · 1 min

成长

成长就是看自己以前写的东西(包括微博、博客、说说等等)的时候觉得以前自己很 SB, 然后迫切地想把它们删掉 这句话不止一次看到,反思自己,确实是那么回事儿,不能太赞同哦(我了个去上海腔了呢)。 先前早些时候,把新浪博客和人人删的一干二净,也就是过把自己过去的所有文字的创造付之一炬,说没有一点惋惜,那是不可能的,想想当年自己顶着农村小孩黝黑皮肤初来乍到大城市,牛流不分,不怕喝不上牛奶只能喝豆浆的尴尬,给学校里各个杂志投稿,现在读来那些稿件,莫不觉得自己二逼。还好是些低年级学生玩的校办杂志,没多少人,为了回忆二逼的岁月,我特地还留了一本,没有其他人变态一样也留了一本吧。 哦,对了,如果你想删掉所有的 SNS 平台的日志,不如学门编程的手艺,使用他们所谓的开放接口删了他们。不知道人人网的 3g.renren.com, 如果还能访问那可以试试小码哥几年前弄的人人自杀小工具 xiaomg.sinaapp.com,如果恰好能帮你删掉所有的东西,那么就是人人网的不对了,这么多年了,一点进步都没有,还有几个人在山寨机上开个ucweb访问你的3g网站。小工具的代码就不要看了,惨不忍闻,套用前面的话,写得太二逼了。说不定哪天就会被删掉,就像删这些日志一样。 感性的文字都已经被删掉了,这下子没人看的得到我过去的无知,也只有我自己知道自己过去的无畏。 准备把散落在各处的技术博文都挪到这里来,二逼 SB 可能不大适合形容一个人的手艺,但是菜鸟二字恰如其分。 又一个菜鸟来了。大牛们见笑了。

April 25, 2014 · 1 min · Le

谁是德布罗意

这张照片很多人应该都见过,名副其实的二十世纪最伟大科学家们的合影。爱因斯坦占据了最明显的位置,德布罗意也在其中。 这里是摘自百度百科的一些内容: 在光具有波粒二象性的启发下,法国物理学家德布罗意(1892~1987)在 1924 年提出一个假说,指出波粒二象性不只是光子才有,一切微观粒子,包括电子和质子、中子,都有波粒二象性。他把光子的动量与波长的关系式 p=h/λ 推广到一切微观粒子上,指出:具有质量 m 和速度 v 的运动粒子也具有波动性,这种波的波长等于普朗克恒量 h 跟粒子动量 mv 的比,即 λ=h/(mv)。这个关系式后来就叫做德布罗意公式。 从德布罗意公式很容易算出运动粒子的波长。 例如,电子的电荷是 1.6×10^-19 库,质量是 0.91×10^-30 千克,经过 200 伏电势差加速的电子获得的能量 E=Ue=200×1.6×10-19 焦 =3.2×10-17 焦。这个能量就是电子的动能,即0.5mv^2=3.2×10^-17 焦,因此 v=8.3910^6 米/秒。于是,按照德布罗意公式这运动电子的波长是 λ=h/(mv)=6.6310^-34/(9.110^-318.39*10^6)=8.7×10-11 米,或者 0.87 埃。 我们看到,这个波长与伦琴射线的波长相仿。前面讲过,这样短的波长,只有用晶体做衍射光栅才能观察到衍射现象。后来人们的确用这种办法观察到了电子的衍射,从而证明了德布罗意假说的正确性。 是不是有点印象了,这就是高中物理课本里面的内容吧。 前几天和公司几个童鞋一起吃饭,先是有人说《水知道答案》,且先不说它是不是伪科普,我们试图用一些我们想得到的知识来说明一些问题,于是我想到了物质波,也就是德布罗意波。让我惊愕的是,那三位同学一致表示他们完全不知道什么是德布罗意波,搞得我仿佛穿越了,穿越到阿西莫夫的基地里去了。 一定是在耍我。 如果德布罗意波都不知道,那肯定也错过了德布罗意本人和他那篇博士论文的八卦故事了。不多说了,还是偷着乐吧。 哈哈

March 13, 2014 · 1 min · Le

从域名和 CDN 来看网站架构

为了自己做好网站的架构,找了知乎,豆瓣,大众点评和百姓网来做参考。这里主要来看域名和 CDN 相关的部分,后台的架构也还是要边学便实践。 大概情况 从前端分析了知乎的域名和 DNS 情况,同时对比了一下豆瓣、大众点评和百姓网。从域名、DNS、CDN 等使用角度来说,他们之间大同小异。 使用的分析工具 Chrome WHOIS DNSLookup 非 CDN 使用 记录 域名 用途 路径 A zhihu.com 使用 301 跳转到 www.zhuhu.com IP A zhi.hu 使用 302 跳转到 www.zhihu.com IP A www.zhihu.com IP A comet.zhihu.com WebSocket 推送消息 IP A analytics.zhihu.com 知乎自己的统计分析,同时使用了 Google Analytics IP 大部分都是用了 301 或者 302 跳转,注意他们的区别:301 是永久跳转(浏览器会做客户端端缓存),而 302 是临时跳转。此外 baidu.com 到 www.baidu.com 并不是使用 301 或者 302 ,而是使用下面的一段 HTML 代码 <html> <meta http-equiv="refresh" content="0;url=http://www.baidu.com/" /> </html> 相比而言,我觉得使用 301 更 Geek,更好一些。...

March 6, 2014 · 2 min

使用 Vagrant 构建开发环境

Vagrant 是一个构建虚拟开发环境的利器,它使得在团队中很容易共享开发环境,有了它,不必每个人都搭建一个自己的开发环境了。在没有使用 vagrant 之前,我在 windows 中安装了 virtualbox,然后在 virtualbox 中安装了一个 ubuntu server。在 ubuntu 中安装了 mysql、jdk 等软件,并且设置了一个共享目录,以便于将工程代码直接共享给 ubuntu。在外部开发调试过程中(Java 项目),我需要在 virtualbox 中设置好几个端口映射,如 mysql,ssh 等等。这样在 cygwin 里面就可以通过 ssh 登录 ubuntu server 了,为了使得 ssh 登录不用每次设置密码,还需要手动生成公钥私钥。换机器了,这一切我又得重新配置。新同事来了,他也得像我这样重新配置一遍。有可能他还会有问题说:为什么按照你的说明,代码在我这里却无法运行呢? 一切都从 Yining 告诉了我 vagrant 之后发生了变化,原来一切都这么简单。 安装 VirtualBox Vagrant 其实是对 virtualbox 做了一层包装,它让使用 virtualbox 作为虚拟机更为简单。当然也可以使用 vmware,使用 vmware 那得找一个 license 了。 好吧,去这里 下载 VirtualBox。我使用的是 4.3.8 for OSX 安装 Vagrant 下载 vagrant 添加虚拟机镜像到 Vagrant vagrant box add vdevenv ~/Workspace/vagrant/boxes/vdevenv-0.0.0.1.box vagrant 的干净的镜像可以在这里下载: Ubuntu precise 32 VirtualBox Ubuntu precise 64 VirtualBox 更多镜像 在工作目录启动 Vagrant 进入自己的代码所在的目录,启动刚刚添加的虚拟机镜像...

March 3, 2014 · 1 min · Le