May 26

centos 安装 daemontools 不指定

felix021 @ 2017-5-26 00:10 [杂碎] 评论(0) , 引用(0) , 阅读(819) | Via 本站原创
09年在B公司实习的时候从运维同学偷师知道了daemontools这个package,有个supervise命令特别好用(很符合B公司当时宣传的“简单可依赖”),以前用ubuntu/debian,apt-get直接就装上了。现在线上用的是centos,需要自己编译安装,稍微麻烦点。具体的过程在官网 http://cr.yp.to/daemontools/install.html 说得还是比较详细了,不过编译的时候可能会报错
引用
./load envdir unix.a byte.a
/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o
/lib64/libc.so.6: could not read symbols: Bad value
collect2: error: ld returned 1 exit status

搜了一下,解决方案也很简单:
引用
The fix is quite simple: explicitly add #include <errno.h> to the offending file and then recompile.

按照说明,在 src/error.h 里面添加了这句再编译就通过了。
Jan 11

解决ssh延迟 不指定

felix021 @ 2016-1-11 17:29 [杂碎] 评论(0) , 引用(0) , 阅读(2015) | Via 本站原创
不知道为什么这么多年都没遇到啥问题,到了钱厂以后接连遇到3种不同的ssh延迟,觉得有必要记一下了:

1. GSSAPIAuthentication

ssh -vv someserver 可以看到如下类似字样的:
引用
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found


在 ~/.ssh/config(也可以是 /etc/ssh/ssh_config)加上
引用
Host *
  GSSAPIAuthentication no
  GSSAPIKeyExchange no


2. AddressFamily

ssh -vv 在这里卡住的:
引用
debug2: ssh_connect: needpriv 0

加上
引用
Host *
  AddressFamily inet


3. UseDNS

在server端卡住的(忘了log是啥了),在server的 /etc/ssh/sshd_config 加上
引用
UseDNS no



ssh的坑真多,感觉应该抽空整理一个全集,包括之前记录过的 ServerAliveCountMax/ClientAliveCountMax,还有诸如GatewayPorts之类的。

参考:
Fixing SSH login long delay
debug2: ssh_connect: needpriv 0 stuck - Fix.

Dec 4

PHP的除法 不指定

felix021 @ 2015-12-4 20:49 [杂碎] 评论(2) , 引用(0) , 阅读(1576) | Via 本站原创
今天要实现一个简单的功能:按需给出长度为n的空格串。

如果是用Python,我就直接用这一句来解决了,既简单又直观:
' ' * n

可惜PHP就是不好使,只好写一个函数。最简单的办法当然是一个循环,但是看起来太蠢了,效率也低(虽然可以用一个数组缓存来解决),看起来也不帅。所以试着写了一个递归的版本(其实也应该要用数组来缓存提高效率,但是以下代码省略了相关逻辑,看起来清晰一点):
function spaces($n)
{
    if ($n == 1)
        return ' ';
    return spaces($n / 2) . spaces($n - $n / 2);
}

看起来酷多了对不对?

不对……因为一调用就递归到死啊魂淡。什么破玩意,连这种代码也不能一次跑对,简直让我对自己的能力产生了怀疑。

好吧,那就调试一下。
function spaces($n)
{
    if ($n == 1)
        return ' ';
    printf("%d = %d + %d", $n, $n / 2, $n - $n / 2);
    fgetc(STDIN);
    return spaces($n / 2) . spaces($n - $n / 2);
}


printf竟然输出了"3 = 1 + 1",这尼玛我都要开始怀疑人生了,什么鬼!

经过各种折腾,最后不知为什么放弃治疗,用了大概这样的代码(说真的,我在运行之前都觉得这是徒劳):
function spaces($n)
{
    if ($n == 1)
        return ' ';
    var_dump($n / 2); var_dump($n - $n / 2);
    fgetc(STDIN);
    return spaces($n / 2) . spaces($n - $n / 2);
}


输出:
引用
float(1.5)
float(1.5)


卧槽……

卧槽……

卧槽……

重说三。

当时已经接近崩溃了,于是到Google去试图寻找一点安慰,“php int division get float”返回给我的第一条,竟然是一个StackoverFlow的问题:How do I get a float value when dividing two integers? (PHP),提问者表示他用 12 / 13 得到的结果是 1 。SF的大神们纷纷出招,甚至还有人回答:
引用
Just use $value = (float)($x/$y);

我看着左边的-1,深藏功与名。

然后继续解决问题。我想知道为什么我这儿两个整数一除就变成了浮点数,然而试了几个不同的环境,都是一样的,看起来倒了这血霉的似乎不是我一个。

查来查去也没查出什么来,于是我鼓起勇气、抛弃羞耻心,找到了一个我觉得我这辈子都不会需要打开的页面:

PHP:算术运算符 - http://php.net/manual/zh/language.operators.arithmetic.php

这个页面标题里的第一句话是“还记得学校里学到的基本数学知识吗?就和它们一样。”。

接下来是一个表格,列出了负号、加、减、乘、除、取余的说明。

表格后面还跟了一句话:

除法运算符总是返回浮点数。

除法运算符总是返回浮点数。

除法运算符总是返回浮点数。

尼玛……这说的学校居然TMD是小学啊……我了个大槽……谁家小学还教 “% 取余” 符号的!!谁家小学教的除法返回浮点数还带余数的!!

然而我还是不太相信,我用了八九年的PHP,我竟然不知道它没有整数除法?

翻,翻源码。

在 php5-src/Zend/zend_vm_def.h 可以看到 除法操作符(ZEND_DIV )的Handler,调用的是 fast_div_function ,这个函数里面有一段被注释掉的老的实现,目前实际调用的是 div_function ,实际上都是一样的,截取后者的一部分:
ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
{
    zval op1_copy, op2_copy;
    int converted = 0;

    while (1) {
        switch (TYPE_PAIR(Z_TYPE_P(op1), Z_TYPE_P(op2))) {
            case TYPE_PAIR(IS_LONG, IS_LONG):
                if (Z_LVAL_P(op2) == 0) {
                    zend_error(E_WARNING, "Division by zero");
                    ZVAL_BOOL(result, 0);
                    return FAILURE;        /* division by zero */
                } else if (Z_LVAL_P(op2) == -1 && Z_LVAL_P(op1) == LONG_MIN) {
                    /* Prevent overflow error/crash */
                    ZVAL_DOUBLE(result, (double) LONG_MIN / -1);
                    return SUCCESS;
                }
                if (Z_LVAL_P(op1) % Z_LVAL_P(op2) == 0) { /* integer */
                    ZVAL_LONG(result, Z_LVAL_P(op1) / Z_LVAL_P(op2));
                } else {
                    ZVAL_DOUBLE(result, ((double) Z_LVAL_P(op1)) / Z_LVAL_P(op2));
                }
                return SUCCESS;
    ....


真的什么都不用说了。

EDIT UPDATE: 那个stackoverflow的问题,其实有人在问题的评论里指出了结果本来就是浮点数,不知道提问者怎么脑抽的。

EDIT UPDATE 2: PHP 7新增了一个 intdiv 函数,还真是非常PHP-Style的函数名和解决方法,看着就令人蛋疼。
Nov 21

免费的代价 不指定

felix021 @ 2015-11-21 21:24 [杂碎] 评论(0) , 引用(0) , 阅读(1211) | Via 本站原创
手头一个T03和Dell Venue 8 Pro,用的都是Intel BayTrail架构1.33GHz(Turbo 1.8GHz)级别的处理器(Z3735F/Z3740D),日常使用问题不大,但是大型任务比较困难,印象中MS Office比较臃肿沉重,所以给装了看起来好像很轻巧的(而且还是免费的)WPS Office。

但是发现这货这几年变化太大了,集成了所谓的“云服务”,以及各种广告、新闻插件,烦不胜烦,于是把wps的wtoolex目录(内含updatesef, wpsupdate, wpsnotify, desktoptips等无良exe)给删掉换成一个只有System用户有权限的空文件,消停了一段时间。

但是这还没完,今天突然发现桌面上出现了一个“爱淘宝”图标,链到

C:\Users\felix021\AppData\Roaming\software\ntatb\AlimamaAgent.exe

ntatb目录下还有个index.html,里面写着一句
引用
meta name="author" content="kingsoft-WPS"/


想起早前看到的一句话:“如果商家为你提供免费服务,那你就不是他们的客户,而是他们的产品"。

简而言之就是,你被卖了。

知乎有一个问题讨论得很有意思,推荐阅读:

为什么说「免费的其实是最贵的」? http://www.zhihu.com/question/22084816
Oct 29

yii framework cache 深坑 不指定

felix021 @ 2015-10-29 18:51 [杂碎] 评论(2) , 引用(0) , 阅读(1527) | Via 本站原创
用框架的cache时发现,command和controller设置的cache互相之间居然是独立的,对于CFileCache,通过grep可以在 app/runtime/cache 下面看到,相同的key在两边set以后,会存在两个不同的文件里面:显然是在hash得到cache key的时候用了一个额外的串。

没办法,只能去翻Yii的源码,在 framework/cache/CCache.php 可以看到get/set方法是调用了 generateUniqueKey 来生成cache key;该方法用到的keyPrefix 是取值于 "Yii::app()->getId()" 。追过去,在 framework/base/CApplication.php 里面可以看到,这个getId()的实现是"crc32($this->getBasePath().$this->name)"。

于是去看了一下,果然 config 下面 main.php 和 console.php 配置的 name 不同,所以框架把它们认为是两个project。改成一样,就解决了。

但是……

还有一个隐藏得更深的坑:

缓存文件(例如runtime/cache/04/51/045113ce863440795dab03b29a4ec384.bin)里的内容是这样的:
引用
a:2:{i:0;s:26:"2015-10-29 18:28:03command";i:1;N;}


也就是说,这个缓存在遇到两个md5相同的key时,无法做出区分!

这个只能看命了。

UPDATE:
缓存冲突问题,虽然不能彻底解决,但是可以通过简单的包装,把原先set的value换成 {'key': ..., 'value': value}, 然后在get的时候检查一下是否匹配,不匹配的话简单丢弃,这样至少不会遇到莫名其妙的BUG。
Oct 9

"挪窝"的N次方 不指定

felix021 @ 2014-10-9 13:48 [杂碎] 评论(4) , 引用(0) , 阅读(3833) | Via 本站原创
博客又搬家了,主要是因为mk802用了两年,好像有点老了,让人有点不太放心,所以还是决定花点钱买点省心。

这次终于还是搬到了DigitalOcean,5$/month,512M RAM + 20G SSD,性价比很高,而且可以选择Singapore的机房,ping值也很让我满意,SSH上去几乎感觉不到什么延迟,各种倒腾以后算是安定下来了,就这样吧。

如果你也想用DigitalOcean,可以用我的Referrer链接来注册:https://www.digitalocean.com/?refcode=1a51e0fbce00 ,这样在你支付25$你的帐号里就会打入10$,我的帐号上也会收到25$,这个项目还是挺给力的。

p.s. 如下面@whusnoopy同学所述,Github的Student Pack有100$的Digital Ocrean Promo Code,只要有edu邮箱就可以注册,快来薅(hāo)羊毛吧。
Jul 2

DIY一个虚拟现实设备 不指定

felix021 @ 2014-7-2 16:30 [杂碎] 评论(0) , 引用(0) , 阅读(3243) | Via 本站原创
UPDATE@9.24 在淘宝上弄了个Google Cardboard的国内山寨版,效果不是很好,一个是焦距调得不好,我得带上眼镜才能看,另一个是瞳距好像不太对,看着容易晕。还是自己DIY的用着舒服啊。等暴风魔镜正式版出来以后可以再弄个来试试看。

Oculus Rift DK2自从3月发布以来,大家都翘首以待,今天终于确定了,7月发货1w台,比预期的少,后下订单的估计有得等了。想起去年ChinaJoy在Intel展区体验了一下1代的Oculus Rift,演示程序是RiftCoaster,就是那个经典的过山车,回想起来还是很带感。这么火爆的设备,估计在今年的ChinaJoy也可以体验到,真是令人相当期待。在这等待的时间里,还是可以做点其他事情的,比如DIY一个属于自己的虚拟现实设备。

网上早就在流传把诸如小米3之类的手机改造成VR设备,之前也有了解过,看起来貌似很复杂的样子;直到前几天GOOGLE I/O大会,发布了一个Cardboard,然后到Oculus Rift贴吧里看了一下,发现有些网友的自制设备可寒酸了,就是拿了个纸盒子打孔,固定手机和透镜就行,才意识到其实自己DIY一个也很简单的,手机可以作为显示屏,自己手头有瓦楞纸(就是快递用纸箱的那种纸皮)、宽胶带、小刀、剪刀、尺子,唯一缺少的材料就是一对合适的凸透镜——求助万能的淘宝就行了。
Nov 12

我想写篇日志 不指定

felix021 @ 2013-11-12 15:21 [杂碎] 评论(4) , 引用(0) , 阅读(9780) | Via 本站原创
从高考完开始,每月保持至少一篇的节奏,终于还是在今年被打破了。幸好3月写得多,我还可以说今年平均每月还有一篇;但是明年恐怕就没这底气了。

其实并不是不想写博客了,只是因为无从下手敲键盘。工作上没什么值得写的事情。没有什么困难的东西,有点新意的也就是象征性地接触了一下以前想搞搞但是一直动力不足的hadoop什么的,安装说明什么的还是不写比较好...

八月以来,拾起三月看断的SICP,陆陆续续地看到了第四章,连自己都有点意外。虽然从书中学到了不少东西,但似乎也没有什么适合总结写下来的,也许是因为还没“悟道”吧,只能先把代码提交到 GitHub ,期望着哪天看完了能写点什么。

这几个月生活的主要亮点之一是买了Kindle Paperwhite以后,看了好多书。历史、哲学、金融、文学,都有涉猎,挺有意思的。最近把《量子物理史话》又看了一遍,然后开始看《明朝那些事儿》。不仅买了很多电子书,还莫名其妙心血来潮买了好多纸质书,其中有几块大部头,比如《30天自制操作系统》、《编译原理》、《什么是数学》……感觉有很多只能拿来垫显示器了,有点囧,尽量看吧。不管怎么说,买了kpw以后增加了自己的阅读量,挺好的,因此在这里顺便强烈推荐一下。

最后征集一下早餐的问题。在吃了两个月华夫饼、接着又泡了两个月永和豆浆粉以后,想换点什么新的、适合在办公室搞定的东西,求推荐……

p.s. 再顺便推荐几本好书吧,Kindle电子书 //亚马逊有Kindle for PC/Mac/iOS/Android

《上帝掷骰子吗:量子物理史话》 ¥2.99

《时间的形状:相对论史话》 ¥5.00

哲学家们都干了些什么? ¥0.99

搞懂金融的第一本书 ¥3.99

重说中国近代史 ¥1.60

明朝那些事儿(1-7套装) ¥15.00
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]