2007年5月29日星期二

blog如何赚钱?

本来赚钱和盈利是两个概念,赚到钱了不一定就能够盈利,而盈利不见得就只有赚钱这一种方式。可是高调唱完了,blogger们还是会回到原点:从哪里补贴服务器费用?从哪里补贴所花费的时间和精力?写blog难道就只是一种娱乐么?难道除了自娱自乐或者是写写枪文,就没有其他方式么?

虽然keso比较反感付费话题,代表了一部分人的观点,可是别忘记了那后半句话"没有钱是万万不能的",本来我们的口粮就不多,理想化的东西恐怕都要打折销售了。

原来的reviewme没赶上,现在的feedsky也没兴趣,倒是这个
Bloggerwave算是我的第一把,虽然没有太多特色,目前的赞助机会也比较少,但是要求不高,形式也简单,最方便的是直接付款到paypal,10块美刀好歹也够一个域名一年的费用了,干嘛不试试呢?

另外付费评论如何"写"也是个值得研究的话题,让你写什么就写什么那太笨了,但如果让你写产品,你就来个横向评测,让你写网站你就写写相关现象,我想不但起到了宣传的作用,对blog文章质量的影响也会减少一些。当然如果你本来是写IT的blog,非要去宣传谁家的苹果好卖,还是先三思的好。

Source:http://www.fwolf.com/blog/post/327

2007年5月21日星期一

gnuplot的一些资料

从来没有接触过科学计算的东东,不过由于工作需要,想画一套统计图,觉得应该有些开源的好用的工具,于是误打误撞找到了gnuplot,研究了半天,无功而返,但找到了很多有用的资料。

最早是在IBM开发者上了解到有这么个东东的:Linux 上的数据可视化工具,这篇文章同时还提到了GNU Octave。

地圖/統計圖/3d 函數圖/實驗報告圖 — Gnuplot 純畫圖里有使用gnuplot画图的几个例子,包括一个使用数据文件的.

Gnuplot 導讀

https://dirty.csie.org/mt/archives/000355.html,这里还提到了一个叫R的软件,似乎也不错。

GNUPLOT使用手册

在gnuplot里使用中文标注,有人转了一篇在 这里,有人回复说"Or simply use the psfrag package.",也许指的是在tex中的应用吧。相对于gnuplot,其实只要set font "/path_to_your_ttf_file就可以识别中文了。

用 Perl/Tk 实现数据可视化,其中对各类绘图工具有个小的概括:

对于简单的 x-y 平面图,gnuplot 经常是第一选择。对更复杂的问题来说,您可以使用 xmgrace 或者其他的绘制工具。

轻轻松松画柱状图(bar graph) ,文中提到的bargraph.pl简化了gnuplot的使用,只能生成条形图,可以生成gnuplot、eps、fig、pdf、png等多种格式,不过要使用的话,除了安装gnuplot之外,还需要fig2dev(安装另外一个绘图程序xfig后就有了)。

gnuplot 让您的数据可视化,文中还提到:

gnuplot 与 GNU plotutils组合格外好用;另请参阅 plotutils documentation

另外还看到了一个关于python绘图的讨论:问一下,python有生成饼图,柱状图等的库么 ,里面有人说pychart画图看起来也不错,可惜我python刚开始接触,也作罢了。

关键是以前从来没有接触过此类东西,加上资料又少,所以要花费大量时间学习才能够完成工作目标,所以我已经决定采用jpgraph,用我更熟悉的php5来作了。顺便给两个jpgraph的入门例子:

Source:http://www.fwolf.com/blog/post/326

300 / 300死士 / 300斯巴达勇士

在欣赏这部精彩影片之前,我已经看过它的前辈——上世纪60年代拍摄的The 300 Spartans / 三百斯巴达勇士 / 三百侍卫,相比较之下,我甚至觉得旧版的比新版的要更胜一筹。

为什么会这么说呢?因为新版展示的是神话故事,而旧版演绎的才更"历史"一些。难道不是么?看看影片中的那头狼,国王爬的那座山和神庙中的人,不穿衣服跳舞的占卜女,以及后来的波斯王和他的手下,通片看下来,除了眼球大呼过瘾之外,大脑中回想的仍然是旧版300讲述的故事。

片子的摄影令人叫绝,不仅仅是因为有优秀的编剧和改编自同样风格的漫画而已,我感觉,这部电影的大部分镜头,暂停,截图,就是一部讲述史诗的油画,加上后面的战斗场面,静态美+动态美+暴力美的天合之作。所以,比 Troy / 木马屠城 / 特洛伊更像史诗,不像历史。

片中的壮汉,同时也是某人口中的"肉饼",很养眼吧,但从另外一个角度上来分析,更显得不够真实。稍微有一些健美知识的人都知道,即使是奥林匹亚先生,非比赛的时候也是会略微看起来有点"胖"的,因为平时人体需要一定比例的脂肪来维持代谢,否则一饿就会昏过去,只有在要比赛的时候,才按计划减去脂肪,同时在比赛是全身涂上一种油,收缩脂肪,好露出肌肉的轮廓。另外,战士需要的是力量、技巧和耐力,真正优秀的战士能够领到健美冠军的不多。抛开肌肉男不说,人手一矛一盾一短剑一披风基本裸体的"装备"情况下,粮草在哪里?辎重在哪里?国王还能变出个苹果来,难道平时是挂在腰上么?长矛扔出去了,捡不回来怎么办?所以,壮汉只是为了更美观或者吸引更多的女性观众进影院的招牌而已。

再来说战术吧,片中斯巴达人大概用到了几种阵形:方阵、龟壳、楔型,但为了影片的视觉效果,真正表现阵形作用的镜头并不多,方阵阻挡了波斯人的冲锋,龟壳防弓箭,楔型对付骑兵,但更多的镜头是描写混战的,并不成阵形的斯巴达英雄在大刀阔斧的斩杀波斯人。如果你看过 Alexander / 亚历山大大帝或者玩过游戏"罗马:全面战争",就会知道真正的"阵"是什么样子的了。这一点在旧版300里体现的要更完善一些,至今我还记得斯巴达人对付波斯骑兵的镜头,不是用楔型阵,而是已盾盖身卧在地上,骑兵骑的马是有眼睛的动物,不会轻易踩人,就跳过去了,然后斯巴达人在起来迅速恢复队形阻拦后面的步兵,而身后失去速度优势的骑兵自然是长矛美餐。要知道那时候没有马蹬,骑兵的数量不仅少,而且作用仅仅是冲乱敌人的阵形而已。

最大的败笔,或者说是遗憾,就是对整个战役的前后背景作详细交待,不了解历史的观众只会知道,波斯敌人来了,议会不出兵,国外带着300号人就去了,然后战死,他们的精神极大得鼓舞了后来的士兵们。。。写史书的人知道了一定气得吐血,不过人家电影是要赚钱的嘛,并且名字是"300"而不是"温泉关战役",要求就宽松些吧。

说了半天,好像一直在泼冷水,其实这部电影真的很好看的,其中或许就有抛弃了太多束缚的因素,我只是想让我们大呼过瘾之后,再仔细的思考一下,毕竟我们要永远记住的不是不死的神,而是会流血会牺牲的勇士、英雄。

在这个泛娱乐化的时代,如果只知道满足眼睛的欲望,恐怕Idiocracy / 蠢蛋进化论里讲述的那一天也不远了。

另外这么好的电影大陆不引进真是遗憾,不知道那帮人是怎么想的,同样血腥暴力的Troy / 木马屠城 / 特洛伊和魔戒等电影不都引进了么?不过也无所谓,会进电影院看电影的人有几个不会买D碟的?

Source:http://www.fwolf.com/blog/post/325

Rox-filer与linux回收站

使用环境:Ubuntu 7.04

Gnome自带的Nautilus,典型属于大而全的东西,而Xfce里面默认的Thunar要好一些,两者都有莫名其妙被关闭的经历,并且回收站还不在一个地方,Nautilus删除文件会移动到相应磁盘下的.Trash-用户名或者用户的$HOME/.Trash目录,而Thunar会把删除的文件移动到~/.local/share/Trash$目录下,还用files和info两个目录分别保存文件和信息。两个我都不太喜欢,决定换用小巧灵活的Rox-filer,唯一遗憾的是放弃了左边目录树的查看功能。

Rox不仅启动速度快,占用资源小,它的定制功能、文件选定等功能也非常灵活,比如Ubuntu中文 论坛 eexpress提供的那个"选定文件按照目录名打包"脚本放在SendTo里面就非常好用,还有选定文件之后用Shift+!输入mv "$@" somewhere命令移动文件也是个非常不错的折衷方法。对于samfs和usb设备支持差了点,不过可以用Bookmark或者Ctrl+1(红警的编队快捷键)来弥补。

但是和Nautilus和Thunar相比,Rox除了缺少目录树之外,还没有回收站的功能,这年月谁能保证不删错一个文件啊,ext3分区的文件恢复又相对麻烦,怎么办?用libtrash喽,和Rox一样都在Ubuntu的源中可以直接安装,我当前使用的版本是2.4-1。

libtrash和其他的回收站处理不同,他直接作用于linux的底层,相当于是在libc上挂了一个钩子(hook),凡是系统要进行删除文件操作的时候,不管是用rm命令,还是php的unlink函数,都会用到底层的libc,也就逃不过libtrash的掌控,所以说使用起来非常放心、省心。

也正由于libtrash的底层性,所以最好不要启用root用户的回收站功能,因为root对系统的管理要涉及到很多文件修改,如果被libtrash拒绝将会导致无法预知的结果,所以,默认的配置文件/etc/libtrash.conf不要动,复制一份为$HOME/.libtrash,作用用户级的配置文件来使用,默认设置已经比较好用了,不过我还是按照自己的习惯修改了几个地方:

#TRASH_CAN = Trash
# 和Ubuntu默认回收站目录保持一致
TRASH_CAN = .Trash

#IGNORE_EXTENSIONS = o;log;aux
# Log文件还是要保留的
IGNORE_EXTENSIONS = o;aux

#TEMPORARY_DIRS = /tmp;/var
# /var目录下的日志文件也要保护起来
TEMPORARY_DIRS = /tmp

libtrash是通过LD_PRELOAD机制来启用的,所以需要修改.bashrc作相应的设置:

# libtrash setting
export LD_PRELOAD=/usr/lib/libtrash/libtrash.so.2.4
alias TrashOn='export TRASH_OFF=NO'
alias TrashOff='export TRASH_OFF=YES'
TrashOn

真正起作用的是第一句export,设置了这个环境变量之后,才真正的把钩子"挂上",后面的alias是设置方便的开关命令,想像一下当你清空移动硬盘上的电影的时候,$HOME被塞满到爆的情况吧,这时候也许就要临时关闭回收站功能了,设置了TRASH_OFF=YES之后,删除的文件不会再被移动到回收站,而是真正的被系统删除。

除了TrashOff之外,配合Rox的SendTo机制,也许更方便一些,在~/.config/rox.sourceforge.net/SendTo目录创建一个脚本trm-Truely_Remove

#! /bin/bash
# 暂时关闭libtrash,永久删除指定文件

export TRASH_OFF=YES

# 遍历指定的文件进行处理
for I in "$@"
do
rm -rf $I
done

export TRASH_OFF=NO

这样再有想直接删除的文件,在Rox中选定然后用Send to发送到这个脚本进行处理就可以了,不过一定要确定是真正不要了的文件哦。

还剩下唯一一个缺点,就是libtrash只能指定一个回收站目录,一般是在用户的HOME目录下,如果需要管理的文件不在$HOME下的比较多,比如我习惯使用的/big1, /big2等等,删除后的文件就全都存到$HOME这里来了,即使他们不在一个分区,而不是像Naulius那样每个分区一个回收站目录。所以回收站里的数据会增长的很快,不过也有办法解决,单独给这个目录分配一个分区喽,还不用考虑磁盘碎片的问题。

参考:

update @ 2007-05-19

按照上面的设置,从命令行启动的rox能够正常写入回收站,但从Xfce菜单上启动的就不行了,原因未知,不过可以自己写一个脚本中转一下:

#!/bin/bash
export LD_PRELOAD=/usr/lib/libtrash/libtrash.so.2.4
/usr/bin/rox

在默认的设置中,.Trash目录是受保护的,不管是用shell还是用rox进入这个目录,文件都无法删除,但是可以用上面讲到的那个SendTo...脚本来完成,这样反而觉得更安全些了呢。

Source:http://www.fwolf.com/blog/post/324

2007年5月18日星期五

流氓软件与流氓

流氓软件,这个名字最近暴光率很高嘛,甚至还成立了一个反流氓软件联盟,还要立法。其实,很多人连什么是流氓软件都不知道捏。别着急,这篇文章就是为你准备的,希望大家能够用生活中的经验来理解软件或者网站,你会发现它们之间有那么多的相似之处。

先说几个容易理解的:

商业软件,共享软件,免费软件,开源软件

  • 商业软件就是正规公司,正常作生意的企业。
  • 共享软件就像公园里的游乐场,进公园不要钱,到要想玩游乐设施,掏钱。(指有限的免费功能,请意会)
  • 免费软件就是义工,不要钱,做好事,公园门口免费理发的。
  • 开源软件就是下岗职工再就业培训中心,什么都教你,但如何赚钱还得靠自己,发展好了自己也可以帮助其他下岗职工。

大网站,小网站,教育网站,个人网站

  • 大网站当然就是大公司了。
  • 小网站是个体户,提供的商品和服务有些并不比大公司差。
  • 教育网站就是教育机构,和现实中一样,除了少数有良知的好老师之外,大部分教育机构都很难让学生学到真正的知识。
  • 个人网站,就是你身边的个人,各自有着不同的爱好或任务,天天从你身边路过。

下面进入正题:

广告软件/网站广告、流氓软件/流氓网站、恶意软件/恶意网站

  • 广告软件/网站广告;广告是正常的,是软件或网站的谋生手段之一,就像大家看电视的时候已经习惯节目之间有些广告了。不过,量变会引发质变,或许你习惯了"走马灯"或者"画中画"式的广告,但我想你无论如何也无法忍受长达半个小时的壮阳药广告在孩子面前播放吧?
  • 流氓软件/流氓网站:这些软件或者网站就是身边的小流氓、骗子一样,想尽一切办法装作正人君子接近你,蒙骗你,比如一些软件告诉你我有若干若干功能,装上我吧,其实就是拿维生素当高级保健品卖的骗子;再比如成天尾随美丽姑娘的小流氓,和那些千方百计想让你把他们设置为首页、加入收藏夹的网站没什么两样,什么" 按Ctrl+D有惊喜发现",别做梦了,那是加入收藏夹的快捷键!
  • 恶意软件/恶意网站:这些就是明偷和明抢啊,钻进你的计算机,赖在你的IE上,死活就是不走,还不如小偷和强盗呢,人家把钱财抢到手之后就跑路了,可恶意软件/恶意网站还要继续QJ用户的电脑。。。

病毒、木马

  • 病毒,特点是传播性,就像家里的蟑螂、白蚁,会自己跑到邻居家一样;当然还少不了破坏性。
  • 木马,现在不打仗了,特洛伊城也早没了,但一说扫黄,有些场所早早就关门休息了,有内鬼通风报信啊。

还有一些或许不着边际的:

  • 大企业也会出次品,不过远没有大网站上的赚钱项目、美女脱衣多啊。
  • 店大欺客,大网站封你的号没商量。
  • 温馨小店,有些小网站不仅内容好,站长还非常热心。
  • 问路收费,有些高人自己办网站讲解高端技术内幕还不收钱捏。
  • 苏州AV女郎都上了医院广告牌了,网上转载一些文章不署名、不加链接算个球!
  • 网上赚钱美女的诱人标题,就和"老同学,好久不见了"这样的短信一样,打开一看不是买枪支弹药就是办证刻章。
  • 著名的"亚洲交友中心"拉下线式的赚钱网站,和传销没有本质区别。
  • 如果看电视广告也按播放次数付费的话,我退休的大姨绝对能拿到年薪10万!

互联网就像现在的社会一样,在大街上一定要瞪大眼睛,提高警惕,注意自身安全,有问题找警察SS。

Source:http://www.fwolf.com/blog/post/322

个人信息管理软件——todo/任务/日程表

Tomboy算是不错的便签软件了,但我还是觉得不够好用,我希望有一个这样的软件:
  • 能够记下我想要作的事情。
  • 能够在我作的时候,记下笔记。
  • 完成的不删除,存档起来供日后查看。
  • 有大的任务能够拆成小的,一项一项来完成。
  • 最好能够和日历结合起来,知道今天该作什么。
  • 有优先级和重要程度标记,紧急的、重要的要先作。
  • 离线使用,不依赖网络,便于管理,效率高。

但找了一大圈,始终没有十分满意的,下面是一些我试过的,以及一点感受,希望对有同等需要的朋友有帮助。

最开始是在便签软件中探索:

knotes
太简单了,只有条目,没有保存历史功能,无法记录笔记。

note
命令行界面,简单小巧,能写东西(vi),但时间的字体有些暗,命令行用起来也不方便。

notebook-gtk2
根本就没法用,点什么都没有反应。

notecase
纯记录东西来说,比tomboy方便,但是无法记录富格式文本,删除(完成)的note仍然无法管理。

rhinote
只能记一个,别的什么也干不了。

xfce4-notes-plugin
过于简单,同样是只能记录的小纸条

然后转向todo任务管理软件:

devtodo
字符界面,带优先级,可查看已删除项,但无法记录详细笔记。

gpe-todo:
总是莫名其妙得退出。

Segmentation fault

gtodo
优先级、查看已完成项都有,就是详细记录(comment)太小了,记不下太多东西,也不支持富文本。已删除的项管理方式也不是很理想。

又从wikipedia上扒出来几个综合的pim软件:

Chandler
侧重于calendar管理,整个一google calendar的离线版。

OpenSync
同步工具,虽然也可以在pim软件之间同步数据,但相信更多的是用于手机、PDA等设备。

Task Coach
侧重于任务管理,尤其适用于需要对大型任务进行分解,逐项管理子人物的情况。需要

python-wxversion python-wxgtk2.8

的支持。
个人觉得比较理想,但似乎在Ubuntu 7.04下安装不能运行,总提示No module named taskcoachlib

其他的像ThunderBird、Evolution什么的就不考虑了,太笨重,继续寻找ing。

Source:http://www.fwolf.com/blog/post/323

2007年5月8日星期二

Ubuntu从源升级的一点心得

使用Ubuntu,从5.10 Breezy到6.06 Dapper, 6.10 Edgy, 7.04 Feisty一路走来,每次都是直接从源升级,因为update-manager对我来说太慢了,算是有了一点点经验吧,不成系统,仅供参考。

速度与耐心

升级的下载速度和处理速度都要耗费大量时间,最好有一个快点的源,关掉其他任务,以提高效率。

vi /etc/apt/source.list
sudo aptitude update
sudo aptitude upgrade
sudo aptitude install
sudo aptitude dist-upgrade

aptitude带上install, upgrade, dist-upgrade要多运行几遍,确认确实没有问题了再重启,有的时候第一次运行未必就能把所有软件更新到最新。

另外aptitude和apt-get可以来回混着用用,这两个软件看似相似,又似乎有一些不太一样的地方,有时候这个卡住了,用那个就可以继续。

老大难的Python

Ubuntu中最难升级的不是内核(别人都编译好了的嘛),而是Python,每次升级都会遇到和Python相关的一大堆依赖性问题,处理方式主要有两种:

  • 通过aptitude install指定安装部分python包,这样依赖性关系更好解决一些,处理完一部分,再处理另外一部分就轻松些了。
  • aptitude提示删除的时候要小心一些,如果是正常删除旧包用新的替代还好,有时候遇到难解决的问题经常让你删了xserver或者ubuntu-desktop什么的,一般不要同意。
  • python版本升级会带来更大的灾难,实在没办法的时候可以考虑修改/usr/bin/python,这个文件是一个链接文件,如果他是指向python2.5,那么就修改为python2.4试试,反正升级完成之后再修改回来,有的时候包升级的顺序不同,会导致青黄不接的情况,需要把python暂时降级。

配置文件尽量单独保存

这样在升级的时候不容易被覆盖,同时把自己的个性设置和系统默认设置分开,管理起来更方便。

及时删除不用的内核版本

本身不影响使用,就是升级的时候影响处理速度,反正也没用了,干嘛不删,注意当前正在使用的内核版本不要删除。

敢于拔掉钉子户

有些包有着乱绕或者互锁的依赖性关系,无法处理的时候不妨删除一个试试,不过最好记下来包的名字方便以后查找问题,另外一些关键的包比如apt, aptitude, dpkg, tar, zip什么的千万别删。

不要傻等

如果出现:

Resolving dependencies...
Open:5953; closed: 4999; defer: 0; conflict: 11
No solution found within the allotted time. Try harder? [Y/n]

这样的文字,提示在指定的时间内没有找到解决依赖性问题的方案时,趁早用其他的方式吧,如果你回答Y,不仅要不厌其烦的等待下一次提示,而且找到天亮也找不出方案来。

零敲碎打

永远不要太着急,装上一个是一个,更新一个是一个,问题需要一个一个的解决。

最好还能有另外一台能用的电脑,这样即方便查一些包的资料,还能打发升级中的空闲时间。:)

Source:http://www.fwolf.com/blog/post/321

2007年5月5日星期六

HTTP Referer二三事


什么是HTTP Referer

简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了。

我的问题

我刚刚把feed阅读器改变为Gregarius,但他不像我以前用的liferea,访问新浪博客的时候,无法显示其中的图片,提示"此图片仅限于新浪博客用户交流与沟通",我知道,这就是HTTP Referer导致的。

由于我上网客户端配置的特殊性,首先怀疑是squid的问题,但通过实验排除了,不过同时发现了一个 Squid和Tor、Privoxy协同使用的隐私泄露问题,留待以后研究。

Gregarius能处理这个问题么?

答案是否定的,因为Gregarius只是负责输出html代码,而对图像的访问是有客户端浏览器向服务器请求的。

不过,安装个firefox扩展也许能解决问题,文中推荐的"Send Referrer"我没有找到,但发现另外一个可用的:"RefControl",可以根据访问网站的不同,控制使用不同的Referer。

但是我不喜欢用Firefox扩展来解决问题,因为我觉得他效率太低,所以我用更好的方式——Privoxy。

Privoxy真棒

在Privoxy的default.action中添加两行:

{+hide-referer{forge}}
album.sina.com.cn

这样Gregarius中新浪博客的图片就出来了吧?+hide-referer是Privoxy的一个过滤器,设置访问时对HTTP Referer的处理方式,后面的forge代表用访问地址当作Refere的,还可以换成block,代表取消Referer,或者直接把需要用的Referer网址写在这里。

用Privoxy比用Firefox简单的多,赶紧吧。

From https to http

我还发现,从一个https页面上的链接访问到一个非加密的http页面的时候,在http页面上是检查不到HTTP Referer的,比如当我点击自己的https页面下面的w3c xhtml验证图标(网址为 http://validator.w3.org/check?uri=referer),从来都无法完成校验,提示:

No Referer header found!

原来,在http协议的rfc文档中有定义:

15.1.3 Encoding Sensitive Information in URI's

...

Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol.

这样是出于安全的考虑,访问非加密页时,如果来源是加密页,客户端不发送Referer,IE一直都是这样实现的 Firefox浏览器也不例外。但这并不影响从加密页到加密页的访问。

Firefox中关于Referer的设置

都在里,有两个键值:

  • network.http.sendRefererHeader (default=2)
    设置Referer的发送方式,0为完全不发送,1为只在点击链接时发送,在访问页面中的图像什么的时候不发送,2为始终发送。参见 Privacy Tip #3: Block Referer Headers in Firefox

  • network.http.sendSecureXSiteReferrer (default=true)
    设置从一个加密页访问到另外一个加密页的时候是否发送Referer,true为发送,false为不发送。

利用Referer防止图片盗链

虽然Referer并不可靠,但用来防止图片盗链还是足够的,毕竟不是每个人都会修改客户端的配置。实现一般都是通过apache的配置文件,首先设置允许访问的地址,标记下来:

# 只允许来自domain.com的访问,图片可能就放置在domain.com网站的页面上
SetEnvIfNoCase Referer "^http://www.domain.com/ " local_ref
# 直接通过地址访问
SetEnvIf Referer "^$" local_ref

然后再规定被标记了的访问才被允许:

 Order Allow,Deny Allow from env=local_ref  

或者

    Order Deny,Allow    Deny from all    Allow from env=local_ref  

这方面的文章网上很多,参考:

不要使用Rerferer的地方

不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变,不管是通过上面介绍的Firefox扩展,或者是Privoxy,甚至是libcurl的调用,所以Rerferer数据非常之不可信。

如果你想限制用户必须从某个入口页面访问的话,与其使用Referer,不如使用session,在入口页面写入session,然后在其他页面检查,如果用户没有访问过入口页面,那么对应的session就不存在,参见 这里的讨论。不过和上面说的一样,也不要过于相信这种方式的"验证"结果。

个人感觉现在Rerferer除了用在防盗链,其他用途最多的就是访问统计,比如统计用户都是从哪里的链接访问过来的等等。

Source: http://www.fwolf.com/blog/post/320

FeedBurner不认我的Feed了

突然发现,我最近写的几篇文章都没有被rss阅读器收录,以致于我也无法用email转发到其他镜像上去,本来以为是FeedBurner等网站访问国内受阻,今天无意中使用 FeedValidator检查才发现,无法访问我的feed!同时,GoogleReader也无法访问,看来真的是出问题了。

FeedBurner的错误提示为:

There is an issue that must be addressed with your source feed for the feed "Fwolf's Blog"

Read timed out

FeedValidator W3C的feed检查工具(似乎W3C使用的是FeedValidator的开源程序,可以在 这里下载,同时在sf.net上也登记了,不过没在上面发布文件),都会返回超时错误:

Server returned timed out

偶尔还会返回更离谱的错误信息:

Server returned (104, 'Connection reset by peer')

让我有一种自己的网站被封锁了的感觉(封锁是双向的,出国访问和从国外访问国内都受影响)。

GoogleReader的错误提示:

No feed available for "http://www.fwolf.com/blog/feed"

开始查找错误的原因,首先看看是不是被封锁了的原因,使用匿名web代理http://anonymouse.org/anonwww.html能够访问,从DreamHost主机上wget也能成功,排除被封锁了的可能。本来我写的内容也不应该会被封锁嘛,那是不是 FeedBurner服务器的问题呢?有这个可能,但我没法实验去。

分别把AkismetSpam Karma 2等反spam插件停止,问题依旧,说明不是被anti spam程序阻止的问题。

是不是WordPress的问题呢?记得WP 2.0.6曾经和FeedBurner有过冲突,参见:

不过我现在用的版本是2.1.1,应该没有上述问题,不过还是排除一下的好,把WP升级到了最新的2.1.3版本,问题依旧,初步排除WP自身的问题。

是不是升级之后,.htaccess简化网址的配置文件出问题了?但是我分别用FeedValidator FeedBurner检查RSS Feed的直接网址http://www.fwolf.com/blog/wp-rss2.php,依然都是超时错误,排除。

是不是php执行出了什么错误了呢?在php的errorlog文件中我发现了:

[04-May-2007 19:45:27] PHP Fatal error:  Maximum execution time of 90 seconds exceeded in D:fwolfwordpresswp-contentpluginsmarkdown.php on line 1761

不过我直接用浏览器访问我的Feed是可以的,应该也不是php的问题,不然我的blog应该整个显示不正常才对。

继续探索,发现了更离奇的事情,在apache的access.log中我发现如下记录:

66.150.96.109 - - [04/May/2007:20:12:13 +0800] "GET /blog/feed/ HTTP/1.1" 200 24315 "-" "FeedBurner/1.0 ( http://www.FeedBurner.com)"

208.97.167.25 - - [04/May/2007:20:14:14 +0800] "GET /blog/feed HTTP/1.0" 200 86896 "-" "Wget/1.9.1"

67.19.173.84 - - [04/May/2007:23:16:44 +0800] "GET /blog/feed/ HTTP/1.1" 200 24315 "-" "FeedValidator/1.3"

这说明FeedValidator FeedBurner都确实访问到了我的服务器,可他们怎么还是会超时呢?从浏览器访问的时候,虽然不是很快,但也没有30秒、60秒那么长,应该不会超时的。不过为了确认一下,找了一篇文章的comment的feed: http://www.fwolf.com/blog/post/310/feed,结果就可以通过检查:

Congratulations!

[Valid RSS] This is a valid RSS feed.

会不会是没有返回文件大小的原因?在wget的时候会看到:

HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/xml]

FeedBurner只允许小于512k的feed,如果服务器不返回文件大小, FeedBurner就会中止操作?我试着返回一个伪装的文件长度,在wp-rss2.php中添加header("Content-Length: 10000");,这样用wget只能下载10k的内容,但是feed检查工具仍然报timed out错误。

无奈,只好给FeedBurner反馈意见,虽然是5.1休假期间,还是很快就收到了回信,大概说仍然是网站响应速度太慢了的问题(我从其他搜索得知限制大概是10秒以内),除了提升响应速度之外,暂时没有其他解决办法。

精疲力尽,忽然禁用Markdown Extra这个plugin之后,居然没问题了,看来还是响应时间的问题,Markdown Extra用到了太多的正则替换,加上最近写的几篇文章都不算太短,服务器响应略微慢了一些,加上中国到美国的数据传输时间,怪不得会超时呢。我也是疏忽了,上面的access.log和php的errorlog,都多少有些提示,但我没有注意到。

虽然定位了问题所在,但Markdown Extra还是要用的,没了它我写文章的兴趣会减少一大半,好在WP可以调整RSS中输出的文章数量(Options->Reading->Show the most recent: ? posts),我试了一下,默认是返回10篇,不过会超时,调整到7篇的时候就不会超时了,为了保险起见还是设置为5好了。希望网上的抓FEED机器人不要太懒,免得把文章跳过去喽。

几点感受:

  1. 发现问题之后,要善于寻找原因,不能盲目瞎摸,有些问题不找到根源,重试一万遍也不会改变,还是要一层一层的反复分析、排除。

  2. 如果在程序中要大量用到Markdown语法的话,为了提高速度,可以采用空间换时间的方法,除了保存原文之外,把解析的结果也存一份,这样访问速度快。

  3. 作开发的时候对速度考虑的重要性要提高,10秒就超时啊,怪不得我不适应,被铁通蹂躏惯了。。。

顺便推荐一个不错的在线工具:

Source:http://www.fwolf.com/blog/post/319

从windows迁移到Ubuntu Linux一例

从windows迁移到Ubuntu Linux一例

注: 本文内容比较杂,涉及WGA、tnt2显卡、gnome、xfce、nfs、游戏、wine、font、defoma、socks5、ssh等,这些问题我就不再一一整理了,请各位自行攫取。

起因

一位同事告诉我,他的电脑好像中病毒了,总提示什么"您可能是软件盗版的受害者",我以为这又是哪个流氓软件的把戏呢,故意说得严重些吓唬用户,然后进一步欺骗什么的。于是到他电脑上一看,提示是这样:

从windows迁移到Ubuntu Linux一例p1

原来我当初的想法是错误的,根本没有流氓软件,这个提示是100%正宗的微软出品,根据提示还可以链接到微软的网站,提示当前windows使用的序列号是非法的:

从windows迁移到Ubuntu Linux一例p2

这时才想起来,这台机器大概半年前重装过,装了一个不知名版本的winxp(当然是盗版),后来提示快到期了需要激活,就找了个算号器算了半天,找了个可用的序列号用上了。查看已安装的程序可以发现,由于windows自动更新一直开着,4月25号通过自动更新安装了一个WGA(微软正版增值计划)工具,第二天,也就是4月26号就开始提示了。

这台电脑是联想的品牌机,购买的时候是带着正版win98操作系统的,不过时间比较久远了,win98在当今的网络环境下,让一个菜鸟使用,存活期实在太短了,所以才重装的xp。现在既然人家已经发现"盗版"的事实了,还是不要用了,结合前一段时间成功为其他2位同时安装Ubuntu Linux的经验,决定把这台机器改装Linux。

老爷机

先来介绍一下这台老爷机,2002年初购买的联想开天4600,P4 1.7的主频,256M SDRAM内存,40G硬盘,Nvidia Riva Tnt2的显卡,按说已经到了退休年龄,但为了节约资金,加上使用岗位的工作也不太多,或者说就是给他们用来上上网,打打游戏的,才一直在用着。

所装Linux为Ubuntu 7.04 Feisty Dawn,新鲜出炉的,呵呵。

基本系统与显卡

个人感觉直接用Ubuntu的Live CD安装太慢了,所以用一张Ubuntu server光盘先安装基本系统,再安装ubuntu-desktop,从局域网内的镜像源下载,过程很顺利。

至于显卡驱动的安装,由于Nvidia Riva Tnt2是相当老的卡了,所以需要安装nvidia-glx-legacy包,但光这样还不行,无法启动glx,只有把xorg.conf中Device段中的Drivernv改成nvidia才行,glxgears也运行正常,不过这样不仅充分体现了老式N卡"黑"的特点,最高还只能上800×600的分辨率,所以只能把 Driver设置为默认的nv,不使用glx,但能够用1024×768的分辨率,反正也不玩3D游戏。详细的安装在原来写的Ubuntu点滴中有介绍。

由于没什么办公需要,所以必备的软件无外乎浏览器、qq、休闲游戏了。浏览器当然是使用Firefox,QQ也用LumaQQ实现了,至于休闲游戏嘛,我推荐的蓝迪游戏由于游戏太少、玩家太少,同事看不上,所以还得想办法装其他的,不过这是后话了。

基本系统安装完毕之后,去掉不必要的服务,使用Gnome桌面,感觉这台老爷机跑起来还是吃力,系统内存需求大概和机器配置相当,如果能再多128M内存情况就会好很多了。

系统改进与文件共享

鉴于Gnome桌面实在是太慢,所以用轻量级桌面系统Xfce替代了,再用SWiftfox替代原生的firefox,这样感觉系统快了许多,只开一个空的firefox的情况下内存占用在160M左右,加上Xfce本身效率和相应速度就比Gnome要好,现在系统的速度就"相当"可以接受了,夸张一点说比原来windows还要快一些呢。

在办公室的局域网上,共享是难免要用到的了,对于菜鸟用户来说,使用linux共享最好的方式就是在fstab里直接mount服务器上的共享文件夹,这样日常使用更方便。以前和windows机器共享文件我都是用Samba,不过这次是Linux和Linux机器之间的共享,我鼓捣了一会儿Samba的配置,很容易就通了但中文总是不行,不管是iocharset=utf8还是iocharset=cp936 或者codepage=cp936都不行,于是转变方式,使用NFS。

没想到NFS配置如此简单,因为懒得和linux内核扯上关系,服务器上使用的是nfs-user-server,配置文件为/etc/exports,由于没用权限控制,所以一句配置就够了:

/home/fwolf/links/public    *(rw,sync)

把public这个目录共享给全部用户(*),设定可读写权限(rw),sync不知道啥意思,网上抄过来的配置,文档中也没有。客户端安装上nfs-client之后,在fstab里面加上一行:

fwolf:/home/fwolf/links/public      /media/fwolf    NFS defaults    0   0

这样就实现了NFS共享文件夹的自动挂载。再把挂载点的链接拖到文件管理器Thunar的左侧Tree栏中,同事用起来就没问题了,不过我这里倒是遗留下来一个小问题。

我的这个~/links/public目录在Samba和NFS下都共享这呢,同时这个目录中还有一个链接文件(比如叫csi),指向我电脑上另外一个位置,问题来了,windows机器通过samba访问时,可以访问链接文件csi里面的内容,在他们看来,csi就是一个普通的目录;而这台Linux通过NFS访问时,客户端Linux看到的csi仍然是一个链接文件,当然链接文件对于客户端Linux来说是指向客户端电脑中的某个文件的,它当然不存在了。所以NFS共享的情况下,无法通过链接文件来"灵活"添加共享文件了。

Wine与休闲网游

同事玩的休闲网游指的是QQ游戏、中游、边锋、联众等多人在线棋牌游戏,抱着不大的希望,我用wine(Ubuntu中自带的,并非EasyWine等修改版)一个一个的安装、运行,虽然安装都很顺利的完成了,但能运行的之后联众:

  • QQ游戏,按照网上说的先安装ie6再运行,仍然是在弹出登录对话框之后报错,错误还无法关闭。
  • 中游,iGame.exe运行之后死活不出来。
  • 边锋,说聊天控件无法运行,让我重新安装,难道不聊天就不能玩游戏么?

还是最老牌的联众游戏勉强可用,把新、旧中国象棋装上试了一下,效果满好的,就是在大厅选游戏选房间的时候,鼠标点房间名无效,需要用键盘移动光标过去,再敲回车进入。偶尔还会自动下载一些扩展名为gls的东西安装,不过基本都不妨碍使用。

在使用wine进行游戏安装、测试的时候,刚开始特别的慢,并且wine一开始运行xorg就把cpu占到100%,几乎什么都没法用,后来在EasyWine linux 游戏社区 找到了答案,问题解决之后,wine的速度还是非常快的,套用网友的一句话,简直比直接在windows下运行还快呢。

wine特别慢,xorg吃cpu的原因主要是系统缺少gbk字体,运行一下xfontsel,如果xorg把cpu占到100%,过一会儿才弹出对话框的话,就更加肯定是这个问题了。首先要准备中文字体文件,比如我的/big2/fonts/xpfonts/simsun.ttf,然后在/etc/defoma/hints中添加一个名为ttf-sim-simsun.hints 的文件,内容如下:

category truetype
begin /big2/fonts/xpfonts/simsun.ttf
Family = Sim-Sun
FontName = SimSun-Medium
Encoding = Unicode
Location = Chinese-China English
Charset = ISO10646-1 GB2312 BIG5 ISO8859-1 GBK
UniCharset = GB2312 BIG5 ISO8859-1 GBK
GeneralFamily = SimSun
Weight = Medium
Width = Fixed
Shape = Upright
Alias = Sim-SunGB SimSunGB
Foundry = Sim
Priority = 20
X-Family = SimSun
X-ElementAlias=foundry=default:family=simsun:resx=72:resy=72
TTCap = halfwidth-bw=0.5 italic-angle=0.167 no-roblique no-oblique no-ritalic
end

然后在defoma中注册Simsun宋体字体的hints文件:

cd /etc/defoma/hints
defoma-font reregister-all ttf-sim-simsun.hints

最后修改/etc/X11/xorg.conf,确保Files段有如下内容:

FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/CID"

这样,wine能够找到正确的字体之后,速度就飞快了。

Socks5代理

联众游戏虽然能玩了,但是联众不同的游戏使用不同的端口,而同事所用机器,受防火墙的限制,无法直接连接这些端口,如果使用联众自带的proxy功能,能登录上,但游戏功能也随之受限,所以考虑使用socks5代理。

局域网内的服务器不受防火墙端口访问限制,但如何让它提供socks5代理服务呢?我在网上搜索了一下,发现Ubuntu下居然没有显而易见的socks5代理服务软件,只有socks4的,就我的理解,socks5和socks4还是区别很大的,所以继续寻找,终于 SOCKS Forwarding With OpenSSH这篇文章提醒了我,可以使用ssh的隧道功能提供socks5代理服务。

ssh的隧道代理功能非常有趣,如果你用ssh -D 1080 user@host登录远程主机之后,不仅可以正常的操作shell,同时还在本机的1080端口建立了socks4/socks5服务。本机的1080端口相当于隧道的入口,用户请求从这里进来,在ssh登录的主机出去,然后用户请求返回的结果再从ssh登录的主机经由ssh隧道返回。其实国内也有人介绍过这种功能了,比如可以使用dreamhost的ssh功能为自己提供代理服务,只是加上socks就想不起来了。

方法了解之后,操作就简单了。首先要配置到服务器的ssh自动登录(我可不想每次都手工输入密码),然后把登录命令写成一个脚本,ln到/etc/rc2.d/目录下,起名叫S99ssh_socks,这样每次开机就会自动ssh登录到服务器,同时在本机的1080端口创建socks服务了。别忘记把ssh的超时关闭去掉,编辑 ~/.ssh/config,加上:

ServerAliveInterval 300

每隔300秒向服务器发送活动信息,免得被踢。注意这种方式提供的代理服务只能够供本机使用(监听127.0.0.1地址),同时udp协议无法使用这种代理。

如果用Tor来提供socks服务也是可以的,我在没找到ssh隧道方法的时候也是这样凑数的,不过大家都知道,tor的速度嘛,呵呵,玩游戏总掉线是要扣分滴。

小结

这次迁移基本上已经完成了,用到的软件不多,主要时间花费在系统调优和用wine测试各个游戏上面,没有什么高深的技术,但是把现有的工具融合在一起,为那些对windows过于依赖的人们提供一个新的选择,还是有意义的,至少,不会再有人让你整天给他杀毒了吧?呵呵。

Source:http://www.fwolf.com/blog/post/318

Ubuntu FeistyFawn中文字体配置的变化

今天把Ubuntu从Edgy升级到了Feisty,如果用update-manager的话我这里太慢,直接修改apt源升级的,自行解决了一些包的依赖关系之后,升级还是非常顺利的,以前常有的驱动问题本次没有出现,明天就升级公司的那台机。

几乎升级完成第一件事就是搞定中文字体,发现Feisty的字体配置有了明显的变化,原来的一个大配置文件/etc/fonts/fonts.conf现在被分成了许多个小文件,大部分存放在/etc/fonts/conf.avail目录下,并且使用/etc/fonts/conf.d目录下的连接来调用(/etc/fonts/conf.d这个目录下也有少部分配置文件),这种机制和 rc2.d以及Apache的mods-available及其相似。

所以说,我的习惯非常适合这种升级和变迁,就是把自己的特殊配置写到单独的文件中,然后ln -s/etc/fonts/local.conf,最后修改/etc/fonts/conf.avail目录下的40-generic.conf60-latin.conf这两个文件,在serif、sans-serif、monospace三系字体的定义中,把 Simsun添加到DejaVuBitstream Vera之后就可以了。这样作的好处就是下次升级时所需要作的调整最小。

fonts.conf的语法仍然没有大的改变,以前已经介绍过了,不过今天又发现两篇不错的Feisty字体配置相关文章,推荐一下:

PS: 安装完成之后autoclean了一下,清理出来1.3G空间,呵呵。
PS2: 如果中文输入遇到什么问题的话,大概是需要删除scim-bridge,参考下面两篇文章:

我的办法是把/etc/X11/Xsession.d/95xinput中原来的

export GTK_IM_MODULE="scim-bridge"

改成

export GTK_IM_MODULE="scim"

还有就是scim的选字栏位置总是飘忽不定。。。

Update @ 2007-04-24

如果openoffice 2.2无法启动,编辑/usr/bin/ooffice,添加下面这行:

export GTK_IM_MODULE="xim"

还是有些怪怪的。

Apache无法解析php程序了,提示

Invalid command 'PHPIniDir', perhaps misspelled or defined by a module not included in the server configuration

原来在升级feisty的时候,/etc/apache2/mods-enabled/php5.load这个文件丢了,重新a2enmod php5一下就可以了。

Source:http://www.fwolf.com/blog/post/315

[Ubuntu]共享PDF打印机

Ubuntu配置了PDF打印机之后,使用很方便,想制作pdf文件了,就直接打印到这个打印机上就可以了。但怎么能够共享给局域网内的其他用户,让他们也方便的使用呢?

刚开始从Samba下手,结果配置了半天,不是连接不上,就是安装上了打印机后仍然提示"拒绝访问"。看了这篇如何架设Linux打印服务器之后,转向cups着手,很简单就解决了。

cups一般在Ubuntu都是安装好了的,配置文件为/etc/cups/cupsd.conf,默认设置只监听localhost,修改成监听631端口,631就是cups服务所使用的端口:

# Only listen for connections from the local machine.
#Listen localhost:631
Listen 631

按照上面的修改,配合默认设置中,好像已经开放了对局域网内的访问,因为下面有分别对localhost@LOCAL赋予访问权限的设置:

# Restrict access to the server...

Order allow,deny
Allow localhost
Allow @LOCAL

所也我也没作其他设置改动,后来局域网内其他的机器访问也都正常。

监听端口修改之后,重启服务,别人就能够使用cups服务了,使用分两种方式:

一种是web访问,可以查看打印机列表、打印机设置以及所有完成的打印任务等,直接通过web访问

http://my_machine:631/ 

就可以了。

第二种使用方式自然就是配置成网络打印机了,通过web访问可以得到打印机的地址,比如我的两台打印机分别为:

http://my_machine:631/printers/LaserJet-1150 http://my_machine:631/printers/PDF-Printer 

第一个是实际的打印机,第二个是PDF打印机,在客户端上安装打印机的时候,使用这个地址就可以了。这也是cups共享打印机方式和samba的最明显区别了,如果samba配置好了,网络打印机的地址一般应该是:

\\my_machine\LaserJet-1150

这种形式。在winxp添加网络打印机的操作时,也可以看到这两种形式的例子,分别对应不同的类型。 在安装PDF打印机的时候,需要选择驱动程序,个人觉得最好选择一个彩色的PostScript打印机,比如我选的就是"MS Publisher Color Printer",这样可以打印彩色的PDF文件。

打印机正确共享之后,基本上就可以提供PDF打印服务了,由于没有配置身份验证,局域网内的用户都是匿名使用的打印服务,所以打印到PDF打印机上的任务,所生成的PDF文件默认是保存在/var/spool/cups-pdf/ANONYMOUS这个目录之下的,所以在samba共享目录中创建一个到这个目录的链接文件即可:

ln -s /var/spool/cups-pdf/ANONYMOUS/ /home/fwolf/links/public/pdf_printer

不用担心访问权限问题,这个目录的属性是777,owner是nobody:nogroup。

我以前说过,PDF打印机默认会把文件存储在$HOME/PDF目录之下,好像不能修改,其实是错误的,看看/etc/cups/cups-pdf.conf这个文件,用户打印和匿名打印的存储方式都在里面定义着呢。

最后仍然存在一些遗憾,cupsd不识别中文文件名,打印中文名称的文件时,会生成"_____"这样的文件名,需要手工修改为正确的名称。

另外我在VMWare里面用winxp添加Ubuntu主机的cups共享打印机时,连接PDF打印机一切正常,连接实际打印机就会"没有响应",不知为何。

PS: cups打印出来的测试页上有标尺,能够当刻度尺用么?准确否?谁验证过?

Source:http://www.fwolf.com/blog/post/317

经典语录集的构想

互联网带来太多经典话语了,搞个网站,专门记录、评价这些话应该不错,英文的似乎已经有了。

经典语录集的构想

* 经典语录集
o 思路
+ 要经得起时间的考验
+ 要让大多数人信服 Internal Link Internal Link
o 期待效果
+ 确实经典
# 推荐的人多
# 存活期长
# 实为经典
+ 不够经典
# 无法长期被人认同
o 实现
+ 用户发表语录
+ 用户推荐语录
+ 系统自动删除过期的语录
# 重新提交之后,推荐数和存活期都重新计算
o 语录属性
+ 推荐数
# 推荐一次,存活期延长1天
+ 发表时间
+ wizard 存活期
# +: 推荐数
# -: 时间流逝

Freemind mm: 经典语录集的构想

Source:http://www.fwolf.com/blog/post/316