老王的技术手册 ( 我的新博客:http://huoding.com )_百度空间
 
文章列表
 
2010年10月17日 星期日 下午 05:54
作者:老王

不知不觉中我已经在百度空间写了四年的博客了,四年前,我本打算使用火丁笔记huoding.com)作为博客,不过当时由于懒惰而选择了使用百度空间;四年后,为了对得起年复一年的域名续费,我终于勤快了一下,正式启用了火丁笔记。多数人看到这个名字后都会纳闷它是什么含义,其实很简单: 火丁为“灯”,即LAMP!

欢迎访问火丁笔记:http://huoding.com/

火丁的订阅地址:http://huoding.com/feed
 
2010年09月27日 星期一 下午 04:03
欢迎访问我的新主页:http://huoding.com/

ThinkInLAMP聚集了一群热爱LAMP技术的狂热分子,每个月都会组织一次技术分享交流会议,这次“锅巴”牵头搞了一次MySQL专场技术分享交流会议,从目前释出的日程表来看,绝对有料,而且不收取任何费用,相当给力,有兴趣的网友不妨去听听(号外:中午管饭)。




备注ThinkInLAMP官方网站
 
2010年09月05日 星期日 下午 04:50
欢迎访问我的新主页:http://huoding.com/

作者:老王

周末重读了一遍《高性能MySQL》,发现有些知识点看过便忘了,没有实际动手操作一遍就是记不牢,所以今天动手操作了一下“找出谁持有锁”,并把实验步骤记录下来,有兴趣的网友可以参照一二。

问题的背景:在实际使用MySQL时,如果访问量比较大,那么很可能会出现大量Locked状态的进程,但是却不能方便的识别是哪条SQL引起的问题,很多人遇到此类问题时,多半是通过PhpMyAdmin查询可疑SQL,然后KILL掉,但问题是可疑SQL可能会很多,这样逐一尝试太过笨拙,有的人一怒之下很可能会重启MySQL,但如此治标不治本的方法肯定更不可取。

开始实验,在test数据库先建立一个测试表foo(注意:是MyISAM表类型),添加若干数据:

CREATE TABLE IF NOT EXISTS `foo` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`str` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

INSERT INTO `foo` (`id`, `str`) VALUES

(1, 'a'),
(2, 'b');


打开一个MySQL命令行终端:

mysql> USE test;
mysql> SELECT SLEEP(12345) FROM foo;


再打开一个MySQL命令行终端:

mysql> USE test;
mysql> UPDATE foo SET str='bar';


此时执行SHOW PROCESSLIST,可以看到已经出现Locked现象了:

10  User sleep  SELECT sleep(12345) FROM foo
20  Locked      UPDATE foo SET str = 'bar'


当然,我们知道是SLEEP堵塞了UPDATE,但如果不是这个实验,面对同样的情况,比如说几百个SQL查询同时映入眼帘,我们如何来判断呢?此时没人能打包票,只能瞎蒙了,经验有时候很重要,但我们还需要明确的命令,在这里就是:

mysqladmin debug

注意:如何你没有设定“.my.cnf”配置文件的话,可能需要输入用户名和密码参数

命令执行后,不会有任何明确的输出,不要着急,有价值的东西此时已经被保存到了错误日志里:

mysql> SHOW VARIABLES LIKE 'log_error';

找到错误日志的具体路径后,打开,查看日志的最后部分:

10  test.foo    Locked - read       Low priority read lock
20  test.foo    Waiting - write     High priority write lock


如此,我们就能看到id是10的SQL堵塞了id是20的SQL,至于具体的SQL,到SHOW PROCESSLIST里对照一下就能看到了。
 
2010年09月03日 星期五 下午 05:32
欢迎访问我的新主页:http://huoding.com/

作者:老王

现在,对一个Web程序员来说,图像处理已经属于必会知识之一了。且不说FlickrYupoo等专业图片分享网站,就算是一个和图片分享不沾边的网站,也会用到很多图片处理的功能,比如说:用户上传头像,然后自动生成缩略图。

常用的图片处理工具有GDImageMagickGraphicsMagick等等。GD就是个阿斗,略过不提;ImageMagick是目前最流行的图片处理工具,它的功能非常丰富;GraphicsMagick的功能略逊于ImageMagick,但是它的效率更强悍,就好比Apache和Nginx一样,一个功能更强,一个效率更胜。

现在更看重效率,所以本文就以GraphicsMagick为例来说说:

对于PHPer来说,有两种使用GraphicsMagick的方式:

1:使用PECL Gmagick扩展。
2:使用GraphicsMagick命令行。

PECL扩展的方式我并不喜欢,一来PECL代码Bug多多,二来PECL扩展的实现,代码写起来很罗嗦:比如缩放一个GIF动画图片,如果你用命令行的方式,一句话就搞定,而用PECL扩展的话,还得先算动画有几帧,再循环处理,很麻烦。所以说我更倾向于使用命令行的方式,虽然命令行操作听起来很“重”,但如果建立若干台图片服务器,通过Gearman连接起来,其实很是很有弹性的。

下面我们就以GraphicsMagick为例,采用命令行的方式来看看如何使用缩略图功能:

先上一个原始图片(input.jpg:160x120),以后的各个例子都会用到它:



BTW:列位看官现在可以咽口水了。

缩略图1

gm convert input.jpg -thumbnail '100x100' output_1.jpg



实际生成的图片大小是:100x75,也就是说说按此命令,会保持图片比例不变生成缩略图。这样很不错,但是有一个潜在的问题:我们不能简单明了的知道图片的最终大小,结果是前端显示的时候,无法设置img标签的width和height属性,如果我没记错的话,一般是推荐设定width和height属性的,否则浏览器渲染起来可能会稍稍慢一点。

缩略图2

gm convert input.jpg -thumbnail '100x100!' output_2.jpg



这次
实际生成的图片大小按定义来,但图片变形了,有时候这是不能接受的。

缩略图3


gm convert input.jpg -thumbnail '100x100^' \
-gravity center -extent 100x100 output_3.jpg



这次不仅保证了大小,还保证了比例。不过图片经过了裁剪。

缩略图4

gm convert input.jpg -thumbnail '100x100' \
-background gray -gravity center -extent 100x100 output_4.jpg



这次不仅保证了大小,还保证了比例,同时没有对图片进行任何裁剪,多余的部分按指定颜色进行填充。

缩略图5

gm convert input.jpg -thumbnail '10000@' \
-background gray -gravity center -extent 100x100 output_5.jpg



这次保证了大小和比例,其中的10000就是100x100的乘积,同时在填充和裁剪之间做了一个平衡。


明白了以上几个例子,缩略图基本就能通吃了,肯定有一种会适合你的需求。GraphicsMagick的资料非常少,但好消息是GraphicsMagick和ImageMagick的用法基本兼容,所以你可以通过
ImageMagick的资料来套用。

补充:如果想让用户手动裁剪头片的话,imgAreaSelect是个好选择。

参考链接:

http://www.imagemagick.org/Usage/thumbnails/
http://www.graphicsmagick.org/GraphicsMagick.html#details-thumbnail
 
2010年08月30日 星期一 下午 06:29
欢迎访问我的新主页:http://huoding.com/

作者:老王

这里说的User-Agent改变不是说Safari里那种User-Agent手动切换(这个功能在开发菜单里能找到),而是指多次请求的过程中,User-Agent自动就改变了。乍一听起来似乎不太可能,但确实存在这样的情况,问题浏览器IE(安装Chrome Frame)。

下面重现一下问题:

首先,安装Chrome Frame

然后,编写一个测试脚本,比如PHP:<?php echo $_SERVER['HTTP_USER_AGENT']; ?>。

最后,打开IE(我测试的是IE8)浏览器浏览测试脚本。

第一次浏览:Mozilla/4.0 (compatible; MSIE 8.0; 仿金并瓦木每:此处删除若干字) chromeframe/...
第二次刷新:Mozilla/4.0 (compatible; MSIE 8.0; 仿金并瓦木每:此处删除若干字)

由于大家安装的插件类型,版本不同,所以结果也会有所差异,不过足以表明User-Agent改变了。

User-Agent改变会有什么问题?很多时候(比如SSO多域名整合),我们为了增加安全性,会把User-Agent作为一个重要参照,如果它发生变化,势必会带来影响,鉴于Chrome Frame是Google出品,必然有一定的市场份额,所以这个问题应该了解,否则遇到问题就只有抓瞎了。
 
     
 
 
文章分类
 
     
 
关注工具
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
程序项目
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
在线资料
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
订阅我的空间
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     

帮助中心  |  空间客服  |  投诉中心  |  空间协议
©2012 Baidu