V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
绝不跟中二病患者辩论
justjavac
V2EX  ›  中二病

大家听说过 minggeJS 吗?看了介绍,好欢乐,我加了点弹幕( ̄▽ ̄)"

  •  
  •   justjavac · 2015-12-14 09:19:16 +08:00 · 24761 次点击
    这是一个创建于 3259 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了软件的介绍, QQ 空间的程序员转战 GitHub 了。我给加点弹幕吧,方便大家看:

    优秀作品 shearphoto 截图插件,本人又再推出国产山寨 JQUERY ,

    我很 NB ,这已经不是我的第一个优秀作品了。(老王卖瓜,自卖自夸)

    为什么我要开发一个山寨 JQUERY ?老实说我从来没用过 JQUERY ,正因为我反感JQUERY 。 为什么我反感,因为我完全有开发 JQUERY 的能力, JQUERY 的底层我都了如指掌

    我很反感 JQUERY ,因为我完全有开发 JQUERY 的能力。(连正确拼写 jQuery 的能力都没有)

    我开发插件一直都是用原生 JS ,大家可以看下我前面的作品 shearphoto 就是用原生 JS 写的。

    用原生 JS 的程序员,就是看不起你们用 jQuery 的。

    虽说我反感 JQUERY ,但是 JQUERY 却在前端界占有大量的用户份额,之后我有个想法,不如重新开发一个属于自己思想,自己架构的 JQUERY 。有了想法就要实现我山寨 JQUERY 之路

    但是,用 jQuery 的小白太多了,所以,我自己山寨一个。

    我给了他一个霸气的名字: MingGeJs ,

    没感觉很霸气啊。(明哥 JS ?)

    MingGeJs 是什么?它是我一个星期完成的作品,它是一个 JS 类库,它拥有和 JQUERY 相同的语法,相同函数,相同的函数用法, 但是动画,选择器性能,函数 效率都在 JQ 之上,同时兼容 IE 6 7 8 ,同时与 JQUERY 相兼容

    我很 NB ,一个周末——哦,看错了——是一个星期就完成了。(看来还是不够厉害)

    它的名字叫 MingGeJs , MingGe 就是我的大名, 一看到插件名字,就知道作者是我,知道它是国产的,让别人知道国产类库一样做得很出色,出众

    (我看了插件名字,怎么也不知道是你呢。后面语句倒是实话,看到名字,就知道是国产的)

    本人文化程度不高初中毕业!半句英文都不会,但是我相信只要肯努力一样可以实现自己的梦想

    比尔盖茨,乔布斯之流,根本没法和我比。他们都是大学辍学,而我初中就不上了。

    MingGeJS 的梦想有点大胆,就是在全球范围内,占据 JQUERY 百分之 50 以上的用户份额。 MingGeJs 已在 GIT 开源,欢迎各路前端高手对 MingGeJs 类库进行评测!

    (刚才特意去看了 Zepto.js 的介绍,好像也没有这么说)

    我是 mingge 请支持国产 minggeJS 类库,因为我们都是中国人。

    前面唧唧歪歪说那么半天,归根结底还是,不转不是中国人。


    既然真么厉害,那就先膜拜一下吧。

    果然厉害, QQ 还是 VIP 的。
    地点 dalian ,这个单词好像是“大连”。
    neusoft 呢,东软。

    围观地址: https://github.com/drduan/minggeJS

    第 1 条附言  ·  2015-12-24 13:13:08 +08:00

    让它结束吧:issue#186

    172 条回复    2015-12-24 14:07:55 +08:00
    1  2  
    justjavac
        1
    justjavac  
    OP
       2015-12-14 09:21:22 +08:00
    刚刚手贱,点开了源码

    ```
    /* MingGEjs 框架 1.6
    *
    * 你会用 JQUERY ,那你也会用这个框架,语法都是一样的!
    *
    * MingGejs 选择器的执行速度,是 JQUERY 的十倍以上,绝对排行世界尖端
    *
    * 作者:明哥先生 --QQ399195513 QQ 群 461550716 官网 www.shearphoto.com
    */
    ```
    vitovan
        2
    vitovan  
       2015-12-14 09:28:37 +08:00   ❤️ 1
    ooTwToo
        3
    ooTwToo  
       2015-12-14 09:28:59 +08:00
    233333 地址栏的 ID 亮了
    hussion
        4
    hussion  
       2015-12-14 09:29:53 +08:00
    已醉
    heian0224
        5
    heian0224  
       2015-12-14 09:32:10 +08:00 via Android
    看了下,有点像 jQuery 啊,有大牛看看他的选择器比 sizzler 比咋样?
    ooTwToo
        6
    ooTwToo  
       2015-12-14 09:32:17 +08:00
    感觉还是有点实力的。
    polandeme
        7
    polandeme  
       2015-12-14 09:32:38 +08:00
    这不是 叶良明 吗....
    kassadin
        8
    kassadin  
       2015-12-14 09:34:08 +08:00
    就是 QQ 的锅咯
    unique
        9
    unique  
       2015-12-14 09:34:42 +08:00
    噗,已醉。。
    elya
        10
    elya  
       2015-12-14 09:35:05 +08:00
    我为什么想起了叶良辰???
    lizheming
        11
    lizheming  
       2015-12-14 09:41:10 +08:00
    @heian0224 https://github.com/drduan/minggeJS/blob/master/MingGe_1.6.js#L631

    道理我都懂,可是用了 `querySelectorAll` 是怎么敢保证说兼容 IE6,7,8 的... 反正我是没看到有这个函数的定义...
    skylancer
        12
    skylancer  
       2015-12-14 09:42:08 +08:00
    这个所谓 MingGe 的语文老师也是死的比较早.. 你看 Readme 就疯了
    Unknwon
        13
    Unknwon  
       2015-12-14 09:44:18 +08:00
    > 我是 mingge 请支持国产 minggeJS 类库,因为我们都是中国人。

    看到这种词直接 block 项目。。

    另外,当大家都是小学生吗 0 0

    哈哈哈哈哈哈哈哈.........
    wangyun122
        14
    wangyun122  
       2015-12-14 09:46:37 +08:00
    进了官网 还在论坛看到这个。。槽点也很多
    http://www.shearphoto.com/bbs/forum.php?mod=viewthread&tid=2&extra=page%3D1
    theoractice
        15
    theoractice  
       2015-12-14 09:47:17 +08:00
    shearphoto 做得不错啊。
    hronro
        16
    hronro  
       2015-12-14 09:49:41 +08:00
    这个确实是溜到不行,虽然没看他的代码写的怎样,但我真的想笑
    jin5354
        17
    jin5354  
       2015-12-14 09:50:56 +08:00   ❤️ 1
    学会了新姿势,不 star 不是中国人!
    nimingyonghu
        18
    nimingyonghu  
       2015-12-14 09:51:31 +08:00   ❤️ 5
    https://raw.githubusercontent.com/drduan/minggeJS/master/MingGe_1.6.js

    作者对原生 js 的函数,事件模型,DOM 操作,事件监听器机制都是有一定了解的,代码方面也没有 tab 和空格混用,还配有规范的注释,逻辑也是很清晰,目测甩 iV2EX 上大部分水逼几条街吧.
    lizheming
        19
    lizheming  
       2015-12-14 09:52:06 +08:00
    各位…… PR 也有亮点…
    lizheming
        20
    lizheming  
       2015-12-14 09:53:38 +08:00
    @nimingyonghu 前面 8 行那个注释就叫..... 规范……的……注释……了?
    sox
        21
    sox  
       2015-12-14 09:53:45 +08:00
    @nimingyonghu 规范的注释?你是指开头的介绍吗。。
    TTry
        22
    TTry  
       2015-12-14 09:54:01 +08:00
    以下内容截取自 @wangyun122 分享的链接:
    “//取回相对路径,不懂原理的话,你不要改动哦,否则你又鸡巴痛了”
    “//后端处理地址,保证正确哦,这是常识,连这个地址都能写错,你就是菜 B ,已经在本版本中帮你加入相对路径,你基本不用改这里了”
    “//比例截图, JS 端也要相应设置哦,不然系统会给你抱出错误,不设比例填 0 ,如填比例 : 3/4 代表宽和高的比例是 3/4(3 除以 4 的意思懂吗,菜菜,你可直接填 0.75 ,没错)”

    虽然你写的是不错但是面对这个注释我该用什么表情才好......
    jjplay
        23
    jjplay  
       2015-12-14 09:55:06 +08:00   ❤️ 1
    吐槽归吐槽,但是不要嘲讽,我很佩服也很支持这样做的人,上面说的 querySelectorAll 的兼容问题 他在开头里写了 ifQuery 是不是为了兼容... 我也是粗略的看了看
    sox
        24
    sox  
       2015-12-14 09:55:52 +08:00
    @lizheming 233 那 PR 里是机器人吗,全是 +1 ...
    jjplay
        25
    jjplay  
       2015-12-14 09:57:25 +08:00
    @TTry 我也是哭笑不得啊....
    Mcatt
        26
    Mcatt  
       2015-12-14 09:58:38 +08:00
    > 它是一个 JS 类库,它拥有和 JQUERY 相同的语法,相同函数,相同的函数用法, 但是动画,选择器性能,函数 效率都在 JQ 之上,同时兼容 IE 6 7 8 ,同时与 JQUERY 相兼容

    跑个分?贴一下跟 jQuery 速度比较的结果图?
    MyFaith
        27
    MyFaith  
       2015-12-14 09:58:58 +08:00
    @justjavac 为什么我感觉到处留 QQ 的都是非主流杀马特,和那些技术不高的人?
    justjavac
        28
    justjavac  
    OP
       2015-12-14 10:01:16 +08:00
    @sox PR 太亮了

    #1 https://github.com/drduan/minggeJS/pull/1/files

    - return system.insertHTML.aply(this, arguments);
    + return system.insertHTML.apply(this, arguments);

    aply ---> apply
    justjavac
        29
    justjavac  
    OP
       2015-12-14 10:02:13 +08:00
    #2 https://github.com/drduan/minggeJS/pull/2/files

    elem[on + "eveName"] = null;
    elem["on" + eveName] = null;
    daben1990
        30
    daben1990  
       2015-12-14 10:04:39 +08:00
    cmdFun: function(cmd) {
    cmd = D.trim(cmd);
    switch (cmd) {
    case "外前":
    case "beforeBegin":
    cmd = "beforeBegin";
    break;

    case "外后":
    case "afterEnd":
    cmd = "afterEnd";
    break;

    case "内前":
    case "afterBegin":
    cmd = "afterBegin";
    break;

    case "内后":
    case "beforeEnd":
    default:
    cmd = "beforeEnd";
    break;
    }
    return cmd;
    },


    这段代码,碉堡啊。。。
    oott123
        31
    oott123  
       2015-12-14 10:05:33 +08:00
    目瞪口呆
    目瞪口呆 x2
    目瞪口呆 x3
    whwei
        32
    whwei  
       2015-12-14 10:05:41 +08:00
    谁能告诉我他为什么要“开发一个山寨 JQUERY ”,读了 3 遍没看懂。
    banri
        33
    banri  
       2015-12-14 10:07:51 +08:00
    就想知道十倍性能是怎么得出的………………

    看了下源码还是蛮好理解的,但似乎没有 jQuery 那样的模块化支持机制、传让$以及插件接口
    没怎么仔细看,感觉除了中二了点也没什么吐槽的地方,技术感觉还是可以的
    fuxiaohei
        34
    fuxiaohei  
       2015-12-14 10:09:18 +08:00
    还是 jQuery Lite 的感觉,还差好多东西

    还是要支持一下
    lizheming
        35
    lizheming  
       2015-12-14 10:09:36 +08:00   ❤️ 1
    @jjplay 并不是,整个代码几处出现的 ifQuery 都没有对这个 selector 进行补完,而且 selector 内部实现也没有这个判断。
    banri
        36
    banri  
       2015-12-14 10:10:39 +08:00
    @oott123 ……………………

    好吧,当我啥也没说…… -_- ||
    zkd8907
        37
    zkd8907  
       2015-12-14 10:11:04 +08:00
    QQ 空间什么鬼?
    overtrue
        38
    overtrue  
       2015-12-14 10:17:08 +08:00
    已经笑晕了,谁来救救我。。。
    overtrue
        39
    overtrue  
       2015-12-14 10:22:03 +08:00
    @sox 而且 PR 的顺序还是一致的,我已经跪了,,难道单独注册这么些人来+1 的吗,哈哈
    crs0910
        40
    crs0910  
       2015-12-14 10:23:37 +08:00
    阿里一群人在 pull request
    denghongcai
        41
    denghongcai  
       2015-12-14 10:24:34 +08:00
    PR 里四个淘宝的前端真是够了 233333
    yxaaa123
        42
    yxaaa123  
       2015-12-14 10:24:41 +08:00
    这么狂容易被虐
    yxaaa123
        43
    yxaaa123  
       2015-12-14 10:29:12 +08:00
    @crs0910 淘宝的人这么热心。。
    wdhwg001
        44
    wdhwg001  
       2015-12-14 10:30:32 +08:00
    看了两分钟代码。

    第 95 行:
    model = "string" == typeof model && /^linear$|^ease$|^ease-in$|^ease-out$|^ease-in-out$|^cubic-bezier\s?\(.+\)$/.test(model) ? model: "ease-out";

    第 409 行:
    var of = typeof parameter;
    if (of === "string") return '"' + parameter + '"';
    if (of === "number") return parameter;
    var types = this._type_(parameter);
    if (types === "[object Object]" || types === "[object Array]") {
    return false;
    }

    @nimingyonghu 长到 1080P 都显示不全的渣正则和 if 后面不加大括号也算是你所谓的逻辑很清晰吗(

    不过不得不承认,这样的代码质量能凑合着写 1k+行不崩逻辑重来也算是天才了。
    ynyounuo
        45
    ynyounuo  
       2015-12-14 10:34:00 +08:00
    PR 笑死个鬼的了呀………………
    +1
    +1
    +1

    哈哈哈哈哈哈
    crs0910
        46
    crs0910  
       2015-12-14 10:34:07 +08:00
    还是表示佩服
    usb
        47
    usb  
       2015-12-14 10:42:16 +08:00
    哈哈哈哈 不 star 不是中国人😂
    bzw875
        48
    bzw875  
       2015-12-14 10:44:46 +08:00
    比我厉害, star +1
    wdhwg001
        49
    wdhwg001  
       2015-12-14 10:49:36 +08:00
    第 1253 行:
    return document.createElement("canvas").getContext("2d") ? true: false;

    @oott123 目瞪口呆×3
    我还真恶趣味居然又看了两分钟代码…
    imdoge
        50
    imdoge  
       2015-12-14 10:53:27 +08:00
    @daben1990
    虽然不知道这代码是什么鬼(还带中文的。。)
    commit 一下是不是能成为贡献者

    cmdFun: function(cmd) {
    cmd = D.trim(cmd);
    var result = {
    "外前": "beforeBegin",
    "beforeBegin": "beforeBegin",
    "外后": "afterEnd",
    "afterEnd": "afterEnd",
    "内前": "afterBegin",
    "afterBegin": "afterBegin",
    "内后": "beforeEnd",
    "beforeEnd": "beforeEnd"
    }
    return result[cmd] || "beforeEnd";
    }
    Phariel
        51
    Phariel  
       2015-12-14 10:57:07 +08:00 via iPhone   ❤️ 1
    // 请在看到这行注释后三分钟内 star ,你就会有好运发生。。。
    hkongm
        52
    hkongm  
       2015-12-14 11:16:09 +08:00
    笑死了
    leeyuzhe
        53
    leeyuzhe  
       2015-12-14 11:25:10 +08:00
    佩服,比我厉害
    w88975
        54
    w88975  
       2015-12-14 11:34:47 +08:00
    @wdhwg001 1253 行并没有什么问题啊
    johnhsm2333
        55
    johnhsm2333  
       2015-12-14 11:37:32 +08:00
    语文老师死的早,描述写出来就是打算让人家笑的。而是说去描述这一个项目,所以才会给大家笑。

    踏实做人才是真。
    yxzblue
        56
    yxzblue  
       2015-12-14 11:44:36 +08:00
    看了下源码, JS 水平在我之上,我就不评价了...
    skylancer
        57
    skylancer  
       2015-12-14 11:50:18 +08:00
    @sox 看到你的 ID ,果断看了下注册时间,我好像懂了些什么哈哈哈哈...
    gulullu
        58
    gulullu  
       2015-12-14 11:55:31 +08:00
    和作者在一个群,链接已发,貌似在开源中国也被喷了, 2333
    hyuwang
        59
    hyuwang  
       2015-12-14 12:04:20 +08:00
    这种...充满了槽点却无力吐槽的感觉
    shearphoto 写的真不错啊

    ( QQ 空间版王垠的既视感。。。)
    oott123
        60
    oott123  
       2015-12-14 12:04:31 +08:00
    @imdoge
    cmd = D.trim(cmd);
    var translation = {
    "外前": "beforeBegin",
    "外后": "afterEnd",
    "内前": "afterBegin",
    "内后": "beforeEnd"
    };
    return translation[cmd] || cmd;
    sahrechiiz
        61
    sahrechiiz  
       2015-12-14 12:17:41 +08:00
    看代码就好 其他的只是行为艺术
    bramblex
        62
    bramblex  
       2015-12-14 12:26:10 +08:00
    @hyuwang 问题是王垠实力很强……
    bramblex
        63
    bramblex  
       2015-12-14 12:28:40 +08:00
    我基友也写了一个,没有用正则,兼容到 ie6 。 https://github.com/icymorn/morn-js
    codespots
        64
    codespots  
       2015-12-14 12:31:34 +08:00
    我靠,这是我们的群里的前成员带带大神啊,哈哈哈哈,火钳刘明!
    Troevil
        65
    Troevil  
       2015-12-14 12:35:48 +08:00
    @w88975 ... 这个 return 和 if(a== true) 差不多一个意思
    lolqqdd
        66
    lolqqdd  
       2015-12-14 12:49:04 +08:00   ❤️ 5
    SCaffrey
        67
    SCaffrey  
       2015-12-14 12:50:41 +08:00
    这并不是大连人的真正水平
    kimown
        68
    kimown  
       2015-12-14 12:51:38 +08:00
    比我强
    adamwang
        69
    adamwang  
       2015-12-14 12:53:45 +08:00   ❤️ 2
    难道只有我一个人第一眼看成了 Dr.Duang 吗。= = #
    yernsun
        70
    yernsun  
       2015-12-14 13:00:35 +08:00
    http://www.shearphoto.com/bbs/forum.php?mod=viewthread&tid=21
    不是 QQ 空间的程序员么?怎么失业了?
    bramblex
        71
    bramblex  
       2015-12-14 13:01:24 +08:00
    其实下面喷的人水平都不见得比这货好……
    bk201
        72
    bk201  
       2015-12-14 13:08:14 +08:00
    程序员中的凤姐?
    代码先不说,就意义来讲毫无意义的轮子。
    movtoy
        73
    movtoy  
       2015-12-14 13:17:43 +08:00
    有直播写代码的水平。。

    “口才好”
    nareix
        74
    nareix  
       2015-12-14 13:24:08 +08:00
    技术是不错,但一直不是很理解这类人的做法。现在英语已然是开源项目的唯一语言了,既然这么想当世界第一,花点时间学下程序员够用的英语很难么,难度还没四级大,又不是考托福雅思。

    如果 linux 邮件列表强制用芬兰语沟通,还有今天么。
    koi
        75
    koi  
       2015-12-14 13:26:54 +08:00
    @yernsun 为啥说他是 QQ 空间的程序员?
    cYcoco
        76
    cYcoco  
       2015-12-14 13:28:37 +08:00
    看不懂 JS 。。顶一个
    magicdawn
        77
    magicdawn  
       2015-12-14 13:33:12 +08:00
    多弗朗明哥~

    次回, 霸王 v.s 霸王, 霸气的对决
    leizongmin
        78
    leizongmin  
       2015-12-14 13:40:39 +08:00
    此贴必火,广告位招租
    aalska
        79
    aalska  
       2015-12-14 13:41:18 +08:00 via Android
    看不懂 js 。 不过感觉很牛逼
    branchzero
        80
    branchzero  
       2015-12-14 13:41:30 +08:00
    readme 一股中二气息啊,不过看了 js ,水平不低啊。
    还有 PR 里面几只 A 家的前端是什么节奏 2333333
    yernsun
        81
    yernsun  
       2015-12-14 13:51:44 +08:00
    @koi 他自己说的
    yangxiongwei
        82
    yangxiongwei  
       2015-12-14 14:00:19 +08:00
    @whwei

    >我是 mingge 请支持国产 minggeJS 类库,因为我们都是中国人。
    g0thic
        83
    g0thic  
       2015-12-14 14:09:44 +08:00
    ```
    find: function(Z) {
    var elem, i = 0,
    newD = new D(),
    R;
    if (R = optionColation(Z)) {
    while (elem = this.ObjArray[i++]) {
    circulateNode.call(newD, elem, R);
    }
    newD.ObjArray = removing(newD.ObjArray);
    }
    return newD;
    },
    ```
    看了几行,本人 js 渣渣, if while 判断里用一个 = 还是第一次见,求大神解释
    bramblex
        84
    bramblex  
       2015-12-14 14:12:42 +08:00
    @branchzero 但也不高啊……造这种东西其实大部分都是体力劳动,脏活累活
    w88975
        85
    w88975  
       2015-12-14 14:22:19 +08:00
    @Troevil
    return document.createElement("canvas").getContext("2d") ? true: false;
    这个函数名叫 "isHTML5" 用这种方式判断确实没错啊
    至于你说的 return if (a == true)并不存在 因为 document.createElement("canvas").getContext("2d")返回的并不是一个 bool 值
    oott123
        86
    oott123  
       2015-12-14 14:28:31 +08:00
    @g0thic 这个倒是没什么问题……相当于 R = optionColation(Z); if (R) ,只不过这么用有点别扭就是了……
    wdhwg001
        87
    wdhwg001  
       2015-12-14 14:28:33 +08:00   ❤️ 2
    @w88975
    先不说为何不用!!document.createElement("canvas").getContext("2d")
    也不说?true:false 是一个多么令人震撼和难忘的用法
    最基本的,如果 getContext 压根就是 undefined 的话,又该如何做到调用它呢…

    我输了,我居然在纠正这个…
    oott123
        88
    oott123  
       2015-12-14 14:29:18 +08:00
    @w88975 其实可以写成 return !!document.createElement("canvas").getContext("2d") 的……
    yolio2003
        89
    yolio2003  
       2015-12-14 14:40:27 +08:00
    好恶心
    g0thic
        90
    g0thic  
       2015-12-14 14:41:33 +08:00
    @oott123 看了下源码,发现这里就是一赋值,还以为是啥
    justjavac
        91
    justjavac  
    OP
       2015-12-14 14:44:21 +08:00
    justjavac
        92
    justjavac  
    OP
       2015-12-14 14:44:42 +08:00
    branchzero
        93
    branchzero  
       2015-12-14 14:46:05 +08:00
    @bramblex 会造轮子也比这里不少猴子水平高啦,虽说大部分是脏活累活,不过这也需要一些基础积累,还得考虑很多细节上的问题:)
    bramblex
        94
    bramblex  
       2015-12-14 14:49:20 +08:00
    @branchzero ╮(╯_╰)╭,那只能说明这里猴子的水平比较低……我基友去年也造了一个,真·支持到 IE6 的轮子,而且性能真·比 Jquery 高一点点。
    rannnn
        95
    rannnn  
       2015-12-14 14:51:02 +08:00 via iPhone
    @wdhwg001 你喜欢!!为啥所有人都要喜欢!!呢?
    Email
        96
    Email  
       2015-12-14 14:57:06 +08:00   ❤️ 1


    服!!
    neoblackcap
        97
    neoblackcap  
       2015-12-14 14:59:27 +08:00
    淘宝的前端太凶残了,作者快被玩坏了
    testisitok
        98
    testisitok  
       2015-12-14 15:01:17 +08:00 via Android
    如果真是初中毕业,能做到这水平,的确令人佩服
    suikator
        99
    suikator  
       2015-12-14 15:03:36 +08:00 via Android
    @w88975


    return !!(document.createElement('canvas').getContext && document.createElement('canvas').getContext('2d'));
    Lcys
        100
    Lcys  
       2015-12-14 15:04:35 +08:00
    我只听说过 GS.js
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 22:26 · PVG 06:26 · LAX 14:26 · JFK 17:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.