金马的Blog

我喜欢折腾

项目最近使用的一些技术

最近的项目使用了一些技术,分享出来,希望和大家有一些讨论和切磋。

项目管理:

使用的是 Teambition,整体感觉凑合,

但问题也有,

  1. 比如产品经理的文档无法在 teambition 上很舒服的书写,只能通过上传文件来分享,效率太低,最后只能使用印象笔记来分享,结果印象笔记分享被封了,真是坑。

版本管理:

使用 Git,搭配 GitLabGitlab 使用起来真的超出预期,版本管理,代码 Review 等等都非常好用,Github 有的功能 GitLab 应该都有吧。

项目后端使用语言:PHP

PHP 是世界上最好的语言,哈哈哈哈哈哈。

PHP 现在依然是最受人鄙视的语言,但是你们确定了解 PHP 5.4, PHP 5.5, PHP 5.6吗?我承认 PHP 5.2之前真的是有太多的糟粕,但是 PHP 现在的稳定版本 5.5已经吸收了很多优秀的思想,焕然一新。Composer(Packagist)、LaravelHHVM 都是 PHP 的希望,用 PHP 依然可以写出优秀的代码。

而且,PHP 的程序员很多啊,创业公司比较好招人。嘿嘿

项目PHP包管理:Composer

在本地服务器搭建 Composer Satis 来存放自己的私有的包,尽可能将所有公有的包也缓存到本地的服务器,这样子 composer update 会节省很多时间,秒更新,酸爽。

项目前端:

使用 bower 进行前端包管理。 使用 webpack 实现前端模块化机制,就是类似 require.js 做的事情,简单实用。 使用 gulp.js 来实现前端自动化,比如 less 编译,js 文件 uglify,文件连接,文件监听等等,使用下来感觉比 grunt.js 要好用几倍,gulp.js 能做的事情太多了,而且插件很丰富。

缓存:Redis

主要用来存储 session 和一些高频率读取的值,整体来说没有使用太复杂的数据结构。

之前使用 Redis 来做队列,后来使用了 Rabbitmq 就感觉省心了不少。

消息:Rabbitmq

主要用到的业务比如:发送短信,发送邮件,一些段时间内大量操作但响应要求不是那么及时的都可以使用队列来做。

日志:

使用 PHP 的一个 monolog 库,使用文本记录 + MongoDB 两种方式记录日志,查日志的时候,你会发现 MongoDB 比文本方便太多,因为你可以用任何语言来分析 MongoDB 数据库,但是文本文件的话就比较局限。

监控程序:supervisor

很好用,可以满足进程监控。

定时执行:crontab

感觉整体够用,一些定时需要执行的任务都使用 crontab,简单稳定。

PHP 学习推荐的网站

http://www.phptherightway.com/

这个网站应该是学习 PHP 的最好的指南,没有之一。

http://www.php-fig.org/

一个制定 PHP 规范的机构,非常有必要了解下。

https://packagist.org/

Composer 的官方的主要的 Repository,当然你得先去了解下 Composer。

http://thephpleague.com/

PHP 精品库,由国外几个开发者打造,只有满足如下条件的库才会被收录:

We comply to the standards of the PHP-FIG. We adhere to the best-practices put forward by PHP The “Right” Way. We distribute code via Packagist and Composer.

虽然库比较少,但这些库都是精品,也是 PHP 的希望。

http://hhvm.com/

Facebook 开发的高性能的 PHP 虚拟机,据说比官方的快9倍,随着 HHVM 的不断完善,现在大部分的框架都被支持,比如 Laravel。

我感觉这也是 PHP 的一个希望。

社区类:

https://phphub.org/

国内非常好的社区,里面主要分享 Laravel 相关的内容,但是非常值得一看。

PHP 的最佳实践

今天听了 Mc 对 PHP 的分享,就偷偷把他的分享内容拿过来了。

“PHP 是世界上最好的语言”, 那么今天的题目就是 Zen of PHP(PHP 之禅)。

PHP 语言使用原则:

原则1:去其糟粕,取其精华。

原则2:使用 PHP 最高稳定版本。

原则3:注重实际,注重效率(Be pragmatic)

原则4:可读性与可改性(Readability & Writability)

PHP 语言使用战略:

(1)Autoload everything

(2)Require only autoload.php

(3)static method instead of global method

(4)Namespace every class

(5)Do not mix ‘side effects’ and ‘definitions’

PHP 语言使用战术:

(1)用一款牛逼的 IDE,比如 PHPStorm

(2) PHPDoc & Type hint,让写代码成为做选择题,而不是写作文。

(3) Log log log

(4) Object & Array

(5) Exception or Boolean return

Linux/Unix 指令使用说明的格式介绍(the Bash Command ‘Usage’ Syntax)

此片文章是对自己的一个提醒!

很多时候在 Linux/Unix 平台上看到一个命令的 Usage 的时候,以为看懂了,其实根本没看懂,还需要通过 man 来查阅,今天我就讲讲 Usage 的语法(syntax)。

bold text          type exactly as shown.
italic text        replace with appropriate argument.
[-abc]             any or all arguments within [ ] are optional.
-a|-b              options delimited by | cannot be used together.
argument ...       argument is repeatable.
[expression] ...   entire expression within [ ] is repeatable.

举例

$ cp
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

其中cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory包括6部分:

cp 是指令名称。

[-R [-H | -L | -P]] 一个 options 块,-H-L-P三个选项互斥。

[-fi | -n] 一个 options 块, -fi-n选项互斥

[-apvX] 一个 options 块, 所有在[]内的参数可以不选择使用,也可以全部选择使用。

source_file ... 文件名,...表示可以有多个文件,就是可以有多个 source_file

target_directory 一个参数,表示要复制文件的最终文件夹。

实例:

$ cp file1 file2 file3 directory
$ ls direcoty
file1 file2 file3

妈妈再也不用担心我不懂 Command usage 了。

参考:

http://serverfault.com/questions/124616/how-to-interpret-the-bash-command-usage-syntax http://pcsupport.about.com/od/commandlinereference/a/command-syntax.htm

《程序员修炼之道》读后感

最近时间比较多,抽了4天时间读完了程序与经典书籍《程序员修炼之道》,结论是,这是一本适合多次阅读的书籍。

这是一本讲程序员内功的书籍,涵盖了设计一个的产品各个点,包括:设计,编码,测试,管理,文档等等,书中始终围绕的一个中心就是:注重实效的程序员应该如何做。

我选了一些有意思的内容分享给大家。

领域语言

让我想起了《代码的未来》中提到的DSL(Domain Specific Language),在我们工作中会经历各种DSL,在我们需要的时候,我们可以自己来书写DSL。

如果出现了Bug,记住:

死程序不会说谎:

我是做测试出生,当时提交 Bug 到程序员那边,经常会被回应:怎么可能会有这个问题?现在我自己做程序员了,我发现我依然没有跳出这个怪圈,要时刻提醒自己死程序不会说谎

WordPress 出现“Error Establishing a Database Connection ”(无法连接数据库)怎么办?

今天朋友使用 WordPress 建站的时候出现“无法连接数据库”的问题,我想分享我解决问题的思路。

1. 定位问题:获取更详细出错信息。

看到这个提示后,我们脑子里会有多重假设,如果靠着我们的假设会花费大量的时间去试验,我的做法是:WordPress 是否有一种更详细显示出错信息的开关?在我寻找后,我发现,在wp-config.php中有一个可以修改为define('WP_DEBUG', true);

设计一个动态平衡的哈希表

最近周六在上 July 组织的算法课,学习了很多当年大学错过的课程,感觉收获很多,尤其是Ben的课程,很大的鼓励,很丰富的内容,以下内容是一个作业题:如何设计一个动态平衡的哈希表。

什么是动态平衡的哈希表

  1. 哈希表是一种数据结构;
  2. 动态平衡:随着哈希表中数据的增加,负载率保持不变;

什么是哈希表(hashtable),什么是负载率(load factor),请大家来参加 July 举行的算法课,这里的老师都是大神,或者推荐你看一下 MIT 的“算法导论”课程中的第七课“哈希表”,你可以在网易云课堂中找到。

感受异或的神奇

异或

什么是异或?

Wikipedia的解释:

在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^)。但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真。转化为命题,就是:“两者的值不同。”或“有且仅有一个为真。”

《每日与主同行》手机端网站

每日与主同行

在阿牛哥的带领下,我现在每天都会读圣经,参考的资料就是苏颖智牧师的《每日与主同行》,经常需要在网上读一下每天的章节,但是网上大部分版本都没有做很好的手机兼容,所以在手机上读的很累,我就自己做了一个简单的网站来进行每天的阅读。

一个年轻程序员对版本管理的理解

版本管理

版本管理是每一个项目中必不可少的环节,但这些知识却无法在学校中学到,常常需要在实践中学习,我总结了一些自己工作中版本管理的知识和经验,希望能给大家带来一起启发。 本文章是有感于某外包公司因为人少竟然不用版本管理而发。部分内容参考网上资料。

为什么做版本管理

如果你不做版本管理:

  1. 你有没有出现过误删程序代码?
  2. 你有没有出现过程序刚刚还运行好好的,现在就不行了,但是忘记修改了什么?
  3. 你是不是在某个时候也很想知道某个文件在某个时间段做过哪些修改?
  4. 你有没有想过和别人合作?

如果以上的答案是肯定的,那么你需要版本管理。

注:即便是单人进行项目开发,比如某些自由职业者,使用版本管理也是非常有用的,没有版本管理你永远无法对项目有一个清晰的认识。