Garey's Blog–FreeBSD/PHP/GoLang

二月 11th, 2010

[转]Linux下的Memcache安装

No Comments, Linux, by garey, 4,116 views.

Linux下Memcache服务器端的安装
服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 。
下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz
另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是 libevent-1.3。(如果你的系统已经安装了libevent,可以不用安装)
官网:http://www.monkey.org/~provos/libevent/
下载:http://www.monkey.org/~provos/libevent-1.3.tar.gz

用wget指令直接下载这两个东西.下载回源文件后。
1.先安装libevent。这个东西在配置时需要指定一个安装路径,即./configure –prefix=/usr;然后make;然后make install;
2.再安装memcached,只是需要在配置时需要指定libevent的安装路径即./configure –with-libevent=/usr;然后make;然后make install;
这样就完成了Linux下Memcache服务器端的安装。详细的方法如下:

    1.分别把memcached和libevent下载回来,放到 /tmp 目录下:
    # cd /tmp
    # wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
    # wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

    2.先安装libevent:
    # tar zxvf libevent-1.2.tar.gz
    # cd libevent-1.2
    # ./configure –prefix=/usr
    # make
    # make install

    3.测试libevent是否安装成功:
    # ls -al /usr/lib | grep libevent
    lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
    -rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
    -rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
    -rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
    lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3
    还不错,都安装上了。

    4.安装memcached,同时需要安装中指定libevent的安装位置:
    # cd /tmp
    # tar zxvf memcached-1.2.0.tar.gz
    # cd memcached-1.2.0
    # ./configure –with-libevent=/usr
    # make
    # make install
    如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
    安装完成后会把memcached放到 /usr/local/bin/memcached ,

    5.测试是否成功安装memcached:
    # ls -al /usr/local/bin/mem*
    -rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
    -rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

安装Memcache的PHP扩展
1.在http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。
2.安装PHP的memcache扩展

    tar vxzf memcache-2.2.1.tgz
    cd memcache-2.2.1
    /usr/local/php/bin/phpize
    ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir
    make
    make install

3.上述安装完后会有类似这样的提示:

    Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/

4.把php.ini中的extension_dir = “./”修改为

    extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/”

5.添加一行来载入memcache扩展:extension=memcache.so

memcached的基本设置:
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

    -d选项是启动一个守护进程,
    -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
    -u是运行Memcache的用户,我这里是root,
    -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
    -p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
    -c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
    -P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

2.如果要结束Memcache进程,执行:

    # kill `cat /tmp/memcached.pid`

也可以启动多个守护进程,不过端口不能重复。

3.重启apache,service httpd restart

Memcache环境测试:
运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始领略Memcache的魅力把!
< ?php
$mem = new Memcache;
$mem->connect(”127.0.0.1″, 11211);
$mem->set(’key’, ‘This is a test!’, 0, 60);
$val = $mem->get(’key’);
echo $val;
?>

参考资料:
对Memcached有疑问的朋友可以参考下列文章:
Linux下的Memcache安装:http://www.ccvita.com/257.html
Windows下的Memcache安装:http://www.ccvita.com/258.html
Memcache基础教程:http://www.ccvita.com/259.html
Discuz!的Memcache缓存实现:http://www.ccvita.com/261.html
Memcache协议中文版:http://www.ccvita.com/306.html
Memcache分布式部署方案:http://www.ccvita.com/395.html

原文:http://www.ccvita.com/257.html

二月 11th, 2010

FreeBSD下安装PHP5的memcache的扩展

No Comments, FreeBSD, PHP, by garey, 4,976 views.

FreeBSD下安装PHP5扩展的默认选项是没有memcache可选的,需要自己安装:

cd /usr/ports/databases/pecl-memcache

make install clean

然后重启apache即可。

二月 9th, 2010

[转]Netbeans Template配置

No Comments, PHP, by garey, 5,497 views.

一直用Netbeans写php,从来没配置过模板,模板配置好,可以省很多事,而且,显得很专业,今天到netbeans官方网站找了一些东西,配置好模板,方便开发。
新建php文件时:
<?php
/**
* Encoding     :   UTF-8
* Created on   :   2009-10-23 14:48:40 by smallchicken , microji@126.com
*/
?>
工具–模板–打开php里面的–“PHP 文件”,在编辑器中打开,
好,可以编辑模板文件。
当然,如果要写入时间和文件名之类的变量需要单独配置变量。
<?php
/**
* Encoding     :   ${encoding}
* Created on   :   ${date} ${time} by ${author} , ${email}
*/
?>
变量需要在  工具–模板–用户配置属性–User.properties   在编辑器中打开
email=microji@126.com
author=smallchicken
${date?date?string("yyyy-m-d")}
${time?time?string("H:i:s")}
写入变量就可以了。
日期和时间的格式和php相同,
变量名字可以自己定义。
官方的模板变量名列表:
http://wiki.netbeans.org/FaqTemplateVariables

原文:http://hi.baidu.com/smallchicken/blog/item/360b92c7f2e097d6d00060c8.html

二月 4th, 2010

[转]UltraEdit显示中文乱码的解决办法

No Comments, 未分类, by garey, 18,931 views.

用UltraEdit打开UTF-8编码的文件时,有时候中文会显示乱码。网上搜索到一个比较好的解决办法:
方法就是打开UltraEdit安装路径下的Uedit32.ini(如果没有这个文件,那说明你的UltraEdit版本的ini不是放在安装路径下的,得去C:Documents and Settings(登录用户名,默认是Administrator)Application DataIDMCompUltraEdit里面找一下),在[Settings]里加上一句“Detect UTF-8 String=0”即可(bianbian补充:在UltraEdit某版本之后,这个字符串改成了“Auto Detect UTF-8 String=0”;你可以两个都试一下,或者都填上去),意思是禁止UltraEdit检测可能标记 UTF-8的字符串,这个选项在“配置”里是没有的。

原文:http://bianbian.org/technology/20.html

一月 27th, 2010

[转]Js跨域调用问题

1 Comment, AJAX, by garey, 5,929 views.

Javascript出于安全性考虑,是不允许跨域调用其他页面的对象的。因此也就导致了在一些ajax应用中,使用跨域的web service成为问题。

这里整理了一些方法,来解决这个问题:

1.设置document.domain。
前提条件:两个页面同属于一个基础域(例如都是xxx.com,或是xxx.com.cn);同一协议(例如都是http);同一端口(例如都是80)。
方法:设置两个页面的document.domain都设置为自己所在的基础域名。
例子:aaa.xxx.com里面的一个页面需要调用bbb.xxx.com里的一个对象,则将两个页面的document.domain都设置为xxx.com,就可以了。

2.在服务器端设置代理
跨域的请求同样发送到本地服务器端,由服务器端的代理来请求相应的数据,然后发送给浏览器端。这样实际上浏览器端的所有请求都是发到相同的域,在服务器端代理的帮助下,实现了跨域的能力。

3.使用apache服务器的mod_rewrite
http://doc.99net.net/doc/service/1076303865/1076476868.html

4.这边还有一个方法,不过我还没有测试过
http://johnvey.com/features/deliciousdirector/web-service-broker.html

参考这里:http://www.xml.com/pub/a/2005/11/09/fixing-ajax-xmlhttprequest-considered-harmful.html?CMP=OTC-TY3388567169

原文:http://www.todd-lee.com/blog/article.asp?id=121

一月 20th, 2010

[转]python IDE >> Editplus的配置

1 Comment, Python, by garey, 6,197 views.

Python有很多集成开发工具,但这些工具有的是过于复杂,有的是对Unicode支持的不太好。本人很喜欢Editplus,现在我们就将它改造成一个能够很好的支持Python编辑,浏览,运行及调试的开发环境,并且具备语法加亮,自动完成,自动缩进,新建Python文件模板等功能支持。
我的Editplus是2.10(比较原始了),Python是2.5.4。
1.要使Editplus能够运行Python程序,首先打开 【工具】 -> 【首选项】 对话框,在用户工具Group1里新建一个工具起名为Python,分别在【菜单文本】填入Python,在【命令】填入Python的安装路径(比如C:Python25Python.exe),【参数】填入$(FileName),【初始目录】填入$(FileDir)。
这样我们在Editplus里打开一个Python文件,在【工具】菜单下就会有一个Python选项,直接单击就可以运行Python程序了,也可以利用快捷键(Ctrl+1),根据你设置用户工具的个数,这个快捷键可能有所不同。
在此处我们想实现下面的一个功能:就是当程序出错的时候,Python解释器会给出类似如下的提示信息:
———- Python ———-
File “test.py”, line 6
    print ‘a
           ^
SyntaxError: EOL while scanning single-quoted string
Output completed (1 sec consumed) – Normal Termination
此时,我们一般会根据提示的行号到文本中去找错误的地方,而不能够象其他的编译器一样直接双击错误的提示,将光标直接移动到错误行。此时如果我们直接双击某行,则会出现找不到某文件的错误。此处,我们就利用Editplus的输出模式 Output Pattern的实现这个功能。具体做法:在刚才设置用户工具界面中选中捕获输出Capture Output,然后打开输出模式Output Pattern按钮,在输出模式Output Pattern对话框中,首先取消使用默认输出模式Use default output pattern选项前的复选框,在正则表达式Regular expression栏里填入正则表达式如下:
File “(.+)”, line ([0-9]+)
文件名File Name栏里选择 标记表达式1 Tagged expression 1,
行栏里选择 标记表达式2 Tagged expression 2,
列栏里为None.
然后我们直接双击错误提示信息行
File “test.py”, line 6
光标就会直接跳到第六行,非常的方便,尤其是当多个文件互相调用的时候,这种方法可以方便打开文件找到错误的位置。
2.为了实现语法加亮和自动完成功能,我们必须下载两个文件,下载地址为
http://www.editplus.com/javacpp.html(需要选择你python对应的版本,python2的话选择 pythonfiles.zip,python3的话应该是python3.zip) ,解压到editplus的安装目录下。压缩包有三个文件,此处我们用到两个,Python.acp文件和 Python_extd.stx文件。Acp文件是自动完成文件,stx文件是语法加亮文件。怎样加载呢?方法如下:
工具>首选项->设语法下,首先新建一个文件类型,我们命名为Python,扩展名(file extensions)栏里我们填入py。在语法文件syntax file栏里我们找到刚才下载的Python_extd.stx文件,在自动完成Auto completion栏里找到Python.acp文件,在函数模式Function Pattern栏里填入:
[ t]*def[ t].+:
这样我们就可以通过Ctrl+F11快捷键直接显示出Python文件中的函数列表
这时我们打开一个Python文件,就可以看到有语法加亮了。
但是我们在编辑的时候会发现一个问题就是,在输入冒号后,没有自动缩进,当然,如果我们手工缩进后会发现后面的输入也进行了同样的缩进,怎样让Editplus自动识别冒号然后直接缩进,并且如何修改缩进的长度呢?在语法文件设置界面制表符/缩进选项(Tab/Indent),分别填入自己习惯的距离。我两个都填入4,并且选中插入空格代替制表符和使用自动缩进。然后在自动缩进开启字符里填入一个冒号“:”。
其他的设置也可以根据类似的设置进行。
3.还有一点很方便的是,可以通过建立一个Python文件的模板,来快速新建一个Python文件。首先我们建立一个名为template.py的文件,内容自定,我们这里假设如下:
“”"
Usage:
“”"
保存,将template.py文件放到Editplus安装目录下。
工具->首选项->模板
打开模板设置对话框,首先添加一个名为Python的模板,把文件路径设置到我们刚才建立的template.py文件上。
点击载入按钮。完成。这样在文件->新建->下就会有一个Python模板,直接可以方便的建立一个Python文件。
至此,Editplus已经可以方便的编辑,浏览,调试和运行Python程序了。最后还要提醒一点的是,个人使用习惯不同,可以根据类似的方法进行修改和调整。通过以上的介绍,我们可以看出,Editplus可以很方便的配置,能够完成Python常用的大部分功能,有效的提高编程效率。

 

原文:http://meiowei.javaeye.com/blog/421267

一月 19th, 2010

python: if __name__

No Comments, Python, by garey, 2,889 views.

image

通过这个例子,python应用模块的自测试程序都放在 if __name__ == “__main__” 条件块下是多么方便。

一月 14th, 2010

FreeBSD下PHP5 PDO_MYSQL的安装

No Comments, FreeBSD, PHP, by garey, 6,361 views.

FreeBSD下安装PHP5时有pdo选项,但这样还不能使用pdo_mysql,php会提示:Connection failed: could not find driver.

需另外安装php5-pdo_mysql:

cd /usr/ports/databases/php5-pdo_mysql

make install clean

之后重启apache即可,在phpinfo.php页面里会看到下图所示信息,PDO才能使用MYSQL驱动。

image

一月 12th, 2010

FreeBSD 8.0从USB移动硬盘启动的Bug?

1 Comment, FreeBSD, by garey, 8,539 views.

我先将硬盘接到电脑的IDE接口装好系统,并设置好磁盘分区标签:

代码:

root@test:~# mount
/dev/label/rootfs on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
/dev/label/data on /data (ufs, local, soft-updates)
/dev/label/home on /home (ufs, local, soft-updates)
/dev/label/tmp on /tmp (ufs, local, soft-updates)
/dev/label/usr on /usr (ufs, local, soft-updates)
/dev/label/var on /var (ufs, local, soft-updates)

然后将硬盘接到USB硬盘盒内,让机器从USB硬盘启动,在启动过程中报错:

代码:

Root mount waiting for: usbus4
umass0:0:0:-1: Attached to scbus0
Trying to mount root from usf:/dev/label/rootfs
ROOT MOUNT ERROR:
If you have invalid mount options, reboot, and first try the following from the loader prompt:
set vfs.root.mountfrom.options=rw
and then remove invalid mount options from /etc/fstab.
Loader variables:
vfs.root.mountfrom=ufs:/dev/label/rootfs
vfs.root.mountfrom.options=rw
Manual root filesystem specification:
<fstype>:<device> Mount <device> using filesystem <fstype>
eg. ufs:/dev/da0s1a
eg. cd9660:/dev/acd0
This is equivalent to: da0 at umass-sim0 bus 0 target 0 lun 0
da0: <WDC> Fixed Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 114473MB (234441648 512 byte sectors: 255H 63S/T 14593C)
mount -t cd9660 /dev/acd0 /
? List valid disk boot devices
<empty> Abort manual input
mountroot>

当时按? List显示:

代码:

mountroot> ?
List of GEOM managed disk devices:
acd0
Loader variables:
vfs.root.mountfrom=ufs:/dev/label/rootfs
vfs.root.mountfrom.options=rw
Manual root filesystem specification:
<fstype>:<device> Mount <device> using filesystem <fstype>
eg. ufs:/dev/da0s1a
eg. cd9660:/dev/acd0
This is equivalent to: mount -t cd9660 /dev/acd0 /
? List valid disk boot devices
<empty> Abort manual input
mountroot>

只看到acd0,没有da0
当我在另一个USB接口接了一块U盘时,却顺利进系统了。
这个时候我发现移动硬盘是da0,U盘是da1。
当我把两个USB接口互换时,又出现上面那个问题,? list时看到acd0,da0,da0s1,这个da0明显是U盘。
最后总结出来,只有将移动硬盘接在那个固定的USB接口,另一个USB接口随便接个U盘就可以启动移动硬盘上的系统。
虽然系统可以用了,但这个结果让人很困惑,不知道这是不是FreeBSD 8.0的一个Bug?

十二月 28th, 2009

发现Xorg 7.4的一个Bug?

No Comments, FreeBSD, by garey, 4,237 views.

在FreeBSD下使用VNC的时候,发现在ports安装软件过程中,config配置界面是黑色的,看不到选项:

xorg_bug

使用的vnc版本为vnc-4.1.3_2,xorg版本为xorg-7.4_2。

当我试着将xorg改用xorg-7.3_2这个版本时,问题解决,难道正是xorg 7.4版本的Bug?

xorg_bug1.jpg