博客首页|TW首页| 同事录|业界社区
2011-02-28

Django 的Admin系统是 Django 几大killer feature之一, 所以对它的一些研究对于熟悉 Django 及其应用都有重要价值(因为Admin系统 是一个完整的 Django 应用示例).

http://towerjoo.blog.techweb.com.cn/files/2011/02/django_logo.png

本次大致的研究过程如下:

  1. 将 Django 的Admin系统拷贝出来,在一个新的 Django 项目中作为独立应用来运行
  2. 对这个独立的应用进行一定的修改
  3. 理解和分析Admin系统的设计和代码书写值得学习和注意的问题
  4. 总结

相关的代码可在 github 查看和检出,也可 下载zip后的代码 。 (techweb会过滤掉一些字符导致无法正确显示和访问,正在协调解决)

将Django的Admin系统作为独立应用来运行

  1. 使用django-admin.py startproject myadmin新建一个新项目
  2. 将django的原文件拷贝到新项目myadmin目录下
  • 找到django的安装目录, 如果不知道,可在python的交互式prompt下输入:
  • import django
  • print django.__file__
  • 那么 Django 的Admin应用就在DJANGO/contrib/admin/
  • 将整个目录拷贝到myadmin目录下
  • 如果需要,则调整相关的文件权限
  1. 修改myadmin项目中的settings.py和urls.py
  2. 同步数据库(syncdb)和运行代码

这时我们的第一个目标得以实现,因为根据Python语言package的导入规则(或者叫module search规则), 相对引入(relative import)会覆盖系统的django module,所以myadmin项目中运行的是myadmin下的 admin项目,而不是系统安装的。

为了检验,我们不妨可做一个简单的修改来证明,我们使用的是myadmin下的admin,我们在myadmin/django/contrib/admin/sites.py 的248行加入一句: import logging; logging.debug(”My Edit here”)

使用浏览器请求http://127.0.0.1:8000/admin/, 则你可在输出的log中看到上面的log.

对Admin系统进行一定的修改

我们打算做以下几点修改:

  1. 在一个具体的table的显示页面,增加导出csv的功能(也就是将当前查看表的数据导出为csv)
  2. 在一个具体的table的显示页面,增加快捷的聚合操作的支持(如sum,average等)

修改1

通过阅读代码,大致的修改步骤如下:

  1. 找到显示页面对应的template(change_list.html),也可使用方便的debug_toolbar来查看
  2. 添加导出为csv的链接
  3. 增加相应的url映射(options.py第254行)
  4. 增加相应的处理(options.py第773行)

相应的csv逻辑还是比较简单的,当然我只实现了将此表中所有记录导出的功能,部分数据导出的功能并未实现。

在实现的过程中,找到相应的url映射和及处理逻辑是比较重要,和相对较难的,大致的过程如下:

  1. 入口是: admin.sites.urls,发现其是一个property
  2. 继而找到get_urls方法,得到相应的url映射,发现对于特定model的url映射是对应各个model的urls属性
  3. 继而找到options.py文件,同样发现其是一个property
  4. 继而找到get_urls方法,及其相应的url映射,这里便是我们要添加我们的url映射的地方
  5. 然后加入相应的url映射的处理逻辑即可

从上面的代码我们会发现django的逻辑很清楚,而且层次分割和明确。

修改2

基本的步骤同修改1,只是在功能和界面上有所调整。

在修改2的完成中,我们使用了

  1. forms
  2. database aggregation

最终的结果可见下图:

http://towerjoo.blog.techweb.com.cn/files/2011/02/django_admin_result1.png

分析与总结

请查看下篇文章

2011-02-27

是昨天的事了,由网易科技发起,活动主题是 中国社交游戏海外之路, 话说业内的事作为有想法的人还是需要经常和同行们分享交流下,这样才不至于 太闭门造车。活动的说明地址是 http://tech.163.com/11/0222/15/6TGPOIA3000915BF.html, 网易科技的人说下周会将相关视频与演讲稿上传到网易科技的页面,大家不妨可关注下。

http://towerjoo.blog.techweb.com.cn/wp-content/blogs.dir/14215/files/blog/socialgame.png

昨天我上午还在做公司的事,也就是上周遗留问题的处理,和一个新版本的更新,和同事们奋斗了 一个上午,下午2点就去了活动的场地“彩虹酒吧”,话说这是我第一次来酒吧,当然与酒是没关系的。 不久开始了,多余的不说,只说些我认为比较重要的,其它详细的事宜大家可参考网易科技即将更新 的视频和相关材料。

与会的比较重要的有 热酷 的CEO( @刘勇 ), 智明星通 的COO( @王玉辉 ), 恺英网络 等, 分享的有市场的经验,运营的经验等等,值得注意的点包括:

  1. 刘和 Zynga 的CEO Mark交流时,Mark认为社交游戏将是仅次于搜索的第二大市场,而刘认为社交游戏将超过搜索是第一大市场
  2. 刘依据一些咨询公司的数据认为至2013年左右社交游戏市场将达300亿美元左右
  3. 刘认为开放是互联网的基本特征,相关的社交平台也终将走向开放,包括中国
  4. 刘认为传统网游公司进入社交游戏行业稍微显晚
  5. 热酷在日本社交游戏领域是第一,在mixi前4名游戏中有3个是热酷的。
  6. 热酷的游戏都支持PC和手机,因为日本的移动市场的发达
  7. 刘认为在进入日本市场时最大的困难是人才,合适的人才
  8. 热酷开发一款游戏时,会在日本进行调研,在中国进行开发,其中工作量上日本与中国三七的比例
  9. 日本市场的特殊性是,各个日本的社交平台都有统一的游戏展示平台,即flash(PC上的flash player, 手机上的flash lite),中国缺这样的基础支持
  10. 王(玉辉)主要分析了几款游戏收入的曲线,说明了怎样能够保持一个比较稳定的收入曲线
  11. 王提到了智明星通的“行云”框架,是用于快速开发,快速响应,数据驱动运营等,即将开发出来
  12. 王认为保证一个游戏的成功包括:模型驱动的开发和数据驱动的运营
  13. 王认为快速迭代更新是一个游戏能够保持较好,稳定赢利的关健,使用“行云”可以做到1-2天一个更新(相比一般公司的1-2周)
  14. 如何战胜社交游戏行业的拷贝?王认为快速上线是最好的方式,“行云”能够保证一周内全球主要市场同步上线。
  15. 恺英网络与腾讯合作的成功经验,恺英相关负责人并未深入谈及。

在听演讲的时候,个人觉得社交游戏的市场已经是竞争非常充分的红海,大家都在使尽浑身解数在追赶,在超越, 隐隐觉得未来2-3年将会是社交游戏竞争最激烈的时期,也是大家从产品到品牌创造的过程,几年后留下的应该 只是那些有足够品牌影响力的公司。

和一个朋友 @我心_李力 聊了下社交游戏创业的相关事宜,看到大家都在努力,哪怕辛苦,哪怕艰难,但是 能看到眼中那充满希望的神情,我想最近在热炒的所谓互联网第二次泡沫的到来,或许有些道理。单不论是否是泡沫, 但一点是肯定的,那就是资本,技术,人才都在向互联网集中,当然错过第一次互联网爆发的我们,或许有理由 期待和参与本次的机会。加油吧,无论是视频,电子商务,团购,LBS,社交游戏,移动互联网!

P.S. 这次在听的过程中还使用 @towerjoo 微博直播了下整个活动,觉得挺好的,如同笔记样可供自己和大家查询。

P.S. 网易更新后的链接地址为: http://tech.163.com/special/wdk04/

2011-02-24

最近每天晚上会读会 Rework, 是 RoR 作者的书,书写得还是不错的, 至少它符合了当下社会的特点:

  1. 简、短、节式:每篇文章都很短,读得并不吃力,也应合了现在微博时代的特征
  2. 颠覆:现在的社会你不搞点特别的东西,你还真别想让别人来关注你
  3. 图:话说大家都爱看图,连 小鞋匠 也爱看有图的武功秘籍
  4. 密度小:我指的是文字和书的厚度相比而言

我看的是中文版的,文字的密度不大, 很值得睡前读读。当然由于上面的几个特点就注定了内容的关联性和逻辑性比较松散, 对于某个方面的论述也流于表面,或者一页或者一页半的篇幅在阐述一个点, 所以论证也显得比较粗糙。

如果用一句话来说就是: 你之前如果认为应该往左走,那么Rework就是告诉你其实你应该往右走, 我的说法有些极端,但基本上也是如此,至少他会告诉你往左走其实不对。譬如, 在项目中我们想应该做计划吧,他说完全没用;要迅速扩展布局市场吧,他说要尽量不要扩展等等,不一而足。

话说回来,管理本身是一种艺术,凡是艺术,大致就是仁者见仁,智者见智的事,往左能成功,往右往往也能成功, 只是说你下意识里想往左或者想往右而已。先行者成功的例子,并不一定适合后来者的足迹,所以我说管理书 大致可当励志书来看的原因(当然某些大师的则不在此列)。读了后,让你明白除了往左走能成功外,往右走也 是能成功的,于是你心里便多了一个模式,决策时便更加全面了(或者说更加模糊了).

末了,想告诉要阅读本书的同学,如果看后你觉得大彻大悟(或许颠覆了你许多旧有的想法)了, 那么我得告诉你,其实你是高兴太早,正如我说的, 通往罗马的路多了去了,只选择当下最合适你的即可。当然,这种颠覆的感受还是很爽的,因为你我都在受某些项目 开始时时间预算的折磨,此时,你大可回你的老大一句: 人家Rework可是反对计划的啊

当然,一些建议也还是值得的,如从现在做起,从小事做起,对待客户反馈的处理等。

整体,我打个3星吧。总之,一部提倡你改变思维的书,只要不是太离谱,还是值得一看的。

2011-02-21

大家好!

希望没有打扰到您!我们公司位于五道口,主要从事社交游戏的开发和运营等,公司发展比较迅速,已经从去年5月的5人发展到目前的30多人,而且仍在较快发展,

期待您的加入.

谢谢.

下面是招聘正文.

—–

总部位于美国硅谷的网络和移动社交游戏公司

2010, 5月, 北京研发公司成立,办公室只有不到5个人

11月,北京公司研发人员达到30人,北京研发公司产品收入实现团队盈利

2011年,我们已经做好准备,期待你的参与能和我们一起创造奇迹

。。。。

由一群对互联网创业执着的人组成,公司第一位创始人04年创建早期垂直搜索引擎公司,05年被收购,07年开始开发facebook应用,08年初加入美国硅谷一家知名社交游戏公司,主管产品安装人数在一年半之内超过一亿用户,峰值在整个全球社交领域所有产品活跃用户位居第二

另外一个创始人96年上海交大计算机硕士毕业,在IBM公司工作三年,随后在美国硅谷主流互联网公司担任研发工程师,架构师,高级架构师10年

我们提供所有的五险一金和优越的薪水待遇,我们崇尚分享,我们分享共同努力获得的财富,包括奖金和股票。

应聘方式:

简历请投递至: hr@halfquest.com

工作地点:北京清华科技园,五道口

招聘的技术职位:

- Flash程序组长 月薪9K  15K

- PHP程序组长 月薪9K  15K

- Python程序组长 月薪9K  15K

- Flash 工程师 月薪6K  10K

- 行政管理和前台 月薪3K

Flash程序组长 月薪9K  15K

应聘要求:

1: 首先必须是一位出色的flash工程师,2年以上的用AS3进行flashflex开发从业经验,游戏行业由佳

2:熟悉AS3的内存管理机制,善于对Flash项目性能进行优化。

3. 熟悉AS3与服务器端通信技术,能够编写出与后端的通信模块,熟悉Socket更优。

4. 能够根据产品意图设计出用户体验优秀的动画交互效果

5: 很强的组织能力,需要有信心和魄力带领任何一个团队实现项目目标

6:很强的沟通能力,有创业的决心和毅力

7: 有过Flash SocialGame相关从业经验者优先

上面要求至少符合5项或者以上条件,谢谢

PHP 程序组长 月薪9K  15K

应聘要求:

1.计算机或相关专业、本科及以上学历,至少有3年以上程序设计经验

2. 精通PHP主流框架,并有相关至少3个成功开发经验,至少自己动手写过10000行以上高质量代码

3.常用环境搭建,如:apache、php、 mysql、nginx、memcache等,和其相关的参数设置和性能优化。

4.有能快速的发现和解决系统存在的性能问题的能力。

5.扎实的算法和数据结构基础,良好的逻辑分析能力

6.熟悉Javascript和Ajax等浏览器编程技术

7.能够适应高压力的工作环境,

工作描述:

1. 开发游戏后台逻辑和游戏相关模块

2. 协调前端Flash工程师完成相关游戏通讯功能

3. 在游戏工作室负责发布游戏和保证游戏性能等

上面要求至少符合5项或者以上条件,谢谢

Python 程序组长  月薪9K  15K

基本和php上面程序组长要求类似

Flash 工程师 月薪6K  10K

1: 2年以上的用AS3进行flashflex开发从业经验,游戏行业由佳

2:熟悉AS3的内存管理机制,善于对Flash项目性能进行优化。

3. 熟悉AS3与服务器端通信技术,能够编写出与后端的通信模块,熟悉Socket更优。

4. 能够根据产品意图设计出用户体验优秀的动画交互效果

5. 有良好的数学 和物理学基础,善于独立解决程序中遇到的复杂算法,并追求完美;

6: 有过Flash SocialGame相关从业经验者优先

上面要求至少符合4项或者以上条件,谢谢


行政管理和前台 3K

要求:

1. 形象好,有亲和力

1、细心主动

2、情商好、自制力强、耐心

3、重点学校毕业优先、英语好优先,因为公司有来自不同国家的员工,不限专业

工作描述:

1.前台接待和公司邮件,文件处理工作,办公室行政相关工作

2.协助人力资源完成员工招聘和入职工作

3.负责员工考勤,组织活动等工作

4.协助管理层完成其它支持工作

不知道你是否已经厌烦了点击开始菜单,找到合适的应用,点击应用这个繁琐的流程, 是否想着一个命令或者一个操作就打开自己想要的应用,本文就是说明在主流的操作系统(Win,Mac,Linux)下 最常用的快速启动应用.或许你每天都在用它们,或许你是第一次听说,无论如何不妨可以 来尝试下,那种快速直达的快感.

文中不讨论过多的复杂应用,只是想实现一个简单的目标,即快速地打开自己想要打开的应用.让我们开始 这次提高自己生产力之旅吧.

Mac

首先说到的是苹果的Mac,是因为Mac下的 Quicksilver 可谓是这几个类似应用下最成熟和最让人欣喜的应用.


有了它后,你的流程则是,调出 Quicksilver ,输入目标应用名字中所含的字符, Quicksilver 会自动匹配, 当找到自己的目标应用后,点击回车即可.

这个过程便完全使用键盘完成了,至于键盘之于鼠标的高效性,不妨可参考Xuyou的系列文章 完全用命令行工作-1: 拔掉你的鼠标.

来自 发布者 的描述:

For those of you not familiar with Quicksilver, it’s an application that lets you reach any program, folder or file in a few keystrokes. You don’t have to go searching through your files, you don’t have to worry about how your folders are arranged. For many, Quicksilver was a godsend in the pre-Spotlight Mac era. Although it’s lost some of its importance with the new powerful search and Finder features in Leopard it still remains very much an excellent Mac application.

Win

我们再来看Win, Win下我试了不少的类似软件,最后还是比较喜欢的是 Colibri, 它没有 Quicksilver 那么强大, 但是在快速启动应用上得心应手.


来自 Colibri 官网的描述:

Type Ahead — Information at the Tips of Your Wings

Linux

让我们再回到程序员比较喜欢(我个人相比Mac我更喜欢Linux)的Linux, 与 Quicksilver 功能比较接近的 Gnome Do ,完全能够快速地完成目标.


来自 Gnome Do 官网的描述:

Simple, sleek, swift, smart. Do. GNOME Do allows you to quickly search for many items present on your desktop or the web, and perform useful actions on those items. GNOME Do is inspired by Quicksilver & GNOME Launch Box.

题后话: 因为主要的工作环境是Linux, 其次是Win,Mac则用得很少,当然对于操作系统我并没有什么偏见,因为目标才是最重要的, 哪个平台最适合干什么,我便会去用哪个平台,仅此而已. 在Linux下,我设置的快捷键是Alt+D,当然Win下的 Colibri 也用了相同的命令,话说 甩掉鼠标,生产力着实提高不少. 如果您是程序员,不妨今天就开始使用吧.

2011-02-13

两类版本控制工具简单说明

这三种版本控制工具,我都有用过,目前项目中使用最多的是 Mercurial, 而一些自己的项目也分布在 GithubGit )或者 Bitb****etMercurial )上。

比较而言, Git 和 Mercurial 是一类版本控制工具,即分布式的版本控制工具, 而 Subversion 是集中式的版本控制工具,如果用一句话来概括二类的不同,则 为: 使用分布式版本控制工具检出的版本,包含完整的版本、历史等与代码 相关的信息,而集中式的版本控制工具检出的版本,通常只包含最新的一个版本 的代码 , 所以分布式版本控制工具能够极大地减少网络通信(如与服务器), 大大地提高效率。一个简单的例子例如要查看一个文件的log,用 Subversion 时就得和集中 的服务器通信来获得,获取的延时取决于网络通信等因素,而 Git 或者 Mercurial 则 只是一个本地的操作。

下面简单对比了下二类版本控制工具的优势:

分布式版本控制工具 集中式版本控制工具
优点
  1. 减少网络通信
  2. 去中心化,提高可靠性
  3. 更利于分布式协作
  4. 生产率(productivity)相对较高
  1. 单次检出的成本低
  2. 较适合二进制文件(相比)
  3. 掌握的人更多
  4. 命令流程简单
  5. 相关配套软件成熟(如IDE集成)
缺点
  1. 首次检出代码时代价高
  2. 不适合二进制文件
  3. 掌握的人较少
  4. 命令流程相对复杂
  5. 相关配套软件不成熟
  1. 大量的网络通信
  2. 可靠性较低(信赖于中心结点)
  3. 不太利于分布式开发

三种常用版本控制工具的命令对比

据说,IT行业跳槽率是很高的一个行业,特别是开发人员,面对一个新的公司、新的同事、新的开发环境、 新的版本控制工具等的机率是很高的,而一个有较高素养的开发人员,应该对于主流的版本控制工具有一定 的了解,特别是对于常用的一些基本操作有能够较熟练的掌握。下面,我就简单总结下不同的操作目标下 三种不同工具的具体操作方式和命令。

Subversion Mercurial Git
检出新的代码库 svn co repos_path wc hg clone repos_path wc git clone repos_path wc
更新已有的代码库 svn up hg pull -u git pull
查看本地的修改 svn st hg st git status
提交本地的修改
  1. svn add files
  2. svn ci -m “comments”
  1. hg add files
  2. hg ci -m “comments”
  3. hg push
1.git add files 2.git commit -m “comments” -a 3.git push
查看log svn log file hg log file git log file
恢复某个文件到某个版本 svn merge -c -REV file hg revert -rREV file git checkout REV file
恢复整个代码库到某个版本 svn up -rREV hg up -rREV git checkout REV
比较文件 svn diff -rREV:REV file hg diff -rREV:REV file git -rREV:REV file

当然上面只是最最基本的使用说明,不过大致已经涵盖了开发人员90%以上的日常操作,诸如branch,tag等应用, 你大体上可以通过”svn/hg/git help”来获得信息。

当然倘若你能够熟练地掌握其中之一,那也自成为你的瑞士军刀。

http://icatclaw.com/wp-content/uploads/2011/02/瑞士军刀图标下载145.png

关于二进制文件的版本控制

当然通常你会说没有这个必要来将二进制文件纳入到版本控制之中,我们大可选择ftp等覆盖方式来完成。 在实际的开发中,我们也有类似的方法,例如flash生成的二进制文件的swf和音乐文件mp3等,前者我们 还是使用 Mercurial 而后者我通常就使用 scp 等命令来完成了覆盖。

这时候,分布式版本控制工具的劣势就显现出来了,因为二进制文件每次更新基本上是一个完全新文件的更新, 而非增量,举个例子,假设一个分布式版本控制工具( Git /Mercurial)的代码库中只有一个10M的swf文件, 那么经过100个版本更新后,大小大致为10*100M=1G(大约,同样假设每次更新后的新文件大小也为10M)。如此一来, 当我们在服务器上部署时,首次的网络通信成本就非常巨大!记得在我们实际的一次项目经历中,一次更新了2个小时才 完成了更新。当然后续的更新相对成本较低。

同样的例子,如果改为使用 Subversion ,中心结点(服务器)上的代码库的大小大致也是1G左右,但是当我们部署时, 只需要大致10M左右的网络通信即可(取版本号为100的一次更新),所以成本则显得很低,后续的更新成本也相对较低。

当然,分布式版本控制工具下的代码库在线上时,如果需要恢复到某个特定版本,则无需网络通信即可完成,而集中式的 版本控制工具则成本相对较高。

总之,如果二进制文件的大小较小、版本更新频率较低,则选择二者差别不大,对于二进制文件较大、版本更新频率较多的 代码库,则选择集中式版本控制工具更为高效。

常用的代码hosting服务

这三类代码控制工具都有很好的第三方的hosting解决方案,下面只列举最常用的几个:

  1. Bitb****et (针对 Mercurial , 支持免费private repos)
  2. Google Code (针对 Subversion 和 Mercurial , 不支持免费private repos)
  3. Github (针对 Git , 不支持免费private repos)

现在应该说发展比较好的是 Github, 大家不妨可注册一个玩玩。

相关的链接

  1. git magic
  2. svn book
  3. mercurial guide
  4. git tag on SO (相关的对比和分析)
2011-02-12

写博客其实是对自己一次很好的总结,无论是生活抑或技术, 当你尝试写出来时,说明你已经思考过了,思考的深度暂不纠结, 因为那是取自于各人的不同阅历,至少对于自己那已做过了深度的尝试, 那便足够了.

很多人说过,当你认为你明白一个事时,你可以尝试教会别人,如果这个 过程你能够顺利完成,而且别人也能顺利明白,那才算你真正弄明白了, 倘若所谓的”只可意会不可言传”,那自是没有弄得彻底明白,至少在传述给别人 这块还是很欠缺的.而写博客便是一次很好的”为人师”的机会,是否真正思考,是否 真正明白你所谈论的,当你写博客时,理解深度的那个百分比, 你自己在心里会自己明白起来.

新年刚过,一个新的开始,也是一个很好的计划或者修正自己的机会,既然费了点 功夫和money来做这个独立博客,坚持自是顺理成章. 大的计划显得不现实, 我也 不追求量上的,更多我尽量能够保证质上的满意,至少是自己满意. 为此,我的周写作 计划是每周2篇,一篇技术的,一篇非技术的,技术不只是线技术,也包括自己对于某个 技术相关事件的看法等. 当然2篇是最低要求,倘若力有余,大可有更多的产出.

那么开始就从下周(情人节起始的一周)一, 话说最近看的一篇文章大意是说 “反思是最好的进步途径”, 为此,我开始迈向进步.