2010年7月15日 | 分类: Other | 标签:
1 条评论 (6 views)
2010年7月25日 | 分类: WEB | 标签: , ,

Bug管理系统一般在软件开发、项目管理中用的较多,较常用的是国外的免费开源系统Mantis,国内做的较好的是BugFree,不过最近已经改成了禅道项目管理系统了,这些Bug管理系统虽然非常的专业,但对于我不做软件的人员来说,似乎太复杂了一些,一是搭建不容易,二是发布一个Bug必须要填写很多内容,三是界面也太专业化了一些。而实际上,我在建立了一个Google code Project后,他的Issues也是一个非常好的Bug管理系统,简洁而明了,我非常喜欢,似乎这个问题管理系统更是我需要的。

Issues

从图中我们就能看出一个Bug管理系统需要有几个至关重要的内容,标题和发现Bug的过程描述内容是必须,而状态和属于哪个人员也是非常重要的,从Mantis的管理系统中可以看到,状态一般分为以下几种:“新增(New&Active)”,“处理中(in progress)”,“已修正(Fixed)”,“重新打开(reopened)”,“关闭(Close)”,而指定人员则是一个流程:测试人员发现bug,提交。bug状态为New&Acitve。–>开发人员接收bug。bug状态为in progress。–>开发人员修改完毕并提交。bug状态为Fixed。–>测试人员针对开发人员的解决方案再次对bug进行验证测试。如果bug依然存在,则把bug状态设置为reopened,流程返回至第二步。如果问题已经解决,就直接设置为close。

由于我并没有项目或写软件的内容,所以整个Bug的流程基本上由我一个人来管理,似乎我只需要记录问题并维护好状态,将问题跟踪到人即可。Google code的Issues完全符合了我的需求,只是由于它太过于公开无法设置为私有查看,所以我并不准备使用它。于是在想,有什么样的系统可以符合我的需求呢?实际上,论坛系统就是一个很好的问题系统,你发一个帖子来说明一个问题,并且可以查看可以评论等,但似乎缺少了一些归类以及状态和拥有者。那么我们是否可以将论坛系统改造成一个问题追踪管理系统呢?我觉得可以。好吧,下面和我一起来使用Discuz论坛打造一个自己的问题管理系统吧。

首先你需要安装一个Discuz论坛,这个我就不多说了。进入论坛后台,在板块管理的分类信息选项界面下,新增四个分类信息选项,分别是Bug状态、Bug类别、Bug严重程度和Bug拥有者,如下图所示:

bugfield

由于状态、类别和严重程度基本属于可选择,所以我设置为单选,而拥有者由于我并不能很好的指定到某个人,所以这里就作为字串后自己填写。

设置完成后,对单选的内容需要设置选项,点上图中每一个分类信息后的详情就可以设置,如下图所示:

bugstatus

由于我想设置成和Google code Issues一致的内容,所以状态包含了:

New                  = 新添加并且未审核的问题
Accepted             = 已通过审核的问题
Assigned             = 已经指派相关人员处理
Started              = 正在处理这个问题
Fixed                = 开发者提出的需要变化,已经解决
Verified             = 已经解决的问题
Invalid              = 无效的问题报告
Duplicate            = 重复出现的问题
WontFix              = 决定不解决这个问题
Done                 = 已经解决这个问题

问题的类型为:

Type-Defect          = 项目出现 BUG
Type-Enhancement     = 功能需要加强
Type-Task            = 新的任务,不需要修改代码或者文档
Type-Review          = 请求审核代码
Type-Other           = 其他类型的问题

问题的严重程度为:

Priority-Critical    = 必须在指定的时间内解决
Priority-High        = 希望在指定的时间内解决
Priority-Medium      = 优先考虑解决
Priority-Low         = 可以在以后解决

以上这些都可以自己设置,更可以优化。

接下来进入板块管理的分类信息类别,新建一个分类信息类别,比较叫Bug管理。

bugbbstype

点详情后设置选项,将刚才我们添加到几个类别添加进去,如下图所示

bugbbsadd 

接下来进入板块管理区域,编辑某一板块

bugareaedit

进入分类信息,打开分类信息选项

 SNAG-0063

以上内容请按照自己的需要进行设置,唯一需要启用的是Bug管理这个分类。另外我设置了一个分类信息模型,实际上应该并不需要,可以去除掉。

经过这样的设置,基本上算是完成了,好了,现在发贴试试看吧。如下图所示,选择Bug管理的分类,我们就可以添加状态、类别、严重程度和拥有者了。

bugadd

好了,来看看我们的效果吧。

bugview

好了,一个简易的问题管理系统算是打造完成了,本文中的缺陷在于文字部分太过于混乱,如果把文字更简短一些效果更好一些,看来需要进一步的完善。现在,你也可以试试自己打造一个简易的问题管理系统吧。

1 条评论 (67 views)
2010年7月18日 | 分类: NET | 标签: , , ,

很早就想写一篇这个的文字了,今天被人问到所以准备写一下,实际上,本文的关键是OAuth。

TWIP是用来干吗的我就不说了吧,就是一个Twitter的proxy的API,我们现在能够自由的发送和查看Twitter就是因为proxy API的存在。但Twitter据说在八月的时候要停止掉普通认证的API,全部采用OAuth认证,那么将有很多的proxy API将被淘汰,而TWIP则开发出了基于OAuth的版本,为了避免以后被broke,所以我也准备尝鲜OAuth版的TWIP。

第一步当然是去TWIP项目主页下载程序了,现在提供的是3.1.2的版本。下载下来后解压缩将其上传到你的DreamHost空间,当然你也可以使用SSH直接下载解压。当然,如果你有其他空间,也可以上传,但必须是国外的虚拟主机,原因还是因为墙。

接下来先翻墙去Twitter认证,登录Twitter apps页面,在右侧Register a new app,设置和说明如下图

twitterregapps

点击注册,如何跳出协议对话框,点接受,如何就注册成功了,得到CONSUMER_KEY和CONSUMER_SECRET,如下图所示

twitterregappsok

现在我们去配置文件,打开TWIP的oauth_config.php,将得到的CONSUMER_KEY和CONSUMER_SECRET填写进去,同时将OAUTH_CALLBACK改成你自己的路径,至于SECURE_KEY,愿意的话就随便修改一下吧。

define(‘OAUTH_DIR’,'/home/user/oauth/’);
define(‘CONSUMER_KEY’, ”);
define(‘CONSUMER_SECRET’, ”);
define(‘OAUTH_CALLBACK’, ‘http://127.0.0.1/twip/callback.php’);
define(‘SECURE_KEY’,'kpxaZj8nSoCt2OFddE3xI’);

但在这里,我们又涉及到一个至关重要的问题,OAuth的路径,我在这里也折腾了半天,最后登录SSH去查看了一番,发现DH主机没有安装OAuth,也许我没有找到正确的路径吧,作罢,我们自己来建立一个吧,非常的简单。去OAuth的Google code下载一个PHP版的OAuth,不过PHP版的没有直接提供下载,而是提供了SVN,我SVN了下来,将OAuth.php文件上传到了TWIP的oauth目录(这个目录自己建立吧)下,然后将OAUTH_DIR参数改成’oauth/’。至此,基本上算是完工了,OAuth用我们自己上传的就可以,有需要的朋友可以直接通过这个链接下载我提供的OAuth文件

现在,最激动人心的时刻到来了,登录我们刚刚建立好的TWIP的网址,点击Sign in with Twitter

signintwitter

这个时候会跳转到Twitter,使用你的用户名密码登录,并提示是否允许的时候选择allow,然后提示说将返回到app,表示你的认证已经OK了,但还没有结束,会返回到Save your OAuth token的界面,输入密码点击save即可。

saveyouroauthtoken

这里需要注意一下,我用自由门的时候这个save老是通不过,建议使用VPN来完成这个认证的过程。当你真正的认证完成,会在oauth的目录下生成一个以你用户名命名的oauth文件,如下图所示,这就表明已经完全OK。

image

现在点击save后就自动跳转到首页,并且list了你最近的timeline,如下图所示,这也足以说明你的TWIP建立成功了。

image

以上是你自己用上了TWIP,如果别人也同样需要使用的话,由于是OAuth认证,所以使用的朋友首先需要重复一次Sign in with Twitter,只有认证过后才可以使用带有OAuth认证的Twitter proxy API。

虽然说建立TWIP是一个很简单的事情,但也把我折腾的够呛,OAuth认证的API确实太麻烦了,步骤太多太复杂,不过好在一劳永逸,以后就省心了。现在,你会建立你自己的TWIP了吗?最后,我自己的TWIP地址就不公布给大家了,一来流量吃紧,二来也是担惊受怕,不过,你完全可以根据这个教程建立一个你自己的TWIP。

4 条评论 (45 views)
2010年7月17日 | 分类: NET | 标签:

虽然一直没有什么项目可言,但有时候写的代码或者程序还是蛮希望能够分享给大家下载,虽然网上存放的地方很多,Google docs也算是一个不错的地方,但似乎找起来麻烦,又没有很好的说明,反而Google code的download的list非常的吸引我,简洁明了,于是就有了在Google code上创建一个项目的欲望了,而最近正在整网站,准备开一个实验室的板块,实际上也就是我的杂物间,堆放一些觉得有点用的杂物,一来是让自己快速的找到自己想要的东西,二来也算是分享给大家。

创建一个Google code非常简单,登录Google code的项目托管,点Create a new project,写上一些什么就可以创建了,具体的对照关系看下图

CreateProject

创建完成后你的项目就可以用了,进入后发现多了一个administer的菜单,因为你是管理员嘛。

administer

接下来你可以在Downloads里添加东西了,一般都为编译好的文件压缩包,建议使用zip压缩。我把我以前的一些提供下载的内容放到了这里。

image

实际上维基和bug管理还是非常有用的,只是我的算不上项目,所以Wiki也暂时想不到写啥,至于Bug管理追踪就更无所谓了。不过我确实有部分source code上传,接下来就是要用到TortoiseSVN出场了。首先当然是下载并安装这个软件,然后在你的source code的文件夹里点右键,Import到你的项目即可。

improt

Import到你的项目地址,如下图

import2sharesh

点确定后就可以开始上传了,于是跳出了用户名和密码的对话框

username

这里需要注意的是,这里的用户名是你的gmail地址,但密码不是gmail的密码,需要登录到Google code setting页面获得密码,但万恶的GFW封锁了这个地址,害我在这个步骤上瞎折腾了半天,最后翻墙过去取得密码后就OK了。

password

开始SVN并直到完成

SVNOK

好了,接下来你就可以在Google code browse里看到你的东西了。

image

好了,Google code介绍完了,对于小型项目来说Google code就完全是够用的了。

欢迎去访问我在Google code的杂物间:http://code.google.com/p/sharesh/

没有评论 (8 views)
2010年5月23日 | 分类: Other, WEB | 标签: ,

原则上Google的Doodle只有一天的时间,不过这次这个PAC-MAN倒是停留了很长时间,从前天晚上发现到今天早上竟然还在,发现许多朋友说要把这个Doodle扒下来做成离线可玩的版本,因为Google早晚是会撤掉这个Doodle的,不过好像也没有谁扒下来,早上起来看的不爽,准备把它扒下来,于是就有了这个Google PAC-MAN 离线可玩版。

立即下载:Google PAC-MAN 离线可玩版

最终截图如下:

Google PAC-MAN

简单说一下如何提取这个离线版本的,查看网页源代码,将JS和图片等资源全部下载到本地,连修改JS的地方都没有,只是将路径换换而已,所以其实扒下来还是很简单的。

需要注意一下的是:这个版本不会自动开始,需要Insert Coin才可以开始,另外无法调出声音文件。(声音文件是一个flash,但在JS里调用的时候似乎是做成iframe了,没有细研究)

此版本已经在:IE6、FireFox、Chrome、Safari下测试成功,并且请我朋友试玩过关到Game Over,至于是否有两百多关卡,我不知道。

如果有通关的朋友一定要留言告知一下啊。如果这个离线版本有什么问题,欢迎反馈。

没有评论 (4 views)
2010年3月28日 | 分类: Map, WEB | 标签: , , , ,

其实我很早的时候就写过一篇“我的 2010世博地图1.0版发布”,但没有和大家做明确的说明和制作方法,今天就和大家一起来分享地图配准和地图切割并进行网络发布的问题,其实就是以世博为例制作一份简单的网络地图。网络地图是以Google Maps API为基础,在Google Maps上面叠加一份自制的世博地图,但有一点,这里的地图配准和切割很重要,不过使用本文介绍的工具后一切都将变的不困难了。

我们先去世博的网站找一点素材,在世博规划中可以下载到规划总平面图,如有兴趣也可以下载一份场馆规划图。不过你所下载的文件是PDF文件,需要导出成为JPG图片,方法是使用PDF编辑软件或者PDFtoJPG软件来完成,这里就不做介绍了,最终得到的就是一个世博规划的平面图。为了不让大家难做,我就直接提供我导出后的世博规划图,点击这里可以下载。(BTW:如果觉得世博规划图不够清晰,那我也没有办法,PDF中的图片本身就不清晰)

接下来配准地图,配准有很多的方法,比如用MapInfo来配准甚至ArcInfo来配准等,不过这些太复杂了,我们今天介绍一个简单的软件来进行配准,这就是GlobalMapper,一个非常牛的GIS软件,可以打开超级多的地图格式,并且可以另存为超级多的地图格式,我们就用它来进行简单的配准吧。不过万变不离其中,配准重要的就是根据点位来进行配准,就是找到一些关键点标定上坐标。我们使用GlobalMapper打开这个bmp的图片,然后就提示是否配准,我们当然需要配准啦,就点是,这个时候就进入配准界面了。配准所需的关键点就是图片中非常清晰可辨并且容易标定上坐标的位置,看了这份地图我们只能使用路口的方式进行配准了,因为其他信息都没有参考价值,我们选择了三个点位,并且找到了坐标,分别是:打浦路瞿溪路(N31.19832 E121.47227)、历城路昌里路(N31.17383 E121.49261)、临沂路南码头路(N31.19375 E121.51033),有了这三个位置信息后就可以配置了,如下图所示:

peizhun

赶紧点击OK吧,你的地图就配准完成啦。其实MapInfo里的配准也是同样的一个道理。

好了,接下来我们需要切割地图了,由于希望在切割地图的软件里变得更加简单一些,所以我们将刚刚在GlobalMapper中配准完成的地图另存为GeoTIFF格式,就是一个带有坐标信息的TIF图片。我们现在需要介绍一个杀手级的软件,让你的这个平面图直接输出到Google Maps里面,自动帮助你切割完成,真的是超牛,这个软件是什么呢,就是MapTiler,一个Map Tile Cutter软件,可以制作overlay到Google Maps或者Google Earth,不再多介绍这个超级牛的软件,需要了解到用户自行到网站上了解,我们只用简单的切割功能,以前介绍的GMapImageCutter工具和它相比真是小巫见大巫了。BTW,GlobalMapper软件其实也有输出Google maps tile的功能,但是不算太好,所以才用到这个专业的地图切割软件。打开软件,选择第一个Google Maps兼容格式:

MapTile1

下一步当然是添加我们刚刚的tif文件,如下图所示:

MapTile2

可以看到这个图片的坐标信息就自动进入了,而不需要你手动输入地理信息,如果你使用JPG或者BMP图片那当然是需要手动输入的,这也算是一个小小的技巧吧。然后就是选择坐标系啊、地图缩放的级别啊、版权信息啊、Google Maps API key啊什么的,然后就开始真的切割了,等待一会你就可以得到切割好了的地图了。

MapTile4

完成后大家赶紧来看看效果吧:

expomap

要知道这不是简单的仅仅是一个图片叠加在Google地图上面,你放大缩小加载的是不同的tile,而且和原有地图的叠加非常的好,因为我们配准了的嘛,但也必须要说MapTile这个软件的功能不可忽视。不过Google地图叠加tile的overlay的速度还是很慢的,除了本身图片加载速度可能有点慢以外,有可能GoogleMapsAPI就是如此,所以我们疯狂的延伸一下想法:将我的Google Maps API离线开发包中的Google地图替换成自己的地图,那么就真正的完全的离线并且是定制的地图了,期待看过此文的朋友能够完成这一壮举。

好了,最后给大家围观一下我的世博地图吧,毕竟在线的版本比本文的图片要实在:http://sharesh.cn/map/expo2010/

三月份到此结束,时间过的真是太快,这个月仅贡献此一篇博文,希望能够给大家带来帮助。谢谢。

2 条评论 (22 views)
2010年3月20日 | 分类: Other | 标签:

201003011868

没有评论 (4 views)
2010年2月28日 | 分类: NET, Software | 标签:

试用Photosynth软件,完全是因为这篇“超强变态的新必应地图”的文章,在其中看到了所谓的Photosynth的技术。其实这个就是一个照片拼接技术,非常的强悍,能够将许多张照片拼接成一个连续的照片,有点类似Google街景的感觉,但这是两种完全不一样的技术,可能我更喜欢Google街景,而对于微软的Photosynth技术,我想简单易用能够用来做些小事情应该不错,比如你如果无法做出全景照片(就是网上不温不火的WEB3D技术,一般都通过Java运行,可以在WEB浏览),那么就用这个软件来试试看吧,效果类似。

好了,简单的说一下怎么用吧。首先当然是安装,去他们的官方网站自行下载安装吧。打开软件并注册,可以看到这样的画面:

photosynthindex

然后当然是开始一个新的synth罗,并将所有的照片加入进去,比如我拍了徐家汇附近的照片全部导入如下图所示:

CreateSynth

另外如果照片已经有经纬度了的话,是可以直接定位到BingMap上的,其实这个徐家汇的地图就是有经纬度坐标的。下一步当然是上传了,点哪一个按钮地球人都知道。开始上传并直到完成:

 XujiahuiCompleted 

在完成界面上,可以看到提示信息,上图所示是上传完成,并100%拼接,经纬度信息已经加入,但是不是所有的照片都能做到如此,我另外一份测试照片只有完成38%的拼接,说明我拍摄的不够好:

photo38

上图中,上半部分为拼接完成的,下半部分小图表示的是没有拼接完成的。

好了,我们继续点击View按钮吧,你就可以看到你刚刚上传完成的内容了,其实是另外打开了一个WEB地址。 下图就是效果:

XujiahuiWebView

左半部分就是效果窗口,你可以看到一个主体照片,以及旁边拼接的照片的轮廓,点击这个轮廓后就自动切换到那个照片,当然还能左移右移放大缩小以及不同的浏览视图,具体的自己访问后尝试一下就知道了。

这一技术已经在BingMap中体现:

Bing

其实Google也有类似的技术:

googlePicture

只是Photosynth的技术更加强悍,大家操作后就能明显的感觉到,可能Google是全部网络抓取而非特制照片的原因吧。而Photosynth技术将在未来也将是Microsoft的一个重要技术,看“下一代技术在微软而非Google”一文中的视频,他的商店门口切换不同时间段照片,应该是用Photosynth拼接的,而能如此无缝的和街景结合,那真是非常强悍的。

至于Google街景和Photosynth这两个来看,其实是比较不相及的东西,一个是全景照片,一个是零散照片拼接成的全景,虽然也许有点像。个人更喜欢全景照片一些,因为Photosynth出来的拼接全景,让我有照片补丁的感觉。

另外,稍稍的抱怨一下Photosynth,无法脱离网络,这些照片全部是上传到他们的服务器后完成的拼接,看来这软件并不一定很强大,而这一个Photosynth技术很强大,所以本文的标题说是Photosynth软件可能是错误的。而上传的服务器空间默认只有20GB,难道以后用满了我在买微软的空间?

总的来说,Photosynth是一个非常强悍的技术,至于有什么样的应用,这个自己想吧。比如最近Google推出商店街景,那么原则上使用Photosynth完全可以实现。而以前的360度三维全景也可以使用该技术实现,并且不需要单点固定旋转360度,只要随意的联系拍摄就好,制作的复杂程度相对比较简单。你还想到其他什么呢?欢迎你来告知答案。

好了,我的介绍已经完毕,你也赶紧去尝试一下吧。

下图为插入的Photosynth的iframe,如果看不到iframe就打开这个链接即可,可能需要sliverlight的支持。

没有评论 (16 views)
2010年2月27日 | 分类: Map | 标签:

维基百科的资料非常不错,所以准备下载一些下来,本来以为都要自己抓取,但结果维基百科自己开放了所有的数据给你下载,具体可以参见这个页面:

维基百科的开放的态度是出乎我的意料的:

维基百科提供所有完整内容的电子档案给有兴趣的使用者。这些资料可以被重复使用,当作镜像站点,或是个人使用,或是资料备份,或是分析。所有维基百科文章都在知识共享 署名-相同方式共享 3.0协议下发布,图片以及其他档案则可能以其他的许可证发布,详情参见Wikipedia:版权信息

当然,这样的开放是基于知识共享协议的,并且其中没有商业限制这一条。

大家可以去http://download.wikimedia.org/zhwiki/latest/下载最新的中文版的维基数据,其中前面几条的xml为最终的数据,不过这个xml仅仅包含了文字内容,并且是非常简单的文字内容,就像是简介一样,不是完整的页面。其余的压缩包的大多为数据库数据,当然这些数据库包含了页面信息文件信息等,由于太大我没有下载全部。顺便看了一下中文维基和英文维基的xml文件的大小,296M vs 2.6G,说明数据的差异有多大?由此可见我的分享上海众包计划没有进展也算是正常了。

我年前下载了2月2号的xml数据,今天最新的xml数据增加了3M。过年无聊就写了几行python语句,然后处理成了数据库,现在提供给大家下载。总数据条数为65536条,分成三栏数据,第一栏是名称,第二栏是维基百科的网页链接,第三栏是简要的说明,效果如下:

image

文件已经放在我的Google docs上了,不再限制文件类型我当然就用Google的作为免费下载空间了。地址:http://goo.gl/FZST (mdb格式,解压缩后86M) http://goo.gl/9Oei (xls格式,解压缩后17M)。

等等,还没有结束,再给大家送上一份维基百科的地理数据,就是带地理坐标的维基百科数据,啥时候下载的已经忘记了,哪里下载的也已经没有地址了,现在共享出来。要知道,这是一份全世界的地理数据哦,虽然从kmz文件来看只有6.5M,但如果解压缩出来的kml文件实际上为122M,如果你的电脑配置不够好,使用Google Earth加载这份数据基本上没戏,反正我是没有加载成功过,我只有通过其他软件打开,然后可以挑选出一部分数据来。从文件的日期上能够看到这个是08年初的一份数据,不知道原作者是如何提取出这份数据的,这份数据基本上就是Google Maps或Google Earth中显示的维基百科数据的离线版,不知道大家有什么好的方法下载维基百科的地理数据呢?我倒是想下载一些。而这份08年的数据实在是比较差的,可能和当时的维基百科数据量有关吧,但中国地区和国外地区的数据量差异也蛮大的,中国地区的差不多就只是一些城市的数据了,而城市内的位置信息(地标、公园、大厦甚至公司等等)基本上没有,其他国家的数据相对要比我们详细一些,看看中国的大城市上海的数据的稀疏程度就知道这是有多么的悲哀了:

image

好了,下载地址:http://goo.gl/HuMy 文件名为:Wikipedia_en_2008-03-12.kmz。

没有评论 (31 views)
2010年2月27日 | 分类: Software | 标签:

找了一个ICON长条,很宽的一个长条,就是200多个ICON并排的一个位图文件,我想提取出这些ICON。首先想到的是用PS切割,是的,这招谁都会,就是太费时,因为纯手工,我不愿意干如此的重复活,当然,如果你厉害,可以写一个JS,让PS为你自动切割,有些朋友切割大的地图的时候就是这么做的,可惜,我不会。郁闷了两天,最后没有办法,只好请求Google,找到了两个软件,不过个人觉得这个图片剪纸刀的软件挺不错,所以今天介绍给大家,我以实例来说明具体的使用。

比如说下图是一个图片,是世界上许多国家国旗的logo,那么我如何切割开来呢(PS:网络上现在都有下载,不需要切割,我只是想讲述一下这个软件的使用。),试试这个图片剪纸刀的工具吧。

flags_preview_large副本

其实这个软件的使用方法很简单,加图片加入进来,然后切割几刀。切割完成后,将切割后的图片再导入进来,再对这些图片切割,自然就成一个个小的图片了。这个图片是11列22行,每个大小为28×28像素,这个图片的宽度应该为308×616(特别需要注意图片的大小,如果不均匀,那么切割后就不是你想要的形状了,此点务必注意),所以需要先横向切21刀然后纵向切10刀,如下图素所示:

image

来看看最终效果吧:

image 

对,这就是我要的效果。

一个简单的工具解放了我的双手,所以我要写一个帖子来赞美一下它,其实生活中的很多事情如果你愿意去查询去思考的话,总会有好多解决方法的。这里我仅仅是做了一个图片的实例,至于你想用来干吗就自己看着办咯。

没有评论 (13 views)
Page 1 of 812345...Last »