V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
newblue
V2EX  ›  V2EX

刚加入V2EX.com,很喜欢这个网站,看了源代码之后,觉得应该重构一下比较好!

  •  
  •   newblue · 2011-03-29 12:40:04 +08:00 · 9890 次点击
    这是一个创建于 4778 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码很凌乱,很多操作都是在controller部分完成,例如数据库查询,我觉得应该独立到专门的model,一个是可以提高重用,避免重复编写类似代码,维护也可以更方便,同一个功能的代码,只要修改一个地方就可以完成,再一个缩短代码的长度,方便阅读和调试。

    我不知道livid是不是专业程序员,但是不管怎么样,都应该在保持功能的增加的同时,定期进行重构比较好一点,避免日后因为系统过于庞大复杂,重构的要成倍的增加。
    76 条回复    1970-01-01 08:00:00 +08:00
    crazycookie
        1
    crazycookie  
       2011-03-29 12:45:21 +08:00
    没必要,浪费时间
    有这个时间 可以做许多其它的事情
    不要为了 将来不一定发生的事情 浪费时间
    crazycookie
        2
    crazycookie  
       2011-03-29 12:50:24 +08:00
    PS: 初步阅读别人的代码 都会认为“为什么要这么写?不是有更加好的方法么”
    但是,等到深读了,或者自己去实现的时候,就会明白:“原来当时这么设计是有道理的,不得不这么设计”
    MVC模式,不一定需要严格遵守,它只是一个约定
    以前,有一段时间我的想法和楼主 类似,现在回想 ,那是一个泥潭
    这个是一个对时间分配范畴
    areless
        3
    areless  
       2011-03-29 13:15:54 +08:00
    个人项目而已。MVC分的这么清楚干嘛?
    newblue
        4
    newblue  
    OP
       2011-03-29 13:43:18 +08:00
    如果必要重构,对代码进行清理是意见浪费时间的事情,那我也无话可说了。

    看@livid在v2ex里面的代码,一个GET函数可以翻几页才可以看完,很多地方的代码都可以独立抽出来,却不得不的重复写几次。

    不知道@cazycookie是不是程序员,不把重复的地方独立出来,你做修复臭虫的时候,不是要每个地方都去修改,这难道不是一种浪费自己时间的事情吗?
    newblue
        5
    newblue  
    OP
       2011-03-29 13:47:24 +08:00
    @areless v2ex目前是个人项目没错,但是按照@livid的想法,v2ex是要打算做大的,良好的代码,对于以后代码的维护,不管是@livid本人还是其他团队成员都是很重要的。

    就连豆瓣的作者,都在一开始考虑到团队成员在这方面的可维护性。
    jeffrey
        6
    jeffrey  
       2011-03-29 13:50:10 +08:00
    @newblue
    如果代码都完美了,还有让人参与的乐趣了么?
    很多事情是要细看,才会更有所得。

    个人觉得也无必要
    crazycookie
        7
    crazycookie  
       2011-03-29 13:50:31 +08:00
    诅咒 回复这个帖子的人都不是程序猿 TAT
    ch_linghu
        8
    ch_linghu  
       2011-03-29 13:56:23 +08:00
    既然是个开源项目,为什么是提意见而不是做贡献呢?
    newblue
        9
    newblue  
    OP
       2011-03-29 13:56:39 +08:00
    @jeffrey
    世界上有完美的代码?你对v2ex提交了多少代码?
    只有风格好的代码,所有代码都取决于所在产品的需要。
    newblue
        10
    newblue  
    OP
       2011-03-29 13:58:28 +08:00
    @crazycookie

    你诅咒吧,努力的诅咒吧,你的人生就干诅咒这一件事情就好了。
    chloerei
        11
    chloerei  
       2011-03-29 14:00:37 +08:00
    如果是我写的,我会重构一下(所以我真的自己写了……)。看以前帖子,@livid认为自己维护起来没什么问题,所以大家都不太提这事了。
    newblue
        12
    newblue  
    OP
       2011-03-29 14:03:11 +08:00
    @ch_linghu

    v2ex固然是一个开源项目,但是我只提意见,不做贡献,是因为v2ex现在已经是GAE的完全体了,我很明白重构这个系统的代价对于我来说太大了。
    newblue
        13
    newblue  
    OP
       2011-03-29 14:08:41 +08:00
    @chloerei

    从昨天开始,我自己对v2ex进行重写,用webpy做框架,原本是打算用v2ex自己架设一个网站的,结果变成要重写整个系统。
    est
        14
    est  
       2011-03-29 14:10:00 +08:00
    建议LZ和1L用实际commit code行动来代替说话。
    jeffrey
        15
    jeffrey  
       2011-03-29 14:11:10 +08:00
    “你对v2ex提交了多少代码? ”
    我没有提交过一个字母的代码,所以我不会评论其好坏。
    同时我请问@newblue, 你提交了多少代码呢?

    “只有风格好的代码,所有代码都取决于所在产品的需要。”
    产品是为了卖钱,请问你是花钱买了PB的代码吗?如果你花钱了,那你是用户,需求随你提。

    实在觉得这话题有点无聊,不说了。
    lesscome
        16
    lesscome  
       2011-03-29 14:25:20 +08:00
    @newblue 我觉得这个问题最好和@livid 私下讨论比较好
    newblue
        17
    newblue  
    OP
       2011-03-29 14:31:46 +08:00
    看来群众的力量还是很强大的!!

    v2ex原本就是@livid的,建议@livid对代码进行重构,是希望他以后维护更加方便一点而已。

    结果扯大了。
    dreampuf
        18
    dreampuf  
       2011-03-29 14:39:11 +08:00
    不知道你所说的"后代码的维护"会什么时候出现.以什么样的程度出现.

    在GAE捉襟见肘的有限资源里.每一次function call都考验着CUP cost.
    "Don't Repeat Self".设计模式...这些都是束缚.
    不是死背GoF的教条就会有一个伟大的产品.

    快速原型.获取反馈.迭代.

    那里有闲情为了百年不遇的"可能"而去"重构".
    好代码不是处处优美可拓展.他是不能少掉任何现有的一行.

    好代码不值钱
    http://www.aqee.net/2011/03/16/good-code-is-cheap-code/
    est
        19
    est  
       2011-03-29 14:42:33 +08:00
    @dreampuf 罩杯花费。。。lol
    chloerei
        20
    chloerei  
       2011-03-29 14:46:40 +08:00
    Project Babel 2 开源 -> 有人想用来二次开发,但发觉代码不好维护(至少对他来说) -> 向作者提意见整理代码。

    我觉得是很正常行为,这也是一个需求。二次开发者觉得恐惧而不敢进入,这就是一个维护问题。虽然 v2ex 的中心是社区,而不是程序,但也没说不能提程序上的意见,各位不要抓着“能用的代码就是好代码”维护过度了。我想 @livid 希望听建议的时候也不会希望自己被亲卫队保护了起来。
    crazycookie
        21
    crazycookie  
       2011-03-29 14:50:11 +08:00
    步阅读别人的代码 都会认为“为什么要这么写?不是有更加好的方法么”
    但是,等到深读了,或者自己去实现的时候,就会明白:“原来当时这么设计是有道理的,不得不这么设计”
    -----------------我是分割线(以上内容已经在#2说明)-------------------
    @dreampuf 做完了一个项目下来 我深有体会 TMD 什么随时准备着重构什么的都是浮云
    crazycookie
        22
    crazycookie  
       2011-03-29 14:51:40 +08:00
    @newblue 我所谓的诅咒 只能对你张口闭口 说别人不是程序员 的 言语 表示我一点点的不满
    disinfeqt
        23
    disinfeqt  
       2011-03-29 14:54:59 +08:00
    Oh not this again?
    Paranoid
        24
    Paranoid  
       2011-03-29 15:16:50 +08:00
    重构还是需要的~
    即使做不到按规划来,也得入todolist,毕竟天天面对代码的还是开发者~
    几天不见代码,偶然遇见蛋也疼~
    Los
        25
    Los  
       2011-03-29 15:28:14 +08:00
    这再次让我翻看了这篇帖子里的讨论:http://www.v2ex.com/t/6847
    Los
        26
    Los  
       2011-03-29 15:29:02 +08:00
    当然还有这: http://www.v2ex.com/t/6892
    9hills
        27
    9hills  
       2011-03-29 15:37:58 +08:00
    其实很想不明白。,。lz好心的提个建议。。难道还有错了不成

    一个开源项目,对提出bug或者建议的人群起攻之。。还真没见过
    doyle
        28
    doyle  
       2011-03-29 15:50:47 +08:00
    感觉lz的表述和建议没有啥问题啊。。。1l太偏激了吧
    laihj
        29
    laihj  
       2011-03-29 15:51:46 +08:00
    我的代码,重复的地方一般是自己改烦了才重构
    laihj
        30
    laihj  
       2011-03-29 15:56:15 +08:00
    再说v2ex
    现在的代码虽然在物理上开源的,但从代码本身的结构,并没有让他人插手的意思。
    这样的代码,他人看完就挺烦的了,二次开发只能自己做
    楼上几位同志说的代码能用,其实只是对livid自己能用而已。对其他程序员来说,可用性不高
    dreamer
        31
    dreamer  
       2011-03-29 16:09:06 +08:00
    Linus: "Standards are paper. I use paper to wipe my butt every day. That's how much that paper is worth." https://bugzilla.redhat.com/show_bug.cgi?id=638477#c129
    keakon
        32
    keakon  
       2011-03-29 16:36:13 +08:00
    本来不想说什么,但看到有些人很偏激,甚至像果粉和果黑一样对立,所以忍不住插下嘴。

    现在的V2EX并没有完全开源,开源出来的PB从去年底都没有任何更新了,所以你并不知道现在的情形是怎样的。目前你能看到的PB确实不太适合二次开发,有时候想去提交代码,但是发现代码已经过时了,也就没动力了。

    从@livid偶尔透露出的改动来看,他已经在进行重构了,甚至框架都可能不是webapp了,只是改动太大,并不适合在未成熟前开源出来。

    所以如果等不及新版本,最好的选择是自己重新设计一个,因为现有版本确实没有太实用的参考价值。我这里所说的参考价值只针对数据库设计方面,因为它是应用的核心部分。

    最后,使用产品的用户和改造产品的用户有着不同的需求,你们既然都读不懂对方,干嘛还针锋相对。
    Numbcoder
        33
    Numbcoder  
       2011-03-29 19:20:32 +08:00
    我觉得lz没什么错,首先不管意见好坏,也不用对他群起而攻之啊,是不是有些人对@livid太过崇拜了
    Livid
        34
    Livid  
    MOD
       2011-03-29 19:24:30 +08:00
    刚刚下飞机。

    一个设计良好的 BaseHandler 是 webapp 和 Tornado 这样的架构的核心。

    而 V2EX 在开始的时候,确实没有 BaseHandler,目前大家看到的这个新版本,最初只花了几天时间就上线了。

    GAE 和设计模式都是两个需要值得持续学习的问题。

    去年的大部分时候,我在不停地加功能,因为加顺手了,所以很多问题也没有细想。

    今年因为有其他的一些 Tornado 项目开始,所以对于 BaseHandler 及设计模式等问题非常在意。

    目前在我的本地有一个自己还算满意的 BaseHandler 实现,而 V2EX 以后的所有新功能,也会基于这个全新的 BaseHandler。

    设计模式确实是一件重要的事情,应该多花时间,学无止境。

    感谢大家。

    我不希望再因为这个问题引发任何论战了。目前确实有一段时间没有 push 代码,也是因为我不想再因为这些 work-in-progress 的东西因引发什么论战了。一个好的社区氛围,维护起来不容易,我们所有人珍惜吧。
    Livid
        35
    Livid  
    MOD
       2011-03-29 19:32:58 +08:00
    @newblue

    你上传一个头像吧。 :)
    Livid
        36
    Livid  
    MOD
       2011-03-29 19:40:28 +08:00
    「 觉得应该重构一下比较好 」

    「 我不知道livid是不是专业程序员 」

    这两句话听起来比较像是对这里的代码的全盘否定,但是我觉得 OK。

    只是,我有一点小小的个人体会希望和大家分享:

    1. 作为新人看到的问题,肯定不会有老人看到的多。而老人们为什么不说,很可能是因为他们早就知道问题的存在,并且甚至都已经有计划如何解决。

    2. 如果要给其他的程序员提建议,他们更乐意听到的是,是具体的修改意见,比如哪个文件的哪行应该怎么改。如果更专业一些的话,可以直接用 code 或者 diff。

    3. 从很高的高度提建议,通常在现实世界里是很难有有效反馈的。比起仰望星空,我觉得脚踏实地的 running code 更有意义。

    :)
    newblue
        37
    newblue  
    OP
       2011-03-29 20:51:04 +08:00
    @livid

    不管怎么说,v2ex是你的作品,我无权否定什么,对于重构的问题,只是我个人的意见,是否执行定期或者不定期的重构是作者本人的权利。

    至于我问你是否是程序员,是因为我觉得每个程序员除了把代码写好,保持代码的可维护性,也是程序员一向职责。

    我唯一能给出的意见,也就是重构或者整理你的项目,没计划往你的项目添加任何东西或者改动任何东西的意思,毕竟你现在还有一个本地的版本未提交进代码库,希望早日看到你的更新。
    fanzeyi
        38
    fanzeyi  
       2011-03-29 21:09:00 +08:00
    咦 发现一个问题……
    LZ在主贴里面有头像 在列表&&回复里面的头像又蹦回默认了。。
    fanzeyi
        39
    fanzeyi  
       2011-03-29 21:09:57 +08:00
    @newblue Project Babel是一个开源项目
    项目地址: https://github.com/livid/v2ex
    直接提交path不就好了嘛。
    fanzeyi
        40
    fanzeyi  
       2011-03-29 21:16:21 +08:00
    @newblue 哎 还有…… 我觉得LZ应该现在V2EX围观一段时间 大概就明白 livid 是个什么样的人了……(呃 没有贬义……) 或许就不会发这样的帖子了…… 嗯。

    这帖子快要移动到 水深火热 了。。。
    domainname
        41
    domainname  
       2011-03-29 21:21:48 +08:00
    我不喜欢楼主的语气,设计模式xx,美丽代码都是浮云。。。v2ex is running, that's the main point
    fanzeyi
        42
    fanzeyi  
       2011-03-29 21:24:15 +08:00
    不喜欢楼主的语气 +1
    哎 不要说任何一个写程序的人 是不是专业程序员
    都是写程序的 专业跟不专业的有很大的区别么?
    (很多人)写代码是热爱代码 同样热爱一样东西为什么还要划分这么清楚。
    当然不是说指出错误不行…… 还是注意下语气好了= =
    crazycookie
        43
    crazycookie  
       2011-03-29 22:08:43 +08:00
    我犯贱,看到楼主的语气我就激动了
    今天已经和N个人说我犯贱 MD
    levn
        44
    levn  
       2011-03-29 22:08:46 +08:00
    其实lz本来是用户,但是用评论家的语气发了个帖……

    用户把问题推给开发者可以理所当然。评论家就不那么受欢迎了。

    我想lz既然也没打算提交任何代码,为什么不以用户角度发贴呢……
    newblue
        45
    newblue  
    OP
       2011-03-29 22:09:38 +08:00
    @fanzeyi

    如果这些代码是@livid自己看的话,他想怎么写,可以很随便,但是作为一个开源项目或者团队项目,我觉得把代码写的容易维护一点,是一种责任和道德。
    newblue
        46
    newblue  
    OP
       2011-03-29 22:14:12 +08:00
    @domainname

    我没说美丽的代码!

    至于设计模式,我也没说,GAE SDK那套框架,本身就是MVC的,我只是根据@livid的代码,指出在C部分代码是应该移到M那里而已。
    fanzeyi
        47
    fanzeyi  
       2011-03-29 22:15:48 +08:00
    @newblue 看来您还是不太熟悉 livid啊…… 多呆一段时间再评论吧
    obiwong
        48
    obiwong  
       2011-03-29 22:25:11 +08:00 via iPhone
    纠正一点,MVC不是设计模式,而是一种架构模式(Architecture Patterns)。
    timshi
        49
    timshi  
       2011-03-29 22:25:35 +08:00
    another thing that is lacking from HN, too personal.
    franksin
        50
    franksin  
       2011-03-29 22:32:57 +08:00
    从代码的角度上看,好像没有什么代码是不需要重构的,但从应用和产品角度来看,重构意味着花费较多时间,但没有给用户带来新的功能或者使用体验上的提升。
    newblue
        51
    newblue  
    OP
       2011-03-29 22:34:35 +08:00
    @levn

    因为自己也写代码,看到这种一个函数很多页的代码,实在是忍不住,不过只是出于好意跟@livid说一下而已,并没有进来吵架的打算。

    并不是我不想提交代码,而是就现在v2ex对我来说,我基本会考虑重写,或者进行大的重构,个人能力不够,再者主人家,都没有意思要行动,这样也就没意思,很容易喧宾夺主。这种大面积的行动,最好还是主人带领着比较合适。

    我们这种门外汉还是比较合适做小事情,报告一些bug什么的。
    Livid
        52
    Livid  
    MOD
       2011-03-29 22:41:41 +08:00
    大家来讨论点更有现实意义的吧:

    http://www.v2ex.com/t/10651
    chloerei
        53
    chloerei  
       2011-03-29 22:52:11 +08:00
    大家观点都已经表述过了,见好就收吧
    args
        54
    args  
       2011-03-29 23:21:44 +08:00
    事实证明能跑的代码无需重构。
    Orz
        55
    Orz  
       2011-03-29 23:47:09 +08:00
    这里不适合提意见,貌似之前提意见的几个现在都没在这里了吧,呵呵。
    L42y
        56
    L42y  
       2011-03-29 23:59:01 +08:00
    怎么能不让我想起 Arch Linux 的 Pacman 因为 package signing 被各种喷
    seenxu
        57
    seenxu  
       2011-03-30 03:19:23 +08:00
    推荐大家看看此文: “你的代码写的很烂” http://www.aqee.net/2010/08/09/your-code-sucks/

    我觉得重构代码可以基于三点:
    一,重构部分的代码可以直接给“用户”带来更好的使用体验
    二,在新的需求下,基于原代码很难实现此需求的时候,要进行必要的重构
    三,代码有发现bug,在修复bug的同时,尽可能的完善或重构此部分代码
    kayue
        58
    kayue  
       2011-03-30 03:36:42 +08:00
    1. 利益宣告:我本身同意楼主的意见。

    2. 当然有比光提出意见更好的方法,比如commit code。
    但只提意见本身并无不妥。

    3. 影评人要批评一部戏拍得烂,并不需要懂得拍戏。

    4. 一个优秀的 open source project 绝对不是“能跑就好”
    当然并不是每个 open source project 都以此为目标。

    5. how come members in v2ex are so protective?
    proper
        59
    proper  
       2011-03-30 06:57:25 +08:00
    楼主提意见,建设性的就改进,没道理的就浮云呗。

    就事论事,工作中也常常见到楼主这样的言论,高屋建瓴,动不动就上纲上线,怀疑一切。
    工作中有这种言论的人恰恰是对自己代码保护欲望最强烈的,容不得别人的任何意见。能力又往往一般。
    道理很简单,如果没有完整的商业软件经验,很难体会到做到什么程度算好,什么程度就过了,什么程度又会不足。所以编码的时候没有这个度在里面,就会一味的追求完美来掩饰能力的不足。
    Los
        60
    Los  
       2011-03-30 07:22:01 +08:00
    想不明白为什么那么多人非得拿“你的代码写得很烂”这篇所谓的东西出来忽悠人,而这里大部分站出来对LZ强烈反对的家伙恰恰却是对程序开发一知半懂甚至于完全不懂的人,这部分人我觉得在这样的讨论里是最不应该插言的人却叫得最欢,这是为什么呢?而V2EX现在github上托管那部分代码质量确实不怎么样,相信@Livid现在也发现了这个事实进而尽量改进之。
    obiwong
        61
    obiwong  
       2011-03-30 07:43:49 +08:00 via Android
    hi all:
    仔细看了这篇帖子及所有回复,发现这么一个‘重度’讨论代码的帖子居然没有一个人贴出哪怕是一行的代码。
    重构还是不重构,正反两方的道理本身都是正确的,但离开了代码就只是浮云了。
    Los
        62
    Los  
       2011-03-30 07:52:15 +08:00
    @obiwong 其实基本要全面重构
    jckwei
        63
    jckwei  
       2011-03-30 08:50:12 +08:00
    看热闹来顶一下
    c
        64
    c  
       2011-03-30 08:51:15 +08:00
    我是来学习的,呵呵~
    Micky
        65
    Micky  
       2011-03-30 08:54:13 +08:00
    我觉得这个帖子之所以被这样热烈的讨论,是建立在lz的这句话上的:“我不知道livid是不是专业程序员”……

    重构不重构的哲学命题已经被说滥了,剩下的就是语气和姿态之争了 :)
    est
        66
    est  
       2011-03-30 08:56:55 +08:00
    吵架和指责是政治家的干活,工程师用代码说话。建议LZ用代码实例说明哪里需要重构,和你重构的想法。
    Micky
        67
    Micky  
       2011-03-30 09:00:41 +08:00
    我倒是觉得 V2ex的可贵之处在于情怀与创意。而说实话,代码/架构什么的相比之下我觉得都是小节了。

    从这个社区,无论是界面还是各处的文案,处处可见作者的情怀。相对于传统的论坛,这里不少细节都体现着颠覆性的想法。这是很令人敬佩的。
    muxi
        68
    muxi  
       2011-03-30 10:45:13 +08:00
    哈哈,这已经是Livid的风格鸟,不用争论了,是PHP版本的 Project Babel 代码也是类似
    大家站的角度不同而已,作为一个程序员,这样的代码确实需要重构,基本上这样的代码不适合协作开发,特别是新加入成员
    作为一个产品,代码其实只是一个实现工具,如果不是整个项目的瓶颈就没有必要重构,推进整个项目向更好的方向发展才是更重要的事情
    Renylai
        69
    Renylai  
       2011-03-30 11:10:38 +08:00
    呵呵,在V2EX潜水了好多年了,很多时候只是看看。不过这次发现好多人已经长大了,心智成熟了许多!
    lianghai
        70
    lianghai  
       2011-03-30 15:07:37 +08:00
    @Micky “情怀”这个词用得好。:)
    dan
        71
    dan  
       2011-03-30 15:32:15 +08:00
    @kayue ;)
    newblue
        72
    newblue  
    OP
       2011-03-30 21:03:12 +08:00
    好累阿~~~

    看@livid的代码好累阿,经常性的是一大段,几页的代码,重复的段落经常出现,我实在是很佩服@livid能在这种类型代码中自由飞翔,特别是像Python这种靠缩进确定代码段的语言。

    我之前看到有一帖好像是说@livid打算商业化后找到投资人就找几个人帮忙,我很好奇和期待谁能胜任这个工作。

    我开始很好奇@livid是如何为一个功能而开始编码!

    不知道@livid有没有发一些自己的工作记录?
    Livid
        73
    Livid  
    MOD
       2011-03-30 21:20:56 +08:00
    @newblue 回答你关于如何找到代码的问题:

    1. 我目前用的编辑器是 TextMate,性能非常好。它可以为单个 py 文件生成类和函数的大纲,这样很方便定位类和函数。当需要进行整个项目中的查找替换时,TextMate 的 CMD+SHIFT+F 很快很好用。

    2. 毕竟自己花了几个月的时间把这些东西写出来,所以基本上能够找到应该修改和添加的地方。就像每个人自己家,即使很乱也可以迅速找到自己的东西。而来家里作客的外人就很难找。而就算是设计得非常好的那些 API 如 iOS 和 Twitter,不看文档也不可能找到什么。

    从我开始回复这个帖子开始,我一直在承认所有存在的问题,也向大家通报了目前的改进进度。所以,说实话,我觉得我继续回复这个帖子的必要性不存在了。目前看起来越来越偏题。
    newblue
        74
    newblue  
    OP
       2011-03-30 21:53:42 +08:00
    @livid

    希望早日看到你的改进成果!

    除了佩服,我也不知道说什么好!
    leben
        75
    leben  
       2011-03-30 21:58:55 +08:00
    一个玩具何必较真啊。
    开源只不过是给喜欢它的人一个机会而已,我觉得一个个人开源项目,没必要要求那么高吧。
    vayn
        76
    vayn  
       2011-03-30 22:06:06 +08:00
    @leben 你是来钓鱼的吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   914 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 20:03 · PVG 04:03 · LAX 13:03 · JFK 16:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.