1. Open Source GCI

    一直以来都在用 git ,用起的时候也有一些痒点:

    1. 很多时候,开发新 feature 的时候总会忘记及时 git commit, 导致最后一大堆已经修改的文件,如果对 commit 有追求的话, 还要 git diff 查看哪些文件的修改是由于同一个原因可以合并到一个 commit 里。
    2. git add 文件之后,又不记得文件都做了什么修改,commit message 就会写的很抽象。 对未来开发是不友好的。

    我想,需要有一个工具帮我解决上面的痒点, 于是写了一个简单的脚本帮助完成。

    https://github.com/shonenada/gci.sh

    这其实只是一篇骗 star 的 Blog.

    https://github.com/shonenada/gci.sh


  2. ChatOps 的一次简单实践

    回顾一下自己部署服务的变化:

    最初学习的时候,部署 ASP, PHP 是通过 FTP(甚至 Web)将 ASP/PHP 文件上传到服务器上。 后来知道有版本控制器之后,将代码托管到版本库,手动通过 ssh 登录服务器更新代码来部署服务, 再后来,知道利用 fabfile.py 等来自动化 ssh 到更新,到部署的过程了。 再后来,学会使用 CI,通过 travis / Jenkins 来自动部署服务。 一直到 ChatOps 实践之前,最便捷的方式是登录 Jenkins,输入 commit sha 来指定构建的版本,进行服务部署。 虽然如此,还是避免不了比较繁琐的人工操作。

    Slack / BearyChat / 微信等 IM 发展 ...


  3. 我的半桶水前端栈

    这篇博客是前面几篇有关前端博客的总结。

    包管理器

    大约一年前,我写前端还用 Bower 来作为前端的包管理器。

    $ bower install what-you-need 将依赖安装到 bower_components 中,(或者通过 .bowerrc 配置安装的路径)。 配合 wiredep ,在 index.html<!-- bower:css --><!-- endbower --><!-- bower:js --><!-- endbower --> 即可导入所有依赖。

    而最近了解了 WebPack 之后,更喜欢 npm + webpack 来作依赖管理。

    $ npm install what-you-need
    $ npm init    # Create package.json
    

    index.js:

    import DepOne from 'scripts ...

  4. 说一说 R2D2

    在 Vanke 近一年的工作,我们重写了原本的 2.0 系统。现在也基本进入稳定状态。 接下来的工作,更多地是用运营数据说话,尽可能通过技术手段影响我们所在的行业。

    R2D2 就是这么一个背景下诞生出来的项目。本质就是一个数据可视化的项目。

    讲讲两个 App

    我们对外产品主要是 “住这儿” 和 “助这儿”,用户分别是业主和员工。关于产品的设计不是这篇 Blog 要讨论的,所以不评论功能是否合理等等。

    “住这儿” 面向业主。提供了缴物业费、查询邮包、提交报事、反馈、物业评分等物业支撑功能,同时也提供了一些社区活动、帖子,以及我们发送通知的渠道。

    可以收集的数据有:

    • App 的普及率;
    • 不同社区业主的活跃程度;
    • 不同社区业主使用 App 的主要目的;
    • 不同社区物业评分情况;
    • 业主更喜欢什么功能。

    “助这儿” 面向员工。提供员工工作所需的功能,签到、抢单、查询业主信息等 ...


  5. Vue 初窥

    Vue

    Vue 是一个类型 AngularJs 的库。但不同于 Angular,Vue 主要是转主语数据绑定和组件化开发两大特性。同时 Vue 也提供了一套非常简单的 API,上手非常容易。

    Data Binding

    Vue 数据绑定会将 HTML 模板中的 “变量” 和 JavaScript 中的对象绑定起来,一旦数据绑定了,Vue 就会对它们进行同步。

    https://vuejs.org/images/mvvm.png

    这点跟 AngularJs 的效果是一样的。

    文本绑定

    文本绑定语法与 Angular 是一样的:

    Hello {{ username }}
    

    一次绑定

    Vue 数据绑定支持 “一次绑定”,也就是说当数据改变时候,HTML DOM 并不会跟着同步。

    Hello {{* onceBindingUsername }}
    

    JavaScript 表达式

    Vue 支持在 ...


  6. 从一个小项目谈 Web 开发

    前阵子和室友一个做了一个关于追梦的网站(《追者》, https://ichaser.net),产品本身的功能很简单,但是从技术层面来看,《追者》也是普普通通的一个网站。也许和平常我所开发的 Web 不同的是,这个 Web 每一层技术栈都尝试使用一些现代化开发工具,特别是前端工具链。这篇 Blog 记录了这个网站使用的一些工具和技术架构,作为这个网站的技术总结。当然,所列举的工具并不一定是最“现代化”的,欢迎一起讨论。

    一、服务器

    服务器使用了我一贯喜欢的搭配 Nginx + Gunicorn + Gevent。 iChaser 采用了灰度发布的方式,设置了 stage 和 prod。为了方便分别发布 stage 和 prod,服务器配置了 Supervisord (http://supervisord.org/)。酱就能通过命令来重启对应的服务:

    $ supervisorctl restart ichaser ...

  7. New start in BearyInnovative

    在成都知道创宇快要结束的时候,黄璜老师就给我安利 一熊科技 并且把我推荐给包大人。

    面试过了之后,休息了几天,今天入职一熊科技,目前在这里写前端。。

    又是一个新的开始,加油~

    一熊衣服

    (我还欠着一篇介绍要写咋办。


  8. 创宇实习周记之伍、六、七

    最近三周都在忙碌,压缩在一篇里面写了。

    测试的重要性

    关于测试,很多程序员都喜欢以“工期紧”为理由拒绝写测试脚本。

    但我认为这是一个错误的观念。

    测试确实不好写,特别是上下文环境有要求的程序更加不好写测试。有时候写一个测试脚本甚至要花上一整天的时间。 但这都是因为测试写得少的原因。

    很多时间之所以要花很多时间来写测试,是因为实在没有思路。“我该怎么测试?”

    举个例子,比如验证用户登录的功能是否正确。在没有经验的情况下,很容易想“我要怎么写一个程序去模拟用户点击操作?” 但是只要写过一次这样的脚本就知道这个思路并不好,更好的思路是“我要怎么写一个程序去模拟浏览器操作?” 这样可能会更明白些。

    当掌握了基本的测试思路之后,写测试就会轻松一些了。

    关于测试还有很多可以讲的,但我想讲的是公司里项目的一些感想。

    《重构》里不断的强调测试的重要性,是因为写了测试,才能保证重构的逻辑正确性。

    而公司项目里缺少了测试,因此即使想重构,也不得不小心翼翼地去重构,甚至望而却步,被里面的逻辑吓怕。

    MongoDB vs OO

    MongoDB 是面向 Document 的数据库。

    它的数据结构可以很灵活,结构可以任意改变。这提供了很大的便利。

    最近的项目里,所有 MongoDB ...


  9. 我看团队

    谈一谈团队

    我是一个对团队要求很高的人,这也许是我一直找不到团队的原因。但其实我是一个对团队要求很少的人。

    想想,在大学,我曾在两个团队里工作过。

    第一个,是我引以为豪的团队 Stu Developers Team,学子天地技术部。可以说,大学所学到的技术,都是在这里学到的。 之所以比其他人了解更多,是因为这里有我很喜欢的技术交流氛围,不定时的技术分享会,时常的 QQ 群交流,每天都能认识到新的知识。 在这里是真的在追求开源的方式进行开发,也是因为这样才让自己更喜欢开源吧。

    在 SDT 里,影响我的事情很多,其中有一件必须提,那就是“软件工程范儿”。 我自认自己写的代码还是挺漂亮。这是在 SDT 里一直强调的事情,一定要写“可读可维护”的代码。 从一开始就一直强迫自己把代码写得好看,不管要修改多少次。 遗憾的是,没有 TonySeek 的那种超强理解力与记忆力。看过的书理解不透又容易忘记。

    SDT 是一支技术强大的团队,至少在深大,我们敢说第二 ...


  10. 创宇实习周记之肆

    这周工作内容比较少,想的事情比较多就只分享一个踩到的坑吧。

    MySQL 死锁问题?

    一次开发中,数据库结构做了修改,于是连接上 MySQL 数据库,执行了 alter 语句,但是很多之后都没有反应。估计是数据库断开了连接,于是 ctrl + c 中断操作,之后再退出 client ,重新登录数据库,重新执行。

    重新执行的结果依旧是卡死在那,甚至连 select 语句都卡死了。

    好嘛那我就 drop table -> 卡死 好嘛那我就 drop database -> 卡死

    奇怪的是,其他数据库访问都很正常。

    后来我觉得应该是第一次操作发生死锁(或者类似的情况)。

    执行 show processlist; 。 果然我所有的命令都显示 Queue,然后 kill 掉对应的 pid。

    问题解决。

    MySQL localhost ...


Page 1 / 5