分类:'发芽网开发记录' 的所有文章

小小的在线游戏,今日出发

决定放慢代码发芽网的开发,沉淀一下,学习一些新知识

买了基本关于色彩和平面构成的书,大致翻了翻,没有培养出对色彩/线条的感觉来
干脆去别的页面抄袭了一个主题,拿PS搞了个略显深沉的站标,在代码发芽网上看着还不错。
罪过罪过,等我本事高了,再来改过。

然后,系统的学习了javascript(翻了一遍PPK on javascript),看了Mozila dev上的javascript guideCanvas Tutorial,很不错,比如这段程序很简单就绘出了我半年前写的魔力齿轮(核心代码相同,没有用户交互代码,以后有空完善一下)。

然后就是,兴趣转向web game,正在做一个简单的在线华容道来练手。
实现想用javascript + css + canvas/excanvas + html搞定
刚刚看了canvas的教程和javascript prototype的相关介绍,并且用excanvas试验了几乎所有的example,应该没问题

目标是:打开网页就可以玩,无毒无插件,无需flash;玩家可交互,游戏有趣味,过程可回放。

欢迎继续“代码发芽网”提出改进意见,我会持续更新,更多的精力会放在小游戏方面

哈哈,无所谓厚此薄彼,这也是我的兴趣之一。
选择现在做什么,取决于我是否对做成这个东东保持着热情。

这也是当初开始做发芽网的初衷:将一些的小小的想法,转变成切实可用的产品。

代码发芽网界面再次更新, 下一步

先说说一个意外的:代码发芽网首页Google PageRank达到了4了

又对代码发芽网做了一次界面更新
深蓝色就是好用啊,随便整整就比较清晰了,显得也大方了一些
另外做了一个更显稳重的Logo,Photoshop真好用

最近的其他更新包括:
1. 内核升级到Django1.0Alpha
2. 新增了“有新留言通知楼主”的功能
3. Bug Fix: 首页显示的总人数和“用户”页面显示的结果不匹配
4. 尝试Django论坛(django-forum: http://code.google.com/p/django-forum/ ),安装了markdown才搞定
5. 行号切换一次后全局有效,直到切换回来(目前在IE7.0/6.0下无效,还在尝试)
6. 高亮代码核心模块(Pygments)升级到最新版,新增了许多语言的支持

下一步
代码发芽网目前为止已经实现了我最初的构思,感觉不错
下面可能要做的:
1. 做些帮助页面,类wiki。本来以为不需要的,但是很多人问…
2. 写插件:firefox/ie/wordpress/discuz…
3. 做英文版

实际上我现在更多的兴趣是在web game这一块。
感觉一些小游戏如果直接在网页上就能玩应该会很有意思,比如说象棋、五子棋等等。
趁最近有时间先想一想,如果可行就先做这个了,把代码发芽网开发暂停,也好沉淀一下真正的需求

车厢调配问题 与 “谁在用”代码发芽网页面

目标:我想在 “谁在用”代码发芽网 页面采用表格布局,每行三个链接(也就是html里面的三个td)
问题:代码发芽网基于Django,其模板系统的语法很弱,不支持对循环因子的操作操作不容易实现
首先想到的解决方案: 考虑到有cycle,就这么做:

HTML+Django/Jinja语言: 临时自用代码@代码发芽网
<table>
{% for w in wum %}
  {% cycle '<tr>' '' '' %}
  <td>
  <span style="font-size:large"><a href="{{w.website}}">{{w.title}}</a></span><small>
  <a href="{{w.blog_url}}">:)</a></small>
  </td>
  {% cycle '' '' '</tr>' %}
{% endfor %}
</table>

紧跟着发现,这样做是有问题的:当链接数不是正好三个的时候就会出现”tr”标签开始和结束不是匹配的

真是个烦人的问题,虽然在Django的View里面很好解决,我却不想这么做。

无意之间想到了前几天看过的文章,那是Dijkstra大师关于火车调配实践的一段描述:

一个寓言

多年以前有一个铁路公司,它的一位领导(可能就是商务方面的头儿)有了这样一个
发现,如果只给百分之五十的车厢配备厕所的话,原始投资将会大大地减少。于是,
他们决定就这么做了。

公司执行这项措施之后不久,关于厕所的抱怨就接踵而至。经调查发现,实际情况是
尽管这家公司还很年轻,但它已经存在严重的内部沟通问题,因为上头关于厕所的决
定并没有传达给调度室,所有的车厢都得到了同等的对待,于是有时候一列车中几乎
没有一个厕所。

为了解决这个问题,给每个车厢都加上了一些信息,用于区别这个车厢上是否有厕所,
调度室则需要在列车编组的时候尽量保证两种车厢的数量是相等的。这对调度来说无
疑是个麻烦事,不过问题解决之后,负责调度过程的人们都为此而非常得意。

新的调度过程实施之后,关于厕所的抱怨却依然没有平息。新的调查发现,尽管在一
列车中确实有一半的车厢有厕所,但有时候却把所有的厕所都编组在了列车的一头。
为了对此加以补救,上头又有了新的措施,规定带厕所的车厢和不带厕所的车厢应该
交替编组。这个方法的复杂度对于调度人员来说实在是太恐怖了,不过在最初的一番
唧唧崴崴之后,他们最终还是搞定了。

然而,抱怨仍在继续。调查出来的原因是,对于那些有厕所的车厢来说,厕所都位于
车厢的一头,列车中两个相邻厕所的距离仍然可能会有三个车厢的长度。对于那些有
紧急需要的抱小孩儿的妈咪们——尤其是过道上充塞着行李箱的时候——就会导致灾
难性的后果。结果是,给那些带厕所的车厢又加上了一点信息,将它们变成了带方向
的物体,新的规定是,在每个列车中,所有带厕所的车厢都必须是同向的。这一次,
调度人员收到新的指示的时候就差没疯掉了,因为调车转台的数目刚刚够用,如果要
完全公正地说的话,我们必须得承认,按照任何合情合理的标准,调车转台的数目是
不够用的,调度人员必须发挥极大的创造力才能勉强搞定。

等到所有的厕所都均匀地分布在列车中之后,公司有理由确信所有的事情都OK了,不
过乘客们依然在抱怨:尽管没有乘客离最近的厕所会超过一节车厢,乘客们(尤其是
有紧急需要的)不知道该向过道的那个方向开始他们的冲刺!为了解决这个问题,
写有“TOILET”的箭头被固定在了过道上。这就让另一半的车厢也变成了带方向的物
体,调度过程也必须对它们的方向进行正确地排列。

收到新的指令之后,调度室里充斥着绝望和反抗的情绪:这是不可能的!在这个关键
时刻,有个人站了出来,他的名字已经被遗忘了,而且也无从查证,他做出了以下的
分析。当每节带厕所的车厢都在它的有厕所的一头和另一节没有厕所的车厢配好对之
后,调度室根本无需再为N个两种类型的带方向的车厢而烦恼了,因为他们面对的将
是N/2个同样的单元,不管从哪个方面说,这些单元都可以被认为是对称的。这个分析
搞定了所有的调度问题,不过稍微有点代价,首先是每次只能向列车上加挂偶数个
的车厢——由此而增加的少量车厢可以从商务头目最初省下的那笔钱里面报销!——
其次,假定所有厕所的尺寸都是相同的。不过,谁会在乎那最后的三英尺呢?

尽管在发生这个故事的时候人类还没有计算机,但发现解决方案的那位匿名人物可以
当之无愧地被视为全世界第一个合格的程序员。

呵呵,然后呢,我就想,把<tr>和</tr>强制扭到一起不就行了?
所以得到了现在用的方案:

HTML+Django/Jinja语言: 临时自用代码@代码发芽网
<table style="border-spacing:20px;text-align:center;"><tr>
{% for w in wum %}
  {% cycle '</tr><tr>' '' '' %}
  <td>
  <span style="font-size:large"><a href="{{w.website}}">{{w.title}}</a></span><small>
  <a href="{{w.blog_url}}">:)</a></small>
  </td>
{% endfor %}
</tr></table>
</center>


代码发芽网: http://www.fayaa.com/code/ (无需插件在blog上贴语法高亮的代码,百种语言,多种配色)

代码发芽网 代码高亮核心模块(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不知道会怎么样。

下一页 »