2009

2009年12月31日 23:26 查看评论(5) 分类:生活 Tags:

不知道该怎么总结2009年好,因为年度的边界现在在我印象里似乎不太明显,我记不清哪些事情哪些改变是在这一年内发生的,哪些是在更早之前发生的。感觉这一年我变化还是挺大的,但说不出来,写一些碎片段吧。

几件事值得记录,年初的兼职,让我开始尝试到经济独立(虽然学费还没独立),年中的腾讯实习生招聘,让我提升了信心,年末的推特中文圈让我认识挺多人。

今年才知道GFW这个东西,似乎GFW是今年才严重发作的吧,我也忘记是什么时候开始知道这个国家的一些现状。不多说。

今年做的东西不多也不少,几乎都放上博客了,另外终于做了个比较多人用的东西,成就感挺强的~~我还是很喜欢做自己的东西,但是脑袋里点子太少了,闲的时候经常纠结于要做个什么东西好。

今年博客写得少了,唠叨得少了,一般琐碎的都写上twitter了,懒得写博客,很多人都这样吧。比以前多了一些技术文章,希望下一年能写多些技术文章。另外还尝试写了一两篇媒体类的文章,呵,效果不咋地。

今年看的书虽然就那么十来本,但已经差不多是我以前看过的书的总和了。没事我觉得还是看看书好,开阔视野。就算是忽悠人的书,看多了才会知道这书是忽悠人的。看看《货币战争》,虽然扯淡了点,但可以引起人对金融和经济的兴趣。看看《走出软件作坊》,虽然现实上我不喜欢作者这样超级正规正派实用主义的人,但这本书我觉得对于无经验的学生很值得一看,看完大概了解,原来软件开发,项目管理大概是这样的。我就看了那么十来本书,但觉得视野比去年这个时候广一点了,希望接下来一年能看更多书。

今年似乎想多了一些乱七八糟的事,想以后的工作和生活,想“活着”,首先要活着,身体健康,其次是过日子,目标是日子过得有趣,快要工作了,锻炼和寻找合适的心态,才能做到快乐地过日子,心态这方面,我实在太差了。

最近意识到,自己有个挺严重的缺点,就是十分毛躁,沉不下心来。一旦有一些无法预测的事,就会很烦,压着感觉很不舒服,还整天做别的事也想着它。我想要是这小小压力都承受不了,以后工作怎么办。寻求克服的方法中,希望下一年能做到。另外急躁是我从小到大的性格,一时半会估计改不了,尽量冷静。

下半年似乎又有点伤病缠身的现象,先是脚倒霉地缝几针静养几个星期,接着国庆后感冒咳嗽快一个月,搞到慢性咽炎都有了,经常痒。另外年末老爸来广州看病,着实让人担心死了,接下来会来广州治疗,希望尽快康复。。

身体是根本,趁没生病,养好身体吧。

兼职结束

2009年12月20日 23:33 查看评论(1) 分类:生活 Tags:

上个星期12月13日正式结束了我的一份兼职工作,3月6日-12月13日,历时九个月。

在大二寒假快结束的时候,我突然想在网上找找看有没有项目有没有兼职可以做,结果就找到了这份兼职,最初是给我一个星期的时间去学习prado框架和做一个应用—抓取5tutor.com上的数据保存到数据库,要求程序要用prado这个框架做。当时学起来难度有点大,prado这个框架挺冷门的,资料很少,官网文档都不怎么齐全,最后我还是做到了,估计也超出他的预期了,兼职就正式开始了,当晚通了个电话,聊了点相关事宜,那时还挺激动的,毕竟是第一份拿工资的工作。对方是香港人,他的普通话跟我的粤语一个水平,结果挺搞,不知道用粤语好还是普通话好。

这个开始的入门程序做了二三十个小时,但他说以后会要求我用6-7小时甚至更少的时间要我完成这样的程序,事实上,后来,根本不是这回事。刚开始的时候要求很高,要我在一个周末两天内做出一个挺难的组件,当时实在是做不到,搞到我想要是这么辛苦的话,不做算了,但到后来似乎工作量越来越少,他要求也变低了很多,万事开头难啊,在开头几个星期里很辛苦,熬过去后,后面很轻松,总的来说,这份兼职做得挺轻松的。

刚开始那一个月要求高一点,沟通上也不怎么顺畅,一次舍友生日,我跟他说,今晚舍友生日,那些工作我明天再做吧,当时他回我什么我忘了,反正看了很不爽。后来似乎态度好了,沟通也顺畅了,因为他本身也是程序员,还挺厉害的,说到一些程序问题不会出现鸡同鸭讲的情况。另外他不仅仅是要我完成他的程序,还有意让我学多点东西,碰到我有疑问的会讲跟我讲一大堆,像个导师栽培学生~还会让我尝试新的东西。有时候我偷懒也不会怎么责怪,到现在只有跟我提过一次说最近我做得太慢了,thx、sorry这样的词也对我也说了不少次。觉得这样的老板是挺难得的。在此感谢他~

忘了说,他是做香港家教中介网站的,叫“香港导师街”,我做的都是后台管理的,所以在网站上都看不到~现在的主页外观本来也算是我做的,但他只单单把导航栏部分抽出来放上去了。

起初他对我说停止合作的时候,我还觉得是不是因为我偷懒了所以被炒了,回复说绝对不是,他已经付出很多时间做training,炒掉我对他也是挺大的损失,纯粹是业务发展上的原因。“如果可以的話, 我必與你合作.”相信他说的是真的,因为确实对我的学习投入了不少。可能他网站完善了,不再需要雇人了吧。

有这份兼职,有稳定的生活费,就能安心学习,安心做我自己喜欢做的东西了,其他项目做不做都行。现在没了这份兼职,可能得花多点时间在做网站做页面赚钱上了,sigh~

KISSY Editor 源码学习笔记

2009年12月9日 21:08 查看评论(0) 分类:技术文章 Tags:

KISSY Editor是淘宝的开源编辑器,基于YUI2.x开发,但感觉YUI在里面起到的就一个工具的作用,我没学过YUI2.x,对阅读源代码似乎也没多大影响。不过貌似YUI2.x本来就是一个工具库的角色。

觉得边看代码边写下来效果会好得多,以后尽量这样做~对这个源码看得并不仔细,只是试图把主要部分框出来,第一次这样做,写出来挺乱,确实是一个“笔记”来着,零零散散。以下记录和分析可能有挺多错误,望发现者指正。

基础

KISSY Editor由多个模块组成,除核心模块外,其他各个模块相互独立(配置模块除外,如smilies~config~wangwang)。各个插件也相互独立,方便日后扩展。
模块上用到的HTML模板都在开头定义,用全大写字母命名,模板上的参数用大括号括起,使用时用replace替换参数。所有的编辑器外观样式都通过className在css里定义。

创建一个编辑器可用KISSY.Editor(textarea, config)也可用new KISSY.Editor(textarea, config),第一种当成函数调用,会返回new KISSY.Editor(textarea, config)

基础函数:

  • 添加模块:add: function(name, fn, details),把所有模块都保存在属性mods里。
  • 添加插件:addPlugin: function(name, p), 把所有插件都保存在属性plugins里,不允许同名插件覆盖。
  • 加载所有模块:_loadModules 执行所有模块的fn,并把执行过的模块加入属性_attached里

核心模块

core~config: 配置模块
lang~*: 语言模块,保存在E.lang[*],自由扩展多种语言
core~plugin: 定义插件种类
core~dom: 封装一些与编辑器dom相关的方法到E.Dom
core~color: 封装颜色值转换相关方法和正则表达式E.Color
core~command: 不明
core~range: 封装Range方法(获取选中对象、选中文本等)到E.Range

core~instance: 实例化编辑器

  • render编辑框,在此模块开头定义编辑框模板,在传入的textArea前面插入编辑框,隐藏textArea
  • 创建工具栏和菜单栏,并调用各自的init()初始化: this.toolbar = new E.Toolbar(this); this.statusbar = new E.Statusbar(this);
  • 初始化所有插件(工具栏和状态栏的插件在各自的对象里初始化),给每个插件的属性editor传入当前编辑器实例 p.editor = this;
  • 连接到编辑框的三个属性:container contentWin contentDoc

core~toolbar: 工具栏模块

  • init(): 按照config.toolbar的参数用_addItem加载插件
  • _addItem(): 初始化插件,把插件加入工具栏
  • _bindItemUI: 给插件绑定事件
  • 三个updateState相关方法让鼠标点击编辑框时插件根据情况改变状态

core~statusbar: 状态栏模块 与工具栏类似

core~menu: 下拉菜单模块

工具栏有些插件点击后有下拉菜单供选择,例如字体、颜色等,在此模块定义通用方法,需要用到的插件可以调用。

插件模块

smilies~config~default、smilies~config~wangwang: 表情插件的配置文件 每一个为一套表情图片。

plugin~*: 插件模块

  • 每个模块使用E.addPlugin添加相应的插件
  • 每个插件里:
    • 如果定义了init(),则在初始化插件时会调用。
    • 每个插件都有属性type,指定它是哪个类型的插件
    • 放在toolbar上的插件,点击时执行插件的exec() 方法
    • 插件与外部的连接:editor: 编辑器实例,即Editor.Instance

暂时到这里~

抓取twitter中文用户数据GAE程序开源

2009年12月8日 23:32 查看评论(12) 分类:作品 Tags:

起源

我对抓取和处理数据挺感兴趣的,以前试过用PHP抓取饭否用户的数据,得出饭否用户统计(放在秘饭里),当时特别需要能有定时执行一个程序持续抓取数据的功能,但找不到方法,暑假发现GAE有cron功能时挺兴奋,就琢磨着要做个什么东西,抓取一些什么数据玩玩。可惜饭否挂了,否则我做的肯定是饭否的应用,饭否没了,就捣鼓twitter了。

想着想着,就想出抓取twitter上说中文的用户,形成一个排行榜,一个圈子,就是推特中文圈了,因为可以不断抓取数据,每个人最新的一条推都保存在数据库里,更新时间也保存,然后读取数据库,根据更新时间排序取出数据,就能形成的“随便看看”功能了。我最初想做的,就是这两个东西。实实在在的一个“中文圈”,后来闲着也是闲着,干脆把使用twitter需要的功能都加上了。没想到后来受欢迎的是这些普通功能,最初的那两个功能反响反倒不怎么样。另外,在中文圈发消息的时候,会自动更新存在GAE数据库里对应的用户数据,所以会马上显示在随便看看里。用的人多了,随便看看的更新就比单纯后台抓取数据快多了。

后来GAE版被封,改写PHP版,不愿放弃排行榜和随便看看,于是修改了程序,还是那样抓取数据,再提供个页面输出json数据,让php程序调用。

本来打算开源PHP版twitese后下一步就是要开源这个抓取数据提供API的GAE程序的,但一因为懒,二因为大家似乎没这个需求,就搁置了,今天偶尔想起来,就放上吧。

程序

项目主页:http://code.google.com/p/twiteseapi/

原理

读取FecthHelper数据库获得用户id和页码(第一次用下面写的initFetch页面写入初始数据),抓取他的好友列表,循环每一个用户,判断他的姓名、desecration、最新的推里有没有中文,有的话保存进TwitterUser数据库,没有的话跳过。一个页面的好友列表处理完后,判断此页是否为末页(根据好友个数是否小于一个数),不是末页则把下一页的页码写入FecthHelper数据库,等待下次执行。是末页则读取数据库TwitterUser里另一个用户的数据,存入FetchHelper,等待下次执行。

使用

在eclipse新建一个GAE项目,再把文件覆盖进去。改一下appengine-web.xml里的名字,剩下的就是提交上传了。

页面

4个功能页面:

initFetch页面,源文件InitFetchData.java
上传程序后首先运行这个页面,初始化生成FetchData数据库,写入当前要抓取的用户和页码。

fetch页面,源文件FetchData.java
核心页面,读取FetchData数据库取出用户名和页码,抓取它的好友列表,保存进数据库TwitterUser,按照不同条件判断继续下一页抓取还是改变抓取的用户。

reset页面,源文件ResetData.java
读取过的twitter用户在数据库里会标志readed=true,fetch抓取时间过长可能会导致所有用户readed都为true,这个页面每次修改100个用户的readed为false。

delete页面,源文件DeleteData。java
删除数据库TwitterUser里的数据,每次删除300条。

其中fetch reset delete都应该通过cron不断执行。

2个输出页面:

rank.json页面,源文件RankJson.java

输出排行榜数据,格式:

[{
    "profile_img_url": "http://……",
    "screen_name": "bang590",
    "name": "bang",
    "description": "",
    "followers_count": 1455053,
    "friends_count": 72,
    "statuses_count": 586
  },
  ……
]

接受参数:页码page 条数count 均为optional

browse.json,源文件BrowseJson.java
输出随便看看数据,格式:

[{
    "profile_img_url": "http://……",
    "screen_name": "bang590",
    "name": "bang",
    "text": "推内容",
    "created_at": "Tue Dec 08 15:15:50 UTC 2009",
    "id": 6465851422,
    "source": "web"
  },
  ……
]

接受参数:页码page 条数count 均为optional

目前存在的问题是,没判断API Rate limit,抓取时超过了API限制直接跳过了。
偶尔一些外国人的推里出现了中文,也会被抓取进数据库。程序写得很乱,没去整理,挺多地方有摇摇欲坠的感觉。不过上线运行了挺长时间,应该还算靠谱吧~

密码保护:项目

2009年12月5日 11:08 查看评论(1) 分类:生活 Tags:

这是一篇受密码保护的文章。您需要提供访问密码: