DHH大神写的书

DHH大神书的非技术类的书籍,不过我觉得大神写一些非技术类的比纯写技术更走心,更有指导借鉴意义。
大神在这本书里写的很多东西都体现了高效程序员的必备素质。
顺便,我总觉得我老板应该是看过这本书的,因为他运营公司的很多风格和这本书神似。。或者这本书里写的确实是比较在理,通理。

如果对DHH大神不了解的,可以自行科普一下
http://www.niugebbs.com/xiankelitina/783789.html

大神的主页
http://david.heinemeierhansson.com

我其实最崇拜的除了他技术牛外,还有超强的第二技能,职业赛车手,而且还长的超级帅,然后还是创始人和作家。。。

Ruby 是由日本电脑科学家松本行弘设计的,以简洁优雅闻名,而来自丹麦的 David Heinemeier Hansson(DHH)为 Ruby 语言开发了框架(Rails),让 Ruby 在全球爆发性成长,成为最受欢迎的网站后端语言之一。2005年被 Google 评选为「年度黑客」。他除了写程序,还是个赛车手,2012年参加过 Le Mans 24 小时耐力赛,2014年夺得冠军。DHH 也是项目软体开发公司 Basecamp(原名37 Signals)的合伙人。

程序员的另类境界:Rails创始人DHH驾驶保时捷赛车参加职业赛事
http://www.iteye.com/news/20392-DHH-driving-racing-car/

所以我觉得优秀的程序员绝对不是堆时间堆出来的,高效,不重复做事情,突破性思维是必要的。
并且并不是程序员只能苦逼的一直码代码,还是有时间可以发展第二技能的,所以也坚定了我跳好舞的决心

因为是非技术类读书笔记,所以是对书中某些触发我思考的点进行一些扩展,谈谈自己的想法,记录下现在的状态
阅读全文

ejabberd 14.07 和 16.04 makefile的区别

ejabberd 14.07 (3d3a4f7)

https://github.com/processone/ejabberd/blob/3d3a4f75435ad353cf9a192b8ef23335be0a5b01/Makefile.in

ejabberd 16.04 (639c2fb)

https://github.com/processone/ejabberd/blob/639c2fb6401391663206c0e4c946d1a699689ac7/Makefile.in

区别最大的就是下面这一段

下面这一段比之前的用法要复杂,正好可以借这个机会把makefile更好的理解一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
JOIN_PATHS=$(if $(wordlist 2,1000,$(1)),$(firstword $(1))/$(call JOIN_PATHS,$(wordlist 2,1000,$(1))),$(1))

VERSIONED_DEP=$(if $(DEP_$(1)_VERSION),$(DEP_$(1)_VERSION),$(1))

ELIXIR_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,$(word 2,$(1))) $(wordlist 5,1000,$(1))
DEPS_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,$(word 2,$(1))) $(wordlist 3,1000,$(1))
MAIN_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,ejabberd) $(1)
TO_DEST_SINGLE=$(if $(subst XdepsX,,X$(word 1,$(1))X),$(call MAIN_TO_DEST,$(1)),$(if $(subst XlibX,,X$(word 3,$(1))X),$(call DEPS_TO_DEST,$(1)),$(call ELIXIR_TO_DEST,$(1))))
TO_DEST=$(foreach path,$(1),$(call JOIN_PATHS,$(call TO_DEST_SINGLE,$(subst /, ,$(path)))))

FILTER_DIRS=$(foreach path,$(1),$(if $(wildcard $(path)/*),,$(path)))
FILES_WILDCARD=$(call FILTER_DIRS,$(foreach w,$(1),$(wildcard $(w))))

ifeq ($(MAKECMDGOALS),copy-files-sub)

DEPS:=$(sort $(shell $(REBAR) list-deps|$(SED) -e '/^=/d;s/ .*//'))

DEPS_FILES=$(call FILES_WILDCARD,$(foreach DEP,$(DEPS),deps/$(DEP)/ebin/*.beam deps/$(DEP)/ebin/*.app deps/$(DEP)/priv/* deps/$(DEP)/priv/lib/* deps/$(DEP)/priv/bin/* deps/$(DEP)/include/*.hrl deps/$(DEP)/lib/*/ebin/*.beam deps/$(DEP)/lib/*/ebin/*.app))
DEPS_FILES_FILTERED=$(filter-out %/epam deps/elixir/ebin/elixir.app,$(DEPS_FILES))
DEPS_DIRS=$(sort deps/ $(foreach DEP,$(DEPS),deps/$(DEP)/) $(dir $(DEPS_FILES)))

MAIN_FILES=$(filter-out %/configure.beam,$(call FILES_WILDCARD,ebin/*.beam ebin/*.app priv/msgs/*.msg priv/lib/* include/*.hrl))
MAIN_DIRS=$(sort $(dir $(MAIN_FILES)) priv/bin priv/sql)

define DEP_VERSION_template
DEP_$(1)_VERSION:=$(shell $(SED) -e '/vsn/!d;s/.*, *"/$(1)-/;s/".*//' $(2) 2>/dev/null)
endef

$(foreach DEP,$(DEPS),$(eval $(call DEP_VERSION_template,$(DEP),deps/$(DEP)/ebin/$(DEP).app)))
$(eval $(call DEP_VERSION_template,ejabberd,ebin/ejabberd.app))

define COPY_template
$(call TO_DEST,$(1)): $(1) $(call TO_DEST,$(dir $(1))) ; $$(INSTALL) -m 644 $(1) $(call TO_DEST,$(1))
endef

$(foreach file,$(DEPS_FILES_FILTERED) $(MAIN_FILES),$(eval $(call COPY_template,$(file))))

$(sort $(call TO_DEST,$(MAIN_DIRS) $(DEPS_DIRS))):
$(INSTALL) -d $@

$(call TO_DEST,deps/p1_pam/priv/bin/epam): $(LIBDIR)/%: deps/p1_pam/priv/bin/epam $(call TO_DEST,deps/p1_pam/priv/bin/)
$(INSTALL) -m 750 $(O_USER) $< $@

$(call TO_DEST,priv/sql/lite.sql): sql/lite.sql $(call TO_DEST,priv/sql)
$(INSTALL) -m 644 $< $@

$(call TO_DEST,priv/bin/captcha.sh): tools/captcha.sh $(call TO_DEST,priv/bin)
$(INSTALL) -m 750 $(O_USER) $< $@

copy-files-sub2: $(call TO_DEST,$(DEPS_FILES) $(MAIN_FILES) priv/bin/captcha.sh priv/sql/lite.sql)

endif

copy-files:
$(MAKE) copy-files-sub

copy-files-sub: copy-files-sub2

install: all copy-files

阅读全文

tcpdump-tips

tcpdump是经常会用到的工具,但是每次用都不太记得命令,要去google,所以现在每次使用都把用法记录下来,方便后面查找

使用方法

抓某个端口

tcpdump tcp port 22

抓某个端口同时filter掉某台机器,不抓这台机器

tcpdump tcp port 22 and not host 10.10.16.27

保存为cap文件,每个分片文件大小100m

tcpdump tcp port 5222 -C 100m -w xmpp.cap

阅读全文

目标

为了部署标准化,需要将本地开发环境,测试环境,生产环境统一。那么部署本地环境也需要自动化,从而保证标准。
考虑跨平台的需求并且开发易于部署,所以选择vagrant作为虚拟机标准化的工具。

安装并启动centos7

安装virtual box

https://www.virtualbox.org/wiki/Downloads
选择合适自己的平台下载并安装

安装 vagrant

https://www.vagrantup.com/downloads.html
下载并安装

阅读全文

从零开始使用Atom

发布在 Tech for Fun

开始折腾atom

作为git粉,迟早还是要转到atom的,不如趁早(其实现在也不算早了)

download

没啥好说的,官网下载mac版,解压,拷贝到app下面

apm

安装atom之后,就会自带个命令行工具apm,这个不能更赞了,很多事情就可以脚本化来做了.
apm - Atom Package Manager powered by https://atom.io

支持的命令列表

1
2
3
4
5
clean, config, dedupe, deinstall, delete, dev, develop, disable, docs,
enable, erase, featured, home, i, init, install, link, linked, links, list,
ln, lns, login, ls, open, outdated, publish, rebuild, rebuild-module-cache,
remove, rm, search, show, star, starred, stars, test, uninstall, unlink,
unpublish, unstar, update, upgrade, view.

如果想看某个命令的用法,run apm help command

1
2
3
4
5
6
7
8
apm help dedupe                                                                                                         master 

Usage: apm dedupe [<package_name>...]

Reduce duplication in the node_modules folder in the current directory.

This command is experimental.


阅读全文

问题描述

要从svn转一个项目到git,这个项目有近4年历史, team members大概有20多人, codebase很大,最终生成一个war包.
开发模式,有个dev的branch,所有的功能都往这里放,然后有个出release的branch,dev branch完成测试的就手动merge到release的branch.
所以dev branch和release branch无法直接merge

阅读全文

初衷

写了一些ansible,docker相关的代码,经常想本地调试一下,尤其希望能有一个标准的干净的环境能测试.
之前对Vagrant稍有了解,借这次机会好好学习一下.
最终目标是希望能一个setup.sh把所有的脚本代码都黏在一块儿.launch一套完整的系统.

这句话挺吸引人

“New team members can be onboarded to new projects as easy as git clone && vagrant up”
Excerpt From: Michael Peacock. “Creating Development Environments with Vagrant - Second Edition.” iBooks.

阅读简单笔记

注释和共享

重拾hexo,git blog走起

发布在 个人

好久没有更新了

上次更新还是去年,有些东西真是一放就是很那拿起来,沉下心花了1个多小时把npm, hexo还有一堆插件都升了升级,然后fix了一些问题,又开始了.
过了一年变化不少:

  • 公司的一个项目上线,那阵压力特别大,不过现在系统很平稳了,学习了很多,也收货了很多,对aws的devops工作比较深入.
  • 新的项目开始玩serverless,这个开源项目关注aws的应该都知道, aws的microservice解决方案, 话说microservice这个词,去年自从有本书出来后,到今年基本就烂大街了,到处都在谈这个.
  • 去年压力最大的时候每天还是要保持运动量,9月份无意接触了街舞, 报名学习了lockin和hiphop,跟了两学期的课,认识了很多朋友和老师,非常懵逼的上了6,7节大师课,也算人生的一片新天地,虽然我这个年纪只能是强身健体娱乐为主,但是!跳舞,我们是认真的.
  • 目前开始玩docker的pipeline, 公司的主打项目的运维方式想提高自动化能力,于是结合jenkins,ansible,docker等做一套CD的系统,也挺有意思.
    其实想分享的很多,但是往往过了这村就没这个店了,最想分享的时候没时间,过了这个时间点,也不一定能写出来什么东西

这次升级刨的坑

TypeError: Cannot read property ‘compile’ of undefined on Mac

我用的皮肤是tranquilpeak, 升级hexo后generate出错,无需降级的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
change source/_css/layout into source/_css/layouts and modify related lines in source/_css/tranquilpeak.scss

@import
'layouts/about',
'layouts/blog',
'layouts/bottom-bar',
'layouts/cover',
'layouts/footer',
'layouts/header',
'layouts/main',
'layouts/sidebar';

TypeError: this.relative_url is not a function

修改_config.yml 为 relative_link: false

注释和共享

Darcy Song

author.bio


author.job