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

代码发芽网高亮引擎更新了(版本:1.1dev_20090523)

终于有时间把代码发芽网的高亮引擎Pygments到1.1dev_20090523版
支持的语言多了不少(已经支持164种编程语言了,包括asp.net),效果还不错

其他的更新包括:
. Firefox下右边滚动条时隐时现引起页面跳动的问题
. 编辑代码界面的改进(更高的编辑框等等)
. 添加了收藏按钮
(就是页面右边靠着顶栏的那个长长的小按钮,来自addthis.com),以前用十八帮的,不知为何会引起页面混乱
. 修正了在Chrome浏览器下“代码评论打分按钮”布局混乱的问题

新添加的编程语言支持
==================
* Antlr/Ragel, thanks to Ana Nelson
* (Ba)sh shell
* Erlang shell
* GLSL
* Prolog
* Evoque
* Modelica
* Rebol
* MXML
* Cython
* ABAP
* ASP.net (VB/C#)
* Vala

还包括一些bug fix,详见Pygments的Changelog

Simple New Line Converter - CRLN DOS<=>UNIX,换行符替换工具脚本

svn/hg下来的文件经常是unix换行符的,为了其他的脚本处理方便,我都统统转为dos的
以前东西少,手动就行了,gvim里面:set ff=dos就行,这次太多了,就写了个脚本

Python语言: Simple New Line Converter - CRLN DOS<=>UNIX,换行符替换工具脚本
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Simple New Line Converter for CR-LN of DOS & UNIX format
#  default convert known text files under current folder
#
# by 半瓶墨水 ( realfun at gmail dot com )
# http://2maomao.com/blog/
import os
import sys

newline = "\r\n"
if len(sys.argv) > 1 and sys.argv[1] == 'unix':
    newline = "\n"

#only convert files with the following extention
#NOTICE: spaces on HEAD/END are there on purpose!
exts = ' py html css js json txt php ini cpp h sql ini htm rb cmd bat '
fs = []
#for root, dirs, files in os.walk('d:/projects/py/django/fayaa'):
for root, dirs, files in os.walk('.'):
    for f in files:
        f = os.path.join(root, f)
        #print "==>" + f
        pos = f.rfind('.')
        if pos == -1:
            continue
        if exts.find(' ' + f[pos+1:] + ' ') != -1:
            fs.append(f)

for f in fs:
    o = open(f, "r")
    ls = o.readlines()
    o.close
    if len(ls):
        print ">>", f
        o = open(f, "wb")
        #NOTICE: here I did what I want, remove ".rstrip()" if you don't like it!
        ls = [l.rstrip() + newline for l in ls]
        for l in ls:
            o.write(l)
        o.close()

发芽网(fayaa.com) - 代码无需标题、聊天窗口改进、新增开局

code_new
(代码发芽网贴代码的新界面,比原来的简洁很多)

最近公司事情忙,租的房子房东给卖了,又要搬家,头大如斗

上次趁五一节宝宝睡觉的功夫,终于把代码发芽网的发帖机制给改了

修改前:贴代码必须填标题,未登录用户贴的代码不保存,登录用户也可以选择发不保存

背后的想法:我最初的设想里,代码发芽网的代码都会是一些不错的代码片段,能够对来到这些页面的人有所帮助,所以标题是必填的,标题是代码内容的浓缩。代码不保存也是基于这个考虑,如果不值得分享的代码,用户就自己高亮就行了。

问题:有很多,下面列的是其中几个
1. 现状是“多数用户”只是为了高亮,而不是为了分享代码的。尝试过分享代码的也没有继续下去的动力。不能形成良性循环
2. 带来的问题就是标题随便拼凑
3. 用户会觉得发代码太麻烦而放弃,而且为了高亮代码,还要求必须加标题也让人困惑

仔细思考过以后,我决定放弃“强制加标题”的做法,随之而来的就是发帖页面的简化与便捷。

现在的做法
1. 代码高亮只需要选择语言、粘贴代码,然后提交就行了
2. 如果用户想对代码进行描述(我自己倾向于这样做,以后看代码的时候也会方便理解),可以点击高级选项
3. 为了便捷的贴代码,也做了几个小改进,包括:
  3.a 登陆后代码发芽网地址自动打开贴代码页面
  3.b 贴代码的时候会记住最近5次选择的语言,并默认选中上次的选择
  3.c 贴代码的时候可以直接Ctrl+Enter快捷键发帖

带来的问题: 直接后果就是代码的总体可读性下降、分享价值降低

一些改进的想法(还没做,先观察一段时间,再等到下次有时间…):
1. RSS只收录填了标题的代码
2. 代码搜索上的改进
3. 和题库子站(构思半年多一直没做)结合

技术问题
代码类里面的“用户”属性原来是Required ForeignKey,匿名用户提交就成问题了
后来发现Django本身就支持可以为空的ForeignKey,方法如下:

Python语言: How to make a Django ForeignKey optional
#相关Blog:http://www.2maomao.com/blog/fayaa-codee-update-and-other/

#1. 修改models.py:
user = models.ForeignKey(User, verbose_name="用户名", blank=True, null=True)
#2. 修改数据库,SQL语句:
alter table coding_codee change user_id user_id integer NULL;

参考


其他更新
1. 聊天窗口用颜色区分了自己的发芽网、系统信息和别人的发言
在非IE浏览器下,比如Firefox,表现更好

2. 新增了许多的数独开局,大部分都是kk加的

3. 新增了许多华容道开局,都是艾恩加的

4. 新增了两个华容道分类七步布局素数布局,很多新布局在里面,欢迎来玩

上图
1. 新增的部分华容道关卡,by艾恩
艾恩的关卡

2. 一些有意思的数独布局,by kk,我建立了一个形趣分类:
sudoku_interesting_gates

根据Google Analysis数据改进网页 - 智取华容道自定义分类

youxi_hrd_list

发芽网装上Google Analytics好几个月了,也得到了一些有价值的数据

其中有一条然我忍了好久,今天终于忍不住终于采取行动了

那就是:最常见退出页

前十个最常见退出页里面,华容道第1关排第3,华容道第2关排第9!

这个问题其实艾恩黄志华kk華英雄等网友都提出过,那就是智取华容道前几关太难了!难到让人望而却步,试验几分钟搞不定多数都失去了兴趣。

以前首页上默认放的是横刀立马,之所以这么做是因为这一局太有名了,甚至有人不知道华容道游戏还有其他开局。

解决的方法很简单,把华容道开局按照由易到难建立一个分类,然后把这个分类放到主页就行了

但是,对于发芽网来说,却不是很好改,分类建起来很简单,但是要建立一个机制,对于数独华容道、或者其他还没有写好的游戏统一处理,就比较麻烦。

今天正好有一大票时间,所以进行了一番清理,终于搞定。

现在首页上的链接是:开始玩《从菜鸟到高手》分类之曹13,从13步到138步,一点点加大难度。

其他分类有:经典开局数字系列伏羲八卦定式

等再找到空闲,就把提交华容道布局的用户名称都加上去

更新:2009-04-27 00:37
已经为华容道布局加上了创建者属性
部分布局提供者:kk, ythqy, 艾恩, 黄志华, 崋英雄, admin

游戏发芽网的随机关卡链接 - 数独、华容道统一实现

=====================================
插播一则广告:几个网友反馈,说不知道发芽网的Roadmap(大致是开发计划的意思吧)
 我想做个子站的,专门为小网站提供Roadmap服务,呵呵,不过想想还不太现实
 那就简单点儿,先放在这儿了:发芽网的Roadmap
=====================================
一直以来都想加这个功能:随机来一关华容道或者数独

总感觉功能太小,加起来没意义

今天翻旧账找到了,就写了一段代码加上来了,可以试试:
随机来一关华容道
随机来一关数独

Django的url mapping做得很棒,所以处理起来很方便:

Python语言: 游戏发芽网的随机关卡链接
#in youxi.urls.py
#…
    #random gate
    (r'^(?P<gameabbr>[a-z]+)/rand/$',
        'fayaa.youxi.views.index.random_gate'),
#…

#in youxi.views.index.py
def random_gate(request, gameabbr):
    game = Game.objects.get(abbr=gameabbr)
    import sys
    gatename = game.abbr[0].upper() + game.abbr[1:] + "Gate"
    mods = sys.modules['fayaa.youxi.models']
    gates = getattr(mods, gatename).objects
    gate_count = gates.count()
    import random
    chance = 10
    while chance:
        chance -= 1
        #NOTICE: we will lose some record if some are empty
        # because that time gate_count != max_id
        gate_id = random.randint(0, gate_count - 1)
        if gates.filter(id=gate_id).count():
            return HttpResponseRedirect("/youxi/" + gameabbr + "/" + str(gate_id) + "/")
    return HttpResponseRedirect(".")

下一页 »