十条无我编程的戒律

下面是译自Jeff Atwood的The Ten Commandments of Egoless Programming ========我是华丽的分割线======== 这十条无我编程的戒律,源自Jerry Weinberg的《程序开发心理学》一书。 理解并接受你所犯的错。这是说尽早的在产品发布之前发现这些错误。幸好我们不是在JPL(隶属NASA的喷气推进实验室)开发火箭制导软件的一小撮人,在我们的行业中很难出现致命错误,所以我们可以也必须从错误中学习、开怀并且继续前行。 你并不等于你的代码。记住审查的目的是为了找到问题,而且问题一定会被找到。不要为一个没有发现的问题而自责。 你知道多少不重要,总有人知道的比你多。如果你问一个人他总能告诉你一些新鲜的玩意。寻找并且从其他人那里接受输入,尤其是你觉的你不需要的时候。 没有商讨就不要重写代码。在修复代码和重写代码之间总有一条不错的界线,知晓其中的不同,并在代码审查的框架中追查文法上的变化,而不是孤僻的强迫症。 用耐心和尊敬善待那些知道的比你少的人。非技术人员在和开发打交道时普遍持有偏见,好一些情况下认为我们是一群自负的怪人,坏一些的情况下认为我们是一群玻璃心。不要用愤怒和不耐烦加深这种偏见。 在这个世界上持续存在的只有变化。用微笑和开放的心态去接受变化。把每一个需求、平台或是工具上的变化视作新的挑战,而不是严重的不利因素去抵触。 真正的权威来自于知识,并不是职位。知识带来权威,权威带来尊敬,所以你如果想要在一个自大的环境中受尊敬,增加知识吧。 为你的信仰而战,但也要勇于承担。要知道有时候你的想法会被批驳。即便最终你是对的,也不要报复或者说“我早就说了”这样的话,也不要作出一副为你的想法惋惜或者哭诉的模样。 不要成为屋子里的人。不要成为长期处在阴暗角落且打水的时候才出现的码农,屋子里的人与世隔绝、淡出人们视线、失控且在开放协作的环境中无立锥之地。 批评代码而不是批评人——善待码农,而不是代码。尽可能的让你的评论都是积极的而且目的是促进代码质量。评论要和标准,编程规范,优化性能等内容相关。 软件的人性化的准则真是不过时的。这本《程序开发心理学》成书于1971年,而一年后我才出生。 ========我是华丽的分割线======== Guixing 翻译于 2017-06-06

升级Homebrew中的PostgreSQL

最后还是入手了新版的MBP,开发环境都是重新设置的,用PostgreSQL的时候,启动提醒版本不兼容 FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.5, which is not compatible with this version 9.6.2. 所以要升级一下原来的库,作弊条开始 brew services stop postgresql brew install postgresql@9.5 initdb /usr/local/var/postgres9.6 -E utf8 开始升级数据库 pg_upgrade \ -d /usr/local/var/postgres \ -D /usr/local/var/postgres9.6 \ -b /usr/local/Cellar/postgresql@9.5/9.5.6/bin \ -B /usr/local/Cellar/postgresql/9.6.2/bin/ \ -v mv…

写给SaaS创业公司的安全基础知识

头两天看到了写给SaaS创业公司的安全101,内容涵盖了不少,非常值得一读,其实不光是给SaaS企业了,其他公司一样适用。 我摘了几个贴在这里 密码共享和密码管理,所有系统都有一个终极的Admin账户,这个账户是共享的,防止这个人的单点故障,同时一旦共享了,那么密码是需要加密共享的,所以要有密码管理。 全盘加密,Mac/Windows都有很好的加密方法了,几乎一键加密。 买3个以上域名,第一个用于公开的品牌和企业的邮箱。第二个用于自己的SaaS服务,比如googleapis.com之类的。第三个域名用于内部的后勤支持,比如公司vpn等基础设施等等,而且这个域名最好匿名,这样别人就难以猜测了。营销邮件应该使用独立的域名,以防反垃圾系统标记后影响公司业务邮件来往。 所有地方都使用HTTPS API密钥,每一个客户都应该拥有不同的API钥匙对。 物理安全: 使用屏保,并且从屏保恢复需要输入密码。 不要使用U盘,这是入侵的最方便最直接的方法了。 企业内部沟通用Slack,客户间沟通用邮件,国内可以适用企业内部用BearyChat,客户沟通用邮件+微信。 认证服务支持SSO和OAuth 备份 冷备/热备/异地容灾 自动化备份 定期恢复演练 备份加密 防火墙和访问权限 服务访问需要认证,比如ElasticSearch, MongoDB, MySQL等 Review防火墙设置,只能允许必要的服务和端口开放。 自动扫描。 可以照这个列一个checklist,看看自己公司都做到了哪些?

you-get下载视频

网络资源虽然很方便了,但是我依然喜欢把东西下载下来,尤其是喜欢的YouTube视频,因为版权等一系列的原因,这些东西在互联网可能只是短暂的停留。 you-get简直是一个神器,下载视频刚刚的。而且可以制定下载格式,连字幕都下载好了。比如指定下载mp4格式 you-get –itag=18 https://www.youtube.com/watch?v=ud4qy1EHRKQ

消除Outlook的安装后反复欢迎提醒和Update无法更新的问题

Outlook for Mac 2016实在是太慢了,写个邮件都要卡顿半天,重新装了2011版来用,导出导入olm文件很是方便,这也是这几年来我一直使用outlook的一个主要原因。 遇到的问题是无法更新和欢迎界面每次都弹出。 其实就是一个权限的问题,我也懒的去找哪一个文件了,直接执行 find ~/Library -type f -user root -exec sudo chown `whoami` {} \; 问题解决!

在阿里云ubuntu 16.04 lts上安装gitlab-ce

需要安装一个gitlab-ce给大家用,最近把操作系统都换到ubuntu来了,这个ubuntu是阿里云定制过的。 清华大学又一个gitlab的镜像,但是阿里云无法连通,超时,但是单独curl又是好的,结果呢是阿里定制了/etc/apt/apt.conf文件,修改如下即可 Acquire::http::Proxy “http://mirrors.aliyun.com/”; 内部用一个proxy连接的trick,添加一行即可使用清华的镜像了 Acquire::http::Proxy::mirrors.tuna.tsinghua.edu.cn “DIRECT”;

selenium wait 和 iframe

还是从朋友那个小事儿做的时候弄出来的问题 selenium 如何切换driver到一个ID设置为中文iframe? 遇到alert了怎么处理? 检查某个元素是不是出现了? 不要问我为啥id会用中文,说多了都是泪,总之这是一个一言难尽的问题,一句话,国有企业你懂的。 切换到特定的iframe/frame driver.switch_to_frame(driver.find_element_by_id(‘some_id’)) 这样就可以在这个frame/iframe里做相应的find element操作了,但是要记住操作完了要切换回来 driver.switch_to_default_content() 多层嵌套的iframe也没有问题,只要一步一步的切换进去就好了 接受alert 一个简单的方法就是预计有alert的地方,写上接受就好了 driver.switch_to.alert.accept() 这样很粗暴,但是也很有效,精细一些的做法看文档,比如: 确认或者取消 from selenium.webdriver.common.alert import Alert Alert(driver).accept() Alert(driver).dismiss() 读取alert的文字内容 Alert(driver).text 认证的用户名和密码 driver.switch_to.alert.authenticate(username,password) 输入内容 name_prompt = Alert(driver) name_prompt.send_keys(“Willian Shakesphere”) name_prompt.accept() 检查某个元素是否出现 以前的一个很粗暴的做法是time.sleep(N),但是这种情况下非常粗旷,selenium 提供了更精细的一些控制方法 等待某个元素出现以后获取这个元素 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver,…

在Mac上设置一套好用的PHP开发环境

在Mac上工作多年,近1年多写PHP比较多,所以也总结了一点在Mac安装一套好用的PHP开发环境的套路。写出来丢在了Github上,更新了几次,这次给team更换开发环境到Mac的时候也是让大家照这一套来做的,自觉用起来非常顺手,主要的特点是: 全部使用了Homebrew和Homebrew Services来管理软件和服务 环境是 Nginx + PHP-FPM + MySQL,如果有用到Redis和Memcached的地方使用brew install就好了。 新增项目无需修改nginx配置文件 尤其适合Laravel框架 详见Setup Mac Development Envrionment。

解 git submodule 无映射路径的问题

我们在使用Git submodule 的过程中我遇到的一个问题是执行git submodule update之后会出一个错误 fatal: no submodule mapping found in .gitmodules for path ‘vendor/predis/predis’ 这个问题就是你发现有一个不在.gitmodule文件中的submodule在更新,解决办法就是 git ls-files –stage | grep 160000 这可以看到你所有的Submodule文件,然后 git rm –cached PATH Problem solved. REF: No submodule mapping found in .gitmodule for a path that’s not a submodule

oh-my-zsh 总是很慢

从csh切换到zsh已经很久了,但是有时候他会很慢,甚至是在ctrl+c的时候,看了一下,主要的时间都是去检查git状态了,反正这个功能不是特别需要,就关掉好了。 git config –add oh-my-zsh.hide-status 1 Ref: oh-my-zsh slow, but only for certain Git repo