七月, 2008 的文章

代码发芽网 代码高亮核心模块(Pygments)升级到最新版(1.0 dev 20080727)

最近收到反馈说代码发芽网不支持Fortran、Python3000和汇编。

今天从天津赶回来,发现Pygments已经更新到了1.0版,1.1版也在开发之中。
看了一下最新的更新内容,决定把代码发芽网所用的pygments版本升级一下。

主要更新
添加了Nasm(汇编),Python 3000, Smalltalk, YAML, Tcl, Fortran, ActionScript3 等语言的支持
新增三个高亮配色主题:vs(Visual Studio) / bw(Black and White) / manni

其他更新
其他语言支持列表:
* Cheetah/Spitfire templates
* Lighttpd config files
* Nginix config files
* Gnuplot plotting scripts
* Io
* Darcs patches
* Matlab
* Matlab sessions
* XSLT
* tcsh
* NumPy
* S, S-plus, R statistics languages
* Logtalk

一些小更新:
* C语言高亮支持库函数和C99的类型了
* Makefile高亮兼容BSD和GNU格式了
* C / 批处理 / CSS的一些bug fix

所有更新列表参见:http://dev.pocoo.org/projects/pygments/browser/CHANGES

代码发芽网最近一次更新中所遇到的问题

首先说一说怎么缩小生成代码的体积
1. 生成的结果去除生成的html中的class,因为动态主题切换是依赖这个的。后来做了一个backup才搞定
2. 空格不需要span,这个比较容易,一个正则表达式就可以搞定,难以搞定的是firefox和IE的操作方式不同,骂一句,继续
3. merge相同style的span,这个没有做,因为各个主题不一致,吃力到不了多少好:D
最终结果里,一个四百行左右的代码生成的页面从100K减至50K,已经不错了

虽然还是比较肥,但是所有直接生成HTML所有做高亮的工具,都避免不了这个问题
因为代码被分割成一片片,每一片加上span以后都肥了十倍左右。
只有使用JavaScript的可以避免这个问题,但是现有的JavaScript高亮工具有两个致命的缺点:
1. 代码行数稍多就会很慢,几百行就有很明显的感觉,有时甚至造成浏览器假死
2. RSS中无效

再说一说界面的改进
1. 改进这个界面比原来的好,普遍反馈如此
2. 论坛里的很多建议和批评,很不错
3. 功能性主导的网站还是以功能改进为主
个人想法是:又不是搞设计的网站,不对功能产生障碍就行了
在我自己的功底没有进步之前更改只能是凭运气,不如将精力放在功能改进上。
另外,很多现在运行良好的站点,界面在我看来糟透了,但是这又如何?

最后说一下遇到的一些问题
1. jQuery的问题:
是的,jQuery非常好用,但是不适合做代码高亮时使用
看过jQuery的代码就会知道它对每个操作过的元素都会加上jQueryxxxxxxxx=”xxxx”这样一长串
这个严重的导致了生成的代码肥胖,所以做高亮的代码就不用jQuery了

2. 收藏本站代码:不多说了,好不容易找到一个可用的Javascript: IE和Firefox下都有效的“收藏本站”代码

3. IE下用removeAttribute来干掉class的问题,最后终于找到了一位老兄调侃IE的同时提供的答案:同时删”class”和”className”

4. BBcode的实验(chinaunix上的帖子):
找了很多网站,知道了大家虽然都用BBcode,支持却是相差万里,交集很小,在这个交集里,没有背景色
本来用table的背景色挺好用的,但是不是所有的论坛都支持
有的论坛甚至不支持[b]和[i],真是晕啊,安全再重要,也要考虑可用性吧。
最后做成的东西能在ChinaUnix和大多数Discuz!论坛上使用,也能够支持phpBB的论坛
如果不禁html的论坛,直接贴HTML代码好了
做这个的时候,放弃了jQuery,最终使用的是正则表达式替换,现在还在担心是否有bug

5. Django的is_ajax判断很有意思,jQuery等ajax会在请求头上加上一些标志
Django判断这个标志看看是否是Ajax请求,用了一下(复制裸代码的功能),感觉还不错IE6.0的支持

IE中调试javascript真是不爽啊,给出来的都是神秘的行号错误,比起firefox的firebug差远了,IE8不知道会怎么样。

代码发芽网更新 - 界面清晰、支持论坛(Discuz!)、一键复制HTML/BBcode

接上篇:代码发芽网 - 代码高亮 - 添加了22个流行的vim配色主题
继续增强内功。

代码发芽网( http://www.fayaa.com/code/ )简介:
1. 无需插件支持blog代码高亮
2. 近百种编程语言,30多个流行的高亮主题
3. 稳定支持各种blog、论坛、邮箱

最新更新
1. 界面更新:一改原来的混乱方案,采用更加清晰的表格、布局来帮助你更高效的完成代码高亮、收藏、评论等操作

2. 支持论坛:论坛中一般为了安全考虑采用BBcode,最近更新的功能(显示代码页点击”复制BBcode”)对Discuz!等论坛有非常棒的支持。

3. 点击复制:有不少网友试用的是HTML简单编辑器,提出需要简单的复制HTML代码的功能,现在提供的只需要点击一个链接即可完成。同样也提供了对BBcode和源代码的复制功能。

4. 搜索功能:提供了搜索所有代码标题的功能

5. 一些bug fix和边角功能的更新,使得生成的代码体积下降了50%!(据我实验,虽不算最优,可改进空间已经很小了)

BTW: 刚刚试了一下CSDN的blog,居然已经可以支持了,看来CSDN暗自在更新。

还是贴两个例子看看效果吧

来个desert主题的:

JavaScript语言: RGB颜色值转HTML十六进制(HEX)代码的JS函数
01 //转到固定长度的十六进制字符串,不够则补0
02 function zero_fill_hex(num, digits) {
03   var s = num.toString(16);
04   while (s.length < digits)
05     s = "0" + s;
06   return s;
07 }
08
09 //妈的,怎么都没搜到怎么用javascript找出一个背景色的数值,只好自己解析
10 function rgb2hex(rgb) {
11   //nnd, Firefox / IE not the same, fxck
12   if (rgb.charAt(0) == '#')
13     return rgb;
14   var n = Number(rgb);
15   var ds = rgb.split(/\D+/);
16   var decimal = Number(ds[1]) * 65536 + Number(ds[2]) * 256 + Number(ds[3]);
17   return "#" + zero_fill_hex(decimal, 6);
18 }

来个浅色背景的主题:

CSS语言: 发芽网的全站都在用的css
a { color:#0000CC; text-decoration:none; }
a:visited { color:#0000CC; text-decoration:none; }
a:hover { text-decoration:underline; }
a img { padding: 0px; margin: 0px auto; border-style:none; }
img { padding: 0px; margin: 0px auto; border-style:none; }
input:focus, select:focus, textarea:focus {
  border: 1px solid #ff00ff;
  background:#FFFFBB;
}
thead { background: #ccff99; }
input, textarea { border: 1px solid #c0c0c0; }
ul { padding:0px; margin:0px auto; list-style:none; }
.submit { background:#ccff99; font-size:x-large; }
.error_text, .errorlist { color:#F80098; }
.error { border: 3px solid red; }
.clear { clear:both; }
body {
  font-family:"Verdana", "Tahoma", "Georgia", "Arial", "微软雅黑", "宋体";
  padding: 0px;
  margin:0px auto;
}
table, ul { font-family: "微软雅黑", "宋体"; }
form { padding-left:3px; }

最后来个卡通点儿的字体:

C语言: 最大公约数和最小公倍数
#from http://bbs.bccn.net/thread-224663-1-1.html
int GCD(int a, int b)
{
   if(b == 0) return a;
   else return GCD(b, a % b);
}

int LCM(int a, int b)
{
   return a * b / GCD(a,b);
}

Notepad++编辑器和奥运会

关于notepad++和奥运会的讨论里,看到很搞笑的评论,忍不住回了一贴:

总有人,不知道为什么哦,吃鸡蛋的时候不去关心鸡蛋是否好吃,却总想着下蛋的鸡是否有生活作风问题。
更牛b的,居然可以反过来推导出鸡蛋是否好吃,连尝都不用尝的。

简单设置循环日历,避免“忘记老婆的生日”

今天看到foxgao发了一番感慨,因为“忘记了老婆的生日”

首先,老婆的支持是最重要的,不要忘。
但是忘记是人类的天性,否则脑袋里都塞满陈旧的记忆,如何进步呢?

不过,作为IT技术人员,可以简单的通过技术尽量避免这种事情的发生。

以下方法适合outlook calendar、google calendar和有循环日历功能的手机
1. 对于每个重要的节日/纪念日(比如生日和结婚纪念日),添加一个事件
2. 把这个事件设置为每年一次的循环
3. 设定提前1周(自己调节)提醒,可以通过自动发email或者谈对话框的方式

好了,搞定了,至少生日、结婚纪念日啥的不用担心了。

想起大话西游里的唐僧来了:虽然你很诚恳的看着我,但是你还是要说啊,你不说我怎么知道呢?
纪念日的时候,采用什么手段不是最重要的,最重要的是要让她知道,我真的真的真的真的很在乎你。

下一页 »