Fixed header web design(including ie6)
This is the best example I found. In this example, both header and content are aligned center and the same.
This is the best example I found. In this example, both header and content are aligned center and the same.
转载的~~推荐几个常用的bash快捷键~~
“棕色粗体”表示“我推荐的”!
Ctrl-A 相当于HOME键,用于将光标定位到本行最前面
Ctrl-E 相当于End键,即将光标移动到本行末尾
Ctrl-B 相当于左箭头键,用于将光标向左移动一格
Ctrl-F 相当于右箭头键,用于将光标向右移动一格
Ctrl-D 相当于Del键,即删除光标所在处的字符
Ctrl-K 用于删除从光标处开始到结尾处的所有字符
Ctrl-L 清屏,相当于clear命令
Ctrl-R 进入历史命令查找状态,然后你输入几个关键字符,就可以找到你使用过的命令
Ctrl-U 用于删除从光标开始到行首的所有字符。一般在密码或命令输入错误时常用
Ctrl-H 删除光标左侧的一个字符
Ctrl-W 用于删除当前光标左侧的一个单词
Ctrl-P 相当于上箭头键,即显示上一个命令
Ctrl-N 相当于下箭头键,即显示下一个命令
Ctrl-T 用于颠倒光标所在处字符和前一个字符的位置。(目前不知道有什么作用,哪位朋友知道?)
Ctrl-J 相当于回车键
Alt-. 用于提取历史命令中的最后一个单词。你先执行history命令,然后再敲击此快捷键若干下,你就懂了!
Alt-BackSpace 用于删除本行所有的内容,基本上和Ctrl-U类似。
Alt-C 用于将当前光标处的字符变成大写,同时本光标所在单词的后续字符都变成小写。
Alt-L 用于将光标所在单词及所在单词的后续字符都变成小写。
Alt-U 用于将光标所在单词的光标所在处及之后的所有字符变成大写。
ps:使用bind -P命令可以查看所有键盘绑定。
ps2:Alt快捷键较少使用,因为常常和编辑器冲突
over~
Today I counted a persistence problem with cookies: I have one domain like example.com. But when I set the same cookie on http://example.com and http://www.example.com, the browsers will treat it as different ones.
So after searching, these two links
http://stackoverflow.com/questions/2345137/php-cookie-problem-www-or-without-www
help me a lot, just a dot before domain when setting cookies will solve the problem.
上一篇日志从网上转载了一个开启SSI的日志,开启了SSI以后,可以让许多页面包含共有的header以及footer,这样在做修改的时候只需要修改一个地方就可以了,十分方便。但是在实际使用中,有可能会出现无法开启SSI的情况。
比如,你向别人租用了一台虚拟主机,而该虚拟主机的管理员在httpd.conf中并没有设置Includes Option,同时很悲剧的他又设置了AllowOverrides为None,这样即使你使用.htacesss也就没有办法开启SSI了,so,这个时候该肿么办,笔者之前的做法是在一台测试服务器上开启SSI,并书写包含有SSI指令的web页面,当在向生产服务器部署的时候则写了一个python脚本将SSI指令替换生成静态html。但是这样子做的一个缺点在于,测试服务器与生产服务器之间的数据就无法进行同步,每次需要大规模修改页面外观的时候,必须对测试服务器上的SSI页面进行处理以后才可以部署到生产服务器上,十分繁琐。
于是,这篇日志的主角登场了~使用Javascript实现client side include,原理很简单,就是将header和footer的内容用document.write输出,然后在每个页面中包含相应的js文件即可。
iis中:
也就是需要两步,
1.在虚拟主机块中加入,或者全局加
AddOutputFilter INCLUDES .htm
AddHandler server-parsed .htm
2.在Directory中的Options加入Includes参数,我觉得使用IncludesNOEXEC可能会更好。
<Directory "F:/hx/"> Options Indexes FollowSymLinks IncludesNOEXEC </Directory>
一些错误的解决:
包含的文件出现如下提示:[an error occurred while processing this directive]
原因之一:先检查一下包含的文件路径对不对,文件是否存在。
如果正确,则问题出在包含的语句上。
<!--#include file="文件名称"--> <!--#include virtual="文件名称"-->
file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的top.htm文档,则为file=”top.htm”。
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hx目录下的top.htm文件;则为virtual=”/hx/top.htm”
如果是上一级目录的子目录,就是使用路径../hx/top.htm时,需要使用Virtual,如果使用file,则会产生上面的提示。但在IIS下这样好像不会产生错误。
Apache中:
要使服务器允许SSI ,必须在httpd.conf或.htaccess文件中有如下配置:
Options +Includes
这样就告诉服务器允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以可能需要对使用SSI的目录专门使用一个Options指令,以确保其有效。
并非所有文件中的SSI指令都会被解析,必须告诉Apache应该解析哪些文件。有两种方法使Apache解析带有特定后缀名的文件,比如:.shtml ,配置如下:
AddType text/html .shtml AddOutputFilter INCLUDES .shtml
该方法的缺点之一是,为了使文件具有.shtml后缀从而执行其中的指令,需要加入SSI指令的现有文件的名字,以及所有指向此页面的连接。
另一种方法是,使用XBitHack指令:
XBitHack on
XBitHack告诉Apache解析所有设置了执行位的文件中的SSI指令。这样,无需修改文件名,只要用chmod使文件变成可执行的,就可以对现有页面增加SSI指令。
chmod +x pagename.html
这里简要说明一点:偶然会有人向你推荐,无须用带.shtml的文件名,只要使Apache解析所有.html文件的SSI就可以了。那些人可能没听说过XBitHack 。要知道,这样做会使Apache在发送文件到客户端之前通读此文件,即使其中并没有任何SSI指令,从而对速度有很不利的影响,所以这并不是好办法。
当然,在Windows上,没有对应的执行位可以设置,所以对你的配置方法就有一些限制。
在默认配置的情况下,Apache不会为SSI页面发送最后修改日期或者内容长度的HTTP头,因为这些值对动态页面来说难以确定。这样会阻止页面被缓冲,导致客户端性能有明显的下降。有两种解决方法:
设置 XBitHack Full ,告诉Apache在判断最后修改日期时,只查看被请求文件本身的日期,而忽略其中包含的其它文件的修改日期。
使用mod_expires提供的指令为文件设置一个明确的过期时间,并告诉浏览器和代理这个文件可以被缓冲。
From – http://ued.stuin.com/server/htm-ssi/
这两天由于项目的需要,需要将一个第三方库libxml2编译进可执行文件中,最终能够在没有安装libxml2的linux机器上运行所编写的程序。
我编写的程序是一个日志记录模块,有三个很简单的文件,log.c,log.h,main.c。log.c负责实现日志记录的相应接口,main.c则调用log.c编译生成的库文件使用这个接口来记录日志。
首先查阅网上资料以后,知道了gcc的-static选项可以完成这一功能,同时需要注意的是使用-static选项时需要将-lxml2选项放在gcc命令的最后。
所以正常情况下,如下的命令即可完成我的需求。(lxml2依赖于pthread,z,m库)
gcc -c log.c -I/usr/include/libxml2 -L/usr/lib -lxml2 ar -r liblog.a log.o gcc -static main.c -o main -I/usr/include/libxml2 -L. -llog -L/usr/lib -lxml2 -lpthread -lz -lm
但是非常不幸的是,这样子编译出来的可执行文件运行后会出现段错误。但是如果不加上static选项进行编译,那么编译出来的二进制文件可以运行。
然后郁闷了半个小时,在网上搜了很多的资料,皇天不负有心人,终于被我找到原因了。
由于我是使用的虚拟机下面的Ubuntu8.04进行相关的开发工作的,所以在安装libxml2的开发包时就直接用了apt-get install。但是,非常悲剧的是,该版本下的libxml2存在一个与线程相关的bug。
该bug的描述如下,from Jerome:
i just found out an issue with libxml2 and static linking. It is occuring on ubuntu 8.04.
- take a libxml2 example from the official website at http://xmlsoft.org/examples/tree2.c
- you compile it and link it in static gcc -g -static -Wl,–start-group `xml2-config –cflags –libs –static` tree2.c -Wl,–end-group -o tree2
- and then ./tree2 and you get core dump
oopsa not happy jerome not happy
LATER: before i was using ubuntu feisty 7.04 and all was fine. so i looked at launchpad and took 2.6.27.dfsg-1ubuntu3version. recompiled it myself under hardy and linked it statically. no more crash. oopsa. and i filled a bug for it
解决方案如上所述,但是查看了bug列表后,我又找到了一个更简单的解决方案:
The answer is simple, don’t link threaded programs statically, there are
many reasons why it is a wrong thing to do.
If you really must do so, the safest solution is
-Wl,–whole-archive -lpthread -Wl,–no-while-archive
所以最后,我的最后一个编译命令变为了
gcc -static main.c -o main -I/usr/include/libxml2 -L. -llog -L/usr/lib -lxml2 -Wl,--whole-archive-lpthread -Wl,--no-whole-archive -lz -lm
Hi, all dears, I’m back to myhome.
In the last two years, I didn’t often update my blogs. Sorry for your expect!
I’ve learned a lot in software development and research in this period.
Now I’ve completed my first year of postgraduate life. I think it’s time to summarize what I have learned before. And good news is in my second year I have plenty of time!
Finally, Best wishes with you all!
今天看了豆瓣洪强宁的技术分享,又看到了pep上的这段话,觉得太经典了,于是就转了过来,细细品味,很有味道
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
怎样判断网页是静态还是伪静态呢?
SEO文章看多了,经常能听到静态、伪静态这类的词语,那什么样的网页是静态的,什么样的网页是伪静态的呢?
IE5浏览器以上:
打开你想判断的网站后,再在网址框中输入javascript:alert(document.lastModified)
IE5以上… ,此方法可以判断一个网页的最后更新时间,如果这个时间与现在的时间相同,说明是伪静态的,反之为静态的。
火狐浏览器下:
先用火狐打开一个网页如:http://bbs.ittang.com/forum-13-1.html 等网页完全打开后进入FireFox的控制台。”工具”-“错误控制台”快捷键:shift+ctrl+J 然后在控制台里面输入:alert(document.lastModified); 查看最后修改时间并记录。
接下来关闭控制台,重新刷新网页,再用相同的方法在控制台里输入查询代码,再查看文件的最后修改时间,连续几次如果发现时间不同则可以判断它是伪静态的了
相关知识:关于伪静态和真静态网页用处和利弊对比
1.关于伪静态的用处
有些用户觉得,伪静态和真静态实际被收录量会相差很大,其实不然,从你个人角度,你去判断一下一个帖子到底是真静态还是伪静态?
估计很难看得出,因为所谓静态的意思,就是地址中不带问号,不带问号的就是静态,管他是真的还是伪的?搜索引擎看得出吗?
所以说,其实不论是真的还是伪的,其实对于搜索引擎来说都是一样的,搜索引擎没有说,你这个是伪的,我不收录你.
揪根掘底的来说,为什么搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去出不来了),所以很多时候带问号的地址是不会进去的,伪静态对于搜索引擎来说,其实就是静态,因为地址中没有带问号,所以没有真静态比伪静态收录得多的说法.
2.为什么选择伪静态
有很多用户说:
真静态不好吗?
为什么不用真静态?
访问起来不是更快吗?
负载不是更好吗?
等等等等…
在这里,其实只用一个问题来回答:为什么选择MYSQL.
很多用户大概不明白为什么那么多大型论坛都选择了MYSQL数据库作为储存机制,大概大部分都是想:”因为DZ用了MYSQL,所以就是MYSQL”.
其实不然,试想DZ为什么会在那么多论坛程序并存的日子生存下来并笑傲江湖,很大原因是因为DZ用了MYSQL.试想如果大C当年改的程序是一个文本论坛,那还会有DZ的今天吗?
或者从另一个角度问,为什么那么多大型网站都选择了MYSQL而不是文本作为储存机制?
所谓文本论坛,实际就跟真静态的说法差不多了,将数据储存在空间上面,大量读写硬盘,等等…
为什么这种写法会被淘汰呢?
我相信答案不会是老师所说的:
“discuz.net 目前有 2129867 篇帖子,存储成html的话大约是 20799 M,也就是 20G左右。这当中还不计算由于磁盘存储机制造成的空间浪费(100个1k 的文件占用的空间可能会是200K)。”
这种说法从我个人观点来看,这个理由不能给予用户不使用真静态充分的理由.
然而,另一个理由却是值得我们注意思考的,也是为什么绝大多数站都不选择生成静态:
“删除、更新这些html内容会导致大量的磁盘io操作以及大量的磁盘碎片.”
正如上面这个说法,在实际当中确实会导致大量的磁盘I/O操作(input,output),大量进行I/O操作带来的后果可想而知,会产生大量的磁盘碎片甚至会导致硬盘出现坏道.
所以对于生成静态而言,还不如去用文本论坛,可以更好的解决你们的需求.
(副W就是做文本论坛出生的,当时的名字为ofstar http://www.ofstar.net ,后因发展困难转为MYSQL,而PW生成静态页面也就是PW以前文本方式稍加改进用于吸引用户眼球的噘头)
当然,如果大家记忆力好的话,应该可以记得PW4的时候PW论坛不能访问很长一段时间,后来恢复到一段时间前的数据,官方的说法是被人攻击而导致硬盘损坏,其实这种说法是比较不可信的,相对于是被攻击导致硬盘损坏还是大量I/O操作而产生的后果,我个人更倾向于后者.
当然,如果大家比较关注5d6d的话,应该知道前几天有一天时间5d6d无法访问,根据非官方消息是因为硬盘坏了,而损坏的原因我想当然是因为大量用户大量进行I/O操作了,试想,我们一个论坛,进行磁盘I/O操作的仅为管理员进行更新缓存时进行的,而5d6d每一个会员就是一个管理员,试想下对磁盘是多大的考验?所以我并不奇怪5d6d的硬盘坏了.
当然,也许在读这篇文章的很多朋友都有使用过BT,也听说过BT对硬盘很伤,不能开多,而所谓伤害,和这里指的都是同一样东西,大量I/O导致磁盘出现碎片甚至出现磁盘坏道.
这里都是说些很实际的例子来说明问题了.
3.关于伪静态的坏处
当然犹如一篇文章的作者所说的
“如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,我的ISS数是1000″
确实是这样的,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病.
4.我们该如何做?
我们来总结一下.
1.使用真静态和假静态对SEO来说没有什么区别
2.使用真静态可能将导致硬盘损坏并将影响论坛性能
3.使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
4.最重要的一点,我们要静态是为了SEO
所以.
1.使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的.
2.既然真伪静态的效果一样,我们就可以选择伪静态了.
3.但是伪静态大量使用会照成CPU超负荷.
4.所以我们只要不大量使用就可以了.
5.既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用.
6.所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了.
7.谢谢大家耐心看我写的文章.
8.有何不解的地方或是有不同的看法欢迎提出.
在cnbeta上发现一个很好玩的网站,于是就转过来吧。
如果您要将一个网站迅速保存下来,可以用多种方法,首先是普通的HTML,这样会带来许多网页文件,保存成mht也可以解决问题,不过不够直观,而PDF文件的通用性和对电子阅读器的友好性,让这家名叫PDFmyURL.com的网站亮了。它可以迅速将HTML转换成PDF文件,这一切非常简单,访问他们主页,输入要做PDF的页面地址就好了,制作结束网站会提示你获取PDF,不过需要注意的是,它并没有中文字库,因此会显示一个一个框框。
访问www.PDFmyURL.com