网站 http://qnotes.sinaapp.com
代码 https://github.com/vicalloy/jstnote
类似 http://dpaste.com/ 的文本分享工具。
dpaste.com 用来贴代码,这个用来分享一般文档。
支持TXT, Html, Markdown, Textile, reStructuredText格式。
匿名使用,在保存文本的时候设置编辑密码,凭编辑密码对文本进行编辑删除(密码暂时还不可修改-_-)。
罪魁祸首是我想随便写个小东西放到SAE上,把SAE的免费配额用掉点。
最开始只是想做个最简单的在线标记语言标记分享工具,预计花1~2天时间做到 http://dpaste.com/ 的程度。
接着…
考虑到使用的方便性,取消了注册功能。
因为是文档写作工具,所以编辑功能是需要的。
后来想评论功能得加上。
然后想加上评论功能后就是一个类似百度贴吧的匿名社区了,那不如把tag也加上。
最终就成了现在的样子。
因为功能一直加,时间也远超预期(好在没拖到下周)。
UI用的twitter-bootstrap。
使用的django框架加若干第三方APP
代码放在
https://github.com/vicalloy/jstnote
写代码的时候只考虑到工作量,有现成的组件尽量用现成的,性能应当会非常的差。
吐槽:
– django自带的评论app非常的不人性化。为了防止进入评论的错误提示页面,花了不少时间用JS写表单的错误检验。
– SAE不是太好用。默认带的django太老。使用自己的django,一直出错。尝试解决了几个问题后最终放弃。(注:已经成功部署上去,感觉问题不少,还有待验证)
分类目录归档:vicalloy的庄家
天使湾第二季见闻
昨天参加完天使湾最后一轮面试,今天下午公布结果。和预期的一样顺利落选。以我们当前的互联网经验与觉悟都还不足以立马全职创业。
天使湾的这次活动对我而言更多的是一种体验,一种有趣的体验。这是一个交流的平台,在这里可以遇到许多创业者,和他们分享各自的想法。
作为创业者,他们常常会有很多有趣的观点,并能从各自独特的角度看问题。
天使湾给人的感觉还不错。天使湾的CEO庞小伟,给人的感觉很低调务实。如果你确实需要天使基金,可以考虑找他们聊聊。
最后祝大家都能坚持并实现自己的梦想。
timeline项目开发日志–登陆、注册模块
利用twitter/bootstrap,项目的基础模板算是顺利搞定。接下来开始处理用户中心。
用户中心主要包括用户登陆、注册以及头像等个人信息维护。此前,用户的注册管理我一直使用django-registration。只是这个APP有些不思进取,09年发布了0.8alpha版后就一直没什么动静。这次决定尝试另外一个用户模块组件django-userena。
相比django-registration,django-userena的功能要完善的多。除基础的登陆注册模块外django-userena甚至还带了站内消息功能。django-userena的易用性方面也做的非常的不错。django-userena自带了默认模板,并有提供一个完整的演示项目,让你可以轻松上手。这里有个官方的在线demo,感兴趣可以去看看。
django-userena同twitter/bootstrap的整合
我们自然是希望所有的APP不用做任何修改,拿来就能用了。不过事与愿违,在整合的过程中多多少少都会遇到一些问题。django-userena默认的模板在项目中显示的非常难看。我们需要重写django-userena的默认模板,并且用django-bootstrap来生成form。
forms.py
#为原始form添加BootstrapMixin
from bootstrap.forms import BootstrapMixin
class BsAuthenticationForm(AuthenticationForm, BootstrapMixin):
def __init__(self, *args, **kw):
super(BsAuthenticationForm, self).__init__(*args, **kw)
self.__bootstrap__()
urls.py
#重写urls,指定使用的form
from django.conf.urls.defaults import *
from userena import views as userena_views
from profiles.forms import BsSignupForm, BsAuthenticationForm
urlpatterns = patterns('',
url(r'^signup/
中文用户名问题
同django-admin一样,django-userena也无法使用中文进行注册。对于一个中文网站而言,不能使用中文注册ID似乎有些太不合理的。
django-userena使用正则表达式对用户名进行校验,重写注册form修改认证规则即可取消该限制。
USERNAME_RE = r'^\S+
, userena_views.signup,
{'signup_form': BsSignupForm}, name='userena_signup'),
url(r'^signin/
中文用户名问题
同django-admin一样,django-userena也无法使用中文进行注册。对于一个中文网站而言,不能使用中文注册ID似乎有些太不合理的。
django-userena使用正则表达式对用户名进行校验,重写注册form修改认证规则即可取消该限制。
USERNAME_RE = r'^\S+$'
attrs_dict = {'class': 'required'}
class BsSignupForm(SignupForm, BootstrapMixin):
username = forms.RegexField(regex=USERNAME_RE,
max_length=30,
widget=forms.TextInput(attrs=attrs_dict),
label=_("Username"),
error_messages={'invalid': _('Username must contain only letters, numbers, dots and underscores.')})
def __init__(self, *args, **kw):
super(BsSignupForm, self).__init__(*args, **kw)
self.__bootstrap__()
已在github上创建timeline项目
项目地址:https://github.com/vicalloy/timeline-site
感兴趣的朋友就过去关注下吧。
目前还只有一个项目框架,并对基础的模板做了一些调整。因为是自己一个人写,且没人督促,所以项目前期的重构会比较频繁,且项目进度不可控。
下面就是刚的工作成功,一个简单的首页框架。
timeline项目前期准备工作
前些天在日志里说想做个timeline相关的网站。由于最近的琐事较多,也是出于惰性,迟迟没有动手。想最近还是先将项目启动好了,然后在blog上记录项目的过程。记录的过程,一方面是方便日后的总结,令一方面多少也有些督促作用。
缘起
很早以前就想做一张古今中外的大事年表,看中国历史上的同时期国外都发生了些什么事。对于普通的文字列表而言,timeline的展现方式无疑要直观很多。在寻找timeline工具的时候没有发现好用的。到了现在,已经出现不少在线timeline工具了,不过中文的还没有,既然如此那就自己做一个吧。
网站定位、功能规划、前期推广方案
timeline功能有些过于单一,可发掘的余地不会太大。不过换个角度看,做一个有价值的小众服务也不错。
这会是一个类似维基百科的网站。大家可以在上面察看、制作自己感兴趣的timeline。网站支持多人协作,可以多人共同维护一个timeline。timeline支持评论。用户可以将自己感兴趣的timeline做个列表(类似豆瓣的豆单)。如果用户活跃的话甚至可以考虑增加小组的功能。
网站创建初期最需要的是基础内容以及第一批核心用户。内容方面会自己做几个timeline并进行社会化分享。针对目标人群的不同会将timeline分为明星偶像、社会化事件、历史、技术类(如js的演化)。然后看目标人群的接受程度再做适当的调整。
技术方案
服务端采用django。UI方面采用twitter出品的bootstrap。
除此之外令一个重要的问题是如何实现timeline的展示。网上不少timeline的js实现。经过调查后决定采用timeglider。下面是入围JS库的介绍。
- http://timeglider.com/jquery/
- 功能不错,而且基于jquery。在2011.x月之前bsd协议,最新版本改为了双许可,价格并不便宜。
- http://links.sourceforge.net/#timeline
- 功能比较全,UI很一般。
- http://www.simile-widgets.org/timeline/
- 功能中规中矩,缺少缩放功能。
参考网站
既然此类网站已经有了,必要的参考自然少不了。
- http://www.xtimeline.com
- UI不是很美观,功能方面和我的想法比较接近。
- http://www.timerime.com/
- http://www.tiki-toki.com/
- http://delicious.com/search?p=timeline
- delicious上可以找到很多有用的资料
- http://www.douban.com/event/search?search_text=%E5%B0%8F%E7%BB%84&loc=china
- 参考UI
- http://www.timetoast.com/
- 同xtimeline类似,UI更好些。
最近想做的一些东西
由于长期的挖坑不填,于是想做简单一些的东西,简单到一周之内可以完成。
WP7的虾米电台客户端
虾米的电台很不错,有多种风格的电台可以选择。选择一个自己喜欢的电台然后有啥听啥,比自己选歌来的方便的多。目前虾米有官方的ios、android的客户端,wp7的客户端暂时还没有。虽然手机可以用网页版的虾米,不过网页版无法后台播放将是一个很大的缺陷。
我还没有wp7的手机,想做着东西主要还是想体验一下wp7开发。
timeline在线制作
世界历学的很烂,完全不知道国外的重大历史事件对应到中国的朝代。想做这么一张历史年表,将国内外的大事件都标记在上面。顺带想做一个关于timeline的网站。用户可以制作自己的timeline并进行分享。最好还可以象wiki一样大家共同编辑同一个timeline。
前期会做的很简单,只有简单的创建和展示功能。评论功能直接使用disqus实现。
目前国外网站已经有一些提供在线timeline服务的网站。里面大多网站都面向企业用户提供收费服务。其中比较接近我想法的是xtimeline。
收到SAE的开发者证书了
前段时间SAE开始分发python的内测名额,一时手慢,错过机会。不过倒看到SAE可以申请开发者证书。申请资格中写有开源作者可以申请高级开发者证书。由于错过内测名额,所以就有啥拿啥吧。
感觉SAE的这次营销策划想法非常的好。可以花很少的钱就可以做到不错的推广效果,最重要的是还能得到一个皆大欢喜的结果。
PS:
申请一个SAE证书还是有些好处的。申请成高级开发者后,每年可以有¥1800的免费SAE资源可以使用。

二手数码控的pagerank为3
将博客切换到主域名的重要原因之一是博客的pagerank居然为0。虽说pagerank只是浮云,但考虑到我的博客已经存在了这么久,0这个数字多少有些让人难以接受。将博客切换到主域名,希望pagerank能有所提高(至少别继续维持在0了)。看网上说pagerank每三个月更新一次,先耐心的等待了。
今天忽然发现二手数码控的pagerank居然有3。有些太没天理。网站才上线几天,即无人来,也没有啥外链,pagerank居然也能到3。
Django标准化项目dj-scaffold
由于Django没有象rails一样指定项目的目录结构规范,很多人都对django项目的目录结构要如何组织而感到困惑。为此我又新创建了一个开源项目dj-scaffold(django的脚手架)。这个项目用于自动生成一个标注化的django项目和app。
项目地址:https://github.com/vicalloy/dj-scaffold
安装
已经发布到了pypi,所以你可以用pip或easy_install 来进行安装。
pip install dj-scaffold
easy_install dj-scaffold
使用
dj-scaffold主要提供了两个命令,dj-scaffold.py和lbstartapp。
dj-scaffold.py
该脚本用于取代django的startproject命令。使用方式如下:
dj-scaffold.py projectname
在该命令执行后,将创建项目projectname。在项目的scripts目录中提供了脚本create_env.py和env.rc。
- create_env.py 执行该脚本将自动初始化python虚拟环境。新生成的python虚拟环境在env目录。
- env.rc 该脚本用户启动python虚拟环境(source env.rc)。该脚本同时为python manage.py设置了快捷方式$mg。你可以在任何目录调用$mg来执行django命令。比如你用$mg runserver来启动测试服务器。
项目对应的目录结构如下:
注:文件太多,去掉了部分不重要的文件
dj-scaffold.py projectname
|+docs/ #用于存放项目的相关文档
|+env/ #python虚拟环境,由脚本自动生成
|~requirements/ #第三方依赖包的存放位置
| `-requirements.pip #pip的依赖说明文件
|~scripts/ #系统相关的脚本
| |-create_env.py #创建python虚拟环境(env目录)
| `-env.rc #进入python虚拟环境。同时提供python manger.py的快捷方式$mg。可在任意目录使用$mg。
|~sites/ #Django的项目文件。在settings文件中增加了部分默认配置。如数据库默认使用sqlite,设置项目的模板以及静态文件目录。
| |+media/ #项目静态文件(用户上传)
| |+static/ #项目静态文件(css、js等)
| `+templates/ #项目模板
|+tools/ #一些项目依赖的第三方工具包。如python虚拟环境初始化脚本等。
`~wsgi/ #项目部署用的wsgi文件
`-dj_scaffold.wsgi
lbstartapp
lbstartapp作为django的扩展命令提供。将dj_scaffold加到INSTALLED_APPS后即可使用该命令。该命令将生成一个标准的app,相比django自带的startapp,lbstartapp将那些不太常用的app默认目录也都给生成了出来。对应目录结构如下:
|+management/ #命令目录
|+static/ #静态文件目录
|+templates/ #模板目录
|+templatetags/ #tag目录
|-__init__.py
|-admin.py #admin管理后台的models配置文件
|-forms.py
|-models.py
|-settings.py #app自己的settings文件
|-tests.py
|-urls.py #urls配置文件
`-views.py
NOTE
- 项目的大多代码来自:https://github.com/lincolnloop/django-startproject
- 类似项目:https://github.com/mozilla/playdoh 个人觉得这个项目还可以。不过我个人觉得自己写的更符合自己的习惯。
- “摒弃魔法”是Django的哲学之一。为此Django没有为用户提供太多的默认操作,它希望一切对用户都是显示可见的。这本没太大的问题,但在我看来“no magic”并不代表连规范都不要。Django实在是太缺乏一些必要的规范。
把二手数码控的代码放到github托管
项目地址:https://github.com/vicalloy/scnews
对目录结构做了些调整,并将代码托管到github。
虽说对互联网行业比较感兴趣,工作却一直和互联网没多少关系,说起来也是叶公好龙。这世界大多人都是“说,天下无敌。做,无心无力”。于是想,整个简单的项目做个实践吧。
因为这是业余时间的一个实践,为不妨碍自己的工作与业余生活,这个项目必定会是一个非常简单的项目。
网站定位
现有二手交易网站的问题
每个人都会有些食之无味,弃之可惜的东西。目前交易二手货的主要途径有:淘宝、58等同城网站、专业论坛(如苹果产品的weiphone等)。
- 淘宝 对普通用户的二手交易有诸多限制,发布二手信息非常的不方便,也不容易被其他用户找到。通常用户在淘宝发布二手信息后,还需到专业论坛发帖宣传。
- 同城网站 信息确实非常的多,信息的真实性方面就没多少保证了。无用信息过多,用户想过滤出有效信息的成本过大。 同城网站发布的信息按照城市区分。我认为这是一个过时的做法。在物流业高度发达的今天,很多二手交易已经不再受到同城的局限。
- 专业论坛 就目前而言专业论坛是完成二手交易的最佳地点。首先论坛ID本身就具备一定的信誉。其次,既然是专业论坛,信息的精准性比较有保证。论坛的最大问题是,论坛的数量众多,而且也会有不少同质性的论坛。如果想更有效的找到自己所需要的东西,你可能得同时关注好几个论坛。
我希望做成怎么样
在众多的二手物品中,数码产品有其特殊性。
- 量多 数码产品的更新速度越来越快。潮人们,喜新厌旧,很多数码产品在卖相很好的时候就已被打入冷宫。二手数码产品买、卖需求都不少。
- 物流成本低 如果是家居,物流成本高,这些东西基本上只能做同城交易了。数码产品一般都比较轻,物流成本低,通常不受同城的限制。
网站形式
- 以数码产品的交易为主题,网站形式类似现在广泛存在的同城网站。
- 因为数码产品的交易大多不受同城的限制,因此取消同城的设置。
- 信息发布方面,尽量简单。用户发布信息时,只需要填写简单的物品描述信息即可,和论坛发帖类似。
- 只能发布二手信息,不可发布求购信息。
- 加强SNS功能。在个人信息页面中尽量提供个人主页、douban、facebook等信息,以ID作为信誉保证。
为啥最终作成了数据挖掘网站
做个简单的二手交易网站的工作量并不大。但没基础的核心用户,网站基本上无法正常运作起来。若是为了提供基础数据,让系统从其他网站抓起数据来滥竽充数,则无法形成网站的“文化”。既然如此,倒不如先做个数据挖掘的网站。若该网站能积累一定的基础用户,则可考虑启动下一步的工作,启动二手交易网站方面的工作。
二手数码控功能规划
二手数码控特指数据挖掘网站,二手交易部分的功能至少在短期内是不在议程之内的。考虑到今天太晚,这部分的内容留在下次再写。