Penner Blog

Sarah & Penner’s happy life ;)

Sohu搜狐 白社会 邀请

星期三
5 27,2009

获取白社会邀请 请猛击这里 >>

越发喜欢水果公司的产品了

星期四
7 24,2008

喜欢 Apple 这个品牌,但一直没有喜欢到去购买一个 Apple 的产品,理由很简单,忒贵!总感觉水果公司的产品总能找到一个其他品牌来替代,直到 iPhone 3G 的出现……

自从看过乔布斯的 iPhone 3G 首发会后,爱上了这款手机,虽然很喜欢,但还没有烧包到现在花近万元去买一个回来。之前一直没有买过水果公司的产品,所以还是打算先从推出一年多的2G版入手吧,感觉现在2G版的破解、软件、配件啥的都比较成熟,价格也趋于稳定了,托朋友的朋友的朋友…从美国带一个2G版回来,现在还没到手,到手后还要等俺家书记审一下,如果书记不喜欢,才可能有望把跟我两年多的小七换掉,呵呵(苦笑~)

今天注册了水果公司的 me.com,把玩了一下感觉不错,目前每个用户都提供了20G的总空间,其中又划分出邮箱、通讯录、日历、相册、网盘五项服务,从界面到用户体验,处处都可以看到与其终端硬件产品结合的影子,还好水果公司目前还是极端高傲端着架子,仅仅是注册一个可以使用60天的试用帐号,就必须提供信用卡信息(还会扣取$1.2左右的开通费),60天试用过后,如继续使用需要缴纳$99/年,不然对于我们来说又会多出来一个异常强劲的竞争对手。

最后俺想为了我们“不可告人”的目的,祝愿iPhone 3G可以让水果公司卖到臭街。;D

情为此物

  • Filed under: General
星期六
7 5,2008

她是东村的,他是西村的,中间一道沟,沟南面有东山和西山,隔一道谷。

他一直在东山放羊,她一直在西山放羊,两人从七八岁就知道那边有个和自己一样大的孩子,十二三联单岁才想到相互喊话,你多大?你有多少只羊?你想上学不想?…….

再大一点,不喊话了,她的羊群总在东山西边的坡上,他的羊群总在西山东边的坡上,他常爬岩上树像个小英雄,她就捂嘴偷笑。再大一点,有一天,他突然跑了过去,把一大朵野花插在刀子头上,转身就跑,滚了坡,她惊叫之后就大笑。又有一天,她突然跑了过去,把一个香囊挂在他脖子上,转身跑,说:“我给你绣的……”他就憨笑。

终于有一天,两人会合了,在山的最高处。她和他有点羞,找不到话题,就说咱给山上这棵树取个名字吧,说了就一起使劲想,想了不少,最后她说出一个,背过身去问他:“你听说过爱情这两个字没有?”他想了想说:“好像听说过。”她转过身来就笑了:“那是啥东西?”他说:“好像是外面世界的一种东西,咱这里没有。”她说:“那咱就把这树叫爱情树吧?”他说可以,就定了。

从那以后,爱情树就成了她和他会合的一个点。那三个树杈像三根巨指,中间是炕那么大的掌心,平平的,她和他可以坐在上面,也可以躺在上面。最多的时候,她和他是并排躺着看天。云怎么那么白?怎么又黑了?怎么想着是什么就是什么?太阳多大了,太阳有媳妇吗?是月亮吗?他们的家在哪里?星星是他们的孩子吗?…….话题有点羞时,她就钻到他怀里打他,他就亲她,她就不动了。有一天,她问:“你说咱躺在这里看天算啥?”他说:“是爱情吧?”

又有一天,她和他正在树的掌心里抱着说话时,一群村崽出现了,围着树笑喊:“两口子!两口子!…….”她呆了,他跳下树来,崽们跑下山去了,显然是早就发现了他和她的秘密,结群来逮现场的。
Read the rest of this entry »

Linux dd 命令的用法

星期四
6 19,2008

dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m

if=file
输入文件名,缺省为标准输入。

of=file
输出文件名,缺省为标准输出。

ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。

obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。

bs=bytes
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。

cbs=bytes
一次转换 bytes 个字节,即转换缓冲区大小。

skip=blocks
从输入文件开头跳过 blocks 个块后再开始复制。

seek=blocks
从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)

count=blocks
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。

conv=conversion[,conversion...]
用指定的参数转换文件。

转换参数:

ascii 转换 EBCDIC 为 ASCII。

ebcdic 转换 ASCII 为 EBCDIC。

ibm 转换 ASCII 为 alternate EBCDIC.

block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。

unblock
使每一行的长度都为 cbs ,不足部分用空格填充。

lcase 把大写字符转换为小写字符。

ucase 把小写字符转换为大写字符。

swab 交换输入的每对字节。 Unlike the
Unix dd, this works when an odd number of
bytes are read. If the input file contains
an odd number of bytes, the last byte is
simply copied (since there is nothing to
swap it with).

noerror
出错时不停止。

notrunc
不截短输出文件。

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
由于 dd 命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:
dd if=/dev/fd0 of=disk.img bs=1440k
有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1
生成Xen使用的镜像硬盘文件
A:
dd if=/dev/zero of=/disk2/xen/centos5.office.img bs=1M count=3072 oflag=direct
B:
dd if=/dev/zero of=centos5.img bs=2k seek=4096k count=1

转自:http://chaoyueziwo21.blogbus.com/logs/17413029.html

MySQL Proxy 编译安装 By CentOS

星期一
6 9,2008

MySQL Proxy Download: http://dev.mysql.com/downloads/mysql-proxy/
MySQL Proxy Wiki: http://forge.mysql.com/wiki/MySQL_Proxy

1、lua 安装
Get lua from: http://www.lua.org/

  1. vi Makefile (将 "INSTALL_TOP= /usr/local" 变为 "INSTALL_TOP= /yourpath/lua")
  2. make ansi
  3. make install

2、GLib 安装
Get GLib from: http://www.gtk.org/

  1. ./configure --prefix=/yourpath/glib2
  2. make
  3. make install

Note: newer version need newer pkg-conifg 0.xx
Get pkg-config from: http://pkg-config.freedesktop.org/releases/

  1. ./configure
  2. make
  3. make install

3、libevent 安装
Get libevent from: http://monkey.org/~provos/libevent/

  1. ./configure --prefix=/yourpath/libevent
  2. make;make install

4、check 安装
Get check lib from: http://check.sourceforge.net/

  1. ./configure --prefix=/yourpath/check
  2. make
  3. make install

5、MySQL Proxy 安装
编译前先要设置一下环境变量(export),类似于 Windows 下的 PATH

  1. export LUA_CFLAGS="-I/yourpath/lua/include" LUA_LIBS="-L/yourpath/lua/lib -llua -ldl" LDFLAGS="-lm"
  2.  
  3. export GLIB_CFLAGS="-I/yourpath/glib2/include/glib-2.0 -I/yourpath/glib2/lib/glib-2.0/include"
  4. export GLIB_LIBS="-L/yourpath/glib2/lib -lglib-2.0"
  5.  
  6. export CPPFLAGS="$CPPFLAGS -I/yourpath/libevent/include"
  7. export CFLAGS="$CFLAGS -I/yourpath/libevent/include"
  8. export LDFLAGS="$LDFLAGS -L/yourpath/libevent/lib -lm"
  9.  
  10. ./configure --prefix=/yourpath/mysql-proxy --with-mysql=/yourpath/mysql --with-check=/yourpath/check
  11. make
  12. make install

测试是否安装成功,看下边这条语句是否可以正常输出 MySQL Proxy 的帮助

  1. /yourpath/mysql-proxy/sbin/mysql-proxy --help-all

Smarty的缓存操作[ZT]

  • Filed under: PHP, Tech
星期日
6 1,2008

一、使用缓存
要开启Smarty的缓存,只需将caching设为true,并指定cache_dir即可.
使用cache_lefetime指定缓存生存时间,单位为秒,要对相同页面生成多个不同的缓存,在display或fetch中加入第二参数cache_id,如:

//此特性可用于对不同的$_GET进行不同的缓存
$smarty->display('index.tpl',$my_cache_id);

二、清除缓存

clear_all_cache();//清除所有缓存
clear_cache('index.tpl');//清除index.tpl的缓存
clear_cache('index.tpl',cache_id);//清除指定id的缓存

三、使用自定义缓存方式
设置cache_handler_func使用自定义的函数处理缓存,如:

$smarty->cache_handler_func = "myCache";
function myCache($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null) {
}

该函数的一般是根椐$action来判断缓存当前操作:

switch($action) {
    
case "read"://读取缓存内容
    
case "write"://写入缓存
    
case "clear"://清空
}

一般使用md5($tpl_file.$cache_id.$compile_id)作为唯一的cache_id
如果需要,可使用gzcompress和gzuncompress来压缩和解压

四、局部关闭缓存
要在某些区域使缓存失效(只对需要的缓存),有几种方法:
inser:
定义一个inser标签要使用的处理函数,函数名格式为:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是说,如果你定义的函数为insert_abc,则模板中使用方法为{insert name=’abc’}
参数通过$params传入
也可以做成insert插件,文件名命名为:insert.xx.php,函数命名为:smarty_insert_aa($params,&$smarty),xx定义同上register_block:

// 定义一个block
smarty_block_name($params,$content, &$smarty) {return $content;} //name表示区域名
 
//注册block
$smarty->register_block('name', 'smarty_block_name', false); //第三参数false表示该区域不被缓存

模板写法:{name}内容{/name}

写成block插件:
1)定义一件插件函数:block.cacheless.php,放在smarty的plugins目录
block.cacheless.php的内容如下:

<?php
function smarty_block_cacheless($param, $content, &$smarty) {
    
return $content;
}
?>

2) 编写程序及模板
示例程序:testCacheLess.php

<?php
include('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->cache_lifetime = 6;
$smarty->display('cache.tpl');
?>

所用的模板:cache.tpl

已经缓存的:{$smarty.now}
{cacheless}
没有缓存的:{$smarty.now}
{/cacheless}

Linux 64位, MySQL, Swap & Memory 优化

星期日
5 25,2008

MySQL的性能优化文章有很多,这里介绍个通过优化Swap & Memory来提高性能的方法。

The VM for Linux prefers system cache over application memory. What does this mean? The best way I can explain is by example.

Imagine you have 32 GB of RAM
MySQL is set to take 20 GB of RAM for a process based buffer and up to 6M for the various thread buffers.

Over a period of time the box swaps. The only thing that is running is mysql and its memory size is around 21GB for resident memory. Why does swap grow when there is plenty of memory? The reason is when a memory alloc is needed (thread based buffer is tickled) the VM will choose to use swap over allocating from the system cache, when there is not enough free memory.

DO NOT TURN OFF SWAP to prevent this. Your box will crawl, kswapd will chew up a lot of the processor, Linux needs swap enabled, lets just hope its not used.

So how do you stop Nagios pages because of swap usage? Well if you have a few choices.

reboot the box

or

stop mysql && swapoff -a;swapon -a;

or just

swapoff -a;swapon -a;
(注意!如果你在MySQL正在使用Swap时执行,会把MySQL搞死,所以执行前一定要反复确认Swap没有被使用。)

Doing the latter command is rather scary and fun at the same time. Because you can either crash mysql or not. I just did the swap* commands live, I was very certain nothing was using swap and it worked. YAY no more pages and I didn’t have to shut down the service!

参考文章:
http://mysqldba.blogspot.com/2008/05/linux-64-bit-mysql-swap-and-memory.html

PHP Download File

  • Filed under: PHP, Tech
星期日
5 25,2008
  1. <?php
  2. $filename = $_GET['filename'];
  3.  
  4. // Modify this line to indicate the location of the files you want people to be able to download
  5. // This path must not contain a trailing slash. ie. /temp/files/download
  6. $download_path = "ficheros/";
  7.  
  8. // Make sure we can't download files above the current directory location.
  9. if(eregi("\.\.", $filename)) die("I'm sorry, you may not download that file.");
  10. $file = str_replace("..", "", $filename);
  11.  
  12. // Make sure we can't download .ht control files.
  13. if(eregi("\.ht.+", $filename)) die("I'm sorry, you may not download that file.");
  14.  
  15. // Combine the download path and the filename to create the full path to the file.
  16. $file = "$download_path$file";
  17.  
  18. // Test to ensure that the file exists.
  19. if(!file_exists($file)) die("I'm sorry, the file doesn't seem to exist.");
  20.  
  21. // Extract the type of file which will be sent to the browser as a header
  22. $type = filetype($file);
  23.  
  24. // Get a date and timestamp
  25. $today = date("F j, Y, g:i a");
  26. $time = time();
  27.  
  28. // Send file headers
  29. header("Content-type: $type");
  30. header("Content-Disposition: attachment;filename=$filename");
  31. header("Content-Transfer-Encoding: binary");
  32. header('Pragma: no-cache');
  33. header('Expires: 0');
  34. // Send the file contents.
  35. set_time_limit(0);
  36. readfile($file);
  37. ?>
星期二
9 25,2007

前一阵子网站新上了相册功能,可最近总发现有一些用户上传的图片文件链接失效,代码检查了很多次,测试也做的比较充分了,但还是会出现上传失败的问题,很是郁闷,今天终于找到了解决办法。

从备份源中找到了用户上传失败的JPG图片,进行上传测试,上传完成后页面提示:

Warning: imagecreatefromjpeg(): ‘/tmp/lalala’ is not a valid JPEG file in /path/upload.php on line 1

出现这个Warning是由于GD函数库检测发现是非标准JPEG图片格式导致。

解决方法,如果PHP版本 > 5.1.3,可以在php.ini中增加:
gd.jpeg_ignore_warning = 1

在 MIME 类型中有 image/jpeg 与 image/pjpeg 两种,GD库只认识前者的传统格式,后者是 progressive JPEG 的缩写,啥是pjpeg昵?

这个链接中有详细的解释:
http://www.faqs.org/faqs/jpeg-faq/part1/section-11.html

另外,php.net 中也有相关问题的详细讨论,有兴趣的朋友可以进去看看:
http://bugs.php.net/bug.php?id=29878

网站的定律[ZT]

星期二
8 21,2007

在网上看到的与网站相关的一些定律。其实很多时候,不是我们不知道,只是我们没想到。只缘身在此山中阿。

  1. 250定律
    拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意味着得罪了250 名顾客。 在你的网站访客中,一个访客可能可以带来一群访客,任何网站都有起步和发展的过程,这个过程中此定律尤其重要。
  2. 达维多定律
    达维多认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。
    国内网站跟风太严重,比如前段时间的格子网,乞讨网,博客网,一个成功了,大家一拥而上。但实际效果是,第一个出名的往往最成功,所以在网站的定位上,要动自己的脑筋,不是去捡人家剩下的客户。同理,买人家出售的数据来建站效果是很糟糕的。
  3. 木桶定律
    水桶定律是指,一只水桶能装多少水,完全取决于它最短的那块木板。这就是说任何一个组织都可能面临的一个共同问题,即构成组织的各个部分往往决定了整个组织的水平。 注意审视自己的网站,是速度最糟糕?美工最糟糕?宣传最糟糕?你首先要做的,不是改进你最强的,而应该是你最薄弱的。
  4. 马太效应
    《新约》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说:“主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。”于是国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆人的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。
    在同类网站中,马太效应是很明显的。一个出名的社区,比一个新建的社区,更容易吸引到新客户。启示是,如果你无法把网站做大,那么你要做专。作专之后再做大就更容易。
  5. 手表定理
    手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。
    一个网站,你只需要关注你特定的用户群需求。不要在意不相干人的看法。
  6. 不值得定律
    不值得定律:不值得做的事情,就不值得做好 不要过度seo,如果你不是想只做垃圾站。不要把时间浪费在美化再美化页面,优化再优化程序,在你网站能盈利后,这些事情可以交给技术人员完成。
  7. 彼得原理
    斯.彼得认为:在各种组织中,由于习惯于对在某个等级上称职的人员进行晋升提拔,因而雇员总是趋向于晋升到其不称职的地位。不要轻易改变自己网站的定位。如博客网想变门户,盛大想做娱乐,大家拭目以待吧。
  8. 零和游戏原理
    当你看到两位对弈者时,你就可以说他们正在玩“零和游戏”。因为在大多数情况下,总会有一个赢,一个输,如果我们把获胜计算为得1分,而输棋为-1分,那么,这两人得分之和就是:1+(-1)=0
    不要把目光一直盯在你的竞争网站上,不要花太多时间抢它的访客。我们把这些时间用来寻找互补的合作网站,挖掘新访客。
  9. 华盛顿合作规律
    华盛顿合作规律说的是: 一个人敷衍了事,两个人互相推诿, 三个人则永无成事之日。 如果你看准一个方向,你自己干,缺人手就招。不要轻易找同伴一起搞网站,否则你会发现,日子似乎越过越快了,事情越做越慢了。
  10. 邦尼人力定律
    一个人一分钟可以挖一个洞,六十个人一秒种却挖不了一个洞。合作是一个问题,如何合作也是一个问题。你需要有计划。
  11. 牛蛙效应
    把一只牛蛙放在开水锅里,牛蛙会很快跳出来;但当你把它放在冷水里,它不会跳出来,然后慢慢加热,起初牛蛙出于懒惰,不会有什么动作,当水温高到它无法忍受的时候,想出来,但已经没有了力气。 如果你是soho,注意关注你的财务。不要等到没钱了再想怎么挣,你会发现那时候挣钱更难。
  12. 蘑菇管理
    蘑菇管理是许多组织对待初出茅庐者的一种管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)。做网站毕竟要遭遇这样的阶段,搜索引擎不理你,友情链接找不到,访客不上门。这是磨练。
  13. 奥卡姆剃刀定律
    如无必要,勿增实体。
    把网站做得简单,再简单,简单到非常实用,而不是花俏。google的首页为什么比雅虎好?
  14. 巴莱多定律(Paredo 也叫二八定律)
    你所完成的工作里80%的成果,来自于你20%的付出;而80%的付出,只换来20%的成果。随时衡量你所做的工作,哪些是最有效果的。
  15. 马蝇效应
    林肯少年时和他的兄弟在肯塔基老家的一个农场里犁玉米地,林肯吆马,他兄弟扶犁,而那匹马很懒,慢慢腾腾,走走停停。可是有一段时间马走得飞快。林肯感到奇怪,到了地头,他发现有一只很大的马蝇叮在马身上,他就把马蝇打落了。看到马蝇被打落了,他兄弟就抱怨说:”哎呀,你为什么要打掉它,正是那家伙使马跑起来的嘛!”
    在你心满意足的时候,去寻找你的马蝇。没有firefox,不会有ie7,firefox就是微软的马蝇之一。马蝇不可怕,怕的是会一口吃掉你的东西,像ie当初对网景干的那样。
  16. 最高气温效应
    每天最热总是下午2 时左右,我们总认为这个时候太阳最厉害,其实这时的太阳早已偏西,不再是供给最大热量的时候了。此时气温之所以最高,不过是源于此前的热量积累。你今天的网站流量,是你一个星期或更长时间前所做的事带来的。
  17. 超限效应(溢出效应)
    刺激过多、过强和作用时间过久而引起心理极不耐烦或反抗的心理现象,称之为“超限效应”。 别到别人论坛里发太多广告。别在自己网站上放太多广告。别在自己的论坛里太多地太明显地诱导话题。
  18. 懒蚂蚁效应
    生物学家研究发现,成群的蚂蚁中,大部分蚂蚁很勤劳,寻找、搬运食物争先恐后,少数蚂蚁却东张西望不干活。当食物来源断绝或蚁窝被破坏时,那些勤快的蚂蚁一筹莫展。“懒蚂蚁”则“挺身而出”,带领众伙伴向它早已侦察到的新的食物源转移。
    不要把注意力仅仅放在一个网站上,即使这个网站现在为你带来一切。你要给自己一些时间寻找新的可行的方向,以备万一。
  19. 长尾理论
    ChrisAnderson认为,只要存储和流通的渠道足够大,需求不旺或销量不佳的产品共同占据的市场份额就可以和那些数量不多的热卖品所占据的市场份额相匹敌甚至更大。对于搜索引擎,未必你需要一个热门词排在第一位,如果有一千个冷门词排在第一位,效果不但一样,还会更稳定更长远。
  20. 破窗理论
    栋建筑上的一块玻璃,又没有及时修好,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃。管理论坛时,如果你发现第一个垃圾贴,赶紧删掉他吧。想想:落伍现在为什么那么多××贴?现在控制比最初控制难多了。
  21. “羊群效应”,又称复制原则(Copy Strategy)
    一个羊群(集体)是一个很散乱的组织,平时大家在一起盲目地左冲右撞。如果一头羊发现了一片肥沃的绿草地,并在那里吃到了新鲜的青草,后来的羊群就会一哄而上,争抢那里的青草,全然不顾旁边虎视眈眈的狼,或者看不到其它地方还有更好的青草。不要轻易跟风,保持自己思考的能力。
  22. 墨菲定律
    如果坏事情有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失。除非垃圾站,否则不要作弊,对搜索引擎不要,对广告也不要。
  23. 光环效应
    人们对人的某种品质或特点有清晰的知觉,印象比较深刻、突出, 这种强烈的知觉, 就像月晕形式的光环一样,向周围弥漫、扩散,掩盖了对这个人的其他品质或特点的认识。不要轻易崇拜一个人或者公司、一个概念、一种做法。
  24. 蝴蝶效应
    一只亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,两周后,可能在美国德克萨斯州引起一场龙卷风。不管你做什么,网站或者其他,你都应该关注新闻。机遇或者灾难可能就在那。
  25. 阿尔巴德定理
    一个企业经营成功与否,全靠对顾客的要求了解到什么程度。 我赞同别人的点评:看到了别人的需要,你就成功了一半;满足了别人的需求,你就成功了全部。尤其是做网站。
  26. 史密斯原则
    如果你不能战胜他们,你就加入到他们之中去。不要试图做孤胆英雄。如果潮流挡不住,至少,你要去思考为什么。