文件打开
命令行打开文件:
luochunhui.com$ vim file
在vim中打开另一个文件:
:e foo.c
然后回到打开的上一个文件:
:e #
打开下一个文件使用n.n的用法和q相似。n是关闭当前并打开下一个,q是退出vim。他们也都可以加q或!修饰。:
:n
:wn
:n!
查看在这本次vim中,已经打开了哪些文件了。
:ls
1 %a "test.c" line 1
2 "array.c" line 0
根据这个结果,可以回到任何一个文件
:e #2
彻底的关闭文件,参数可以是ls看到的ID,或者是文件名:
:bd 2
:bd array.c
光标移动
移到文件尾部,使用两个”[",
]]移到文件头部,使用两个"]",
[[移到某一行:
:28
从某一行往下移N行
:28 3 #将定位到31行
移到{,[,(, #ifdef等配对符号的的另一端
%
显示控制
显示换行,tab等不可见字符。 VIM将会把换行显示为$, tag显示为^I.
:se list
显示行号
:se nu
隐藏行号:
:se nonu
输入控制
将tab设置为4个空格的宽度(默认为8)。
:se ts=4
在输入时将tab自动替换为N个空格
:se expandtab
将文件中原有的tab也替换为空格。
:retab
让vim帮你自动格式化缩进,在命令模式下输入(不输入":")
gg=G
查找及替换
查找所有的tab。
/\t
将\t替换为四个空格
:%s/\t/ /g
再狠一点,在全部打开的文件中继续替换:
:bufdo %s/\t/ /g
找单词, 这个语句将会找到int word, 但不会找alongword
/\
再方便一点,定位到下一个单词,他和当前光标所在处的单词相同:
*
变为反向找:
?
n
变为正向找:
/
n
make
调用make:
:make
默认调用的:make操作是make,不带任何参数
修改make, 空格需要使用\ \进行转义。
:set makeprg=make\ \-b
在make失败后,敲任意键后将自动定位到出错的行。
查看make错误,不加参数将显示出错的后5行。 可加上!输出所有错误行:
:clist
:clist!
另外两个, 显示第一行,或最后一行错误。如果加参数,则显示第N行
:cfirst [N]
:clast [N]
定位到下一个编译错误行:
:cn
ctags
生成ctags文件,在命令行执行命令后,将在当前目录生成一个tags文件
luochunhui.com$ ctags -l -i -s -t -v -d -p .
vi中使用本tags文件
:tag ./tags
定位到指定函数,再tn定位到下一个:
:ta /myfunc
:tn
跟踪到光标所在处的函数,类似eclipse中的F3功能
按键: ctrl + ]
返回刚才:
按键: ctrl + t
],t两个操作为堆栈式,不管你进入了多少ctrl+],你都可以通过ctrl+t原路返回。
csope
cscope是比ctags更为强大的源码导航工具,比如,他可以导向到库代码文件
luochunhui.com$ cscope -Rbq
将生成: cscope.out 及几个不用理会的中将文件
在vi中加载:
:cs add ./cscope.out
查找函数定义
:cs f g myfunc
查找函数在何处被调用。找下一条匹配规则与ctags相同:
:cs f c myfunc
:nt
查找函数也可以使用tag语法:
:cstag /myfunc
跟踪头文件:
:cs f f stdio.h
你可以简单的输入:cs查看其所有支持的规则
:cs
貌似cs没有ctrl+]这样的快捷键,是个遗憾。不过可完全可以同时加载ctags和cscope两种导航工具。达到这个需求。
自动完成
在vim的输入状态下,输入前几个字符后,可以按Ctrl + P,或者ctrl + N,打开自动完成的下拉菜单。
比如,
输入print,按ctrl+p,将提示可选择printing, printf, prints函数。
语法高亮
打开/关闭语法高亮
:sy on/off
保存你的设置
一般的显示设置等等,都是只在当前打开的vim中生效的,如果你需要使以后打开的vim都使用一些配置,你可以把他们写入~/.vimrc文件. 比如我的~/.vimrc文件,很多行。。将默认显示行数,默认加载本路径下的cs文件等等都做了自动设置。并将其保存在dropbox中。这样在其他机器上,我随时可以复制这个文件,将vim设置为自己习惯的模式。
:se nu
:cs add ./cscope.out
:se ts=4
:set expandtab
来源:http://www.luochunhui.com/id/573
命令行打开文件:
luochunhui.com$ vim file
在vim中打开另一个文件:
:e foo.c
然后回到打开的上一个文件:
:e #
打开下一个文件使用n.n的用法和q相似。n是关闭当前并打开下一个,q是退出vim。他们也都可以加q或!修饰。:
:n
:wn
:n!
查看在这本次vim中,已经打开了哪些文件了。
:ls
1 %a "test.c" line 1
2 "array.c" line 0
根据这个结果,可以回到任何一个文件
:e #2
彻底的关闭文件,参数可以是ls看到的ID,或者是文件名:
:bd 2
:bd array.c
光标移动
移到文件尾部,使用两个”[",
]]移到文件头部,使用两个"]",
[[移到某一行:
:28
从某一行往下移N行
:28 3 #将定位到31行
移到{,[,(, #ifdef等配对符号的的另一端
%
显示控制
显示换行,tab等不可见字符。 VIM将会把换行显示为$, tag显示为^I.
:se list
显示行号
:se nu
隐藏行号:
:se nonu
输入控制
将tab设置为4个空格的宽度(默认为8)。
:se ts=4
在输入时将tab自动替换为N个空格
:se expandtab
将文件中原有的tab也替换为空格。
:retab
让vim帮你自动格式化缩进,在命令模式下输入(不输入":")
gg=G
查找及替换
查找所有的tab。
/\t
将\t替换为四个空格
:%s/\t/ /g
再狠一点,在全部打开的文件中继续替换:
:bufdo %s/\t/ /g
找单词, 这个语句将会找到int word, 但不会找alongword
/\
再方便一点,定位到下一个单词,他和当前光标所在处的单词相同:
*
变为反向找:
?
n
变为正向找:
/
n
make
调用make:
:make
默认调用的:make操作是make,不带任何参数
修改make, 空格需要使用\ \进行转义。
:set makeprg=make\ \-b
在make失败后,敲任意键后将自动定位到出错的行。
查看make错误,不加参数将显示出错的后5行。 可加上!输出所有错误行:
:clist
:clist!
另外两个, 显示第一行,或最后一行错误。如果加参数,则显示第N行
:cfirst [N]
:clast [N]
定位到下一个编译错误行:
:cn
ctags
生成ctags文件,在命令行执行命令后,将在当前目录生成一个tags文件
luochunhui.com$ ctags -l -i -s -t -v -d -p .
vi中使用本tags文件
:tag ./tags
定位到指定函数,再tn定位到下一个:
:ta /myfunc
:tn
跟踪到光标所在处的函数,类似eclipse中的F3功能
按键: ctrl + ]
返回刚才:
按键: ctrl + t
],t两个操作为堆栈式,不管你进入了多少ctrl+],你都可以通过ctrl+t原路返回。
csope
cscope是比ctags更为强大的源码导航工具,比如,他可以导向到库代码文件
luochunhui.com$ cscope -Rbq
将生成: cscope.out 及几个不用理会的中将文件
在vi中加载:
:cs add ./cscope.out
查找函数定义
:cs f g myfunc
查找函数在何处被调用。找下一条匹配规则与ctags相同:
:cs f c myfunc
:nt
查找函数也可以使用tag语法:
:cstag /myfunc
跟踪头文件:
:cs f f stdio.h
你可以简单的输入:cs查看其所有支持的规则
:cs
貌似cs没有ctrl+]这样的快捷键,是个遗憾。不过可完全可以同时加载ctags和cscope两种导航工具。达到这个需求。
自动完成
在vim的输入状态下,输入前几个字符后,可以按Ctrl + P,或者ctrl + N,打开自动完成的下拉菜单。
比如,
输入print,按ctrl+p,将提示可选择printing, printf, prints函数。
语法高亮
打开/关闭语法高亮
:sy on/off
保存你的设置
一般的显示设置等等,都是只在当前打开的vim中生效的,如果你需要使以后打开的vim都使用一些配置,你可以把他们写入~/.vimrc文件. 比如我的~/.vimrc文件,很多行。。将默认显示行数,默认加载本路径下的cs文件等等都做了自动设置。并将其保存在dropbox中。这样在其他机器上,我随时可以复制这个文件,将vim设置为自己习惯的模式。
:se nu
:cs add ./cscope.out
:se ts=4
:set expandtab
来源:http://www.luochunhui.com/id/573
查看/修改Linux时区和时间
一、时区
1. 查看当前时区
date -R
2. 修改设置时区
方法(1)
tzselect
方法(2) 仅限于RedHat Linux 和 CentOS
timeconfig
方法(3) 适用于Debian
dpkg-reconfigure tzdata
3. 复制相应的时区文件,替换系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
在中国可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、时间
1、查看时间和日期
date
2、设置时间和日期
将系统日期设定成1996年6月10日的命令
date -s 06/22/96
将系统时间设定成下午1点52分0秒的命令
date -s 13:52:00
3. 将当前时间和日期写入BIOS,避免重启后失效
hwclock -w
三、定时同步时间
* * * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
一、时区
1. 查看当前时区
date -R
2. 修改设置时区
方法(1)
tzselect
方法(2) 仅限于RedHat Linux 和 CentOS
timeconfig
方法(3) 适用于Debian
dpkg-reconfigure tzdata
3. 复制相应的时区文件,替换系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
在中国可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、时间
1、查看时间和日期
date
2、设置时间和日期
将系统日期设定成1996年6月10日的命令
date -s 06/22/96
将系统时间设定成下午1点52分0秒的命令
date -s 13:52:00
3. 将当前时间和日期写入BIOS,避免重启后失效
hwclock -w
三、定时同步时间
* * * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
一个打包自己套件的范例
这个就有趣了!我们自己来编辑一下自己制作的RPM怎么样?会很难吗?完全不会!这里简单的以一个小例子来说明喔!请注意,这个真的只是一个小例子,所以不要觉得奇怪喔!其中,比较需要注意的,由于在上面的步骤说明中,我们知道在将SRPM编译成为RPM的时候,会以tar这支程式来将档案解开,因此,我们在进行来源档案的建立时,就必需要将他打包成为一个tar.gz的tarball的档案才行!
阅读全文
这个就有趣了!我们自己来编辑一下自己制作的RPM怎么样?会很难吗?完全不会!这里简单的以一个小例子来说明喔!请注意,这个真的只是一个小例子,所以不要觉得奇怪喔!其中,比较需要注意的,由于在上面的步骤说明中,我们知道在将SRPM编译成为RPM的时候,会以tar这支程式来将档案解开,因此,我们在进行来源档案的建立时,就必需要将他打包成为一个tar.gz的tarball的档案才行!
阅读全文
该问题原因是'/home/data/test/dev_test_com/include' 目录中包含中文的文件名造成的,
将中文件文件名删除,再执行
/usr/local/svn/bin/svn import (要导入版本库的数据)/home/data/test/dev_test_com file:///usr/local/svn/repos/test -m "Initial import"
即可 :)
我遇到的是:
查看,果然有这个中文的玩意:
将中文件文件名删除,再执行
/usr/local/svn/bin/svn import (要导入版本库的数据)/home/data/test/dev_test_com file:///usr/local/svn/repos/test -m "Initial import"
即可 :)
我遇到的是:
查看,果然有这个中文的玩意:
阅读高效能人士的七个习惯中习惯二 以始为终--自我领导的原则。
引用了《20世纪见证》里的一段(by Malcolm Muggeridge):回忆往昔,对我触动最大的是,当时看上去至关重要,妙趣横生的事,现在看来竟是微不足道,甚至有些荒谬。比如看似耀眼的成就、名望和赞扬,得到金钱或女人后的快乐,像撒旦一样游走于世界各地,经历“名利场”里的一切。
现在回想起来,所有这些自我满足都不过是海市蜃楼,黄梁一梦。
---
试想:原则和价值以及谁为中心的区别在哪?
引用了《20世纪见证》里的一段(by Malcolm Muggeridge):回忆往昔,对我触动最大的是,当时看上去至关重要,妙趣横生的事,现在看来竟是微不足道,甚至有些荒谬。比如看似耀眼的成就、名望和赞扬,得到金钱或女人后的快乐,像撒旦一样游走于世界各地,经历“名利场”里的一切。
现在回想起来,所有这些自我满足都不过是海市蜃楼,黄梁一梦。
---
试想:原则和价值以及谁为中心的区别在哪?
svn: Failed to add file 'Makefile': an unversioned file of the same name already exists
执行更新(svn up)时报错。因为其他人新增一个文件到服务器,而本地却存在一个同名文件(未版本控制)
先将本地重名文件改名,再执行"svn up",之后再比较、合并文件。或者执行 "svn up --force"
这时可能会出现系统提示,因为subversion发现了local work copy和repository上的不一致。需要svn用户自己裁决,可以直接输入tf,即使用repository上版本即可,因为你没有更改project文件。即:
Conflict discovered in ‘EuM1.xcodeproj/project.pbxproj’.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: s
(e) edit – change merged file in an editor
(df) diff-full – show all changes made to merged file
(r) resolved – accept merged version of file
(dc) display-conflict – show all conflicts (ignoring merged version)
(mc) mine-conflict – accept my version for all conflicts (same)
(tc) theirs-conflict – accept their version for all conflicts (same)
(mf) mine-full – accept my version of entire file (even non-conflicts)
(tf) theirs-full – accept their version of entire file (same)
(p) postpone – mark the conflict to be resolved later
(l) launch – launch external tool to resolve conflict
(s) show all – show this list
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: tf
在这里,如果记不清楚各个选项的含义,可以输入s了解。另外,如果不确定自己是否更改了本地的project文件,可以输入dc了解本地代码和repository上的差异。
但是,如果你也为项目增加了新文件,这样你的本地project文件和repository上的project文件都有新的内容。我现在的做法是 tc,即让svn自动合并,当然合并的是有问题的,会标出哪部分是我本地的,哪部分是repository上的,我是手工解决冲突,然后再次提交,通知项 目成员更新。
阅读全文
执行更新(svn up)时报错。因为其他人新增一个文件到服务器,而本地却存在一个同名文件(未版本控制)
先将本地重名文件改名,再执行"svn up",之后再比较、合并文件。或者执行 "svn up --force"
这时可能会出现系统提示,因为subversion发现了local work copy和repository上的不一致。需要svn用户自己裁决,可以直接输入tf,即使用repository上版本即可,因为你没有更改project文件。即:
Conflict discovered in ‘EuM1.xcodeproj/project.pbxproj’.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: s
(e) edit – change merged file in an editor
(df) diff-full – show all changes made to merged file
(r) resolved – accept merged version of file
(dc) display-conflict – show all conflicts (ignoring merged version)
(mc) mine-conflict – accept my version for all conflicts (same)
(tc) theirs-conflict – accept their version for all conflicts (same)
(mf) mine-full – accept my version of entire file (even non-conflicts)
(tf) theirs-full – accept their version of entire file (same)
(p) postpone – mark the conflict to be resolved later
(l) launch – launch external tool to resolve conflict
(s) show all – show this list
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: tf
在这里,如果记不清楚各个选项的含义,可以输入s了解。另外,如果不确定自己是否更改了本地的project文件,可以输入dc了解本地代码和repository上的差异。
但是,如果你也为项目增加了新文件,这样你的本地project文件和repository上的project文件都有新的内容。我现在的做法是 tc,即让svn自动合并,当然合并的是有问题的,会标出哪部分是我本地的,哪部分是repository上的,我是手工解决冲突,然后再次提交,通知项 目成员更新。
阅读全文
用yast2图形操作,或用zypper
习惯于在字符下面解决问题,在用习惯了yum的情况下改投SuSE的yast总觉得有些慢,处理起来让我很是着急。yast的界面做的很好,也很详细,但是一定程度上加大了使用的繁复性,对于我等习惯了CLI的情况下,还是有些难于接受。开始的时候用了yast -i安装一些已经知道的包名。发现还可以。但是当我只知道一点关键字,不知道完整包名的时候,让我感觉yast的包的查询不是很便捷。还好看了一下 SuSE的官方文档reference,知道了这个命令zypper.
阅读全文
习惯于在字符下面解决问题,在用习惯了yum的情况下改投SuSE的yast总觉得有些慢,处理起来让我很是着急。yast的界面做的很好,也很详细,但是一定程度上加大了使用的繁复性,对于我等习惯了CLI的情况下,还是有些难于接受。开始的时候用了yast -i安装一些已经知道的包名。发现还可以。但是当我只知道一点关键字,不知道完整包名的时候,让我感觉yast的包的查询不是很便捷。还好看了一下 SuSE的官方文档reference,知道了这个命令zypper.
阅读全文
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
阅读全文
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
阅读全文
首先,做好备份(你应该知道应该备份什么),这个不用多说。
然后,执行以下命令:
这样就升级完了,可以检查一下系统目前的版本:
lsb_release -a注意:如果你的CentOS上安装了ISPConfig,那么有可能会启动了CentOS Testing软件源:-kbs-CentOS-Testing,这可能会造成依赖性问题。
用以下命令升级可以禁止kbs-CentOS-Testing:
yum update --exclude="postfix" --disablerepo=kbs-CentOS-Testing
然后,执行以下命令:
这样就升级完了,可以检查一下系统目前的版本:
lsb_release -a注意:如果你的CentOS上安装了ISPConfig,那么有可能会启动了CentOS Testing软件源:-kbs-CentOS-Testing,这可能会造成依赖性问题。
用以下命令升级可以禁止kbs-CentOS-Testing:
yum update --exclude="postfix" --disablerepo=kbs-CentOS-Testing
http://support.mozilla.com/zh-CN/kb/%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%E9%BC%A0%E6%A0%87%E6%BB%9A%E8%BD%AE%E6%88%96%E8%A7%A6%E6%91%B8%E6%9D%BF%E6%BB%9A%E5%8A%A8%E9%A1%B5%E9%9D%A2
http://g.mozest.com/viewthread.php?tid=33608
Linux 虚拟文件系统概观
作者 Richard Gooch <rgooch在atnf.cs.iro.au>
翻译 albcamus < albcamus在gmail.com <mailto:albcamus在gmail.com> >
最后更新:2005 年 10 月 28 日
版权:1999, Richard Gooch
版权:2005, Pekka Enberg
本文件以 GPLv2 许可发放
[翻译说明:Richard Gooch 的这份 Overview of the Linux Virtual File System 位于内核
源代码的 Documentation/filesystems/下, 文件名是 vfs.txt。 该文档在 Understanding
the Linux Kernel 中被推荐, 我是从 2.6.16 官方内核中拷贝出来翻译的。 自己知道水平
差, 理解和表达都不到位, 所以还是建议看原文:( ]
阅读全文
MySQL(发音:[ˌmaɪ ɛs kjuː ˈɛl],但也经常读作My- SEQuel)是一个开放源码的关系数据库管理系统,开发者为瑞典 MySQL AB公司,现为Oracle公司的一部分。MySQL由于性能高、成 本低、可靠性好,已经成为最流行的开源数据库,被广泛地应用在 Internet上的中小型网站中。
随着MySQL的不断成熟,它也逐渐用于更多大规模网站 和应用,比如维基百科、Google和Facebook。非常流行的开源软件组合LAMP中的M就是指 MySQL。
此版本是5.5稳定分支的第11个发布版本,包含了一些bugfix,无新特性。
详见: http://dev.mysql.com/doc/refman/5.5/en/news-5-5-11.html
推荐使用于生产环境.
下载:http://mirror.switch.ch/ftp/mirror/mysql/Downloads/MySQL-5.5/mysql-5.5.11.tar.gz
随着MySQL的不断成熟,它也逐渐用于更多大规模网站 和应用,比如维基百科、Google和Facebook。非常流行的开源软件组合LAMP中的M就是指 MySQL。
此版本是5.5稳定分支的第11个发布版本,包含了一些bugfix,无新特性。
详见: http://dev.mysql.com/doc/refman/5.5/en/news-5-5-11.html
推荐使用于生产环境.
下载:http://mirror.switch.ch/ftp/mirror/mysql/Downloads/MySQL-5.5/mysql-5.5.11.tar.gz
按说,Flash响应滚轮跟wmode是无关的。但是firefox有个bug。
FF中:只有wmode="Window"的时候,Flash才能响应鼠标滚轮。而当wmode="Opaque"或者wmode="Transparent"的时候,Flash无法响应鼠标滚轮。
难题:[我按上面用了一下:出现一个问题鼠标是可以滚动了,但出现了背景。]
1.在flash的上方有1个导航栏,这个导航栏有下拉效果。
2.如果flash的wmode参数设置为Window或者Transparent,flash会挡住下拉框。只有当wmode参数为Opaque的时候,flash不会遮挡菜单栏。
3.如果flash的wmode参数为Opaque,在firefox里面,Flash无法响应鼠标滚轮。
4.总而言之:要么不能滚动,要么遮挡不正确。
FF中:只有wmode="Window"的时候,Flash才能响应鼠标滚轮。而当wmode="Opaque"或者wmode="Transparent"的时候,Flash无法响应鼠标滚轮。
难题:[我按上面用了一下:出现一个问题鼠标是可以滚动了,但出现了背景。]
1.在flash的上方有1个导航栏,这个导航栏有下拉效果。
2.如果flash的wmode参数设置为Window或者Transparent,flash会挡住下拉框。只有当wmode参数为Opaque的时候,flash不会遮挡菜单栏。
3.如果flash的wmode参数为Opaque,在firefox里面,Flash无法响应鼠标滚轮。
4.总而言之:要么不能滚动,要么遮挡不正确。
http://labs.mysql.com/
Filename Version Date Platform Size MD5Sum
mysql-5.6.2-labs-innodb-memcached-linux2.6-i686.tar.gz
小数转换成整数的函数ceil:
select left(FTime,10) as Time,ceil(count(*)/2) from Tbl_UserInvite_XX where FFlag=1 group by left(FTime,10);
select left(FTime,10) as Time,ceil(count(*)/2) from Tbl_UserInvite_XX where FFlag=1 group by left(FTime,10);
开源项目数以千计,谁在乎你开源与否,更何况即使你开源了,未必就有人关心你的项目。
可是,有一个项目我们依然以开源的形式在线进行着。
通常,当我们看到一个完备的产品时,为产品设计的周到和细致而惊叹,可在这成品背后,无数个bug,无数次修订,无数个脑细胞的死亡,随着产品最终的完美登场而消失在人们的视野中。那些坎坎坷坷和琐琐碎碎,在开发者的记忆中甚至也随时间而消失。
但是,如果你采用了开源的开发工具和模式,比如,通过google code和邮件列表,参与者的足迹被一一留下。尤其是项目的参与者可能经验不足,也可能错误不断,可项目的发起者把任务拆分的很细,细到足以可控的程度。在项目的开发过程中,即使一个结构体中的字段的定义,都在邮件列表中反复讨论多次。而这些细枝末节的过程,随着时间的推移在不经然间保留下来了。1年,5年或者十年后再看,你很难确信当时自己怎么会有那么幼稚的想法。而后来者,因为你的足迹可以绕过这些弯道,或者他们因为找到牛人曾经的足迹而能坦然面对自己的不足。
来源:http://www.zeuux.org/blog/content/3757/
评论:不知道怎样开源,难预料怎样结束,都说是开源要比不开苦。你为何还要默默开源?是不是写代码太孤独,是不是你很糊涂,开源到尽头也回不到当初,你为何还要如此执固,如果来生还是今生的重复,你是否对开源还是这样不在乎?如果开源还是今生的重复,纵然开源要比闭源苦?如果来生还是开源的重复,你是否还是这样对开源不在乎?---Jackxiang
可是,有一个项目我们依然以开源的形式在线进行着。
通常,当我们看到一个完备的产品时,为产品设计的周到和细致而惊叹,可在这成品背后,无数个bug,无数次修订,无数个脑细胞的死亡,随着产品最终的完美登场而消失在人们的视野中。那些坎坎坷坷和琐琐碎碎,在开发者的记忆中甚至也随时间而消失。
但是,如果你采用了开源的开发工具和模式,比如,通过google code和邮件列表,参与者的足迹被一一留下。尤其是项目的参与者可能经验不足,也可能错误不断,可项目的发起者把任务拆分的很细,细到足以可控的程度。在项目的开发过程中,即使一个结构体中的字段的定义,都在邮件列表中反复讨论多次。而这些细枝末节的过程,随着时间的推移在不经然间保留下来了。1年,5年或者十年后再看,你很难确信当时自己怎么会有那么幼稚的想法。而后来者,因为你的足迹可以绕过这些弯道,或者他们因为找到牛人曾经的足迹而能坦然面对自己的不足。
来源:http://www.zeuux.org/blog/content/3757/
评论:不知道怎样开源,难预料怎样结束,都说是开源要比不开苦。你为何还要默默开源?是不是写代码太孤独,是不是你很糊涂,开源到尽头也回不到当初,你为何还要如此执固,如果来生还是今生的重复,你是否对开源还是这样不在乎?如果开源还是今生的重复,纵然开源要比闭源苦?如果来生还是开源的重复,你是否还是这样对开源不在乎?---Jackxiang
Flash读取图片文件的Http头问题:
一般来说,Flash读取服务器的图片文件头是:
Content-Type image/jpeg
而在一些图片服务的存储头是:
Content-Type application/octet-stream
抓取Http头如下:
(Status-Line) HTTP/1.1 200 OK
Content-Length 302255
Accept-Ranges bytes
Content-Disposition attachment
Content-Language zh-CN
Content-Type application/octet-stream
在IE,或者Firefox通过:<img src="http://www.jackxiang.com/exaple.jpg"> 是可以显示的,而一旦直接访问那个URL,就会出现保存的提示。
为此,Flash在读取图片显示的时候是没法显示这样的头的,怎么办呢?那就是根据Content-Length来获取二进制流,再根据其Flahs的图片控件来显示。
一般来说,Flash读取服务器的图片文件头是:
Content-Type image/jpeg
而在一些图片服务的存储头是:
Content-Type application/octet-stream
抓取Http头如下:
(Status-Line) HTTP/1.1 200 OK
Content-Length 302255
Accept-Ranges bytes
Content-Disposition attachment
Content-Language zh-CN
Content-Type application/octet-stream
在IE,或者Firefox通过:<img src="http://www.jackxiang.com/exaple.jpg"> 是可以显示的,而一旦直接访问那个URL,就会出现保存的提示。
为此,Flash在读取图片显示的时候是没法显示这样的头的,怎么办呢?那就是根据Content-Length来获取二进制流,再根据其Flahs的图片控件来显示。
大家可能知道,天安门不是正北正南 稍偏东北西南。为什么?
如下图:

什么样的建筑朝向最合理——南偏东10°(不大于15°),南偏东10°(不大于15°)为最佳朝向!
根基于这样的建筑,后建筑里的床,我们的国人也很讲究,专家也有研究如下:
我们传统的房屋建筑,讲究坐北朝南;而室内床铺安置,则往往是东西向。专家们认为,头朝南或南北睡眠,有益于健康。因为地球是一个大磁场,磁力线贯穿南北。人体内的水分子犹如一根小小的指南针,在地球磁力线的作用下不停摆动。当水分子的两极朝向与地球南北磁力线方向相同时,水分子就停止摆动趋向稳定;水分子两极朝向与地球南北磁力线不同时,水分子就不稳定。如果人是南北睡向,那么水分子朝向、人体睡向和地球南北磁力线方向三者一致,这时人最容易入睡,睡眠质量也最高。
人体的血液循环系统中,主动脉和大静脉最为重要,其走向与人体的头脚方向一致。人体处于南北睡向时,由于主动脉和大静脉也处于南北方向上,加上水分子也在南北方向上排列整齐,因此以水分为主要成分的血液流动最为顺利和畅快,它的惯性有利于通过毛细血管,减少血栓的发生。所以,南北睡向具有一定的防病和保健功能。
国外科学家则主张头朝东睡,认为头朝北往往会导致失眠和不舒服。印度马德拉斯医学院的生理学教授萨拉达·苏布拉马尼亚姆夫人论证了这一基本原理。她说:地球磁场的微弱干扰,会使大脑中电的活动发生重大变化。如果头朝北睡,就会引起人体内的生物化学运动发生重大变化。磁场的微型脉冲,大大抑制着大脑的电的活动,因而使人感觉不舒服、烦躁和易怒。如果头朝东睡,就会有一种安宁的感觉。
如下图:
什么样的建筑朝向最合理——南偏东10°(不大于15°),南偏东10°(不大于15°)为最佳朝向!
根基于这样的建筑,后建筑里的床,我们的国人也很讲究,专家也有研究如下:
我们传统的房屋建筑,讲究坐北朝南;而室内床铺安置,则往往是东西向。专家们认为,头朝南或南北睡眠,有益于健康。因为地球是一个大磁场,磁力线贯穿南北。人体内的水分子犹如一根小小的指南针,在地球磁力线的作用下不停摆动。当水分子的两极朝向与地球南北磁力线方向相同时,水分子就停止摆动趋向稳定;水分子两极朝向与地球南北磁力线不同时,水分子就不稳定。如果人是南北睡向,那么水分子朝向、人体睡向和地球南北磁力线方向三者一致,这时人最容易入睡,睡眠质量也最高。
人体的血液循环系统中,主动脉和大静脉最为重要,其走向与人体的头脚方向一致。人体处于南北睡向时,由于主动脉和大静脉也处于南北方向上,加上水分子也在南北方向上排列整齐,因此以水分为主要成分的血液流动最为顺利和畅快,它的惯性有利于通过毛细血管,减少血栓的发生。所以,南北睡向具有一定的防病和保健功能。
国外科学家则主张头朝东睡,认为头朝北往往会导致失眠和不舒服。印度马德拉斯医学院的生理学教授萨拉达·苏布拉马尼亚姆夫人论证了这一基本原理。她说:地球磁场的微弱干扰,会使大脑中电的活动发生重大变化。如果头朝北睡,就会引起人体内的生物化学运动发生重大变化。磁场的微型脉冲,大大抑制着大脑的电的活动,因而使人感觉不舒服、烦躁和易怒。如果头朝东睡,就会有一种安宁的感觉。
小内存VPS之Nginx+PHP-fpm高负载优化及压力测试方法
Nginx+PHP-fpm组合,以内存占用小,负载能力强壮的特点,成为小内存VPS建站的首选组合。我们一起来探讨一下nginx+php-fpm高负载的优化方法。
先来看看nginx配置参数的优化。nginx是前端接受浏览器端请求的web server, 配置可调的参数如下:
下面是示例nginx配置
user www-data;
worker_processes 8;
#worker_processes 调至8, 大于8没什么用,小于8,nginx性能发挥不出来
worker_cpu_affinity 01 10 01 10 01 10 01 10;
#worker_cpu_affinity 参数可以使nginx充分发挥多核Cpu的性能优势 ,上面的配置是针对双核CPU的配置。01表示第一个核,10表示第二个核,如果是四核cpu,一至四个核分别表示为 0001 0010 0100 1000
error_log /var/log/nginx/error_log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 10240;
#worker_rlimit_nofile 是nginx能打开文件的最大句柄数,我们需要把这个数字设大一点。
#linux系统的文件查看数限制查看是用 ulimit -n ,修改这个限制是用 ulimit -HSn 65535
events
{
use epoll;
#必须要用高效的event驱动,以获得最大性能
worker_connections 10240;
#max_clients = worker_processes * worker_connections/4 (最大连接数的计算公式)
}
http
{
include /etc/nginx/deny.iplist;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_name_in_redirect off;
server_names_hash_bucket_size 128;
server_tokens off;
client_header_buffer_size 32k;
#client头buffer可以调为32K
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay off;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 60;
output_buffers 1 32k;
postpone_output 1460;
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
gzip on;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_proxied expired no-cache no-store private auth;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=staticfilecache:80m inactive=1d max_size=2500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 300;
proxy_read_timeout 120;
proxy_send_timeout 120;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
upstream wordpressnginx
{
server 127.0.0.1:6000 weight=1 fail_timeout=120s;
}
include /etc/nginx/sites-enabled/*;
}
上面的配置里面,有多处设及到buffer和timeout的地方。我们可以根据需要,慢慢调大这些参数,buffer自然是大点好,但不要太大。16K 是标准配置,可以增加到32,往上加更大也不是不行,但 要考虑到你系统内存大不大,够不够用。timeout是超时,如果服务器很繁忙,不妨增加超时等待时间,以避免频繁出现502错误。
gzip是必须开启的,reverse proxy在允许的情况下,也尽量开启,一 是可以提升响应效率,二是降低服务器压力,gzip开启后更可以节省服务器带宽。
nginx主要的配置如上所述。
现在看一下php-fpm的配置。
[global]
pid = run/php5-fpm.pid
process_control_timeout = 5
[www]
listen = /dev/shm/php-cgi.sock
listen.allowed_clients = 127.0.0.1
user = www-data
group = www-data
pm = static
pm.max_children = 7
#这个决定了 php-fpm的总进程。我们要想同时响应更多的并发数,这个数值要尽可能大,比如500,1000
pm.max_requests = 10000
#并发数越大,这个最大请求数应该越大,并发数小,这个数值也应该越小。它表示,php-fpm进程响应了10000个并发请求之后,就自动重启一下进程。
request_terminate_timeout = 30
#表示等待30秒后,结束那些没有自动结束的php脚本,以释放占用的资源。
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
小内存的vps虽然经过使用php-fpm+nginx,提升了系统的效率,可以同时响应较多的并发请求,但是当并发数上来了,比如从100上升到 10000,小内存肯定响应不过来,cpu也会 因为太忙,而导致系统负载变得很高很高,这个时候,我们就要考虑升级硬件配置了。
内存越大越好,CPU核心频率越高越好,CPU核越多越好。硬盘最好是SSD+RAID10。这样性能不仅高,数据安全也有保障。
上面所提到的各个配置参数,设及到数值的,不妨自己 多试着调小,调大参数,然后重启下nginx或者php-fpm进程,看看效果怎么样。
下面介绍一个比较好的压力测试工具,siege.
debian和ubuntu用户可以通过apt-get install siege来安装siege.
siege是一个跟ab.exe相似的http压力测试软件。
我们可以用siege来测试我们的网站和服务器性能。
siege -r 100 -c 10 http://www.domain.com/test.php
-r 是 repeat , -r 100是重复100次测试
-c 10是表示模拟10个用户同时并发连接
最后面是要测试的URL地址。
测试过程中可以随时按CTRL+C中止进程,siege会生成一个报告给我们。
我们可以同时根据siege的测试结果和监视服务器的负载情况,对系统压力状况进行一个深入了解和分析。接下来可以帮助我们判断该如何进行下一步操作,是继续优化配置,还是升级硬件。
Nginx+PHP-fpm组合,以内存占用小,负载能力强壮的特点,成为小内存VPS建站的首选组合。我们一起来探讨一下nginx+php-fpm高负载的优化方法。
先来看看nginx配置参数的优化。nginx是前端接受浏览器端请求的web server, 配置可调的参数如下:
下面是示例nginx配置
user www-data;
worker_processes 8;
#worker_processes 调至8, 大于8没什么用,小于8,nginx性能发挥不出来
worker_cpu_affinity 01 10 01 10 01 10 01 10;
#worker_cpu_affinity 参数可以使nginx充分发挥多核Cpu的性能优势 ,上面的配置是针对双核CPU的配置。01表示第一个核,10表示第二个核,如果是四核cpu,一至四个核分别表示为 0001 0010 0100 1000
error_log /var/log/nginx/error_log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 10240;
#worker_rlimit_nofile 是nginx能打开文件的最大句柄数,我们需要把这个数字设大一点。
#linux系统的文件查看数限制查看是用 ulimit -n ,修改这个限制是用 ulimit -HSn 65535
events
{
use epoll;
#必须要用高效的event驱动,以获得最大性能
worker_connections 10240;
#max_clients = worker_processes * worker_connections/4 (最大连接数的计算公式)
}
http
{
include /etc/nginx/deny.iplist;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_name_in_redirect off;
server_names_hash_bucket_size 128;
server_tokens off;
client_header_buffer_size 32k;
#client头buffer可以调为32K
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay off;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 60;
output_buffers 1 32k;
postpone_output 1460;
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
gzip on;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_proxied expired no-cache no-store private auth;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=staticfilecache:80m inactive=1d max_size=2500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 300;
proxy_read_timeout 120;
proxy_send_timeout 120;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
upstream wordpressnginx
{
server 127.0.0.1:6000 weight=1 fail_timeout=120s;
}
include /etc/nginx/sites-enabled/*;
}
上面的配置里面,有多处设及到buffer和timeout的地方。我们可以根据需要,慢慢调大这些参数,buffer自然是大点好,但不要太大。16K 是标准配置,可以增加到32,往上加更大也不是不行,但 要考虑到你系统内存大不大,够不够用。timeout是超时,如果服务器很繁忙,不妨增加超时等待时间,以避免频繁出现502错误。
gzip是必须开启的,reverse proxy在允许的情况下,也尽量开启,一 是可以提升响应效率,二是降低服务器压力,gzip开启后更可以节省服务器带宽。
nginx主要的配置如上所述。
现在看一下php-fpm的配置。
[global]
pid = run/php5-fpm.pid
process_control_timeout = 5
[www]
listen = /dev/shm/php-cgi.sock
listen.allowed_clients = 127.0.0.1
user = www-data
group = www-data
pm = static
pm.max_children = 7
#这个决定了 php-fpm的总进程。我们要想同时响应更多的并发数,这个数值要尽可能大,比如500,1000
pm.max_requests = 10000
#并发数越大,这个最大请求数应该越大,并发数小,这个数值也应该越小。它表示,php-fpm进程响应了10000个并发请求之后,就自动重启一下进程。
request_terminate_timeout = 30
#表示等待30秒后,结束那些没有自动结束的php脚本,以释放占用的资源。
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
小内存的vps虽然经过使用php-fpm+nginx,提升了系统的效率,可以同时响应较多的并发请求,但是当并发数上来了,比如从100上升到 10000,小内存肯定响应不过来,cpu也会 因为太忙,而导致系统负载变得很高很高,这个时候,我们就要考虑升级硬件配置了。
内存越大越好,CPU核心频率越高越好,CPU核越多越好。硬盘最好是SSD+RAID10。这样性能不仅高,数据安全也有保障。
上面所提到的各个配置参数,设及到数值的,不妨自己 多试着调小,调大参数,然后重启下nginx或者php-fpm进程,看看效果怎么样。
下面介绍一个比较好的压力测试工具,siege.
debian和ubuntu用户可以通过apt-get install siege来安装siege.
siege是一个跟ab.exe相似的http压力测试软件。
我们可以用siege来测试我们的网站和服务器性能。
siege -r 100 -c 10 http://www.domain.com/test.php
-r 是 repeat , -r 100是重复100次测试
-c 10是表示模拟10个用户同时并发连接
最后面是要测试的URL地址。
测试过程中可以随时按CTRL+C中止进程,siege会生成一个报告给我们。
我们可以同时根据siege的测试结果和监视服务器的负载情况,对系统压力状况进行一个深入了解和分析。接下来可以帮助我们判断该如何进行下一步操作,是继续优化配置,还是升级硬件。
使用Firefox浏览器的用户也可使用CleanHide屏蔽文字水印。它的最新版本为CleanHide 1.0.3,适用于Firefox: 1.5~2.0.0.*版本。安装完毕后,重启Firefox。而后点击程序菜单栏“查看→工具栏→定制”,在弹出窗口的列表中将“清除隐藏文字”按钮拖曳到工具栏上。此后,当遇到含有“文字水印”的页面时点击该按钮即可将其清除。
哥主要是抄习惯了,对下面这个URL的乱码加密后才去搜索了一下:
http://blog.chinabyte.com/blog.php?do-showone-type-blog-itemid-491096.html
哥主要是抄习惯了,对下面这个URL的乱码加密后才去搜索了一下:
http://blog.chinabyte.com/blog.php?do-showone-type-blog-itemid-491096.html
这是一个好玩的游戏,每次都玩通关,于是写下一点感悟,共计二十三条,名为:剑之道。
玩完后是英文,摘抄如下:
You are Greate,I Yield Not。
Foolish warrior,Drunk with Power,
You failed to see the tragic end。
The true enemy lies within。
I know it's tough,To find one's own way...
You fought well...
... You have my gratitude."
In training at home.
yeah,that demon was real tough,but his soul weak.
without justice,You're zero。To resist evil,Training is the ticket!
A strong soul is a just one。
Right poppy?"woof!"
阅读全文
玩完后是英文,摘抄如下:
You are Greate,I Yield Not。
Foolish warrior,Drunk with Power,
You failed to see the tragic end。
The true enemy lies within。
I know it's tough,To find one's own way...
You fought well...
... You have my gratitude."
In training at home.
yeah,that demon was real tough,but his soul weak.
without justice,You're zero。To resist evil,Training is the ticket!
A strong soul is a just one。
Right poppy?"woof!"
阅读全文
床位摆放:卧室床位的十大讲究
时间:2005-4-30
床是卧室内最重要的器具,是人们休息睡觉的场所,而且又与子孙繁衍息息相关。李笠翁在《闲情偶寄》里说过一段很精辟的话:“人生百年所历之时,日居其半,夜居其半。日间所处之地,或躺或庑,或舟或车,总无一定所在,而夜间所处,则只有一床。是床也者,乃我半生相共之物,较之结发糟糠犹分先后者也,人之待物其最厚者莫过于此。”现代床的种类很多,有沙发床、弹簧床、绷子床、竹床、木板床,近年来还出现了水床、消声床、气垫床、音乐床、按摩保健床、风调环境床等等。床作为传统的单一型休息工具,现在已向着集休息、享受与理疗保健于一体的多功能卧具方向发展。正由于床在人的一生中占有重要位置,因此床的位置摆放非常重要。具体来说,卧室安床有十大讲究。
阅读全文
时间:2005-4-30
床是卧室内最重要的器具,是人们休息睡觉的场所,而且又与子孙繁衍息息相关。李笠翁在《闲情偶寄》里说过一段很精辟的话:“人生百年所历之时,日居其半,夜居其半。日间所处之地,或躺或庑,或舟或车,总无一定所在,而夜间所处,则只有一床。是床也者,乃我半生相共之物,较之结发糟糠犹分先后者也,人之待物其最厚者莫过于此。”现代床的种类很多,有沙发床、弹簧床、绷子床、竹床、木板床,近年来还出现了水床、消声床、气垫床、音乐床、按摩保健床、风调环境床等等。床作为传统的单一型休息工具,现在已向着集休息、享受与理疗保健于一体的多功能卧具方向发展。正由于床在人的一生中占有重要位置,因此床的位置摆放非常重要。具体来说,卧室安床有十大讲究。
阅读全文





