V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
2000 个不用坐班的远程好工作在召唤你 · 弹性上班不打卡,工作和生活都能拥有
2000 个不用坐班的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
uiosun
V2EX  ›  程序员

吐槽:到底什么是“优雅”? PHP 的新名词真是含义莫名……

  •  
  •   uiosun · 76 天前 · 5798 次点击
    这是一个创建于 76 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本周工作日的某一天,

    翻开一篇博客园文章:“……这样写更优雅……”、

    打开一篇 Laravel 某个特性的介绍:“……这个框架……以优雅著称……”。

    优雅到底是什么?小布尔乔亚?是我漏了什么吗?

    去逛 Stackoverflow 、去大佬们的独立博客、去 Github 讨论问题,大家都直接讲“稳定”、“安全”、“性能”、“可读性”、“模块化”……

    我记得,Yii2 那时的 Slogan 是 “安全、稳定、高效”,现在竟然给我一种“都在吹优雅”的感觉。

    ( Ps:上一次给我留下印象的“优雅”,还是小红书里的名媛)

    75 条回复    2022-07-12 22:11:33 +08:00
    momocraft
        1
    momocraft  
       76 天前
    优雅是更优雅的好

    如果没有更具体的东西可夸 不管是认识不足还是表达不足 就可以说 "优雅"
    Leviathann
        2
    Leviathann  
       76 天前   ❤️ 14
    真的逛过 github 吗,elegant 不是很常用的词?
    hello2090
        3
    hello2090  
       76 天前
    “安全、稳定、高效” 一听就不优雅!
    uiosun
        4
    uiosun  
    OP
       76 天前
    @Leviathann 真的逛啊,而且除了日常 Issue 问答,还帮忙做一些游戏的本地化工作……可对 elegant 真的没印象。

    所以优雅到底是?
    uiosun
        5
    uiosun  
    OP
       76 天前
    @momocraft @hello2090 两位大佬过分了哈哈哈,感觉很迷惑,大家都是为吹而吹?
    liaohongxing
        6
    liaohongxing  
       76 天前   ❤️ 1
    php 就是不用框架也能撸,效率还不差 。但是撸出来的代码就自己能看懂 ,没得大型工程的样子 。

    如 Laravel DB 模块的什么获取器 修改器什么什么的 改个功能很规范 ,再加上 api 命名就很容易理解,专业的样子。
    就形成了优雅,主要对比原生撸
    terranboy
        7
    terranboy  
       76 天前   ❤️ 1
    @uiosun 应该是相对于老式框架 结构更合理 语法写起来更顺畅吧, 用过老的 会有这种感觉的
    uiosun
        8
    uiosun  
    OP
       76 天前
    @liaohongxing 有点理解了,不过还是心里怪怪的,毕竟 Yii 两代框架该有的都有了,Laravel 蹦出来就是最优雅的……

    除了包支持,毕竟那会儿没啥工程化的选品。
    twing37
        9
    twing37  
       76 天前
    我理解的是最大限度的帮助用户专注业务逻辑 /目标事.
    ywisax
        10
    ywisax  
       76 天前   ❤️ 3
    主要是没啥可吹了。
    说 stable 嘛,symfony 必然是第一;
    说 fast 嘛,slim/yii 一批框架在前面;
    说 simple 嘛,其实国产 thinkphp 真的挺 simple 的,国外的 ci 也足够 simple ;
    说 security 嘛,其实大部分现代 php 框架都比较安全;
    为减少对标竞品,自己新开一个“优雅”赛道这样就没人打得过。。。
    twing37
        11
    twing37  
       76 天前
    "这样写更优雅" 我理解就是写的字少.
    caqiko
        12
    caqiko  
       76 天前 via Android
    我觉得可以理解为 best practice
    kingjpa
        13
    kingjpa  
       76 天前
    虽然我很不喜欢 Laravel ,但除去性能不谈,不得不承认它是很不错的。
    dzdh
        14
    dzdh  
       76 天前
    喜欢更 [方便、简单看起来高级] 的实现某些功能吧。

    比如 go 的标准库封装的就很 [优雅]

    比如 php 的 autoload 的 [机制] 看来比每次都 require common.php [优雅]
    darklights
        15
    darklights  
       76 天前
    现在开源项目流行面向 star 编程,怎么可能是新名词呢。至少 Goland 表示不服。


    按我的理解,如果 api 设计得比较流畅 fluent 和符合直觉 intuitive ,差不多可以在 readme 里吹优雅了。
    james122333
        16
    james122333  
       76 天前 via Android
    因为他们对优雅这个字有误解
    pengtdyd
        17
    pengtdyd  
       76 天前   ❤️ 2
    请描述一下什么是《美》
    james122333
        18
    james122333  
       76 天前 via Android
    易学易修改简单化才是
    开个坦克
    james122333
        19
    james122333  
       76 天前 via Android
    开个坦克一点都不从容哪能叫优雅
    顶多你花时间深入熟悉以后稍微有举重若轻的感觉 不过也就一点点
    haoliang
        20
    haoliang  
       76 天前
    还有个烂大街且含义不明的形容词 “modern”
    lithiumii
        21
    lithiumii  
       76 天前 via Android   ❤️ 1
    可能是语言的问题,假如是 Python ,大家就把这种无以名状的好称为 Pythonic
    haoliang
        22
    haoliang  
       76 天前
    不吧,pythonic 类似于 idomatic ; python 这边对标的有 for humans™
    LeeReamond
        23
    LeeReamond  
       76 天前
    @lithiumii 感觉上 python 式一般强调的是表述上的短,或者表述上接近自然语言,通常来说达到这个标准了也就优雅了,但是也存在过分追求精简而导致可读性变差的情况,导致不优雅,所以优雅与 pythonic 应该不是同等含义
    jay4497
        24
    jay4497  
       76 天前
    就是 好 的代用词吧,就好比我只会说牛逼,词汇多的人就会用更好听的词,不至于这么较真的吧。。。
    panlatent
        25
    panlatent  
       76 天前
    说优雅倒也没啥毛病,在 Laravel 刚到来 /火起来的那阵,它开发体验对比其他 PHP 框架确实有明显的改善。

    现在优雅、现代、XXX 哲学,这些词都被用烂了。但 “现代” PHP 就是比曾经的 PHP 更规范、更工程化,更注重开发体验。
    james122333
        26
    james122333  
       76 天前
    @jay4497
    那应该直接说好 说的高大上却用起来绑手绑脚叫优雅...

    @panlatent
    php 开发体验一直以来都不错 胡写就当我没讲 自干一个框架是很快的事情 新版函数有类型判断就更不用说了
    panlatent
        27
    panlatent  
       76 天前
    @james122333 那可能对开发体验的判定标准不一样
    chouqiu
        28
    chouqiu  
       76 天前
    应该就是:可读性、模块化、易维护
    iamzuoxinyu
        29
    iamzuoxinyu  
       76 天前
    Laravel 设计灵感是源于 Ruby on Rails 的,放在它出生的时代,不论是『约定大于配置』的思想,还是 API 设计、命名上,确实是摆脱了 PHP 很多糟糕的东西,另外对 Composer 的生态也有挺大的推动。说优雅也不算过分,只是代价就是出错就是 20+层的调用栈。

    另外一个逸闻:可以看 Laravel 源码的注释,这个作者有强迫症,一定会把注释结尾写成阶梯递减的形状…

    但不管怎样也改变不了 PHP 的设计是坨屎的本质。Laravel 所作的一切都只是让这坨闻起来不那么臭。
    seth19960929
        30
    seth19960929  
       76 天前
    优雅具体意思:(指物)优美雅致
    用了三年+ Laravel, 我觉得主要体现在这几点(哈姆雷特理解法)
    1. 工程化的目录设计(君不知以前 PHP 有多随意, 其它语言也是, 除了恶霸 Java)
    2. 代码, 语义 API 设计, PHP 原生有很多函数为了向下兼容, 导致难以理解, 特别是参数位置等等
    3. 开发体验, 你写代码的时候用起来像是一位作家(优化的作家)
    4. 文档 (用过很多 Golang 的框架, 在文档这一方面, 真的是用起来让人头疼, 只管代码进步, 不管文档的进步)
    seth19960929
        31
    seth19960929  
       76 天前
    @iamzuoxinyu 哈哈哈, 这个阶梯注释.
    public function registerFactory()
    {
    $this->app->singleton('view', function ($app) {
    // Next we need to grab the engine resolver instance that will be used by the
    // environment. The resolver will be used by an environment to get each of
    // the various engine implementations such as plain PHP or Blade engine.
    $resolver = $app['view.engine.resolver'];

    $finder = $app['view.finder'];

    $factory = $this->createFactory($resolver, $finder, $app['events']);

    // We will also set the container instance on this view environment since the
    // view composers may be classes registered in the container, which allows
    // for great testable, flexible composers for the application developer.
    $factory->setContainer($app);

    $factory->share('app', $app);

    return $factory;
    });
    }
    seth19960929
        32
    seth19960929  
       76 天前
    一个方法两个阶梯
    maddot
        33
    maddot  
       76 天前
    为了吐槽而吐槽
    THESDZ
        34
    THESDZ  
       76 天前
    个人理解的优雅就是, 简洁高效,且可读性强。
    THESDZ
        35
    THESDZ  
       76 天前
    @THESDZ # 34 大概翻译一下,就是
    1.代码整洁,没有多余的部分,例如 userService.get(id)而不是 userService.getByID(); userService.findByName(name) 而不是 userService.findByUserName(username)
    2.小而美,比如 findByName 和 findByCode 不会耦合成一个
    3.设计不会反人类(即,一眼看上去就知道写的啥,符合业界主流的标准,比如 GET xxx/{id} DELETE xxx/{id})

    以上纯属个人理解。
    wonderfulcxm
        36
    wonderfulcxm  
       76 天前 via iPhone
    都是噱头,就像吹 go 言必心智负担低,听得都麻木了…
    james122333
        37
    james122333  
       76 天前
    @panlatent
    你有编程思想加上 php 的易用写的就很畅快了 laravel 说实话那一堆东西你自己实现都可以更简单效能更高

    至于楼上一堆说有多优雅(听起来是认为有规范就是优雅 然而哪个框架没规范...) 文档多好(你写 php 只要有 php 官方文档就可以写了 发行版甚至有打包 想实现什么就实现什么)
    就...
    tabris17
        38
    tabris17  
       76 天前
    优雅就是可以少写代码
    jaggle
        39
    jaggle  
       76 天前
    @iamzuoxinyu
    @seth19960929 这个家伙还把命名空间按长度从短到长排序,要是没有 ide 优化导入,我觉得这不应该是人应该干的事
    seth19960929
        40
    seth19960929  
       76 天前
    @james122333

    1. 有规范也不一样. 我自己写的框架, 规范能和一个社区或者成熟的比吗.
    2. PHP 那个叫做函数 API, 别人的是使用手册(所以对应的应该是 PHP 入门教学等等之类的)
    3. 自己实现更加简单的? 这个真的无话可说. 别人那个代码都是白写的了.
    Laussan
        41
    Laussan  
       76 天前
    高斯绝妙定理对高斯曲率是内禀性质的证明可称优雅。
    iosyyy
        42
    iosyyy  
       76 天前
    @wonderfulcxm 我前几天还看到有拿 go 和 java 比的也不知道哪来的自信..天天吹那低心智满屏幕的 err 不知道哪低心智了
    panlatent
        43
    panlatent  
       76 天前 via iPhone
    @uiosun laravel 称得上是优雅,我是 yii 用户 但我觉得更能代表 yii 的词是:实用
    mhqschen
        44
    mhqschen  
       76 天前
    我一直以为优雅这个词是《间谍过家家》带火的~
    fuchish112
        45
    fuchish112  
       76 天前
    在命名规范,语义化方面确实比其他 php 框架要好一些
    lovepplforever
        46
    lovepplforever  
       76 天前
    laravel 抄袭 rails 的
    blless
        47
    blless  
       76 天前
    @iosyyy #42 现在满屏还在说 Go 的 err 是我最不能理解的事,有异常本来就是司空见惯的事情,你不处理不代表异常就消失了,处理少了,只能说你的错误在哪个不知道的环节被吞了而已。
    我现在看见 Java 代码的 try catch 就害怕,有些甚至都不是新人,遇见异常就无脑 catch ,函数签名基本看不见几个 throw 的。
    blless
        48
    blless  
       76 天前
    要我说 Go 优雅,肯定是 defer 跟协程了。defer 现在不知道有啥语言支持,反正 Go 里面是真的优雅跟省心。协程就不用说了,事实证明这一套 go select channel 设计,我反正还没看见别的语言能说超过 Go 的。
    iosyyy
        49
    iosyyy  
       76 天前
    @blless 有异常并且把异常消除才是最好的办法一般情况下 java 的异常都统一处理了 而 go 的异常直接放在返回值里面才是最蠢的 我返回一个 err 下面所有的函数都需要对不同的 err 都接收 而 java 我直接 catch 或者直接抛出去统一处理就行了 而你说的 defer 实际上写起来也相当的乱 一旦我 defer 调用的方法返回有 err 那处理起来是相当的费劲
    blless
        50
    blless  
       76 天前
    @iosyyy #49 “有异常并且把异常消除才是最好的办法”,虽然很多观点是自由心证自说自话,但这句真的没法苟同的。“Let it crash”也算 Go 设计哲学之一,一开始也不算认同。Bug 处理多了,血泪教训之下对 Go 某些设计还是觉得入木三分。从这点出发,Java 如果要认真处理每个异常错误的话,也得一个一个函数 throw 而且加上签名,真的比满屏 err 好不到哪。 不过 Java 语法糖多,用修饰处理异常啥的方法手段确实比较多且节省时间。其他就不多说了,语言流行自有他的道理,讨论多了也累。
    1988chg
        51
    1988chg  
       76 天前
    起码是相对规范吧。
    string2020
        52
    string2020  
       76 天前
    如果一个普通人看到一个东西觉得舒服,觉得可以学习,觉得得体,那这个东西就是就是优雅的
    Felldeadbird
        53
    Felldeadbird  
       76 天前
    个人认为:某版本引入了 强大又实用的语法糖。 语法糖一看就是一种糟粕,书本上说语法糖要慎用。 经过转译: 新版引入优雅的编码方式。
    bestwaytowait
        54
    bestwaytowait  
       75 天前
    现在 modern 都快不够用了,现在要 post-modern 。马上就不知道该用什么词了
    liuxu
        55
    liuxu  
       75 天前   ❤️ 1
    既然都是 phper ,就以你过去曾经提过的 2 个技术问题来回答

    第一个:如何生成“连贯的数据”用于自动化测试? https://v2ex.com/t/814879
    解决你这个问题,在 laravel 中只需要定义相关 model 和 factory 即可,https://laravel.com/docs/9.x/database-testing
    而语法定义非常简单直观:
    class BuildingFactory extends Factory
    {
    public function definition()
    {
    return [
    'user_id' => User::factory(),
    'city_id' => City::factory(),
    'type' => $this->faker->randomDigit(),
    ];
    }
    }
    以上建筑 factory 定义了与 user 和 city 的关系,创建建筑会自动创建对应的 user 和 city ,也可以用其他链式语法反着创建


    第二个:怎么让一个任务在发起后的第 6 个小时,自动执行? https://v2ex.com/t/787949
    这个问题你可以使用 laravel 的调度器,去处理当前超过 6 小时的任务表即可,https://laravel.com/docs/9.x/scheduling
    $schedule->job(new BuildingSomting)->everyMinutes();

    更常用的,你可以使用队列,通知和任务模块处理此事: https://laravel.com/docs/9.x/queues
    ProcessPodcast::dispatch($buildingPodcast)->delay(now()->addHours(6));

    回到你的问题,什么是优雅"elegant syntax",就是用非常直观易懂的语法来实现工程任务,laravel 是个工具完备的 web 框架,不需要为了技术方案发帖询问

    楼上有人说,书本上说语法糖要慎用,这里我同样引用书上说的:尽信书不如无书,近十年各类编程语言的发展,大量语法糖的加入,就是为了让代码更加通俗易懂
    james122333
        56
    james122333  
       75 天前 via Android
    @
    感谢
    Reply 40
    seth19960929
    james122333
        57
    james122333  
       75 天前 via Android
    @seth19960929

    基本上一堆既有框架使用派都跟你一样想法
    认为自己写的不成熟 然而你并不需要该框架全部功能(含哲学性功能) 一些功能也有其它实现方式 php 原生就含有丰富的功能 我只是在表明你跟据原生手册实现一个体系一个框架并不难 laravel 效能差有目共睹 很多人讲的优雅其实封装一下完全不会差过它 并不是很凸出的特点
    panlatent
        58
    panlatent  
       75 天前 via iPhone   ❤️ 1
    @james122333

    造框架一事上,并非如此你说的这样“简单”。先不说成不成熟,有没有人用这些问题,甚至不考虑从头造,就单纯用现有成熟度高的库作整合,拼一个框架,编码和思考的工作量并不低。

    设计模式、编程思想、工程实践,算法 结合上语言的特点,这些落地并且弄的圆润舒适我觉得是相当难的。

    虽然说有个玩笑话说没自己写过一个框架都不好意思学过 PHP ,但这玩意真是自己写着玩没问题,自己用没问题,甚至按公司业务造一个也没问题。 但要是真弄个通用的框架,难。总不能为了框架而框架吧,大多数人也没那个精力,写出来不能解决一定问题,还不如把时间拿来赚钱陪陪家人
    haoliang
        59
    haoliang  
       75 天前
    哈哈,都没人在意我这个拼写错误: idiomatic
    kaiger
        60
    kaiger  
       75 天前
    优雅?
    大概是我一只手端着咖啡小抿一口,一只手在键盘上像弹钢琴一般地有节奏地敲着我的 24k 纯金键盘,在电脑屏幕上输出 "hello world" ,然后感叹一声,“真累。”
    james122333
        61
    james122333  
       75 天前
    @panlatent
    很简单 重点在于你了不了解这技术背后的原理 思路清晰的状态下写一个非常快
    也不用什么现有的库 因为 php 本身就有 不用 cgi 可以 自写一个实现可以(如楼上说的 scheduler) 很多需要的东西 php 早就提供了 心理有谱就行
    设计模式就不用说了 这是类似围棋定石的东西 只是前人根据一些经验总结一些应用范例 不少人会定石也是一蹋糊涂 编程思想是根据框架不同而异 你有条理有规范生出来一个就差不多会有的东西 工程实践那细节了 算法本身与框架关联不大 而且你看了下 laravel 它像是有算法关联嘛... 想太复杂无中心创意思想肯定觉得难
    这是大而全思想导致 基本上多数公司用的技能大同小异你简单写一个套用在其他公司基本上是没问题的(尤其对 web 来讲) 如果有额外需求那只是额外实现而已 如果你框架本身就考虑到扩充 那肯定是没问题的 做了好几次完全可行 甚至一些框架没有的功能都可以 你用现有框架思路会解决方案非常局限 甚至解法都烂大街了 看久就会知 至于自写框架当然是为了往后节省时间 因为你想要根据特殊需求解决并且迎合该框架使用逻辑是非常需要思考的 乱解就会与现有屎山一样
    seth19960929
        62
    seth19960929  
       75 天前
    我见过不用框架派怎么实现以下功能的:

    1. Scheduler
    Linux 机器上的 crontab 几十行脚本任务, 写代码的人和运维都懵逼(框架提供统一代码管理定时任务)
    2. ORM && 模型关联
    Laravel 的 model 我就不多说了, 作者都说过这个 Eloquent 是他最花费时间的地方, 说实话就 PHP 自带的 PDO 就玩玩可以, 毕竟还不够抽象.
    模型关联难不难反正我用了好几个 Go 框架, 基本对于这个部分做的不怎么好(非 ORM 框架)
    3. Queue && 延时
    死循环 Redis (虽然 Laravel 也是这么做的, 但是你自己实现要做到可靠性保证), 高级一点知道用消息队列
    4. Cache && Session
    这一层相对于比较简单, 当时你要实现多个驱动的, File, Redis, DB
    现在的人觉得 Redis 真的很简单, 但是对于一个刚学编程的人, 没有什么比不用任何配置就能用 file 做缓存更实际的了
    5. View
    对于实现继承视图, 重写视图等等我觉得还是挺好用的功能(自己写内嵌 PHP 到 HTML 就知道多痛苦)

    Go 刚出来那会也说什么大道至简之类的话, 不用框架. 后面为了占领 WEB 领域还不是老老实实得有框架, 就原生的那个能做什么.
    即使是像 Gin 这种微框架(何况不用框架), 只适合大公司二开, 完全不适合企业级项目开发. 要什么数据库查询自己找库, 要日志自己找, 要个缓存中间件还要自己找, 更何况定时任务, 队列这些一大堆
    alexsunxl
        63
    alexsunxl  
       75 天前
    @kingjpa 不是,一个 web 框架,拼什么除去性能啊。
    不是商业产品只做玩具吗 (捂脸捂脸捂脸)
    james122333
        64
    james122333  
       75 天前
    @seth19960929
    1. 你只要知道 cron 的格式含意你就能做出一个一模一样的东西
    2. pdo 已经很方便 我也偏爱 想要物件关联 熟悉反射就可以 field 是 public 也可以不用反射
    3. 语言程度可以写个 queue 也不难
    4. 这个不讲了
    5. php 还有 heredocument 可以不用写内嵌 整一整就很好用

    go 的话同上 自己写也不错
    seth19960929
        65
    seth19960929  
       75 天前
    不敢多说, 什么都能做出来.
    花一个月, 还是一年? 一个月做出来然后用的时候很难用折磨自己吗.
    之后接手的人用框架有文档可以看这个方法干什么. 然后用你是只能去摸着石头过河.

    我读过计算机组成原理, 那去设计个个芯片. 我也曾熟读世界首富的赚钱理念, 成为下一个首富应该也不难. 我这就去赚钱, 不打扰各位了.
    james122333
        66
    james122333  
       75 天前 via Android
    @seth19960929
    技术上不难 基本的一两个礼拜就好了
    没人喜欢拿石头砸自己的脚
    自己写的不能有文档? 而且你先要求你框架外业务有文档再説 况且单步傻瓜除错没人不会
    这是两回事 写框架本来就是力所能及的 不是説首富不是想当就当 这论坛真的一堆奇葩类比
    yxx1993
        67
    yxx1993  
       75 天前
    @james122333 "Talk is cheap. Show me the code"
    lscexpress
        68
    lscexpress  
       75 天前
    吐槽:到底什么是“安全”? PHP 的新名词真是含义莫名……

    ( Ps:上一次给我留下印象的“安全”,还是安培保镖里的女网红)
    james122333
        69
    james122333  
       75 天前 via Android
    @yxx1993
    已经简易的做过了 并不需要 show 给你看
    可不可行自行判断 仰望是进步的阻力
    seth19960929
        70
    seth19960929  
       75 天前
    @yxx1993 老哥说得对
    @james122333 一两个礼拜你要是能实现这个好用的, 真当人家几百个人开源贡献代码就不如你. v2 的人真的什么不知天高地厚的人都有. 你说你超越作者我都信. 毕竟 v2 大神也有, 但是一说一周超越几百个人花几年做的东西.
    @lscexpress 相对于原生 PHP 容易 SQL 注入, csrf, xss 攻击, 而框架有这个支持
    james122333
        71
    james122333  
       75 天前 via Android
    james122333
        72
    james122333  
       75 天前 via Android
    @seth19960929
    我说的是基本的东西 剩下的多花时间都可以完成 效能好好维护 毕竟也不能讲的太死 保守估计 这些框架本来就一堆喷点了 别人也不是做佛心的 肯定不会做的完美 一群人开发跟一个人开发本来就不是一样的 来回沟通要时间 也不是一直都有空閑时间处理 然后可能后面还有人下指导棋 甚至商业考量 blahblahblah
    写的好过这些东西不难 大家都往完美迈进那就是内卷
    seth19960929
        73
    seth19960929  
       75 天前
    @james122333 得, 既然你这样认为, 我无话可说.
    magicdawn
        74
    magicdawn  
       75 天前
    优雅就是站着把钱挣了.
    lanlanye
        75
    lanlanye  
       74 天前
    这个形容确实很抽象,一般代表最佳实践 /好的封装 /可读性极高的代码 /或者其他什么东西,比如我就觉得下面这行代码可以用优雅来形容:

    3.days.after { do_task }
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2470 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 10:50 · PVG 18:50 · LAX 03:50 · JFK 06:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.