2012年10月25日星期四

小记:解决mysql机器上的单CPU过高

最近某一mysql机器有告警,显示单CPU占用常常超过90%。
奇怪的是,机器上4个CPU,仅CPU 0的占用较高,而其他三个CPU很闲。

继续检查发现,CPU 0的占用高,主要都花在iowait上。
可是,即便是IO高,也应该每个CPU的IOWAIT都高,毕竟mysqld是一个多线程服务器。

为了验证这点,输入:top,按f,按j,按空格,按shift+h——查看每个线程的执行情况,并显示该线程正在哪个CPU上执行。

观察发现,mysqld的线程几乎都在cpu 0上执行,难怪CPU 0的占用高。
于是简单地写个脚本来分担CPU 0的压力:

vi set_mysqld_cpu_affinity.sh
#!/bin/bash


v_list=`ps -Lf -C mysqld h| awk '{print $4}'`
for p in $v_list
do
        taskset -cp 1,2,3 $p
done

执行后CPU的IO WAIT都变得比较平均了。

2012年10月10日星期三

想要家庭版的照片云服务软件

有没有这种一种家庭版的照片云服务软件,支持酱紫的功能:
1. 各种终端可以自动通过WIFI同步最新拍照的照片;
2.自动根据拍照时间和地理位置建立索引;
3. 自动识别横竖;
4. 去重,始终不会存储同样的图片;
    如果A图是B图的一个子集,则A图只需要很小的存储空间即可
5. 海量存储;
6.自动生成各种规格的缩略图,可快速浏览大量的图片;智能识别终端,总是输出合适的大小。
7. 按照色彩搜索:选择某种简单的色调,或者模糊定义色彩丰富和色彩单调
8. 相似照片归类:根据16*16的缩略图的二进制相似算法来对图片进行聚类
9. 比较基本的功能:文字备注,按备注文字搜索
10. 进一步:语音备注,语音识别
11. 涂鸦:在触摸屏上对照片写写画画能保存下来,而且能识别是哪个家庭成员的涂鸦
12. 人脸识别,按照人脸聚类
13. 先对图片高斯模糊,提取特征,然后按照特征进行聚类。
    比如有山的图片和有海的图片会归类到一起。
14. 照片中的文本识别:照片中出现字母或数字,能够被搜索出来。

===========================================
2012-10-15续:
配合家庭使用的文件存储服务器,家庭版的照片处理云服务会大有可为,这可能是一个比较热门的细分市场:
1. 手机、数码相机、数码摄像机等设备的价格降低和兴起,必然使得一个家庭在日积月累中产生大量的照片和视频;
2. 由于中国的网络带宽的限制,不太可能把那么多的照片都上传到网络上共享,且用户还担心隐私的问题;
3. 如何快速找到想要的照片?独特的照片搜索将会让用户更加离不开家庭版的云服务。

2012年9月14日星期五

python PIL: 图片的倒影效果的简单实现

具体的算法就是把图片的每一行对称翻转,然后将透明度从低到高逐行设置。
见代码:


import sys,os
from PIL import Image

if __name__=='__main__':
    argc = len(sys.argv)
    if argc<3:
        print 'usage:%s <file> <dest>'%sys.argv[0]
        sys.exit(-1)
    im = Image.open(sys.argv[1]).convert('RGBA')
    arr = []
    (w,h) = im.size
    x = 0
    y = 0
    index = 0
    arr_row = []
    for pixel in im.getdata():
        pixel = list(pixel)
        x = index % w
        y = index / w
        index += 1
        pixel[3] = int(256.0*0.2*(float(y)/float(h)))
        arr_row.append(tuple(pixel))
        if index%w==0 and index>0:
            arr = arr_row + arr
            arr_row = []
    #
    im1 = Image.new('RGBA', (w,h))
    im1.putdata(arr)
    im1.save(sys.argv[2])

原图和效果见下面:


复习:多阶hash表

关于多阶hash表的具体代码实现,请移步到:《使用共享内存的多级哈希表的一种实现》http://webcache.googleusercontent.com/search?q=cache:GEiOeyiYdXEJ:www.cppblog.com/lmlf001/archive/2007/09/08/31858.html+&cd=2&hl=zh-CN&ct=clnk

本文主要讲多阶HASH表的结构。

1. 多阶hash表实际上是一个锯齿数组,看起来是这个样子的:
■■■■■■■■■■■■■■■
■■■■■■■■■■■■■
■■■■■■■■■■
■■■■■■
■■■

每一行是一阶,上面的元素个数多,下面的元素个数依次减少。
每一行的元素个数都是素数的。

2. 数组的每个节点用于存储数据的内容,其中,节点的前四个字节用于存储int类型的key或者是hash_code

3. 创建多阶HASH的时候,用户通过参数来指定有多少阶,每一阶最多多少个元素。
那么,下面的每一阶究竟应该选择多少个元素呢?从代码注释上看来,是采用了素数集中原理的算法来查找的。
例如,假设每阶最多1000个元素,一共10阶,则算法选择十个比1000小的最大素数,从大到小排列,以此作为各阶的元素个数。通过素数集中的算法得到的10个素数分别是:997 991 983 977 971 967 953 947 941 937。
可见,虽然是锯齿数组,各层之间的差别并不是很多。

4. 查找过程:

   先将key在第一阶内取模,看是否是这个元素,如果这个位置为空,直接返回不存在;如果是这个KEY,则返回这个位置。
   如果这个位置有元素,但是又不是这个key,则说明hash冲突,再到第二阶去找。
   循环往复。


5. 好处:
  1. hash冲突的处理非常简单;
  2. 有多个桶,使得空间利用率很高,你并不需要一个很大的桶来减少冲突。
  3. 可以考虑动态增长空间,不断加入新的一阶,且对原来的数据没影响。
整理后的源码在此:https://docs.google.com/open?id=0B2ZH5H4iY-oLSXdPSDVoVFBoSVU


2012年8月30日星期四

小记:python中用PIL进行图形合成

网站上需要展示一个类似如下的图:

整个图包含了三部分:背景,带透明度设置的阴影,以及封面。三个图通过程序合成成以上的样子。

用PIL实现极为简单,但摸索了差不多半小时才搞好,贴出来,或许对某人有用:


bg = Image.open(r'F:\temp\bg.png').convert('RGBA')
shadow = Image.open(r'F:\temp\shadow.png').convert('RGBA')
cover = Image.open(r'F:\temp\cover.png').convert('RGBA')
#下面这步是关键,蒙版的对象,采用自身即可根据透明度进行运算
bg.paste(shadow, ((bg.size[0]-shadow.size[0])/2,(bg.size[1]-shadow.size[1])/2), shadow)
bg.paste(book, ((bg.size[0]-book.size[0])/2,(bg.size[1]-book.size[1])/2))
bg.save(r'F:\temp\result.png', format='png')

2012年8月12日星期日

阿福技术BLOG所有文章打包下载

https://docs.google.com/open?id=0B2ZH5H4iY-oLdWYtMnlsblcya0U 看来,百度空间的业务对于百度来说是鸡肋,百度要放弃这个业务了。 不但故意改版得很难用,还提供文件打包下载的功能,潜台词是:东西都给你打包好了,滚吧,爷不伺候了……

2012年8月5日星期日

关于QQ音乐的一些看法

QQ音乐是我工作之余使用得比较多的一个腾讯的产品,因为已经使用了腾讯的其他很多服务,在选择音乐播放器上,也习惯性地选择了QQ音乐。 毕竟我自己不是音乐发烧友,仅仅只在闲暇时或者累了,放点音乐来舒缓的时候,才打开软件听歌。 使用QQ音乐有很长的时间了,但觉得这款软件时感觉越来越难用,老实说,它一直没让我爽过。 直到今天,偶然使用一款叫做飞乐电台的名不见经传的的播放器,惊奇的发现,里面推荐的歌我都非常喜欢。 为什么,一个亿级用户的公司,推荐的歌居然没有一款小软件的歌好听? 看看QQ音乐的新歌列表里,都是一些没见过的歌手,唱的一些不知所谓的烂歌,正常人一般都是听两首就听不下去的。 换了角度,假设我是QQ音乐的产品经理,我会怎么去考虑:坐拥上亿用户,不愁没流量;中国的盗版严重,从用户侧是收费很难;因为流量大,所以唱片公司很愿意接进来。 好吧,只要唱片公司给推广费,我就把你们的烂歌推到第一条,保证每天有百万次甚至千万次的曝光。 有钱赚,很好! 可用户不见得喜欢! 过度商业化,导致产品变成令用户讨厌的东西,而产品存在的意义则是对用户产生价值。这种背道而驰的例子,QQ音乐只是其中之一,如同百度,起家之时就是这么一路走过来的。 看来,创业小公司还是很有机会的,你们能抛开过度商业化去做用户真正喜欢的产品,直到赚钱的的目的胜过创造用户价值。