jQuery for Iphone: iQuery

2010-6-16 评论(2) 分类:作品 Tags:

img_0015 img_0017

仿照jquery的API写了专用于iphone的jquery,索性叫iquery。虽然API很多一样,但里面的实现大多不一样,sizzle引擎改成了现代浏览器自带的queryselector,其他API很多实现上是简化了,很多并不常用的方法和功能没加上,增加了iphone特有的touch等事件,详细看文档。因为内部实现是自己写的,又没有经过很多测试,所以还不能像jquery那样随心所欲地用不怕出错,还拿不出手,只能自己用,打算边用边测试,先放上源码和文档。

文档同时也算是iquery的使用演示。建议在iphone/itouch下查看,同时还可以挺好地支持电脑上的chrome和safari,其他浏览器不行~

P.S 目前文档还有很多方法没有加上详细说明

文档:http://tiny.cc/iquery

源码:http://code.google.com/p/bangswork/source/browse/trunk/iquery/iquery.js

目前压缩前17.8K,压缩后9.4K

IPhone Webapp:手尺

2010-6-7 评论(3) 分类:作品 Tags:

handruler_cover handruler_ctn

简介

测量手指比划距离的工具,两手指放在屏幕上,即会显示出两手指之间的长度,单位为厘米。

需要使用iphone/itouch打开并添加至主屏幕,才能开始使用,因为只有添加到主屏幕才能全屏运行。

应用地址:http://tinyurl.com/handruler

开发

一直很想开发iphone应用,还没试过开发用手指交互的应用,想想比开发一般的应用要爽。可惜想开发iphone应用得花很多本钱,首先买个mac,再买个$99/年的证书,我买个itouch都很费劲了,当然折腾不起。于是,转向webapp。

似乎开发iphone webapp的比较少,网上资料少,我想找iphone浏览器里多出了哪些事件,怎么全屏怎么离线缓存等都找了半天,后来在http://dedy.tv/看里面应用的源码直接偷过来了,但还是费了些周折。浏览器多出的事件也在这里找到了,真费劲。

于是先做了个小小的应用练练手,开发的第一个用手指交互的应用,虽然可能用处不大,但感觉爽,哈哈。

有空再写写开发iphone webapp跟普通网页应用的不同点。

陆战军旗

2010-4-7 评论(7) 分类:作品 Tags:

army

AI版(AI很笨):http://cnbang.net/army

前言

小时候玩的棋类游戏中,军旗算是玩得比较多的,接下来就是跳棋了。不知有多少年没碰过军旗,上次偶然在姐家下了一盘,挺怀念的,网上查了一下,四国军棋是挺多,但我们的玩法是不断翻开盖住的棋子的,据说这叫翻翻棋,边锋游戏有,下载后发现不咋地,应该是十几年前做的了,我想自己做一个网页版的。奇怪怎么这么久还没有大型的网页版的棋牌游戏,总比QQ游戏方便很多吧。

前期

前期得先把棋盘画好,定好棋子在上面的走动规则。话说这棋盘画得我自己挺满意的,呵,高仿真啊,我是把棋盘拍照下来照着画的,不过缺点是高度太大了,对于小电脑一个屏幕可能还看不到整个棋盘。棋子就不咋地,很一般,不过想换肤很容易。

程序的实现方面,这次我还是用了jquery,本来想用YUI练习下的,但发现YUI本来就不适合用来做这样的游戏,只适合用于分模块构建中大型网站,另外它没有在dom里保存data的功能,所以还是用回jquery。
(更多…)

python版twitese排行榜(开源)

2010-2-26 评论(10) 分类:作品 Tags:

闲着没事,学下python,浏览完《dive into python》,想半天没想出来要做个什么东西实践好。此时twitese的排行榜功能已经停滞很久了,之前java版的代码也比较乱,索性用python重写这个功能好了。当然,这个程序还是架设在GAE上的。

这次做的基本上跟原版一样,只是抓数据时不用page这个参数了,用cursor这个参数分页,发现这个参数用来抓取数据实在是比page方便多了。另外通过一些小伎俩解决了原本只能获取前1000个用户的问题,现在可以直接通过分页看到所有抓取到的用户了。具体抓取方法见这里,最后做了独立页面:http://twiteseapi.appspot.com/

写旧程序,虽然是用不同语言写,但激情实在高不了~这次这个python应用感觉写得没什么python的风格,可能是因为程序太简单吧。python给我的初感觉就是很精简,跟java正好相反,只是奇怪为什么每个类方法的self参数为什么不自动传进去,还要手动写,这跟它的精简实在不符。

这个程序,也是开源的,并且做到很容易架设,只需要上传后执行一下init就行了。地址:http://twiteseapi.googlecode.com/

FLASH绘图板

2010-1-29 评论(6) 分类:作品 Tags:

发个绘图板,算是这学期图形学的作业,另外给一个项目用,绘制树形图标后通过php输出图片。

这是用flash builder 4做的,主要是想尝尝鲜,好像我都比较喜欢尝鲜的,做AIR账本的时候AIR刚刚出现没什么资料,这次也是,FB4 beta版刚出不久,没什么资料,里面关于皮肤的东西官方帮助又说得不明不白,有点蒙着做这个东西。觉得做个画板挺有趣的,可以练练面向对象编程,因为里面要用到继承的东西不少。

其中花功夫比较大的就是那个文本生成和选择工具上,当时找了半天才摸索到去除textinput边框和背景的方法。选择工具则是牵涉到整个画板了,都得在开始做之前就想好,目前的功能是鼠标移到元素上会选中那个元素,加红色边框,用选择工具画个矩形可以圈选多个元素,对多个元素一起进行编辑,拖动其中一个其他也会跟着动,记得当时这个比较折腾人~FLASH不支持多对象拖动,需要自己通过mousemove事件写,但如果是在某个容器上绑定 mousemove,鼠标移动过快的话就不会响应,得把事件绑定到外层的整个大容器里才行,反正一番折腾,结果现在貌似还正常~有没有潜在bug就不知道了~~开发过程中其他的事都不记得了,本来想做好工具栏皮肤的,但后来没精力没动力去做了,就先不做了~仅是习作~

效果:http://bangswork.googlecode.com/svn/trunk/drawing/bin-debug/flowchart.html
源码:http://code.google.com/p/bangswork/source/browse/trunk/#trunk/drawing

twiteseV1.3

2010-1-27 评论(25) 分类:作品 Tags:

考完试后,开始大改twitese,修复了很多大小bug,新增了一些功能,具体如下:

新增
新增官方RT,RT显示格式有两种,可以在“设置”里选择。
新增自定义API,发现默认API无法使用时可以自己设定API,在“设置”里自定义
新增停止自动刷新按钮
新增状态数值刷新按钮,更新好友数、关注者、推数三项数值
好友列表新增 关注/取消关注 按钮
侧边栏新增推群、热门消息
提示条新样式,固定在页面顶部,不会出现看不到的情况

细节
@自己的推高亮显示
ajax刷新时会更新旧推的时间
图片显示代码优化,每次刷新新推只检测新推里是否有图片。
搜索优化 纯中文字符间加空格
发推时显示的新推格式修整,链接,图片等都会显示
丰富出错提示,例如连接不上twitter、向没有关注你的人发私信都会有相应的提示

修复
修复中文标签乱码的bug
修复发送消息时过滤+ &等符号的bug
修复进入空页出错的bug
修复空间不支持加密函数时出现的错误

目前官方RT有一个问题,就是无法在timeline里显示自己是否RT过这条推,也就是说,你RT完一条推后,如果想undo,必须进入侧边栏的“RT消息”里删除那条推。自己RT过的消息在timeline里也无法高亮显示。这是官方API的缺陷,在开发者论坛上已经有人抱怨过,不知以后会不会加一个“rt_by_me”这样的参数。

之前最棘手的就是在某些空间不能加关注加收藏等问题,这些都是curl那块出的问题,貌似不同版本的PHP对这个curl语句支持不一样?没有空间可以测试不知道怎么修复。这次又小改了下这部分代码,但不确定之前那些问题是否解决了~

修整的过程感觉挺爽的,把bug一个个改掉,新功能一个个加上,挺顺利的,也重整了部分代码,把timeline的代码统一放在twitese.php的一个函数里,所有页面通过传参数调用,统一管理,可惜搜索页面和刷新推的特殊参数太多没法放进去。发现做啥东西都是刚开始时激情十足,连续做得久做得多了就没多大激情了,得换换口味休息休息才行。于是,我之前计划想加入的“高级搜索”功能,就留到下个版本再实现吧~

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

抓取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限制直接跳过了。
偶尔一些外国人的推里出现了中文,也会被抓取进数据库。程序写得很乱,没去整理,挺多地方有摇摇欲坠的感觉。不过上线运行了挺长时间,应该还算靠谱吧~

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功能没经过很多测试,所以应该还有大大小小挺多错误的,大家指正吧。

开源 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空间,就能使用了。

(更多…)

陈年旧作

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

觉得把所有作品都放博客上挺好的,虽然杂乱,但方便,限制也少。放上一些陈年旧作,全是上大学之前的作品,有些历史很久远了。一次整理硬盘资料的时候发现我以前做的东西也还是挺多的,以下是主要的作品,其他杂七杂八的就不放上了。

ddzg

叮当之宫
日期:2003年3月
很古老的网站了,这是叮当之宫的第二版,第一版好像是2001年做的,当时好像小学刚毕业吧。算是我建的第二个网站了。这个网站在网上存在了很久,我一直更新更新,把所有叮当有关的资料都收集上去了,算得上是国内最好的叮当专题站了,人气也不错,对此站感情深哪~当时的网址还是163提供的免费二级域名dd590.yeah.net,怀念之~

mmzg

漫漫之宫
日期:2004年7月
初三暑假时做的,当时一个通过叮当之宫认识的网友无偿给我提供了空间和域名,我选择了mmzg.com,做了一个在线看漫画的网站,当时修改了一个简单的ASP程序,流量挺高的,忘记具体数字了,网站正常运行了好像有三四个月,因为服务器问题就挂掉了~可惜~

ying

影の站
日期:2004年7月
配合漫漫之宫做的火影专题网站,这网站做得不怎样,不说啥了~

sai

棋魂专题站
日期:2004年7月
也是配合漫漫之宫做的棋魂专题网站,这个我当时做完自己很喜欢,尝试了很多新东西,弹出的内容窗口有点袖珍型,里面的留言本也是自己修改ASP的,虽然当时完全不懂ASP,但修改成功了,成就感强啊~

tk

动漫特刊
日期:2005年7月
这 也是高一暑假做的,当时在网上看到一些精美的杂志,很羡慕很想自己也做出一个,刚好影视帝国论坛有动漫活动,他们也有做杂志,但就是普通网页形式的杂志, 我自动请缨做了个动漫特刊,做这杂志全看设计,做完自我感觉很好,算是当时最高水平的设计了。当时用了一个FLASH翻页组件,是破解的,然后用一个工具 将FLASH打包成EXE文件,去除窗口,效果不错。后来影视帝国杂志的下一期我也用同样的方法给他们做了,那本杂志还有不规则边框,感觉也挺好,但我只 做外壳和封面,内容别人做的,就不放上了。

2043

No.2043
日期:2005年8月
这是我第一个编程作品,高一暑假编写,当时学FLASH一个月左右,做个游戏来练习AS,代码写得很乱,导致运行速度有点慢,比较占内存,当然不是在老古董机上运行还是挺流畅的。算是当时比较得意的作品,因为在那之前我所有的东西都不用编程,感觉没什么技术含量。

cfl

CFL
日期:2005年12月
CFL是Children Fantasy and Love,三个时期三个词,小学,初中和高中。纯FLASH网站,展示个人作品和图片,很多旧作在里面都有图片,当时图片那一块内容写了很多程序,动态读取外部图片,效果现在看起来也还是挺好的。