2009

2009-12-31 评论(5) 分类:生活 Tags:

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

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

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

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

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

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

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

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

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

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

兼职结束

2009-12-20 评论(1) 分类:生活 Tags:

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

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

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

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

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

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

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

KISSY Editor 源码学习笔记

2009-12-9 评论(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 评论(14) 分类:作品 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 评论(1) 分类:生活 Tags:

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

twitese1.1 新增list功能

2009-11-27 评论(11) 分类:作品 Tags:

更新

个人挺喜欢twitter的list功能,在follow的人多的时候尤为有用,这两天抽出时间给twitese加上了list功能,顺便改正一些小bug。

修改的bug:

php空间开启magic_quotes情况下单引号双引号前多了”的问题
消息自动刷新时执行时间超时出现的错误
修正国内空间无法搜索的问题
……还有其他一些小错误

更新:

list的查看,新增list、list成员等功能 P.S list消息界面会自动刷新
新增API limit显示
去除config.php里的SEARCH_API设置,改成在程序里自动判断
FAQ页面

待增加的功能:

图片上传、黑名单、短网址、cookie加密(原先的有错误,暂时不用了)、ajax自定义(自动刷新时间间隔,提示条隐藏等)

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

预览:http://twitese.webbang.net/

命名

在twitter上咨询了list翻译成中文要叫啥好,推友的答案是“列表 推列 李斯特 群组 自分类 圈子”,个人倾向于推列和群组,那么就组合一下,叫推群好了,觉得这名字还算合适吧。

API Limit

做twitese,受twitter API rate limit的限制太大了,也就是一小时限制请求150次API,超过了就要等下个小时重置才能继续。一般可以申请twitter白名单,能将每小时限制次数提高到20000次,这样几乎就没什么限制了,但做twitese是开源由大家自由架设的,总不可能要求每个架设的人都申请白名单。于是都得小心翼翼地使用API,能省既省,于是不能每次刷新页面的时候都更新用户数据,省略了每次进入用户页面就要判断是否已经加入黑名单的功能,等等。做list的时候发现要用的请求数太多了,于是,现在的list添加成员方法只有那么很不方便的一种,以后再想办法改进吧。

list API

做的过程着实被list的API恶心了不止一次。总结一下:

1.先看看list的所有API

List Methods
POST lists (create)
POST lists id (update)
GET lists (index)
GET list id (show)
DELETE list id (destroy)
GET list statuses
GET list memberships
GET list subscriptions

List Members Methods
GET list members
POST list members
DELETE list members
GET list members id

List Subscribers Methods
GET list subscribers
POST list subscribers
DELETE list subscribers
GET list subscribers id

你单看名字能知道这个API是干嘛的吗?能的话算你牛,这是第一个恶心的地方。以前的API功能是什么都是一目了然的。
例如GET list subscribers id是检查用户是是否已经follow某个list ,而GET list subscribers是返回用户follow的所有list,两者名字上的差别就是差一个单词”id”,牛。

2.每一个list API地址都是http://api.twitter.com/1/开头的,旧的API都是以http://twitter.com开头的,接下来说的你可能会看晕:
list大部分API可以用http://twitter.com代替http://api.twitter.com/,结果一样,但有些就不行:

http://api.twitter.com/1/bang590/lists.xml 可行
http://twitter.com/1/bang590/lists.xml 可行

http://api.twitter.com/1/bang590/lists/subscriptions.xml 可行
http://twitter.com/1/bang590/lists/subscriptions.xml 不可行

犯晕了没?后来无意中发觉,把所有http://api.twitter.com/1/改成http://twitter.com/就都可行了,这才让我可以继续做下去:
http://twitter.com/bang590/lists/subscriptions.xml 可行
官方API文档完全没有提到这回事,这在考验程序员的悟性么?

3.有些API完全不可用,例如GET list subscribers id,怎么搞都是出现404找不到页面,于是现在还没有判断用户是否已经关注某个list的功能。

4.最恶心的一点,为list添加和删除成员,竟然不接受“bang590”这样的用户名,而只支持一长串数字的用户ID。一直以来screen_name一直都被当做id用,在这里竟然不被支持,这下脑残了,我必须通过screen_name请求users/show,返回这个用户对应的id,再传给list添加成员的API,才能成功添加成员。list添加成员是不限制API的,但users/show要,也就是说,每添加和删除一个成员,就要用到一次API请求……巨脑残,难道是我没找到更好的办法?

总结四个字:乱七八糟

list功能没经过很多测试,所以应该还有大大小小挺多错误的,大家指正吧。

童年片段

2009-11-22 评论(4) 分类:生活 Tags:

今晚在商场碰到一种小时候吃的零食,于是就又回忆起了童年。我用了博客的搜索才知道原来我已经写过一篇回忆童年的日志了,这篇,就摘一些跟老兄度过的片段吧~

那时在家里最好的娱乐就是玩小霸王,跟老兄一起玩得最多的就是忍者神龟2,很长而且很难通关的一个游戏,记得一次我回碣石老家,哥哥一个人玩忍者神龟,第一次玩到最后的boss了,打电话过来告诉我这个新突破,后来我们联手玩了很多次爆机,最后的boss蒙面人很爽,一分为二的家伙,记得每次打boss时都很激动和兴奋。我们玩的过程一般是在打最终boss之前,是不会死的,有次我们在玩第二关的时候,我不小心就死掉了,气到我扔掉手柄弄掉游戏不玩,好像还哭了,哈~

我读一年级的时候,老兄去肇庆读中专,那时候家乡没有超市,老兄每次放假回来都会买我最喜欢的kinda巧克力蛋,那时喜欢暴了。巧克力蛋里除了巧克力,还装有玩具蛋,各式各样的玩具,有的是公仔,更好玩的是一些需要自己拼装的玩具,像汽车什么的,太喜欢了。那时候也迷香港漫画,买了很多《天子传奇》等,直到现在老兄还会继续在网上下载最新的香港漫画,不过我就挺少看了。

小时候跟老兄最迷的当属《龙珠》,32开的漫画买齐了,后来我自己还买了很多64开版的。龙珠的“闪卡”集了一大堆,有普通卡,可贴的闪卡,还自己动手把普通卡变成闪卡,方法是把卡拿去浸水,再用刷子刷,剩下印有透明图案的塑料纸,再贴上闪卡。那时只要看到我们没有的,必买。那时候特别期盼能看到动画,那时候翡翠台在我们那里时有时无,非常难得才能看到龙珠,我搞不懂这么好的动画片为什么都是等到半夜才播出,那时龙珠在翡翠台不是12点多播,就是2点半播,但只要有得看,不论多晚我们都会看,而且会用录像带把它录下来,半夜两点半,连播三回的时候大概是一个小时,我们几乎每晚都没有错过。不过有时候就是老兄起来录制,我继续睡觉,等到第二天上学回来后才播放录像带观看。

第二迷的是街机。当时我们巨喜欢街霸,对拳皇倒是不感冒。偷偷去游戏机室玩游戏是少不了的了,我经常一个人偷偷去。当时觉得这种行为十分坏,当时受电视剧的熏陶一直以为做坏事迟早有一天会暴露会被人知道的,后来一直惊讶于怎么我一直没被发现,从此世界观开始改变。哈。记得有一次跟老兄去玩的时候就被老妈揪回去了,呵~后来家里有电脑了,据说可以在电脑里玩这些街机游戏,但我们折腾了很久,买了N张光盘,都没办法玩到。有次偶然机会买到一张少年街霸2的光盘,竟然能打开,但一到开始fight,就自动关闭跳出来了,后来发现是需要DirectX4支持,但还是时能玩时不能玩,我们都很珍惜能玩的时候。直到一次,不知在哪里看到可以邮购正版的少年街霸2,立马邮购买了,光盘里面附带了DirectX4,欢呼道:以后都不用怕没得玩咯~~非常高兴,玩个不亦乐乎~

老兄在家里读初中的时候,经常喜欢买一些新奇的东西,有次买了一串装饰品葡萄,里面是紫色的水,挂在墙上,我过去玩,不小心弄破了,搞到墙上都是紫色的痕迹,擦不掉,老兄发现后,用挂历遮住那个痕迹,把那串葡萄也直接扔了~

我读幼儿园的时候,老兄经常骑自行车载我回家,有时候幼儿园门口卖手艺棒棒糖,现场做,画出一个动物的形状,可以转轮盘,转到哪只就画哪只。其中有只龙是最大的。某次老兄转的时候第一次转到龙了,但是那家伙耍赖说没看到,重新转,最后转到别的了,很不服气~

那时晚上经常跟老兄出去,骑着自行车载着,一般都是去马街尾看看有没有《童话大王》,看看那两家店有没有新漫画卖,那时候漫画热门,很多地方都卖,现在那两家书店虽然还在,但一本漫画也不卖了,全改成卖教材参考书、习题册这些。后来老兄从肇庆读书回来后,自行车变摩托车,还是有经常出去逛,不过越来越少了。

在家我们几个小孩都会过生日,有次我过生日,没人送礼物,正沮丧时老兄从摩托车拿出一个俄罗斯方块的掌上游戏机,那真是惊喜啊~那个游戏机现在还在,不过已经坏了,没好好保管也不知扔哪去了~

小时候跟老兄经常吵架,三天两头一会,吵完就冷战,我们的名字中我偏旁是火,他偏旁是水,以前我们就说水火不容啊~有次吵完架刚和好,他说,我们以后不再吵架吧,我说,不可能。哈~我是很现实的,预想到以我们的性格,不吵架,怎么可能呢~

想起来挺美好的~就想到这么多了,先这样吧~

前天是老兄生日,年龄大了也不会去过生日了,就那样平淡无奇地过去。再祝生日快乐。

开源 php版twitese

2009-10-28 评论(141) 分类:作品 Tags:

推特中文圈

暑假完成了推特中文圈,放在GAE上,大家的反响挺好,呼吁开源的人也很多,但我一直没开源,这里写了我开源的顾虑。

好像是10月14日那天,众多twitter第三方web客户端都被封了,itweet dabr twitzap 等,还有推特中文圈。被封的时候其实我挺平静的,因为如果要禁twitter,不封推特中文圈实在没道理,早有心理准备。

其实我还没完全了解他们封的是什么,我本来以为封了IP,没戏了,有一天一推友告诉我说用一个新域名绑定到twitese,就能继续免翻墙打开了。试过后,果真如此:http://t.webbang.net,到写这篇博客为止,这个地址还能访问。看来他们封的只是twitese.appspot.com这个网址?不过ghs.google.com的很多IP都被封了,仅剩下几个残种,不知道ghs.google.com有多少个IP,要是少的话,还是不要用twitter应用摧残GAE了~

开源GAE版的twitese无济于事,再怎样都是放在GAE上,只会更加摧残GAE,于是10月23日我开始动手写php版的twitese,希望开源后网友们能把twitese架设在多个不同的php主机上,躲避功夫网的封锁。

用另一种语言重写一个网站比想象中要容易,至少前端几乎不用改。php版的twitese与GAE版的几乎完全一样,随便看看与排行榜是通过GAE版的twitese开放出API进行调用,由于怕原版的twitese流量不足,所以另开了一个GAE重新抓取数据,所以开放出来的用户数据量没有原版的twitese那么多,随便看看里的更新也没原版那么频繁,但应该已经足够了。

开源

对开源协议没有了解多少,简单的说大家修改twitese是没有限制的,也不要求修改过后的twitese同样要开源。这次发布得有点仓促,小错误应该挺多,大家碰到的话可以在这里提一下~希望有热心的人能一起改进twitese~

开源项目主页:http://code.google.com/p/twitese/(因被墙,改为http://tuite.googlecode.com)

预览:http://twitese.webbang.net/

特点

1.相对于dabr,twitese对php空间要求低

dabr对php空间要求如下:

* PHP 5.2+
* curl PHP module
* mcrypt PHP module
* mod_rewrite apache module

而twitese只需要curl PHP module,另外我在本地测试的php版本是5.2.6,没有在其他版本的php上测试过,应该问题不大。

2.twitese主要是作为web客户端,但完整支持手机ucweb浏览,网页上JavaScript的各种操作都留有后路,即使浏览器禁用JavaScript也能正常使用,所以对不太支持JavaScript的手机浏览器也是友好的。

3.twitese可以架设在国外空间,也可以架设在国内空间,只需修改twitter api为未被封的api proxy即可。

待增加的功能

1.OAuth认证:本来是想一开始就做的,由于有其他事情要做,精力有限,就暂时没有这个功能了。不过对于中国用户来说,这个功能可有可无,因为需要翻墙。

2.短网址:目前还没有提供短网址功能,待增加~

安装教程

下载源文件:
方法一:通过SVN工具下载:http://twitese.googlecode.com/svn/trunk/ 此下载方法可以保证下载的是最新的程序。
方法二:进入项目主页 点击右边的Featured downloads下载压缩后的源程序。此方法不保证下载到最新的程序。
(目前程序不稳定,随时会更新错误,请使用SVN工具下载确保得到最新程序)

下载后,打开lib/config.php,按上面的说明修改一些参数,修改完后,传到php空间,就能使用了。

(更多…)

JavaScript小型选择器mini源码解析

2009-10-22 评论(6) 分类:技术文章 Tags:

在网上发现一个JavaScript小型选择器—mini,其介绍在这里已经说得挺清楚了,就不再罗嗦了。简单来说,mini选择器只支持以下选择语句:

* `tag`
* `tag > .className`
* `tag > tag`
* `#id > tag.className`
* `.className tag`
* `tag, tag, #id`
* `tag#id.className`
* `.className`
* `span > * > b`

经过调查,以上选择语句已经满足了95%以上的需求。

mini选择器实例代码如下:

var pAnchors = mini('p > a'); // Returns an array.
for (var i = 0, l = pAnchors.length; i < l; ++i) {
    // Do stuff...
}

下载源码查看,发现源码并不难,至少比jquery简单得多,就想试着分析一下它的源码,练练手,之前我是想分析jquery源码的,但发现实在太难了,超出能力范围了,还是先从简单的代码开始吧。

mini选择器大体上,就是先把选择语句最右边的元素先选出来,再根据左边的父元素层层过滤得到符合整个语句的元素。

例如”#a table .red”这个语句的选择过程,就是先选出页面上所有class=”red”的dom元素,再在选出来的元素中判断其父元素是否为table,是则保存,不是则丢弃。这层筛选完后,把结果再进行一次筛选,判断其父元素是否id=”a”,是则保留,不是则丢弃,最后就筛选出了符合”#a table .red”的所有dom元素。

其余细节的解析,我用注释的方式加在代码上了。我发现要把分析代码的过程写出来真是很难,代码是看得懂,但就是表达不出来代码的意思。我现在写出来的那些注释,似乎有点乱,估计别人也挺难看懂,不过当练兵吧,我在写之前并没有完全了解mini的原理,写完后就清晰了,看跟写还是有很大区别的,写出来对自己挺有帮助。

有些地方其实我也不是知道得很清晰,可能会有错误存在。代码里我还有一些细节不理解,有疑问的地方我打上了**号,希望高手看到能告知吧~

这里可以看到,单独选择一个id占了所有选择语句的一半以上,个人感觉mini没有对id进行单独优化,算是不足吧,并且就算只选择一个id,mini(“#id”)返回的也是一个数组,很不方便,实用性不强。

(更多…)

变态感冒

2009-10-18 评论(6) 分类:生活 Tags:

以下一大坨流水账,记录这次变态感冒历程。

国庆放假最后两天,我就开始感冒了,本来只是个小感冒,喉咙也就那么一点点不舒服,但8号回校,坐完车,情况马上就恶化了,开始了应该是我最漫长的感冒之旅。在广州下车那时开始,就咳个不停,之前在家里还基本上没咳的。回校第一天开始咳,第二天感觉感冒好了,但咳嗽还是没有好转,第三天越咳越严重,那天就狂吃药,喝川贝雪梨汤,到第四天11号咳嗽就好多了,以为快要好了,结果之前的咳嗽太厉害了,似乎又引发了感冒,有感冒的感觉,再加上晚上洗澡洗了头,估计是吹到风了,到12号就开始发烧了,晚上还烧到38.3度,晕,之前自己就说过这种时候发烧最惨,这里的校医院又烂,见到发烧的逮着一个就隔离一个,它没有能力诊断是甲流还是普通流感,那晚我都怀疑自己会不会得甲流了。某舍友知道我发烧,惶恐到不行,看得出他真是怕死了。发烧真是痛苦,很早去睡觉,叫舍友买了退热贴,上床把自己闷出一身汗来,整个晚上在床上似乎到4点多开始才真正睡着,令人沮丧的是,13号起床后烧竟然还没退,后来还好,一整天在宿舍养着病,到晚上烧就退了,14号就比较舒服了,感觉病终于都好了,课也全去上了,那天晚上也出去买东西了,结果估计那天晚上吹空调吹太久了,当天晚上鼻炎就发作,鼻水眼泪流个不停,以为睡个觉明天起来就没事,没想到第二天15号鼻炎更严重,一半的脸都被搞到不成形了,泪流不止,真是痛苦啊。那天下午做了个决定。以前我吃过舍友的一种鼻炎药,结果吃完鼻炎好了,但胃却会很痛。我当时想反正吃完那药胃痛后好像也没什么后遗症,又想鼻炎尽快好,因为16号有事,不想再拖,就吃了那个鼻炎药,吃完在床上痛了两三个小时,翻来覆去,痛苦啊……起床后,更恶心了,鼻子还没好,眼泪照样流,胃还很不舒服。很痛苦的情况,当晚还出现了更痛苦的事,不过已经过去了,就不提了。这些天里咳嗽一直持续着,只是没有刚回学校时咳得那么厉害,但是,不知又发什么神经,到16号鼻炎好了,咳嗽却又加重了,到了晚上,比刚回学校那会咳得还厉害,真是咳到歇斯底里了,10点多就去睡觉,因为只有忍住睡觉它才不会咳,另外寄望于一觉醒来咳嗽能好。这些日子我一直有这样的寄望,希望一觉醒来病就好了。还好,这次醒来后还真好了很多,可能那天晚上买的药吃了有效吧。本来17号这天可以很舒服地过去了,但到了晚上吃完晚饭,胃极不舒服,想吐的感觉一直持续了三个小时,不知道是那个饭的问题,还是我吃了水果的问题。反正还是在痛苦中度过了那一天。直到今天,终于各方面都好些了。希望这段痛苦的感冒之旅到此结束吧。太折腾了。这次真是什么病都来了,期间还会肚子不舒服,胃也不行,喉咙鼻子都爆发到挺严重的地步,发烧温度也不低,真是倒霉~

感冒期间一直有“要是在家里就好了”这样的想法,要是在家里,可能早就好了,可以好好养着,也可以随时随地躺下,问题再严重去一下几条巷远的门诊医院就行了,至少不会被隔离。在学校就麻烦多了,想躺下还得爬上上铺去,去个校医院不仅远,医疗又没保证,还得冒被隔离的危险。唉。