掌握一种 C#/.Net 模板技术 — Velocity

前面写过一篇关于 Java 中使用 Velocity 模板的文章:掌握一种Java模板技术 -- Velocity,现在要考究一下 C# 中怎么使用相应的 nVelocity 模板。

当目光转移到了 C#/.Net 之后,但凡想要找个某个功能组件时都会联想到,曾经在 Java 中用过什么,.Net 中应该会有它相应的实现,例如 Spring.Net, nHibernate, iTextSharp,还有这里的 nVelocity,特点就是组件名一般是 .Net 结尾或 n 字打头。

还是依照原来的例子,从 http://sourceforge.net/projects/nvelocity/files/ 下载 nVelocity 组件,当前版本是 NVelocity-0.4.2.8580。下载后解压,在你的项目中引入 build 目录中的 NVelocity.dll,如果是 web 项目中用 nVelocity,可附加引入 NVelocity.Http.dll。 阅读全文 >>

HTML 简史

HTML 是 Web 统一语言,这些容纳在尖括号里的简单标签,构成了如今的 Web。1991 年,Tim Berners-Lee 编写了一份叫做 “HTML 标签”的文档,里面包含了大约20个用来标记网页的 HTML 标签。他直接借用 SGML 的标记格式,也就是后来我们看到的 HTML 标记的格式。本文讲述了 HTML 这门 Web 标记语言的发展简史。

从 IETF 到 W3C: HTML 4 之路

HTML 1 并不曾存在,HTML 的第一个官方版本就是由 IETF (互联网工程任务组) 推出的 HTML 2.0。问世之前,这个版本中的很多细则已经被实现,比如,1994年的 Mosaic 浏览器已经实现了在文档中嵌入图片的方法,后来 HTML 2.0 便吸纳了 img 这个标签。 阅读全文 >>

VS2008 发布网站时如何产生固定命名的 Dll 文件

VS2008 在发布网站时,bin 目录里为所有 cs 生成的 dll 文件每次都是随机命名的,像这样子的 App_Web_g2dnx-qj.dll, App_Web_s9nor8mv.dll,这样对更新 Live 站点很不方便,因为动态库名变了,涉及到每一个 aspx 文件每次都重新更改了对库的引用声明:

<%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_s9nor8mv" %>

即使有一个 cs 的小改动,由于生成的动态库名称不一样,造成所有的 aspx 文件都得重传一遍。如果能固定动态库的文件名,更新网站时就省事多了,只改了 cs 的话,重新生成 dll 文件,只需要替换这一个 dll 文件就 OK 啦。我们可以找到几种做法: 阅读全文 >>

Asp.Net 中一个控件关联多个验证器时,如何同时只出一个验证器的错误信息

为一个控件绑定多个验证器那是很正常的,例如一个邮件输入框,首先它不能为空,其次不为空时邮件地址必须符合一定的规则,介于此,我们会依次放两个验证器,RequiredFieldValidator 和 RegularExpressionValidator。由于输入为空的时候对于 RegularExpressionValidator 是被认为通过的,所以同时只会显示其中一个验证器的错误信息。

再看个需求,比如输入邮件地址和再次确认的邮件地址,这时需要为第二个邮件输入框加除上两之外的第三个验证器 CompareValidator 用于验证两次输入是否一致,那么三个验证器依次是:

RequiredFieldValidator   RegularExpressionValidator  CompareValidator 阅读全文 >>

C# 程序中使用 SQLite 数据库

差不多在 3 年前我就关注过 SQLite,也整理了一篇 SQLite 的介绍:开源嵌入式数据库 SQLite 简介, 还在我的一个查手机归属地软件中使用了 SQLite 数据库,http://yanbin.blog/csharp-use-sqlite-db/

现在又要用到 C# 了,所以决意了解下 C# 中如何使用 SQLite,之所以选择 SQLite 作为自己的文件型数据,主要是看中它的非常小型单文件嵌入型,更支持多进程访问。

SQLite 官方网站:http://www.sqlite.org,你可以在那里下载到一个 sqlite3.exe,用命令行模式来管理你的数据库文件。或用其他比较好的管理工具:sqliteman(也支持 UTF-8) 、sqlitebrowser 和 SQLite Administrator。我比较喜欢 sqlitebrowser,但更推荐可设置字符集的 SQLite Expert(可下载到免费的个人版)。 阅读全文 >>

PHP 异步执行方法,模拟多线程

PHP 本身没有多线程的东西,但可以曲线的办法来造就出同样的效果,比如多进程的方式来达到异步调用,只限于命令模式。还有一种更简单的方式,可用于 Web 程序中,那就是用 fsockopen()、fputs() 来请求一个 URL 而无需等待返回,如果你在那个被请求的页面中做些事情就相当于异步了。

关键代码如下:

上面的代码向页面 another_page.php 发送完请求就不管了,用不着等待请求页面的响应数据,利用这一点就可以在被请求的页面 another_page.php 中异步的做些事情了。 阅读全文 >>

打造自己的WordPress侧边栏[转]

倘若自己把一些需要的widget直接写进WordPress侧边栏sidebar.php里,在打开网页时,会比在后台添加的widget速度要快一些。道理很简单,如果在后台添加那些widget, 相当于dynamic_sidebar,然后去get一些option之类的函数,会比直接写进sidebar.php里多一些查询和调用的过程。
而且,大家也发现了,在后台的提供的widget里并非都是你想要的。所以有时候自己写一些widget,还是蛮有趣的。

好比说,我现在想加一个友情链接(Blogroll)在侧边栏里,该怎么去写呢? 很简单,在模板的sidebar.php里加上:

关于 WordPress Shortcode 以及在 the_content 之外使用

WordPress 中可以用 Shortcode 来创建宏代码,并且是高度可定制的,例如,有 PHP 代码:

那么只要在你的 post 中输入,[bartag foo="foo-value"],显示该文章的时候此处就被 bartag_func() 函数替换为:foo = foo-value。来个更实用的,比如欲定义一个[unmi_blog] 的标签,定义代码写成如下:

那么在文章中的 [unmi_blog] 的会显示为:隔叶黄莺 Unmi Blog

还能用 Shortcode 打照更强大的自定义标签,如 [YouTube id='1234'] 就显示 id=1234 的视频等等,只是 Shortcode 似乎又太局限了。在文中 http://codex.wordpress.org/Shortcode_API 详细介绍了 Shortcode 的用法,并且说在 the_content 显示的时候,Shortcode API 就会去解析已注册的 Shortcode,这就让 Shortcode 不能轻易的用在别处,不是在 post 里写 [unmi_blog] 将会原样显示出 [unmi_blog] 来,其实也就是在 WordPress 系统里有:

add_filter('the_content', 'do_shortcode'); 

但是人是活的,那些代码原本就是人编写的,我们可以假以巧妙的 Hack 让 Shortcode 应用在别处。

1. Customer Field 中应用 Shortcode Parse Shortcodes in your Custom Fields
2. Sidebar 里的 Text Widget 中 Adding a Shortcode to a Sidebar Widget
3. 任意地方 $text = yourShortCodeFunction("[your shortcode tag here]");echo $text; 外大括号,里小括号

 /*<?php wp_show_surveys(1);?>*/
 function wp_show_survey($survey_id=''){
  $short_code = '[SURVEYS '.$survey_id . ']';
  $output = apply_filters('show_survey', $short_code);
  echo $output;
 }

add_filter('show_survey','do_shortcode');

function custom_show_survey($content=''){
 //echo "<script>alert(123)</script>";
 return $content;
}

//add_filter('show_survey','custom_show_survey');

参考: 1. Shortcode API

写第一个 WordPress 插件程序

本文旨在让像我这样的 WordPress 初入门的开发者快速体验怎么写出一个最简单能工作的插件。至于插件的工作原理就不太多说,但基本的还是要懂得,插件中会用 add_action() 或 add_filter() 方法去挂住一些事件,如显示标题、显示内容等事件,然后执行一个函数。

add_action() 意味着某件事情发生了,要做什么事情,add_filter() 意味着事情发生,并传来的数据可对数据进行处理。用 add_action() 还是 add_filter() 就看你实际需求了。

虽然刚开始就声明了不太想多讲插件的原理,但前面几句话却表明的差不多了。立即例子入手吧,比如我们来做一个在每篇文章内容后附加一句版权声明的话。 阅读全文 >>

雅虎JavaScript架构师:网页开发技术安全优先

由于当前技术仍偏向功能强化为主要思维,指令码趋向庞杂的结果,容易产生更多安全漏洞,且失去快速因应攻击调整架构的灵活性。
身 为JavaScript网路技术重要推手的雅虎(Yahoo!)架构设计师Douglas Crockford表示,现行网页开发技术思维仍偏重多媒体功能或浏览效能的提升,未来应以安全为第一优先。

Crockford 现为Yahoo!资深JavaScript架构师,负责YUI(Yahoo! User Interface)的架构设计,并且担任ECMA JavaScript 2.0技术委员会成员,为JavaScript开发社群大师级人物,此次受邀来台参加OSDC(Open Source Developer's Conference Taiwan)进行专题演讲,向国内开发者介绍ECMA JavaScript的发展。 阅读全文 >>