分类 "每日一日" 的存档.

shell/bash if elif then fi 的用法

#!/bin/sh

a=10
b=20

if [ $a == $b ]
then
   echo "a is equal to b"
elif [ $a -gt $b ]
then
   echo "a is greater than b"
elif [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "None of the condition met"
fi

如何在PHP扩展中引用第三方的C++类库

还是360指数项目,需要用到Query归一化,但是公司内只有c++版本的,数据分析的同事用的都是那个二进制可执行文件来处理,但是我们前端又不可能跑system()方法吧,太不安全了,所以要来了源代码,打算封装成一个php扩展。
下边就讲一下我的封装过程。

首先,要到了Query归一化的C++版本源代码。

query归一化

query归一化

引用第三方的类库有两种方法,一种是静态引用,一种是动态引用,推荐使用静态引用,因为静态引用的情况下,会把类库打包到php的扩展.SO文件中,这样我们不必担心依赖关系,带着类库到处跑了。

Read more…

360指数项目概况总结

最近在搞360指数项目,挑战还是比较多的,现在项目已经基本ok了,拿出点时间来总结一下。

360指数搜索

360指数搜索

首先说说存储,需求的数据量比较大,又有一些弱关系的查询需求,首先放弃的就是mysql和redis,然后跟DBA沟通了下,使用mongoDB似乎是个不错的选择,在开动了之后才发现,数据量比预估的还要大,DBA的SSD资源不足以支持我们的项目,我们就自己搞了一台有4个2Tsas盘的机器,DBA在上边搞了24个分片,很轻易的,我们就把磁盘IO搞满了,数据写的速度慢的要死,在ssd上有1-2w/s的速度,在sas盘上,就只有几百了,数据量实在太大,需要录入一直到去年年初的指数数据,如果要想在上线前把数据录入完成,这样下去是不可能了。 随后我们又搞了两台给Hadoop集群使用的机器,每台机器有12块SCSI硬盘,看起来些写性能应该能翻个几番,但其实,部署完了之后,才发现,写入速度也才刚能达到1-2k,距离我们的需求还差的很远。
其实,我们要求的也只是数据的初始化速度要快一些,上线之后,这样的写性能也足以支持我们把增量数据录入,所以,我们还可以通过借一些ssd硬盘来加快写入速度,然后把数据对拷到scsi硬盘,这样,数据初始化的问题就可以解决了。本来已经从其它部门的同事那里借到了25块ssd,不过在跟他们进一步沟通之后,发现公司有可以提供线上服务的Hbase集群,虽然在存储选型初期也想过Hbase,由于当时对Hbase了解较少,也不知道有可以提供线上服务的集群,就这么错过了,与系统部的同事沟通后,我们数据量最大的两块数据,是可以迁移到Hbase使用的,这块数据占到我们总数据的90%,这部分数据通过Hbase解决后,其它数据再使用Mongodb就毫无压力了。最终,我们的最大数据部分的需求,通过合理使用Hbase的column_qualifier和version得以解决。而且单纯存入这批数据的map/reduce时间,仅仅使用了17分钟。
这里还要感谢一下DBA和系统部的同事,在好几个夜晚帮我们部署环境,解答疑问,使我们的项目得以顺利前进。

嗯,,,项目中还用到了一个自己封装的php扩展,单独写个文章介绍下吧。

linux下vim实现php远程调试环境搭建:vim DBGp+xdebug+xdebug helper实现方便的远程开启Debugging, profiling & tracing

首先是必需组件的安装。
有三个,vim的DBGp插件,php的xdebug扩展,Chrome浏览器的xdebug helper扩展。

一: vim 安装 dbgp client 插件
下载 DBGp client

$ cd ~/.vim/
$ wget http://www.vim.org/scripts/download_script.php?src_id=7285 -O debugger.zip
$ unzip debugger.zip

二:PHP安装xdebug扩展
具体安装方法就不讲了,网上例子很多.官方安装说明.
我把我的配置信息贴出来:
sudo vim /home/s/apps/php-5.2.6/etc/include/xdebug.ini

[Xdebug]
zend_extension="/home/s/apps/php-5.2.6/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.profiler_enable=0    ;开启profile
xdebug.profiler_enable_trigger=1    ;使用触发器开启profile
xdebug.profiler_output_dir="/home/s/logs/xdebugLog"
xdebug.auto_trace=0     ;开启trace
xdebug.trace_enable_trigger=1   ;使用触发器开启trace
xdebug.trace_output_dir="/home/s/logs/xdebugLog"
xdebug.cli_color=1
xdebug.collect_params=2
xdebug.collect_return=on

;remote debug   ;开启远程调试
xdebug.remote_enable=1
xdebug.remote_autostart=Off
xdebug.remote_port=9000	;远程端口,不是你web服务的端口,如果没有冲突,一般不用修改。

其中需要注意的是有注释的地方,不自动开启profile和trace,因为这样每次请求都会保存相应信息,会把磁盘爆掉的。把触发器打开,这样,只有在请求的时候带特定信息的时候,才会记录相应的性能信息。触发器的实现机制是:在请求时,如果GET/POST/COOKIE信息中包含特定的变量,会开启对应的debug,profile或trace,所以我们可以通过在web中访问页面时,添加对应的变量来开启相应的功能。如果每次都自己拼接这个,也挺麻烦,所以会介绍后边的xdebug helper的chrome扩展,想开启任何一个功能的时候,点击一下扩展就可以了。也就是说,这个扩展不是调试必须的,但是会让你感觉用起来很方便。

三:chrome扩展xdebug helper
地址:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
如果在 chrome://apps里搜索xdebug helper搜索不到,记得把你的语言改为 English.

xdebug-helper-introduction20140226142342

xdebug-helper-introduction20140226142342


xdebug helper两处配置要注意,
IDE Key要注意选择Other, 值为1,然后保存。
第二个是domain白名单,如果不希望每个页面都出调试的debug icon,就把开发时的域名填进来,比如localhost神马的。其实icon很小,也不太碍事,可以不用设置。

开始使用
如果不要debug调试,只是需要记录profile和trace信息,看一下性能问题,那么很简单,直接在chrome访问对应的url,会在url右侧看到一个xdebg helper 的小icon,点击后,选择 profile或trace,再刷新,就可以在预先设置的目录见到对应的文件了。
cachegrind* 是profile的文件,trace* 是trace的文件。
在windows下使用WinCacheGrind可以方便的查看profile的信息。

xdebug_helper_debug_profile_trace

xdebug_helper_debug_profile_trace

xdebug_output_file_trace_profile

xdebug_output_file_trace_profile

winCacheGrind_output

winCacheGrind_output

最后,是如何开启远程调试.
用vim编辑程序文件,在需要中断的地方使用:Bp命令打上断点。然后按F5执行监听。

这个时候,vim会提示 waiting for a new connection on port 9000 for 5 seconds… ,所以这个时候你需要在5s内向服务端发起带中断的请求,在前边的url地址,我们把xdebug helper的debug选择上,刷新页面,vim就会进入中断了。右侧有相关提示,我们就可以按GDB的方式逐步调试啦。如果没有安装xdebug helper,也无所谓,自己手动在url上拼接一个参数: &XDEBUG_SESSION_START=1 也可以开启远程调试的。

xdebug_remote_debug_how

xdebug_remote_debug_how

三星note2 n7100拍照 反的

启动相机后,上边一排设置图标全是反的,倒置的,拍照时屏幕显示是正确的,打开相册也都是颠倒的,很难受啊。。
把新装的一些app给干掉了,还是这个样子。

解决办法:
关机, 把SIM卡和电池都重新装下,呆两分钟, 再开机就好了。

jQuery,IE7,url,www,http,A Bug

今天遇到一个怪事,在一个页面下, 有一个区域,用来动态的显示一些数据,主要是显示一个url,会使用jQuery去动态的改变a标签的属性,来显示相关信息。
但是却发现,在IE7下,当改变了a标签的属性之后,凡是www开头的url,显示文本都会添加一个http://,让人费解。
后来发现是一个小bug,但是不确定是jQuery还是IE7的问题。
解决方案就在设定A标签的属性的顺序上。

//当顺序为
this.linkElem.html(data.dspurl).attr('href', data.link).attr('title', data.link);
//时,就会发生以上怪现象,但是如果改变其顺序
this.linkElem.attr('href', data.link).attr('title', data.link).text(data.dspurl);
//就会正常了。

Read more…

周鸿祎360年会演讲:未来两年无线互联网格局将定【2013年1月25日】

每次开年会,我都有一种冰火两重天的感觉,一方面年会是我们的团队和员工展示业绩、表现创意和才华、展现自我的机会,但另外一方面,我内心很自责,因为我本人的气质比较偏屌丝,然后又是一个典型的宅男,不像有的公司CEO会跳拉丁舞,女员工昏倒一大片。我自己也特别缺乏娱乐细胞,最近我带领几个技术宅男录了《天天向上》,录制过程中我明白了,没法跟别人比帅,也没法跟人家比拉丁舞,我们360还是老老实实地干好两件事儿,一个是创新,一个是做好产品,用这两件武器挑战巨头,实现屌丝的逆袭,这就是我们的气质。

在年会上我想讲几个360的关键词,今天我们面临着二次创业,没有这几个关键词是不行的。这几个关键词,第一是用户至上,第二是创新,第三是创业精神。

用户至上

用户至上就是用户利益至上,用户体验至上,这是360公司的安身立命之本。今天,用户不想去了解你的技术是否很牛,不想知道你的公司有什么伟大的梦想和理念,他们真正在意的是,你的产品给我解决什么问题,你的产品给我创造什么价值,在互联网产品越来越同质化的时候,谁能够从用户出发,把体验做到极致,而不是简单地把功能进行罗列,最后让用户在使用你的产品的过程中,能够感受到方便、愉悦、放心,谁就可以真正地赢得用户的信任。

用户至上这句话,说起来简单,做起来难。从战术层面来讲,做产品的时候要时刻从用户角度出发,而不是从自我出发。从战略层面来讲,用户至上是指企业要发自内心地尊重用户利益,不能为了赚大钱而损坏用户的利益。我们刚进入安全市场的时候,技术并不强,但是我们敢于横下一条心,不怕得罪同行,敢于查杀一切霸占用户电脑的流氓软件,于是我们赢得了用户的信任。360推出免费杀毒,敢于自宫,首先砍掉自己将近两亿的杀毒软件销售收入。如果没有这种精神,我们不可能从互联网安全上异军突起。这也给了我们一个很大的启示,那就是在商业利益和用户利益发生冲突的时候,商业利益必须要让位于用户利益。因为我相信互联网里存在着这样一个真理:互联网商业模式无论怎么千变万化,用户基础才是王道。脱离了用户基础,神马商业模式都是浮云。

我们推出360搜索so.com,面对垄断的搜索巨头,要取得突破,最有利的武器还是用户至上。今天的搜索巨头太爱钱了,它把一个搜索引擎做成了广告引擎。过去,在厕所里张贴的老军医、老中医包治百病的小广告,都转移到搜索巨头那里去了。竞价排名,谁给钱谁就放在最前面,成了虚假医疗广告和欺诈钓鱼网站传播的主渠道。搜索巨头最近在吹嘘自己的技术,但如没有用户至上的精神,技术不会给用户造福,反而会成为谋取不义之财的工具。

360的业务在不断扩大,很多产品也开始承担商业拓展的压力,但360的每一个员工,每一个产品团队要牢记一点:把用户至上真正体现在你们的商业策略和产品策略中。So.com不会只满足于10%的市场份额。我相信,只有市场竞争才能让企业竞相去讨好用户,创新才会出现,产业才会发展。如果是一家独大,即使CCTV一连批评它六天,它也依然是无动于衷。有人说,so.com的崛起仅仅证明渠道的力量,其实他们错了,我们最有力的武器不是浏览器,不是网址导航,而是我们要树立一个全新的价值主张,以及为此目标所要付出的努力和行动!

别人往牛奶里掺三聚氰胺,你不掺;别人往白酒里面加塑化剂,你不加;别人往餐桌上添地沟油,你不添;别人往搜索结果里塞虚假医疗广告,你不塞。你能坚持这样做下去,就能得到用户的信任和支持。我认为,判断一个公司的价值,不是看它的市值,不是看它的收入,而是看它是否给亿万用户、给社会、给行业创造了价值。360在安全上一分钱不赚,但因为有了360,全国超过4亿的用户上网很安全,搜索不上当,网购不受骗,用户信任360对安全的承诺,这就是360真正的价值。

  Read more…

4000012587 — 超市购物券过期-电话提醒

刚才收到了4000012587这个电话,360安全卫士没有报垃圾电话,不知道是干啥的,想着反正接了也不会亏啥,就接了。接了之后才发现,原来是由于一直忙,忘了还有当初参加移动的活动送的40块钱超市购物券还没使用,提醒月底到期,要去消费。这点做的还挺不错的。没有放着等我过期,还有电话提醒,,。赞一个。

擦,,,这是巧合么。

8月22,一人到我的站来留言,邀请我去参加一个关于他们联盟的关键字的百度的SEO,我拒绝了。。

百度seo

百度seo


然后,从8月23日开始,我的站从百度搜索来的量急剧下降。。。。几乎为0了。。。
本站从百度来的流量

本站从百度来的流量


擦嘞,,,这是巧合么。。。
Read more…

冒个泡

单纯的冒个泡,告诉大家,我还健在。。。
只不过由于最近在工作上有点变动,所以最近没咋更新了。现在又开始工作了,以后有什么心得,会总结下来跟大家分享的。