• 2016-07-06

    代码 Review 要点

    Views: 9763 | 1 Comment

    1. 做代码 Review 的人的责任

    给别人的代码做 Review 的人(Reviewer), 他的责任不仅在于保证代码质量, 更重要地是承担拼盘者角色. 当编写代码的人未来因忙于别的项目, 休假或者别的原因无法在岗时, Reviewer 将负责接手项目, 修复 bug, 增加新功能等. 所以, Reviewer 必须为自己着想, 认真负责地进行代码 Review, 以免日后自己接手一个逻辑不通, 代码混乱的项目(程序员俗话说的"一坨屎").

    2. 做代码 Review 的原则性要求

    首先, 做代码 Review 前, 要了解产品需求, 并从产品需求出发, 整理自己的技术思路, 然后讨论被 Review 者的逻辑, 看看是否有逻辑漏洞. 如果有逻辑漏洞, 那么必须全部打回, 因为逻辑一旦不准确不严谨, 后面的代码就是在建造 bug 而不是开发功能.

    Continue reading »

    Posted by ideawu at 2016-07-06 12:42:51
  • 2016-07-01

    程序员, 不要过度封装!

    Views: 9881 | 4 Comments

    c

    过度封装是程序员最容易犯的错, 因为是否过度并没有固定的数值标准, 只能是有经验的程序员基于科学的判断. 过度封装的危害十分严重, 所以必须重视, 并且极力避免.

    首先, 什么是"过度封装"? 我们知道, 计算机科学领域最称为经典也是最强大的思想便是递归, 分而治之. 但是, 递归本身最重要的因素是: 结束条件. 一生二, 二生三, 三生万物, 总要有终止的条件吧? 不然一辆车不停地急驰, 你怎样上车?

    新手程序员, 特别是非科班出身的文科程序员, 最容易犯了过度封装的错误的原因就是不知道何时适可而止, 脑筋往往不断地分解分解再分解问题, 最后, 你看到的就是这个调用那个, 那个引用这个, 乱七八糟毫无头绪, 三两行代码的函数比比皆是, 自以为封装抽象, 其实是拿捏不好这个度.

    Continue reading »

    Posted by ideawu at 2016-07-01 17:10:26
  • 2016-06-23

    单启动多个mysql实例mysqld_multi配置

    Views: 5881 | No Comments

    1. 创建 mysqld_multi.conf 配置

    [mysqld_multi]
    mysqld=/usr/bin/mysqld_safe  
    mysqladmin=/usr/bin/mysqladmin 
    user=AAA
    password=BBB
    
    
    [mysqld3306]
    port=3306
    datadir=/var/lib/mysql3306
    socket=/var/lib/mysql3306/mysql.sock
    pid-file=/var/lib/mysql3306/mysqld.pid
    log-error=/var/log/mysqld_3306.log
    user=mysql
    symbolic-links=0
    character-set-server = utf8
    skip-name-resolve
    
    server-id=123
    log-bin=mysql-bin
    log-slave-updates
    binlog-ignore-db=mysql
    binlog-ignore-db=test
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    replicate-ignore-db=mysql
    replicate-ignore-db=test
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
    master-connect-retry=10
    max_connections=1000
    
    sort_buffer_size = 300M
    join_buffer_size = 300M
    key_buffer_size  = 300M
    innodb_buffer_pool_size = 4000M
    query_cache_size=200M
    

    注意, 要配置 user 和 password, 一会将要创建一个帐号用于 mysqld_multi.
    Continue reading »

    Posted by ideawu at 2016-06-23 16:27:32
  • 2016-06-23

    PHP过滤掉Emoji表情字符

    Views: 9951 | 1 Comment

    这段代码在 stackoverflow 上搜到, 据说是 Smarty 用的.

    function smarty_modifier_emojistrip($string)
    {       
        return preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $string);
    }
    
    Posted by ideawu at 15:53:56
  • 2016-06-18

    程序员眼中的无所不能与一无是处

    Views: 5757 | 3 Comments

    程序员常见的思维是提供"可扩展性", 这个可扩展性是程序员根据其职业生涯遇到的泪与汗得出的原则, 是一种保护罩. 可是, 这种思维导致其在做产品时, 会有一些不好的经典效果.

    例如, 程序员做的系统, 一般出发点就是做关系数据库表的增删改查. 不管做什么产品, 就是那几样 - 显示列表, 条件查询, 新增, 删除, 更改. 就这几招, 无所不能, 简直没有程序员做不了的系统. 如果你是程序员, 相信你有体会, 这种"无所不能"不会给你带来任何好处.

    我经常见到一些婴儿型程序员, 婴儿型程序员是我发明的一种人类标签, 主要是指那些像婴儿喜欢糖果一样喜欢某项技术的低级程序员, 这种喜爱完全是基于生物本能, 是生物的应激反应, 所以是低级的. 例如, 某些婴儿型程序员因为某语言用缩进方式来表示代码块, 突然就要认干爹了, 这种喜好让人反感.

    Continue reading »

    Posted by ideawu at 2016-06-18 13:47:44
  • 2016-06-17

    一个简单的聊天或者私信系统设计

    Views: 8204 | 1 Comment

    不少网站都会内置聊天或者私信系统, 为了方便更多人, 现将一个最简单的聊天系统的接口设计放在这里, 这是一个基于 HTTP 的聊天系统设计.

    首先是视图设计:

    # view:
    
    msg/unread
    	(全局)未读消息列表
    chat
    	一对一聊天窗口
    chat/history
    	我的聊天记录(按人组织)列表
    

    接着是数据接口设计:

    # ajax:
    
    msg/unread/get
    	获取(全局)未读消息列表
    	@last_msg_id: 获取比此消息更晚的未读消息, 不包含该条消息.
    chat/get
    	获取一对一聊天记录
    	@user_id: (msg_id, user_id 必须传一个)聊天者
    	@msg_id: (msg_id, user_id 必须传一个)根据此消息, 可得到聊天者, 并可在显示聊天记录时定位到对应的消息
    chat/get_new
    	@user_id: 聊天者
    	@last_msg_id: 获取比此消息更晚的消息, 不包含该条消息.
    chat/send
    	发送消息
    chat/history/get
    	我的聊天记录(按人组织)列表
    

    其中, 带有 last_msg_id 参数的接口, 可用于轮询获取新消息, 以便在缺少推送机制(PUSH)时提供一种替代方案. 大多数情况下, 10秒一次的刷新频率能达到"实时聊天"的效果.

    当有推送机制时, 如采用 iComet, 推送机制只推送通知(notify), 实际的消息内容仍然通过带 last_msg_id 的接口获取. 也就是说, 把固定刷新频率, 改为受通知时刷新(PUSH + PULL 结合).

    另外, 消息的持久化可以使用 MySQL 数据库, 但更推荐 SSDB NoSQL 数据库, 可以 SSDB 能存储超过十亿条的聊天历史记录并能快速查询.

    基于 SSDB + iComet 的聊天系统 demo: https://github.com/ideawu/icomet-demos

    Posted by ideawu at 2016-06-17 17:51:27
|<<<123456789>>>| 5/122 Pages, 727 Results.