brew install nginx with error: cannot run C compiled programs

After upgrading Mac OS X to Sierra, I tried to ‘brew install nginx’, however an error occurred unexpectedly.

nginx checking whether we are cross compiling... configure: error: in `/private/tmp/makedepend--xproto-20161031-51743-16mag9r/xproto-7.0.25': configure: error: cannot run C compiled programs.

Firstly appearing around my head is this is caused by Sierra incompatibility, I tried to get solution from Google, but got nothing. Next I put attention on brew, reinstalled brew by using official code as below:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install

After that, I ran ‘brew install nginx’ again, it didn’t work and prompted ‘Warning: xcode is outdated…’, and I found xcode got crashed then, suddenly I realized that it may be caused by xcode. So I got rid of xcode and nginx was installed successfully.

However, I got another tiny issue after nginx was installed as shown below.

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

It could be fixed by following code

xcode-select --install

To sum up, I did wrong to Sierra, it was xcode’s fault.

brew install nginx with error: cannot run C compiled programs

破解同源策略,ajax请求本地文件

正如“same origin policy”所定义,处于安全考虑,两个不同域(例如kingscow.com访问goashton.com)是不能相互访问(敏感)信息的。同理,通过ajax访问本地文件(非服务器方式)也是禁止的。

我尝试在angular component中访问templateUrl指定的模版文件,然而angular机制是通过ajax读取的,也就导致出现如下图情形:
screen-shot-2016-10-26-at-10-12-01

当然,最好的方式是遵守SOP同源策略,搭建server来运行这段代码。如果非(jue)要(jiang)ajax访问本地文件,也是可以的,方法如下

FIREFOX

打开一个新tab,地址栏输入about:config,搜索security.fileuri.strict_origin_policy,点击将value改为false,如下图
screen-shot-2016-10-26-at-11-06-57输入命令打开网页 open -a firefox -g index.html

CHROME

Chrome没有提供直接的配置方式,可以在控制台下打开chrome并禁止安全策略,按如下步骤

1. 完全关闭chrome,进入控制台(以mac iIterm为例)
2. open -a Google\ Chrome -g –args –disable-web-security –user-data-dir
3. open -a Google\ Chrome -g ./index.html
步骤二打开chrome浏览器,并关闭安全模式,chrome会有安全提示,如下图。步骤三打开带有ajax请求的本地文件(替换index.html)
screen-shot-2016-10-26-at-10-50-50

最后强调一次,正确使用ajax的方式是在server下。

破解同源策略,ajax请求本地文件

一次不错的敏捷实践

角色:
Project Manager(PM), Business Analyst(BA), Tech Lead(TL), Back-end Developer (Dev), Front-end Developer(UI Dev), User Experience(UX), QA(Quality Assurance)

工具:
Trello, Zeplin, Story wall

前提:
客户已经确认需求及范围,解决方案和交互确认

流程:
1. BA拿到客户确认的需求,和Dev,UI Dev 将所有需求划分为N个迭代(每个迭代一般为两周),然后一起给每张卡估点。
2. UX在zeplin中添加视觉稿和交互细节,期间UI Dev和BA会参与。
3. BA画故事墙,包括backlog,in dev, ready for int, dev done, in qa, qa done, blocked。
4. BA写story,列出Acceptance Criteria(AC),每个AC代表一个功能点,同步到trello以及纸质故事卡上墙(一张Story卡被分为前端和后端两部分,前后端分离)。
Dev和UI Dev分别找BA开卡(kick off),需要BA,QA及UX同时在场,确认完的AC,分别在屋里墙和trello把卡拖到in dev,在trello添加自己的名字
5. Dev和UI Dev共同确认契约,制作mock数据。
6. Dev或UI Dev开发过程中,自己在trello中购选AC,表示完成该功能点。
7. Dev或UI Dev开发完成后,找BA和UX sign off卡,得到确认后,将卡片拖到ready for int。如果UX觉得UI没达到预期(经常发生)或者BA觉得AC没有完成,则继续做卡直到sign off成功。
8. 如果同一个功能的前后端都完成了,一般由UI Dev发起进行集成或联调,非mock数据,一般在dev或者qa环境下完成,无误后放到dev done中,等待QA来取测试。
9. QA如果发现bug后分两种情况,如果属于story AC没有完成或者遗漏需要追加AC导致的bug,则把story卡挪回in dev,等待开发修复,如果属于技术型bug或者功能覆盖不全面的bug,QA可以写一张bug卡,放到in QA或者in dev等待开发领走修复。
10. 如果往复直到所有卡都在qa done,表示一个迭代结束。
11. 期间频繁会和客户交流需求,因为在开发过程中经常能发现不清晰或者没有考虑到的实现细节,一般由BA主导,Dev和UI Dev配合完成。
12. 每一周PM会发一封周报给客户并抄给团队,说明上周进度,完成的story卡,消耗的人天,团队成员变化。

站会:
固定时间,一般是每天的早晨,全员参加。
准备一个token,一般是一支笔,可以是任何东西,甚至平台支撑站会。
轮流说昨天story完成情况,以及今天的计划(言简意赅)。为了追踪项目进度和个人完成情况,每个人会用笔画’正’字,每一个笔画代表消耗一个人天,并挪走或领取新的卡片并贴上头像。
PM会询问进度,并更新客户的反馈。

故事墙:
故事墙包括backlog,in dev, ready for int, dev done, in QA, QA done, blocked。
一般蓝色表示后端卡,api卡;黄色代表前端卡,而红色是bug卡,卡上会标明该story的点数。
backlog放一个迭代所有需要做的卡片,BA负责放卡;in dev放正在开发的story,ready for int放前后端完成等待联调的story,dev done表示联调成功,QA可以进行测试,这三个由Dev和UI Dev负责,将卡片从backlog拿到in dev,以及到ready for int,最后到dev done;in QA表示QA正在测试当中,QA done是一个卡完全通过测试,等待上线,这两个由QA负责,从dev done取完成的卡到in QA开始测试,最后到QA done结束;blocked一般存放暂时不做或者由于各种原因没法继续的卡。
一个迭代的结束是所有卡片都在qa done中。
准备团队成员头像,每领一张卡,将自己头像贴到对应卡上,方便大家识别责任人。
一个好的实践是由Dev,UI Dev和QA自己挪卡,及时更新AC,便于PM跟踪进度,随时了解项目压力以提供应对方案。

话题:
估点应该所有Dev一起参加,还是只有TL和BA?
故事卡拆分到多大比较合适?这里根据CRUD拆成4张卡,单独算法或者拥有复杂逻辑部分单独拆开
Dev和UI Dev谁来做mock数据?
在没有jira情况下如何跟踪bug?进一步讨论引入jira的实践

一次不错的敏捷实践