54chen Twitter Memo 2011-01-09

    明日黄道吉日,小米全员踏步进入朝阳区,新办公区,新气象,新挑战。
# 智者说:咱兄弟几个天天呆在一起时间比和自己老婆在一起的时间还要多得多,有事情一定不要急,慢慢来,要稳住。 # [nginx]如何在access log中记录post请求的参数 http://goo.gl/fb/bao7J # 涛哥来到我工位上看望,看到我在用eclipse写java,涛哥盯着那一行一行的代码,亲切的同我拉起了家常,“一天能写多少行代码,能不能承受得起?”我满脸笑容地说:“一天能写七十七行,承受得起。”涛哥露出了欣慰的笑容。 # 年底有跳巢欲的精英,欢迎来简历让我推荐加盟小米科技,所需:敢于直面各式技术权威~javaphp不惧或精通其一;待遇:和老板谈;职位:我们都是开发攻城湿chenzhen at xiaomi.com # 在家准备上线中,忙碌了很久,这回应该稳定了。 # http://news.163.com/10/1231/05/6P790TRB00014AED.html 发发看元旦回来风声还紧不。 # 元旦归来,RT 据说在每一个互联网公司里,都有一个扫地的老太太。很偶然地,当她经过一个程序员的身边,扫一眼屏幕上的代码,会低声提醒对方说:小心,栈溢出了。 # 54chen Twitter memo 2011-01-02 http://goo.gl/fb/WEGVc # 54chen Twitter memo 2011-01-02 http://goo.gl/fb/Cwyc7 #

[Nginx]如何在access Log中记录post请求的参数

nginx log post data

移动互联网行业开发过程中,服务端经常会需要检查是否收到请求,收到什么样的请求,最简单的办法就是看nginx的access log,常见的nginx配置中access log一般都只有GET请求的参数,而POST请求的参数却不行。 http://wiki.nginx.org/NginxHttpCoreModule#.24request_body

$request_body

This variable(0.7.58+) contains the body of the request. The significance of this variable appears in locations with directives proxy_pass or fastcgi_pass.

正如上文件所示,只需要使用$request_body即可打出post的数据,在现存的server段加上下面的设置即可:

log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
access_log logs/test.access.log access;

54chen Twitter Memo 2011-01-02

    各位还在加班和的大哥大姐老表嫂嫂,明年见,元旦快乐!
# AOP的思想非常适合创业公司,只需要一个非常熟悉AOP FrameWork的人,其他人就可以简单地写平常的JAVA代码,实现很庞大的标准工程。 # 【我最羡慕的生活就是CCTV播的那种:北京月房租77元,工资年增长11.2%,大学生就业率99.13%,官员不分昼夜学习八荣八耻,大学生食堂就餐平均每顿两三元。我有一个梦想,就是能TMD永远活在新闻联播里。】——热心网友 # 当老板的同志们,在发现商业对手在超越自己的时候,不要失风度。 # 简单的技术可以解决好多事情,万能的perl # org.apache.commons.logging.LogFactory要比直接用log4j的类要好,帮你搞了sysout与log4j的转化。 # RT jack: 表明不再是创业公司:员工因薪水而非梦想加盟,员工开始盘算各自的利益,成员没有明确的目标,高层开始被称为X总,9点前21点后没有人专心工作,为流程而不是为达成目标工作,Deadline总无法兑现无人真正在乎,员工出现派系、小圈子、秘密和针对个别人的妖魔化 # ubuntu10.04 下通过usb在G7(desire)上真机调试android程序的设置 http://goo.gl/fb/iRhEu # 54chen Twitter memo 2010-12-26 http://goo.gl/fb/5cIbY #

ubuntu10.04 下通过usb在G7(desire)上真机调试android程序的设置

android

本文为android开发入门系列,以下是各节传送门:
android 开发入门 http://www.54chen.com/_linux_/androiddev.html android开发入门2:概念建立 http://www.54chen.com/_linux_/androiddev2.html

一、工具介绍
android-sdk-linux_x86/tools下有一堆工具,今天要用的是:Android Debug Bridge,在android开发过程中,这个工具是使用得最多的。(缩写adb,有点像gcc的gdb似的)

adb start-server - 实际上它会启动一个 adb fork-server server
adb kill-server - kill掉
adb devices - 列出所有的设备

二、设置usb权限
因为ubuntu这样的系统都是默认以非root身份在运行的,要使用usb调试,需要sudo支持。

$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 413c:2106 Dell Computer Corp.
Bus 002 Device 002: ID 0461:4d81 Primax Electronics, Ltd
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 010: ID 0bb4:0c87 High Tech Computer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
列表中,Bus 001 Device 010: ID 0bb4:0c87 High Tech Computer Corp. 这一行为htc手机的usb使用端口,记录一下,id为0bb4(基于上所有的htc都是这个ID)。

$sudo vim /etc/udev/rules.d/70-android.rules

加入以下内容:

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

运行命令,重启udev:

$sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$sudo service udev restart

三、重新启动adb server
(很重要)拔掉usb重新连上再执行:

sudo ./adb kill-server
./adb devices
./adb root (这一步很重要 感谢小米科技小军献策)

四、使用usb进行调试
eclispe>run as>android application 选择真实机器。

54chen Twitter Memo 2010-12-26

    井岗山市人才多。从革命开始就是。
# 凤凰传奇和Hao123一样,有一种特质,导致在大城市办公室的白领们还在嘲笑他们的时候,他们已经红遍大江南北。 # 好记性对一个好程序员很重要。 # 介绍一个基于NIO的异步框架Cindy - Java # iphone正式版的米聊上线了,支持消息push,http://itunes.apple.com/us/app/id410565101?mt=8 # RT 一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些面包,如果有鸡蛋的话,买6个回来。20分钟后,这个丈夫买了6个面包回来,他的妻子大吃一惊:你为什么买了6个面包?! 程序员丈夫回答:因为他们有鸡蛋。 # http://www.miliao.com 买来的域名,前身似乎是个有颜色的聊天的网站,朋友帮试试你的防火墙有没有更新。 # [java example]你还在使用while(true) Thread.sleep吗? http://goo.gl/fb/UUdvZ # [java example]你还在使用while(true) Thread.sleep吗? http://goo.gl/fb/kgK8X # 秘闻惊闻:smthBBS的zixia大侠也在用我们的米聊,哈哈。 # 外媒:这些伙计绝非那些普通的开发者 # 贡献两个抓取、模拟登录里常用到搞定js加密的东西:http://www.javaeye.com/topic/643078 http://www.javaeye.com/topic/644353 # 猜猜是谁:打乒乓球中搞互联网搞得最好的,搞互联网中打乒乓球打得最好的。 # 要想在疼讯微博上用api发微博,需要:应用已通过来源字段审核,且用户Oauth授权数 1000 以上,最近连续5天APP全部用户API请求次数均超过10000次/日以上 # 疼讯微博终于耐不住寂寞了,开放了写的api,实用性很烂。 # 每个不给页面加favicon的程序员,上辈子都是折翼的天使。 # 54chen Twitter memo 2010-12-19 http://goo.gl/fb/acFnk #

[Java Example]你还在使用while(true) Thread.sleep吗?

java thread

做各种SERVICE的时候,常常会需要一个程序重复定时地执行,基本上常见的山寨写法都是如下所示:

while (true) {
System.out.println("yours code");

Thread.sleep(3000);
}

但实际这样的写法可控性很低,JDK的java.util.concurrent中提供了大量的方法去控制一段代码定时执行,标准的改写上面的代码如下:

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleWithFixedDelay(new Runner(), 0, 3, TimeUnit.SECONDS);
public class Runner implements Runnable {
public void run() {
System.out.println("yours code");
}
}

scheduler下有很多的方法,达到的目的有:定时执行,执行完后一段时间再次执行;而Executors更有更多控制线程的方法,平时不可忽视。

54chen Twitter Memo 2010-12-19

    gdata不放到nexus中央库,搞出来一堆专门搞gdata mvn化的项目,老外真蛋疼。
# 昨天又有一组兄弟升级程序连续通宵上班爆走至今天,哥们悠着点。 # 把一个叫做“beanstalk”的MQ代码翻了一遍,全部中文注释了一遍观后感。 # event_dispatch() 表示进入 event loop,Queue 里面的任何一个 File Description 发生事件的时候就会进入 callback function 执行,libevent学习残记。 # 把手机当无线网卡-andriod usb0 ssh tunnle http://goo.gl/fb/hFjQS # linux有大量的工具可以用来做统计用:gawk '{print $1}' 选择第几列;sort排一下序;uniq -c合并相同项合计;sort -nr 按数值比较,倒序;head 取前多少行;tail 取后多少行。 # 百度搜“神秘离奇 创业公司”,哈哈,雷得一慎一慎的。 # 未知、神秘、离奇、创业公司,哇,这个形容词形容@小米科技 太cool了。 # 和优秀的人接触前沿:大学里,一位技术伙伴,六年前就研究im~sns~当时腾讯没有这么疼,sns国内还没有出名的。此哥大学没毕业,现在移民加拿大了。 # @小米科技,厨房可以看见13号线飞奔而去,犹如这群正在为理想飞驰的牛人 # 为什么各种bug系统都难用得要死,因为写这些bug系统的人,都不是真正用的人。打算召集哥学社的同志们写一个互联网专用的开源bug系统。 # 54chen Twitter memo 2010-12-12 http://goo.gl/fb/XwaCf #

把手机当无线网卡-andriod Usb0 Ssh Tunnle

小公司人员增长快,随着台式机日益加多,网速越来越慢,而wifi使用者却还不慢。于是就有了本文。
android手机通过usb共享网络很简单,只需要连上usb线后在手机设置里找到共享手机网络,打开即可。但是本文并非教如何连接usb线的。 ssh tunnel 图1 usb绑定设置pc共享android手机上网
ubuntu共享上网后,会发现连接不了线上的ssh,会等半天,报出no ruote。猜测是因为andriod手机的安全设置所致。其实本文重点讲如何ssh的。
先用android下载一个支持ssh的工具:connectbot。

打开软件,同时打开ubuntu,执行下面的语句安装sshd服务:
apt-get install openSSL
然后启动sshd服务。
在connectbot中填写ubuntu机器ip,输入密码,ssh到ubuntu机器。 connectbot 图2 用connectBot登录pc

这时按下菜单键,选择端口转发。选远端端口,填写2222,转发到192.168.1.1:22,确定以后,这个转发就建立了。 connectbot端口转发 图3 connectBot端口转发
然后到ubuntu上执行ssh 127.0.0.1 -p2222 ssh tunnel 图4 我建立的端口转发
回车,输入192.168.1.1的密码,大功告成,成功利用端口转发打通了andriod手机共享usb0共享上网时的ssh。
关于ssh tunnel,详细见:http://www.54chen.com/_linux_/the-temporary-break-with-the-ssh-tunnel-restriction-cross-room.html

54chen Twitter Memo 2010-12-12

    寻了一圈各种机器人自动回复的技术,最后我决定用mysql的select like,这是一个艰难的决定。
# 消息称千橡互动淘米网已启动美国IPO计划 http://tech.163.com/10/1210/16/6NIA532K000915BF.html # 找到你了: erl -eval 'mnesia:info().' -noshell -s init stop # http://mi.xiaomi.com/来自@小米科技 的又一力作,米聊,智能机时代的沟通方式。欢迎朋友们加我米聊号:110005。 # 在敲下每一行代码的同时,我都在思考如何让它更加清晰,以致我不会被后来的维护者骂爹。 # 6年前有幸在大学里自己和同学利用jabber搞的IM有着一万多的用户,xmpp的影响至今还在,甚慰。 # Immutable变量, 无共享内存,Process交换数据通过消息传递实现等,这些特性在多核CPU下具有先天优势 # @小米,来自微软Bing的pascal大侠有句话:开源技术只用 1 出问题搞得定的 2 大公司在用的;这是一位智者的感言,供创业者参考。 # http://www.54chen.com/architecture/ganglia-nagios-install.html ganglia安装手记,饭间功夫发一下,全文完成于公交车上android手机@小米便签软件。 # 企业服务器监控及报警配置打造(ganglia and nagios)-part 1 http://goo.gl/fb/OuFoU # kill -15 $(ps -ef|grep Process_name|awk ' { print $2 } ') # 各位大牛,讨论一下,svn里是不是应该保留.project\.bulild\.setting文件?理由? # 小米科技工作第三周:java新项目X2,php老项目X1,bash新项目X2,erlang项目X0.1。#创业公司要高产# # 通过android wifi打通逆向通道ssh上网,这是一件多么值得写一篇博客记录一下的事情哇。 # 54chen Twitter memo 2010-12-05 http://goo.gl/fb/sM0qa #

企业服务器监控及报警配置打造(ganglia and Nagios)-part 1

ganglia 54chen nagios

系统简介:
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。
我(54chen)的服务器操作系统:centos 5.5 x86_64 (六十四位centOS 5.5) 第一步,修改yum源 # cd /etc/yum.repos.d/
#vim dag.repo
写出如下信息:
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
enabled=1
第二步,通过yum安装所有依赖 yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-develyum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-devel 第三步,通过yum安装rrdtool(画图的数据存储) yum install -y rrdtool perl-rrdtool rrdtool-develyum install -y rrdtool perl-rrdtool rrdtool-devel

第四步,通过rpm安装libconfuse依赖

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm
第五步,下载源码安装
wget http://cdnetworks-kr-1.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.1.7/ganglia-3.1.7.tar.gz
tar zxvf ganglia-3.1.7.tar.gz
cd ganglia-3.1.7
./configure --with-gmetad --sysconfdir=/etc/ganglia
make
make install
第六步,安装 nginx php环境 略去(54chen的老文章里有多个安装nginx-php的文章,自查之。右侧有搜索框)
cp -a web/* /var/www/html/ganglia/
cp gmetad/gmetad.init /etc/init.d/gmetad
cp gmond/gmond.init /etc/init.d/gmond
gmond -t | tee /etc/ganglia/gmond.conf
mkdir -p /var/lib/ganglia/rrds
chown nobody:nobody /var/lib/ganglia/rrds
第七步,启动gmond gmetad
/etc/init.d/gmond start
/etc/init.d/gmetad start
Q&A 1.gmetad错误处理
检查 /var/lib/ganglia/rrds 是否建立 以及权限是不是正确

2.配置名称等不生效的原因
gmetad/gmond restart可能会不起作用,直接kill.

3.gmond起不来的原因
udp设置有问题,多播模式,请修改那个默认的ip地址(那是一个不存在的地址,用来广播的,gmeta会从广播里抓出来分析),同一组cluster的机器使用同一个广播ip地址

4.节点安装gmond(客户端):不再需要rrdtool,不需要gmetad支持

rpm -ivh libconfuse-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm

yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-develyum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-devel

./configure --prefix=/opt/soft/ganglia --sysconfdir=/opt/soft/ganglia/etc/
make
make install

/opt/soft/ganglia/sbin/gmond --default_config > /opt/soft/ganglia/etc/gmond.conf 修改cluster_name和多播的那个莫名其妙的ip地址启动即可。

5.安装完成后为什么都正常只有空图却没有显示各节点的数据?
我(54chen)被这个问题搞了半天,最后才发现是因为各节点的服务器时间有问题,
* */2 * * * ntpdate time.windows.com放到crontab里,或者是直接执行一下ntpdate time.windows.com。

6.为什么各个cluster的服务器互相乱窜?
一定要注意,不同的cluster多播到各个不同的ip去,比如ABCD是一组,那全到239.2.11.71,而FGH是另一组,那就全到239.2.11.72。

7.为什么gmond内外网ip地址乱串?
在我的集群中,eth0 是我的系统的公共 IP 地址。但是,监视服务器将通过 eth1 与私有集群网络中的节点进行通信。我需要确保 Ganglia 使用的多点传送将与 eth1 绑定在一起。这可以通过创建 /etc/sysconfig/network-scripts/route-eth1 文件来完成。添加 239.2.11.71 dev eth1 内容。
然后您可以使用 service network restart 重新启动网络并确保路由器显示此 IP 通过 eth1。注:您应当使用 239.2.11.71,因为这是 ganglia 的默认多点传送通道。如果使用其他通道或者增加更多通道,请更改它。

8.为什么gmond里输出的xml里什么关键的数据也没有?
注意看iptables,执行一下iptables -F试试。
下一part讲述nagios搭配ganglia的报警设置。