Becomin' Charles

算法 | LNMP | Flutter | Mac

Becomin' Charles

The hierarchy of the interfaces in dom4j libaray

dom4j是一个使用简便的开源类库,专门用来在Java平台上处理XML,XPath和XSLT,该类库使用了Java Collections Framework,完全支持DOM,SAX和JAXP。

dom4j为一个XML文档在内存中创建了一个树对象模型。 它提供了一组强大易用的API,通过XPath和XSLT来处理、操纵或者遍历XML文件,此外其中还集成了SAX、JAXP和DOM。

为了提供高度可配置的实现策略,dom4j基于接口设计。只需要提供一个DocumentFactory实现,您就可以创建您自己的XML树实现。这种设计,使得在扩展dom4j以定制您需要的特性时,能非常简单地重用dom4j的代码。

本文档将通过代码实例的方式为您提供一个dom4j的实践指南。在实验室项目中,这个开源工具包给我的工作带来了很大的便利,在这篇文章中,我将对项目中用到dom4j完成的任务做个总结,以期和互联网上的众多文档能够互相补充。

阅读全文 »

名称:GoogleCode

特性:

  1. 拥有Hybrid主题所有的内在美
  2. 两栏
  3. 主页(Primary)、帖子页(Secondary)、归档页(Archive)、页面页(Page)有不同的侧边栏,括号里是边栏名字
  4. 标签式页面菜单
  5. 其他Hybrid主题框架所拥有的一些功能

版本:0.1beta

阅读全文 »

下载各个版本的WordPress:

wp2.5.1——http://wordpress.org/wordpress-2.5.1.zip
wp2.6.3——http://wordpress.org/wordpress-2.6.3.zip
当前版本——http://wordpress.org/latest.zip

其他版本依此类推。

建立磁盘目录:

www
—phpMyAdmin
—wp25
—wp26
—wp27
—plugins

我就是按照上面的样子建立的。plugins用来统一存放插件。(如果是xampp的话,根目录是htdocs,phpMyAdmin已经安装好了。)

建立测试数据库。三个wp使用同一个数据库。

配置wp-config.php

1
2
3
4
5
6
7
8

//wp263和wp271添加如下两行
define('WP_PLUGIN_DIR', dirname(dirname(__FILE__)) . '/plugins');
define('WP_PLUGIN_URL', 'http://localhost/plugins');
//三个版本都要最后两行
define('WP_DEBUG', true);
define('PLUGINDIR', '../plugins');

关闭老版本WP的升级提示:

找到wp-includes/update.php

//add_action( ‘init’, ‘wp_version_check’ );

像上面那样注释掉上面那行字。

在plugins目录下,安装ozh的no-login插件。

现在这套测试环境,我自己使用下来感觉是WP 2.5的支持很不好。很多插件走不通。主要就是路径的问题。WP2.6和WP2.7的问题不大。但是如果插件需要引用wp_blog_head.php或者wp-config.php,在这样的环境下无法正常运行,我想这其实也是插件开发者的疏漏吧。

Author of this document: Snowblink

Actually, I’m lazy, and I hate paper work. My dear friend, Snowblink, created this document. Thank her very much!

非常感谢snowblink的辛勤工作,我不知道如何才能用英语表达对你的感谢。所以用中文再说一遍!

阅读全文 »

Home页面流程图

  1. hybrid_head()
  2. wp_haed()
  3. body
  4. hybrid_before_html()—action,默认没有被hook
  5. div#body-container
  6. hybrid_before_header()—action,默认没有被hook
  7. div#header-container
  8. div#header
  9. hybrid_header()
  10. end#header
  11. end#header-container
  12. hybrid_after_header()
  13. div#container
  14. hybrid_before_container()—action,默认没有被hook
  15. div#content
  16. hybrid_before_content()
  17. /wp loop begin/
  18. div.hybrid_post_class()
  19. h2.post-title inline
  20. p.byline inline
  21. div.entry-content inline
  22. p.entry-meta inline
  23. end.hybrid_post_class()
  24. /end wp loop/
  25. hybrid_after_content()
  26. end#content
  27. hybrid_after_container()
  28. end#container
  29. div#footer-container
  30. hybrid_before_footer()
  31. div#footer
  32. hybrid_footer()
  33. wp_footer()
  34. end#footer
  35. hybrid_after_footer()—action,默认没有被hook
  36. end#footer-container
  37. end#body-container
  38. /body

hook到hybrid_head()的函数列表

  1. hybrid_meta_content_type()
  2. hybrid_meta_robots()
  3. hybrid_meta_author()
  4. hybrid_meta_copyright()
  5. hybrid_meta_revised()
  6. hybrid_meta_abstract()
  7. hybrid_meta_description()
  8. hybrid_meta_keywords()
  9. hybrid_meta_template()
  10. wp_generator()
  11. hybrid_favicon()
  12. hybrid_head_feeds()
  13. hybrid_head_pingback()
  14. hybrid_head_breadcrumb()

hook到hybrid_header()的函数列表

  1. hybrid_site_title() —提供同名filter,参数为标题包括其html tag,没有被hook
  2. hybrid_site_description() —提供同名filter,参数为站点描述,包括其html tag,没有被hook

hook到hybrid_after_header()的函数列表

  1. hybrid_page_nav() —启动两个action,并提供一个同名filter,参数为导航条包括其html tag,没有被hook

hook到hybrid_before_content()的函数列表

  1. hybrid_breadcrumb() —提供一个同名filter和一个名为hybrid_breadcrumb_args的filter
  2. hybrid_get_utility_before_content() —该函数打印位于Content之前的Sidebar,在Hybrid中被赋予一个名称为Utility

hook到hybrid_after_content()的函数列表

  1. hybrid_get_utility_after_content() —该函数打印位于Content之后的Sidebar
  2. hybrid_navigation_links() —该函数打印WP自带的简单页面导航Prev和Next

hook到hybrid_after_container()的函数列表

  1. hybrid_get_primary() —该函数首先提供一个filter,名为hybrid_primary_var,参数sidebar_id,如果传入false可以关闭侧边栏,该函数打印主侧边栏,并在此之前和之后分别触发一个action
  2. hybrid_get_secondary() —原理基本上和上一个相同,提供的filter名字为hybrid_secondary_var
  3. hybrid_insert() —提供一个同名filter,参数为要打印出来的内容,默认为false,这是专门给用户用来添加sidebar的hook
  1. hybrid_get_subsidiary() —其功能等同于侧边栏,同上面两个侧边栏
  1. hybrid_copyright() —打印版权信息,提供同名filter
  2. hybrid_credit() —与上面一个类似,也提供同名filter
  3. hybrid_query_counter() —打印页面生成时间和数据库查询数的函数

由hybrid_page_nav()触发的action

  1. hybrid_before_page_nav() —action,默认没有被hook
  2. hybrid_after_page_nav() —action,默认没有被hook

由hybrid_get_primary()和hybrid_get_secondary()和hybrid_get_subsidiary() 触发的action

  1. hybrid_before_primary() —action,默认没有被hook
  2. hybrid_after_primary() —action,默认没有被hook
  3. hybrid_before_secondary() —action,默认没有被hook
  4. hybrid_after_secondary() —action,默认没有被hook
  5. hybrid_before_subsidiary() —action,默认没有被hook
  6. hybrid_after_subsidiary() —action,默认没有被hook

Timer and TimerTask class diagram

由于项目开发的需要,必须实现让一个Java程序定时运行。比如,我的项目中,有一个网络蜘蛛,需要从互联网上抓取数据,与其配合,有另一个程序来对新抓取的页面进行索引的创建,由于数据源更新频率不高,我们不可能让蜘蛛无休无止地工作,或者忙等待新数据的产生,那样只能造成浪费,而且非常地不礼貌,所以最理想的情况是,让它每隔一个小时运行一次,这样一天也就运行不了几次。

阅读全文 »