• 2016-06-23

    单启动多个mysql实例mysqld_multi配置

    Views: 108 | 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: 106 | No Comments

    这段代码在 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: 317 | 1 Comment

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

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

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

    Continue reading »

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

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

    Views: 587 | 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
  • 2016-06-08

    Linux Shell mv 命令覆盖目标目录

    Views: 228 | No Comments

    注意, 在Linux命令行下, mv是移动文件或者文件夹(目录), 如果目标路径是文件, 则会覆盖, 但如果目标是目录, 则被移动到目录里面. 有时, 我们需要替换到目标目录. 例如

    mv a tmp/a
    

    我们希望, 最终文件a(可能是文本文件)应该在tmp目录下. 但如果tmp目录已经有同名目录的话, a文件的路径会变成tmp/a/a, 这不是我们希望的.

    解决方法是加上-T参数:

    mv -T a tmp/a
    

    参数说明:

           -T, --no-target-directory
                  treat DEST as a normal file
    

    当然, Mac 不支持这个参数(估计BSD都不支持).

    Posted by ideawu at 2016-06-08 15:49:52
  • 2016-06-08

    iptables 封禁解封 IP

    Views: 242 | No Comments

    iptables 封禁 IP:

    sudo iptables -I INPUT -s 1.2.3.4 -j DROP
    

    iptables 解封 IP:

    sudo iptables -D INPUT -s 1.2.3.4 -j DROP
    
    Posted by ideawu at 11:45:28
|<<<123456789>>>| 1/117 Pages, 701 Results.