PicLens 1.6 – FireFox上的华丽图像展

Piclens 原本是为 Safari Web 浏览器量身定做的一款网页图片预览工具,它允许用户在浏览网页的同时将网站上出现的一张张图片以全屏Slideshow的显示展示给用户.
而现在,包括Windows和Mac的FireFox均可以安装一个扩展来实现3D墙的功能,效果非常灿烂夺目.而且它支持众多Web2.0网站和图像搜索站点.

支持如下站点:

 

图床

社交网络

图像搜索

  Flickr
Photobucket
Picasa Web Albums
DeviantArt
Smugmug
Facebook
MySpace
Bebo
Hi5
Friendster
Google Images
Yahoo Images
Ask Images
Live Images
AOL Images

Netscape Bookmark File Format

The Microsoft Internet Explorer Favorites file format is exactly the same as the Netscape Bookmark file format. Netscape usually stores its bookmarks in an HTML file called Bookmark.htm.

File Format

The file starts with the following text:

 

<!DOCTYPE NETSCAPE-Bookmark-file-1>
    <!--This is an automatically generated file.
    It will be read and overwritten.
    Do Not Edit! -->
    <Title>Bookmarks</Title>
    <H1>Bookmarks</H1>

The rest of the file is as follows:

 

    <DL>
    {item}
    {item}
    {item}
    .
    .
    .
    </DL>

An item may be either a subfolder or a shortcut. If {item} refers to a subfolder, it is:

 

    <DT><H3 FOLDED ADD_DATE="{date}">{title}</H3>
    <DL><p>
        {item}
        {item}
        {item}
        .
        .
        .
    </DL><p>

If {item} refers to a shortcut, it is:

 

    <DT><A href="{url}" ADD_DATE="{date}" LAST_VISIT="{date}"
    LAST_MODIFIED="{date}">{title}</A>

NoteThroughout this file format definition, {date} is a decimal integer that represents the number of seconds elapsed since midnight January 1, 1970.

Exports and Imports

To export data to a Web address, send an HTTP post request. To send a post request, call HttpOpenRequest with the following parameter values:

  • verb: “POST”
  • http version: “HTTP/1.0”
  • referer: none
  • accept-types: none(implies “text/*”)

Imports from a Web address are accomplished by calling the URLDownloadToCacheFile function.

统计项目代码行数

切换到你项目的根目录下,执行下面的命令,会逐行显示每个文件的行数,和累加值。

wc -l `find ./ |grep .php | grep -v .svn`

这里是统计PHP代码,对所有类型的文件分别执行这个命令,把结果加起来就可以了。

注意,这种方式把注释和换行都算作代码内容了,是粗略的统计。

IE 盒模型

很多网站在写HTML的时候,没有指定DTD,也就是没有设置DOCTYPE。

上学的时候,老师说,DreamWeaver 生成的页面,头部的DOCTYPE都是垃圾信息,应该直接写成<html>。

学院派真是误人子弟……

W3C标准是要制定DOCTYPE的,最显著的区别,我认为就是IE显示Div等元素时采用的盒模型问题。

也就是说,对margin、border等样式所占的面积,是算在Div内部还是外部?

在设定DOCTYPE之前和之后,显示方式是完全不同的。


可以在

http://leakon.googlecode.com/svn/trunk/leakon/html/ie_box/

看到源码。

通过设置dtd参数,可以看到在两种DOCTYPE下显示方式的不同。

但在Firefox等现代浏览器下,两种显示方式是一样的。

Symfony 温故而知新

使用Symfony的同学,连接数据库时,如果想指定编码,需要在得到数据库Connection的时候发送一条SET NAMES UTF-8语句,以保证统一。

针对这个问题,我以前写过2篇Blog,地址:

里面是通过修改Creole的源码,symfony/vendor/creole/Creole.php,加入一个setUTF8方法。

这个方式管用,但不是最好。

这两天看了Symfony的 Code snippets ,发现很多Symfony的运行机制,看到一个FilterChains,可以由用户添加一个Filter到调用链中,可以在系统初始化时自动运行。

利用这个特点,把设置连接编码的语句,添加到一个filter中,每次自动运行:

isFirstCall()) {
$connection = Propel::getConnection();
$query = ‘SET NAMES gbk’;
$statement = $connection->prepareStatement($query);
$statement->executeQuery();
}
// execute next filter
$filterChain->execute();
}
}

再编辑 apps/front/config/filters.yml 文件,在开头加入:


FilterGBK:
class: FilterGBK

这样就可以达到目的,而以前的实现方式需要修改插件源码,无法在一个系统中运行多个Symfony项目。

随着逐渐深入Symfony,并反复查看文档和代码,可以学到很多Web开发的经验和技巧。

这回,深刻体会到了“温故而知新”的内涵。

Symfony Apache Url Rewrite

今天在服务器上新装了apache,把用Symfony开发的后台程序部署到服务器上,发现生产版本的环境无法使用,居然报404 Not Found。

刚开始没想到是什么原因,反复翻文档,检查虚拟主机的配置,和目录权限,以及.htaccess文件,都正确无误。

在自己的Windows环境是好好的,但在服务器上却不行。

后来就拿.htaccess开刀,因为受到一点Apache手册的启发,就是在.htaccess中添加一些错误代码,以检查.htaccess是否正确运行。

其实本来就应该能想到这样做的,只是觉得问题可能出现在其他地方。

果不其然,就是.htaccess中的<IfModule mod_rewrite.c>,在这个分支里面随便写任何东西,都不会起作用。

看来Apache没有正确安装mod_rewrite.so。

一时也不知道如何验证,后来在网上查了半天才查到。

先列一串命令吧:

  • apache/bin/httpd -l
    列出当前环境中安装了哪些module
  • apache2/bin/apxs -c mod_rewrite.c -lgdbm
    在Apache源码路径的modules/mappers/中,可以找到mod_rewrite.c等所有模块的源码,在这个路径执行apache2/bin/apxs(注意,这里的apxs是apache安装的绝对路径),就会自动编译这个模块,生成.so文件到modules/mappers/.libs/,刚才那个mod_rewrite.so就生成在这里
  • apache2/bin/apxs -i -A -n rewrite mod_rewrite.so
    在modules/mappers/.libs/这个目录下执行上面的命令,会在apache2/conf/httpd.conf中加入一行
    #LoadModule rewrite_module     modules/mod_rewrite.so
    注意前面是带#的
  • apache2/bin/apachectl configtest
    检查当前的配置文件语法是否正确,不用等restart不成功再去检查错误了

通过这样几步,检查没问题后,重启apache,mod_rewrite模块就安装完成了。

再打开Symfony的后台,所有页面都可以正确打开。

我通常都在自己的笔记本上开发程序,用xampp套件,很多常用模块都是默认安装好的,使用之前只要把httpd.conf文件中相应模块前面的#去掉就可以了,一下子把程序部署到服务器,很多模块都没装,还真是不适应。

Symfony 限制

发现Symfony的2个限制,其实这个是Propel的限制,Propel是PHP的一个ORM的数据库代码生成器,通过XML或YML文件配置,自动创建针对每个数据库和表的CRUD模型,并有良好的继承关系,真正地以面向对象的方式操纵数据库的每一行每一列。

目前发现2点限制:

  1. 不能适应分表(动态选择表名)
  2. 整型字段不能设置unsigned类型

在设计数据库的时候,采用分表存储,是一个优化性能的好方法, 比如,保存用户的文章,按用户ID,散列到8个表上。这8个表的结构都完全一样,只是表名不一样:tbl_post_0, tbl_post_1, …, tbl_post7。

当前版本的Propel,生成的代码,是和表名紧紧耦合在一起的,也就是说这8个表,会生成8套几乎一摸一样的代码,同样需要写8份schema.xml。

这样很不合理。

应该再抽象出一个机制,考虑结构相同表的统一处理。

Propel的另一个问题就是整数字段不能设置unsigned类型,查了官方的说明,说是PHP的整数类型就是-2的31次方到2的31次方减一。我还没来得及证实,不过这也不是很大的问题。因为,Symfony就是为了从零开始快速开发。一个新项目,数据量从零增加到20多亿条记录,还是需要一些时间的,应该避免项目初期的过度设计。

等你的数据规模达到10亿的时候,考虑找风投给你1000万美元,招人帮你重构吧。

新书上架 2007年出版

今天下了几本电子书,主要是网站开发方面的,看书名就知道是好书了。

给大家分享一下,都是英文版的,既能学知识,又能练英语阅读!

只要抽出时间认真看看,一定会有很多收获。

其实很多牛人,并没有多聪明,只是多看了几本书而已……

  1. OReilly High Performance Web Sites Sep 2007
  2. Pragmatic Design Accessible Web Sites Nov 2007
  3. pragmatic bookshelf interface oriented design jun 2006
  4. OReilly Understanding MySQL Internals Apr 2007
  5. Pragmatic Prototype and script aculous Dec 2007
  6. OReilly An Introduction to Testing Web Applications with twill and Selenium 2007
  7. ZK Ajax without the Javascript Framework

卡巴斯基6 授权文件 激活 证书

前一阵我的卡巴6过期了,到网上到处寻找可用的激活码,后来找到几个授权文件,导入到卡巴就可以了,现在我的卡巴到期时间是2010年3月。

我把收集到的几个文件一起打包了,大家不用再到处寻找了,记住这个地址就可以啦。

http://down.leakon.com/software/2007/12/Kaba_Key.zip