Skip to Content

labrador 的blog

一个列目录的php程序

做目录列表的PHP程序网上太多了,我写的这个也是基于别人的一个程序,外观基本上和原来的一模一样,不过里面的程序基本已经给我改得面目全非了。

这个列目录程序最大的特点是结合apache的.htaccess实现了虚拟目录的功能。这里有一个样例。直观上看,这是主机cnbits.co.cc下的ftp目录的列表,实际上,那个主机ftp目录下只有这个列表程序,真实的目录是_ftp_,可以在这里访问。

这样做的动机是为开放的ftp提供安全性。假设我把_ftp_目录作为一个公共ftp供大家随意上传,如果有人上传了一个恶意的php程序,因为这个主机也同时提供了从web界面访问_ftp_目录的功能,那么恶意程序就通过web界面被执行,整个主机也就陷于危险之中。使用.htaccess限制php的执行也不能解决问题,因为虚拟主机上,子目录的.htaccess可以覆盖上级目录的.htaccess的设置,导致安全性措施失效。

Emacs的TRAMP够强大

Emacs的TRAMP是用来访问scp/ssh/smb服务器上的文件,可以做到像读写本地文件一样编辑远程的文件。以下是我对TRAMP的配置。

CSS真是复杂

我想CSS设计者的初衷是做一个简单方便的网页风格描述语言,让不具备太多计算机程序设计知识的页面设计师来说也能轻松上手。理论上说,CSS也确实不复杂,但现实中浏览器开发者对CSS有着不同的诠释,这一下子让CSS变得非常难以驾驭。这并不是说CSS不能达到你的想要效果,而是想用尽可能简单而有具有维护性的CSS代码在多种浏览器上实现理想的效果相当的困难。这里有几篇与CSS相关的文章,提到了各种浏览器渲染的区别以及如何制作适应不同浏览器代码的技巧。

Drupal的短消息(privatemsg)模块

Drupal短消息(privatemsg)模块目前还处于开发阶段,功能比较弱,不错凑合用用也足够了。

我做了一个此模块的翻译po文件,其中只包含了用户界面的翻译,后台的就不管了。6.x-1.0-rc2版有一处字符串没有用t()标记出来,所以需要先用一下下面的补丁,据说此问题已经在下一个版本里解决了。还有另外一个问题,菜单里用的“Messages”不会被汉化为“短消息”,也是需要加一条t()来解决。

一个生成unified diff的php程序

就是patch的那种格式了,也就是用diff -u old.file new.file生成的文件差别信息。这里只有对比两个字符串的,对比两个文件的稍微改改就行了。php可以用现成的xdiff_string_diff一类的外置函数来处理,效率会比较高。但有些虚拟服务提供商可能没有提供此功能,这种情况下可以考虑使用这个程序。应用patch可以用PhpPatcher;生成可视化文件差异可以用Text_Diff

算法比较简单,就是一般的dynamic programming的LCS(longest common subsequence)。有很多可以优化的地方,比如开头和结尾相同的行去掉;用hash table把只在其中一个文件中出现的字符串去掉;字符串比较时先对比hash(估计php应该做了这方面的优化了吧)。当然,真的对速度有要求的话还是用上面说的xdiff的库比较好,那个实际是调用native library来完成的,纯php再优化也比不过了。

随手笔记

开发的话需要安装linux-header-2.6.19.1

启动时不能用参数psubdir=puppy400,否则save personal session files to a parition就不起作用了。只能去掉psubdir让initrd/init脚本自动去找.sfs文件的位置。

.pet中的pinstall.sh所使用的目录必须是./usr/local/bin这种形式,之前必须要有一个".",因为在unleashed环境中运行它时,它应该把修改写入rootfs-complete/目录,而不是/目录。

未来的Puppy Linux

可能会把多层式文件系统从unionfs改为aufs。
http://www.murga-linux.com/puppy/viewtopic.php?p=203922

下一个版本的Puppy 4.1(?)不需要中文支持附加包里面那个ePDFview补丁了。
http://www.puppylinux.com/blog/?viewDetailed=00174

可能会用SAKURA替代现有的rxvt作为默认虚拟终端。
http://www.murga-linux.com/puppy/viewtopic.php?t=29788

会有一个代号为UniPup的Puppy Linux分支版本,它的特色是整个根文件系统都在内存中,实际就是一直保持在initrd阶段。而只有/usr/中的内容是存放在.sfs文件中。
http://www.puppylinux.com/blog/?viewDetailed=00188

有人做了texlive的.sfs文件,也就是说可以在Puppy下用LaTeX了,不过目前好像还是有些小毛小病的,等过段时间成熟一点可以拿来试试。

对做Research很有帮助的两个小工具

Referencer,一个论文引用管理工具,支持BibTex导入/导出,论文条目可以链接到文件。
Xournal,可以给pdf文件做批注,它并不直接修改pdf文件,而是把批注作为另外的文件保存,如果需要可以与原来的pdf合并成新的pdf。

本站增加了BUEditor以方便bbcode编辑

本站使用bbcode作为默认的排版语言,虽然它并不复杂,要比HTML简单很多,但是指望每一个人都能熟练使用也不现实。为了寻找我要的功能,我都还经常去看bbcode的源代码。为了方便各位使用者,要么使用自动插入bbcode标签的模块,比如quicktags,要么使用所见即所得的模块,比如tinymce。但quicktags项目似乎半死不活,不能支持Drupal 6.x,WYSIWYG的模块似乎总是和我用的opera过不去。所以我一直都是直接手写bbcode。

今天sasaqqdan提到BUEditor可以提供类似quicktags的功能,我把它装在了这个网站上试了试,确实不错。相对来说它对HTML的支持要强一点,bbcode也能支持,不过功能似乎很弱,比如缺少HTML方式中增加标题标签的功能。我折腾了半天,把HTML的标题标签功能移植到了bbcode上,虽然不算很优雅,不过凑合也能用用。

改编的drupal用bbcode模块

本站就是使用的这个模块,输出的效果可以参考这个说明

相比与官方版本主要的变化有
  • 合并了用于显示代码块的syntaxhighlighter,并对其做了一定的简化,增加了针对不能识别的语言自动fallback到text模式的功能;
  • 改善了标题的显示效果;
  • 增加了css风格。

这个模块可以在这里下载。另外这里还有改进的syntaxhighlighter的源代码,bbcode包中的是已经被压缩过的。
同步内容