Gvim在安装时会根据操作系统的编码自动选择相应的语言包,但有时候想要强制选择自己指定的语言时就需要进行配置。下面以日文系统下Gvim的中文化为例。
- set encoding=utf-8
设定Gvim的内部文字编码为utf-8 - set langmenu=zh_CN.UTF-8
设定Gvim的菜单使用中文表示 -
language message zh_CN.UTF-8
这里将Gvim的指令提示、帮助文档等设定为中文 - set guifont=NSimSun:h10
其实至第三步为止,Gvim已经可以显示中文了,但由于安装在非中文系统下,Gvim会选择系统默认字体作为自己的GUI字体,所以一般这里仍不能正常显示,所以还需要设置一个包含中文字库的字体。 - set fileencodings=ucs-bom,utf-8,chinese,japanese
这里是设置文件打开的解码顺序,从最严格的ucs-bom开始尝试解码,不成功则转向下一个。
另外为了更好的让Gvim自动识别文件内码,可以使用FencView插件http://www.vim.org/scripts/script.php?script_id=1708
[04-24] vBulletin with JSONP(Javascript跨域问题及基于vbb单点登录浅谈)
出于浏览器安全考虑,javascript是不能跨域访问的,即是说js使用XMLHTTPRequest的访问对象只限于同一域名,统一端口,统一协议下的数据。如果未加任何处理,js会报错nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)"。
但事实上大型系统往往需要跨越多台服务器传递数据,那么如何解决这一问题,时下有如下的若干解决方法:
- 隐蔽iFrame
实现成本:低
被访问端控制权限:不需要
实现方法:在页面上创建一个不可见的iframe,将所要访问的页面包含进来,然后通过操作iframe来获得所需数据。实际上这种解决方法已经和钓鱼网站没什么区别了,只不过是非恶意的而已。除非是做数据采集,否则不推荐。 - document.domain
实现成本:中
被访问端控制权限:不需要
实现方法:假如要访问ave7.net的数据,在代码开始时加入一行
document.domain = 'ave7.net';
即可。这大概是js本身提供的解决方案,但实用性并不高,尤其是多浏览器对document.domain的支持参差不齐,至今也没有一个像样的案例出现,不推荐。 - 包含远程文件
实现成本:中
被访问端控制权限:需要
实现方法:假如要访问ave7.net的数据,编写相应xxx.js文 件上传至ave7.net,在本地使用<script type="text/javascript" src="http://ave7.net/xxx.js"></script>将访问对象包含进来即可。这样等于完全绕开了ajax 访问,是一个较为实用的解决方案。缺点也很明显,需要两端都有控制权限,代码被迫分离给维护带来了不便,另外无法像Ajax一样判断程序执行到那个阶段, 如果远程服务器暂时无法访问,则可能产生致命性错误。 - JSONP
实现成本:高
被访问端控制权限:需要
JSONP是JSON的一个子集,目前还是非官方的协议。形如
callback({jsondata});
即是把json数据用一对圆括号括住,前面加上回调函数实现,目前像jquery,dojo等js库都提供了jsonp的支持。
JSONP虽然是简单的通讯协议,但已经实现了很好的接口定义,虽然被访问段需要重新编写接口,但如果是比较复杂的程序应用,就显得十分有必要了。
以我的Blog动态调用vBulletin论坛信息实现简单单点登录为例。通信过程如下,括号内为传递的值:
Blog发起AJAX请求(session)->vBulletin接受请求(用户信息)->JSONP将用户信息与传入的session通过加密算法生成一个hash值(用户信息,hash)->Blog将接受到的用户信息以及session通过同样的加密算法计算hash值,如果和传入的hash值相同,则作为用户登录。
---code start---
function login (option) {
var form;
if(typeof(option) == "string") {
var session = option;
}
if(typeof(option) == "object") {
var session = option.session;
var form = option.form;
}
var server = "http://forum.ave7.net/tsost_jsonp.php?session=" + session + "&callback=?";
$(this).click(function(){
$.getJSON(server,function(vbb){
$.ajax({
type: "POST",
url: "user.php?do=login&ajax=1",
data: vbb,
success: function(msg){
if(msg) {
alert(msg);
}
else {
if(form) {
for(var input in form) {
$(form[input]).val(vbb[input]);
}
}
else if(confirm("已登陆,要重新载入当前页吗?")) {
document.location.reload();
}
else {
return false;
}
}
},
error : function(){
alert("Ajax error");
}
});
});
});
};
---code end---
Read More[04-22] JQuery TagClouds Plugin
JQuery TagClouds Plugin Ver0.1
功能:将一个元素内的所有链接转换为Tag Clouds(标签云)形式,字体大小和颜色同时渐变。
Demo:见首页
Sample:
$(".tag_clouds").tagClouds();
更复杂一点的例子:
var option = {
fontmax:22, //可选 默认值为22, TagCloud的最大fontsize(单位px)
fontmax:11, //可选 默认值为11, TagCloud的最小fontsize(单位px)
colorfrom:"#CACAFF", //可选 默认值为"#CACAFF", TagCloud的渐变颜色1(要突出显示的颜色)
colorto:"#F8B3D0", //可选 默认值为"#F8B3D0", TagCloud的渐变颜色2
patrn:/\(\d+\)$/ //可选 将Tag权值从链接中分离的正则表达式,默认形式为 标签(10)
}
$(".tag_clouds").tagClouds(option);
Plugin Source
/*
* jQuery TagClouds Plugin
* version: 0.1
* @requires jQuery v1.2.2 or later
*
* Copyright (c) 2008 AlloVince
* Examples at: http://allo.ave7.net/JQuery_TagClouds_Plugin
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*
*/
if(jQuery) (function($){
$.fn.tagClouds = function(option) {
var fontmax = 21;
var fontmin = 11;
var colorfrom = "#CACAFF";
var colorto = "#F8B3D0";
var patrn=/\(\d+\)$/;
if(option) {
fontmax = option.fontmax ? option.fontmax : fontmax;
fontmin = option.fontmin ? option.fontmin : fontmin;
colorfrom = option.colorfrom ? option.colorfrom : colorfrom;
colorto = option.colorto ? option.colorto : colorto;
patrn = option.patrn ? option.patrn : colorto;
}
var tags = Array();
var fontsize = Array(),fontcolor = Array();
var i = 0;
$(' > a',this).each(function(){
var tag_count = patrn.exec($(this).text());
var num=/\d+/;
tags[i] = num.exec(tag_count);
i++;
});
//数组复制
var tmp = tags.slice(0);
tmp.sort(function(a, b) {return b - a;});
var max = tmp[0];
var min = tmp[tmp.length-1];
for(i = 0; i < tags.length ; i++) {
if(tags[i] == max) {
fontsize[i] = fontmax;
}
else if(tags[i] == min) {
fontsize[i] = fontmin;
}
else {
fontsize[i] = parseInt( (fontmax - fontmin)*(tags[i] - min)/(max - min) + fontmin);
}
fontcolor[i] = color(colorfrom,colorto,max - min + 1,tags[i] - min + 1);
}
i = 0;
$(' > a',this).each(function(){
$(this).css("font-size",fontsize[i] + "px");
$(this).css("color",fontcolor[i]);
$(this).mouseover(function(){
$(this).animate({
fontSize: fontmax + "px"
}, 500);
});
i++;
});
// 颜色#FF00FF格式转为Array(255,0,255)
function color2rgb(color){
var r = parseInt(color.substr(1, 2), 16);
var g = parseInt(color.substr(3, 2), 16);
var b = parseInt(color.substr(5, 2), 16);
return new Array(r, g, b);
}
// 颜色Array(255,0,255)格式转为#FF00FF
function rgb2color(rgb) {
var s = "#";
for (var i = 0; i < 3; i++) {
var c = Math.round(rgb[i]).toString(16);
if (c.length == 1)
c = '0' + c;
s += c;
}
return s.toUpperCase();
}
function color(from,to,all,step){
var Gradient = new Array(3);
var A = color2rgb(from);
var B = color2rgb(to);
for (var i = 0; i < 3; i++) {
Gradient[i] = A[i] + (B[i]-A[i]) / all * step;
}
return rgb2color(Gradient);
}
}
})(jQuery);
---code end---
Read More[04-21] JQuery SyntaxHighlighter plugin
Jquery SyntaxHighlighter plugin Ver0.1
功能
- SyntaxHighlighter是一个出色的语法高亮库,但实际使用,尤其是大量Js文件的包含,仍有不便之处。另外在W3C规范中,Pre元素是不能使用name属性的。这里通过JQuery动态加载所需的SyntaxHighlighter文件,将使用过程最简化。
最简使用例(参数为SyntaxHighlighter放置的路径)
$.SyntaxHighlighter('/tsost/includes/SyntaxHighlighter/');
- Html部分则可省略name="code"部分,对页面所有pre和texterea自动检测
Options
var option = {
dir:'/tsost/includes/SyntaxHighlighter/', //必选 SyntaxHighlighter所在路径
//SyntaxHighlighter全局设置,这一部分说明请参看http://code.google.com/p/syntaxhighlighter/wiki/HighlightAll
name:"SyntaxHighlighter", //可选 默认值为"SyntaxHighlighter"
showGutter:true, //可选 默认值为true
showControls: false, //可选 默认值为false
collapseAll:false, //可选 默认值为false
firstLine : 1, //可选 默认值为false
showColumns:false, //可选 默认值为false
//自定义设置
apptoall:true, //可选 默认值为true. 开启后会将屏蔽个别设定,统一按照上文的全局设置执行
autofind:true, //可选 默认值为true. 开启后会自动寻找页面所有包含正确的class且name为定义的元素
jspath:'/tsost/includes/SyntaxHighlighter/Scripts/', //可选 默认值为dir + 'Scripts/' SyntaxHighlighter的Js文件所在路径
csspath:'/tsost/includes/SyntaxHighlighter/Styles/', //可选 默认值为dir + 'Styles/' SyntaxHighlighter的Css文件所在路径
swfpath:'/tsost/includes/SyntaxHighlighter/Scripts/' //可选 默认值为dir + 'Scripts/' SyntaxHighlighter的clipboard.swf文件所在路径
};
$.SyntaxHighlighter(option);
Plugin Source
/*
* jQuery SyntaxHighlighter Plugin
* version: 0.1
* @requires jQuery v1.2.2 or later
*
* Copyright (c) 2008 AlloVince
* Examples at: http://allo.ave7.net/JQuery_with_SyntaxHighlighter
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*
*/
if(jQuery) (function($){
$.extend($, {
SyntaxHighlighter: function (option) {
//原有设置
var highlighter_name = option.name ? option.name : "SyntaxHighlighter";
var showGutter = option.showGutter ? option.showGutter : true;
var showControls = option.showControls ? option.showControls : false;
var collapseAll = option.collapseAll ? option.collapseAll :false;
var firstLine = option.firstLine ? option.firstLine : 1;
var showColumns = option.showColumns ? option.showColumns : false;
//插件设置
if(typeof(option) == "string") {
var dir = option;
}
if(typeof(option) == "object") {
var dir = option.dir;
}
var apptoall = option.apptoall? option.apptoall : true;
var autofind = option.autofind ? option.autofind : true;
var jspath = option.jspath ? option.jspath : dir + "Scripts/";
var csspath = option.csspath ? option.csspath : dir + "Styles/";
var swfpath = option.swfpath ? option.swfpath : dir + "Scripts/";
var highlighter = {
cpp:{
alias:"c,c++",
has:false
},
csharp:{
alias:"c#,c-sharp",
has:false
},
css:{
has:false
},
delphi:{
alias:"pascal",
has:false
},
java:{
has:false
},
jscript: {
alias:"js,javascript",
has:false
},
php:{
has:false
},
python:{
alias:"py",
has:false
},
ruby:{
alias:"rails,ror",
has:false
},
sql:{
has:false
},
vb:{
alias:"vb.net",
has:false
},
xml:{
alias:"html,xhtml,xslt",
has:false
}
}
var highlighter_count = 0;
if(autofind == true) {
//自动寻找条件1:有class
var finds = "pre[class],texterea[class]";
}
else {
var finds = "pre[name=" + highlighter_name + "][class],texterea[name=" + highlighter_name + "][class]";
}
//计数
$(finds).each(function(){
var code_type = $(this).attr("class");
code_type = code_type.split(":");
code_type = code_type[0];
//自动寻找条件2:未定义name
if ($(this).attr("name") == undefined) {
for (var types in highlighter) {
if (types == code_type) {
if (highlighter[types].has == false) {
highlighter_count++;
}
highlighter[types].has = true;
$(this).attr("name", highlighter_name);
break;
}
//别名
else if (highlighter[types].alias) {
var alias = highlighter[types].alias.split(",");
for (var i = 0; i < alias.length; i++) {
if (code_type == alias[i]) {
if (highlighter[types].has == false) {
highlighter_count++;
}
highlighter[types].has = true;
$(this).attr("name", highlighter_name);
break;
}
}
}
}
}
});
//首字母大写函数 From http://tech.karbassi.com/2007/10/08/javascript-ucfirst/
String.prototype.ucfirst = function() {
var x = this.split(/\s+/g);
for(var i = 0; i < x.length; i++) {
var parts = x[i].match(/(\w)(\w*)/);
x[i] = parts[1].toUpperCase() + parts[2].toLowerCase();
}
return x.join(' ');
};
if(highlighter_count > 0) {
$.getScript(jspath + "shCore.js",function(){
eval(this);
$("head").append("");
var i = 0;
for(var types in highlighter) {
if(highlighter[types].has == true) {
//文件首字母大写
var jsfile = jspath + "shBrush" + types.ucfirst() + ".js";
//利用JS反射动态读取所需要JS文件并执行
$.getScript(jsfile,function(){
eval(this);
i++;
if(i == highlighter_count) {
//在最后一次读取后执行高亮
dp.SyntaxHighlighter.ClipboardSwf = swfpath + 'clipboard.swf';
if(apptoall == false) {
dp.SyntaxHighlighter.HighlightAll(highlighter_name);
}
if(apptoall == true) {
dp.SyntaxHighlighter.HighlightAll(highlighter_name,showGutter,showControls,collapseAll,firstLine,showColumns);
}
}
});
}
}
});
}
}
})
})(jQuery);
Read More
[04-17] あしたの年男
人は人を恨み、怒り、裁いて
罰を与えようとする。
怒りに身を委ね、行動することは
実はそれほど困難な事ではないのだ。
人憎恨别人、发怒、给予他人惩罚。
其实置身于愤怒中作出这种种行为,并不是多么困难的事情。
人間にとって、最も困難な事…
それは、他者を、
そして自分を許す事なのだ。
作为一个人,最困难的,
是原谅别人
并且原谅自己。
その先にこそ
調和がある事を知りながらも、
人は許す事をなかなかできない。
所以尽管知道人的关系可以调和。
但是人还是很难做到宽恕。
…誰もが、
その内側に黒い物を抱えている。
誰かを傷つける事もある。
罪を犯すことも、
哀しみに打ちひしがれる事もあるだろう。
无论是谁
内心都有黑暗的一面。
也会做出伤害别人的事情。
或许还会犯下罪行,
甚至因为悲伤而一蹶不振。
だが、
その同じ人間が
純粋に愛を求める事がある。
但是
即便是这样的人
也会有一心一意追求爱的时候。
本当の愛を手に入れたいのならば
許す事を知りなさい。
想获得真正的爱的话
请先懂得什么是宽恕吧
他者を、
そして…自らを
对别人
也对自己
——from 「あしたの喜多善男」
Read More[04-14] Hello Blog
虽然仍显仓促,虽然仍有无数的BUG和不足,但终于还是等不到开发进度100%了。
现在在你眼前的,是一个基于未完成的Framework构筑的未完成的Blog程序。框架的开发进度不过60%,blog也只能算是半成品,最终能够发布的版本尚遥遥无期,可能一个人去写Framework是超出我现在能力范围的,但自由的想象发挥却是非常愉快的开发过程。
所以在成熟的Wordpress面前,我还是固执的改用了自己的Blog。希望不要出现太多奇奇怪怪的问题。
Hello, My Blog!
- What Can this blog Do
- 基于自己编写的MVC Framework
- 除View层代码仅450行
- 通过W3C Strict 验证
- 关闭所有Javascript,系统仍然能正常运作

KaufenViagraOnline 说:
[url=http://1kaufen-viagra.net/?product=viagra]VIAGRA 50 mg.! Tramadol Online at a Reasonable Price! Stop pain now! Free 2day Air Shipping![/url] - VIAGRA 100mg.! ONLINE PHARMACY I N UK...!!! BUY VIAGRA TRAMADOL CIALIS ADIPEX..!! [b][u]GENERIC VIAGRA for Low Price - 90 pills x 100mg = $101.95 (Visa, Mastercard) . SPECIAL OFFER>>10 VIAGRA SOFT FOR FREE...!!!![/b][/u] BUY 180 pills VIAGRA with your VISA or Master Card! . SPECIAL OFFER>>10 VIAGRA SOFT FOR FREE...!!!! [url=http://www.newviagraforum.medsjoy.biz][img]http://www.bestviagrabuy.net/pics/cialis-soft.gif[/img][/url][url=http://www.newviagraforum.medsjoy.biz/?lang=fr][img]http://www.bestviagrabuy.net/pics/viagra_fr.gif[/img][/url][url=http://www.newviagraforum.medsjoy.biz/?lang=de][img]http://www.bestviagrabuy.net/pics/viagra-soft_ger.gif[/img][/url][url=http://www.newviagraforum.medsjoy.biz/?lang=es][img]http://www.bestviagrabuy.net/pics/cialis-soft_es.gif[/img][/url] http://1onlinepharmacy4u.net [url=http://1kaufen-viagra.net]VIAGRA 100mg.! The Best Online Pharmacy Sites on the Internet[/url] - VIAGRA 100mg.! BUY WITHOUT PRESCRIPTION..!! Free Worldwide Shipping! ALLGEMEINE vigra KAUFEN [url=http://www.newrxforum09.kokoom.com/buy-viagra-online.html]VIAGRA 50 mg.! American Pharmacy. FREE Double Pills. BUY WITHOUT PRESCRIPTION..!![/url] - VIAGRA 50 mg.! Lowest Prices on Tramadol. Stop PAIN! Free Worldwide Shipping!2008-05-17 05:47:27
AlloVince 说:
目前AV blog可以通过一次点击,搜索vbb论坛中同样标题的帖子并将所有回复同步到当前主题。2008-05-12 04:08:51
小三 说:
同步了吗 IE还是不行啊,登陆7街2008-05-10 12:36:14
Lazing 说:
forum.ave7.net还是一样的……2008-05-08 01:45:26
AlloVince 说:
Gvim = Vi Improved, win下也能使用的vim。 我已登录第七街只针对域名forum.ave7.net,目前只用firefox实验成功,IE有时会RP,原因不明2008-05-07 13:29:52