• 2019-02-08

    Linux修改主机名不重启生效

    Views: 1416 | No Comments

    用此方法修改,不需要重启系统,重新登录 ssh 即可。

    sudo vim /etc/sysconfig/network
    hostname NEWNAME
    
    Posted by ideawu at 2019-02-08 22:55:00
  • 2019-01-18

    Mac释放purgable空间

    Views: 2159 | No Comments

    # sudo tmutil listlocalsnapshots /

    com.apple.TimeMachine.2019-01-17-191904
    com.apple.TimeMachine.2019-01-18-134752
    com.apple.TimeMachine.2019-01-18-141455
    com.apple.TimeMachine.2019-01-18-143636

    # tmutil deletelocalsnapshots 2019-01-18-143636

    用第二条命令把列表中的一个一个删除。

    禁用 Mac TimeMachine 本地 snapshots:

    # sudo tmutil disable local

    Posted by ideawu at 2019-01-18 14:49:22
  • 2018-07-26

    港股实时行情系统设计

    Views: 14632 | 1 Comment

    做一下记录。

    ganggu

    做了一个可靠传输层,优点是层次分明,缺点是当丢包时价格更新不及时。可以优化成只重传不排序,Aggregator 区分是否是最新包,不是最新包则不更新最新价。

    对外提供推和拉接口,两种都有适用场景,不能只提供一种。Query Server 采用 HTTP 协议,Push Server 可以用 WebSocket 协议。

    把图改成 stack 形式。

    ganggu2

    Posted by ideawu at 2018-07-26 16:24:53
  • 2018-06-13

    炮打TCP – 关于一而再再而三的粘包拆包问题的大字报

    Views: 21532 | 21 Comments

    TCP 所谓的粘包和拆包问题,是技术圈里最奇葩的问题之一!

    一而再,再而三,就跟傻逼的中国球迷支持中国足球队一样,前赴后继。有时候同一个人多次在犯同一个错误,有时候是前脚一个犯错了后脚又来一个还犯同样的错。即使是最优秀的程序员,也会在这个问题上面栽跟头,思维甚至很难转过弯,很久才能意识到自己的错误。而低水平的程序员就更不用说了,很多人到死都没有理解这个错误并解决掉,只是逃掉了而已。

    我们固然可以认为原因是某些人学艺不精,但那么多的人,其中包括无数的优秀程序员在 TCP 粘包和拆包问题在犯错误,难道我们不能说,这其实是 TCP 自身的原因吗?

    在我看来,这个问题的出现,原因就在于 TCP 协议是有原罪的 -- 也就是 TCP 协议所谓的“流式”协议。所以,我要炮轰 TCP!

    Continue reading »

    Posted by ideawu at 2018-06-13 15:05:11
  • 2018-05-31

    PHP 获取周一,上个月的正确做法

    Views: 15463 | 3 Comments

    如果你理所当然地认为在 PHP 中获取周一,上周一,上个月,下个月这些时间能简单地用 strtotime() 函数来获取的话,那你就大错特错了!

    $now = strtotime('2018-01-31');
    echo date('Y-m-d', strtotime('+1 month', $now)) . "\n";
    

    输出的结果是:

    2018-03-03
    

    并不是期望的返回2月份的某一天,而返回了错误的3月份。为什么呢?这和 strtotime() 的实现原理有关:

    • 将月份加1,就变成了 2018-02-31
    • 因为2月没有31号,所以修正,从 2018-02-28 再往前加3天

    类似的,星期相关的代码也有问题。

    $now = strtotime('2018-05-20'); // 这一天是周日
    echo date('Y-m-d', strtotime('this monday', $now)) . "\n";
    echo date('Y-m-d', strtotime('+0 monday', $now)) . "\n";
    

    输出的结果是:

    2018-05-21
    2018-05-21
    

    +0 monday 和 +1 monday 的结果是一样的,并不能将这种格式理解为本周一和下周一(见评论),特别容易出错的是,你可能会错误地认为 +1 monday 是下周一,但事实不是。要得到下周N,或者下下周N,需要先求出本周一。本周一的求法如下:

    $now = strtotime('2018-05-20');
    $time = $now - 86400 * (date('N', $now) - 1);
    echo date('Y-m-d', $time) . "\n"; // 2018-05-14
    

    然后再用本周一加减N个7天,得出前后的周一,之后再根据周一求周N。还有,"+n monday" 和 "-n monday" 的结果和期望不同,其处理逻辑不一致。结合评论,+n xxx 是从当天(含)开始找,-n xxx 是从前一天开始找, +-0 按 +1 处理。

    一句话总结:PHP strtotime() 求上周,下周,上个月,下个月等,不能简单处理,需要特殊处理,都需要先求出本周一或者本周一号,再手动处理,而且星期的处理应该在求出本周一之后用时间戳整数运算。

    Posted by ideawu at 2018-05-31 19:09:33
  • 2018-05-21

    给Nginx设置默认主机

    Views: 15015 | No Comments

    给Nginx设置默认主机,让所有没有明确设置的Host的访问,都落到特定的配置下。

    1. 生成证书

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl.key -out /etc/nginx/ssl.crt
    

    2. 配置Nginx

    server {
    	listen       80 default_server;
    	listen       443 default_server;
    	server_name  _;
    
    	ssl_certificate     /etc/nginx/ssl.crt;
    	ssl_certificate_key /etc/nginx/ssl.key;
    
    	return 200;
    }
    
    Posted by ideawu at 2018-05-21 17:40:22
|<<<123456789>>>| 3/124 Pages, 741 Results.