刚加入V2EX.com,很喜欢这个网站,看了源代码之后,觉得应该重构一下比较好! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
newblue
V2EX    V2EX

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

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

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

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

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

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

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

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

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

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

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

    实在觉得这话题有点无聊,不说了。
    lesscome
        16
    lesscome  
       2011 年 3 月 29 日
    @newblue 我觉得这个问题最好和@livid 私下讨论比较好
    newblue
        17
    newblue  
    OP
       2011 年 3 月 29 日
    看来群众的力量还是很强大的!!

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

    结果扯大了。
    dreampuf
        18
    dreampuf  
       2011 年 3 月 29 日
    不知道你所说的"后代码的维护"会什么时候出现.以什么样的程度出现.

    在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 年 3 月 29 日
    @dreampuf 罩杯花费。。。lol
    chloerei
        20
    chloerei  
       2011 年 3 月 29 日
    Project Babel 2 开源 -> 有人想用来二次开发,但发觉代码不好维护(至少对他来说) -> 向作者提意见整理代码。

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

    一个开源项目,对提出bug或者建议的人群起攻之。。还真没见过
    doyle
        28
    doyle  
       2011 年 3 月 29 日
    感觉lz的表述和建议没有啥问题啊。。。1l太偏激了吧
    laihj
        29
    laihj  
       2011 年 3 月 29 日
    我的代码,重复的地方一般是自己改烦了才重构
    laihj
        30
    laihj  
       2011 年 3 月 29 日
    再说v2ex
    现在的代码虽然在物理上开源的,但从代码本身的结构,并没有让他人插手的意思。
    这样的代码,他人看完就挺烦的了,二次开发只能自己做
    楼上几位同志说的代码能用,其实只是对livid自己能用而已。对其他程序员来说,可用性不高
    dreamer
        31
    dreamer  
       2011 年 3 月 29 日
    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 年 3 月 29 日
    本来不想说什么,但看到有些人很偏激,甚至像果粉和果黑一样对立,所以忍不住插下嘴。

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

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

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

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

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

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

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

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

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

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

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

    感谢大家。

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

    你上传一个头像吧。 :)
    Livid
        36
    Livid  
    MOD
    PRO
       2011 年 3 月 29 日
    「 觉得应该重构一下比较好 」

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

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

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

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

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

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

    :)
    newblue
        37
    newblue  
    OP
       2011 年 3 月 29 日
    @livid

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

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

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

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

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

    我想lz既然也没打算提交任何代码,为什么不以用户角度发贴呢……
    newblue
        45
    newblue  
    OP
       2011 年 3 月 29 日
    @fanzeyi

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

    我没说美丽的代码!

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

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

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

    我们这种门外汉还是比较合适做小事情,报告一些bug什么的。
    Livid
        52
    Livid  
    MOD
    PRO
       2011 年 3 月 29 日
    大家来讨论点更有现实意义的吧:

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

    我觉得重构代码可以基于三点:
    一,重构部分的代码可以直接给“用户”带来更好的使用体验
    二,在新的需求下,基于原代码很难实现此需求的时候,要进行必要的重构
    三,代码有发现bug,在修复bug的同时,尽可能的完善或重构此部分代码
    kayue
        58
    kayue  
       2011 年 3 月 30 日
    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 年 3 月 30 日
    楼主提意见,建设性的就改进,没道理的就浮云呗。

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

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

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

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

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

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

    不知道@livid有没有发一些自己的工作记录?
    Livid
        73
    Livid  
    MOD
    PRO
       2011 年 3 月 30 日
    @newblue 回答你关于如何找到代码的问题:

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

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

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

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

    除了佩服,我也不知道说什么好!
    leben
        75
    leben  
       2011 年 3 月 30 日
    一个玩具何必较真啊。
    开源只不过是给喜欢它的人一个机会而已,我觉得一个个人开源项目,没必要要求那么高吧。
    vayn
        76
    vayn  
       2011 年 3 月 30 日
    @leben 你是来钓鱼的吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3960 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 09:48 PVG 17:48 LAX 01:48 JFK 04:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86