peakviber

荷兰 Gov 根据要求公开身份验证 App 的源代码

  •  
  •   peakviber · Jan 18, 2023 · 9275 views
    This topic created in 1386 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Jan 19, 2023
    最初消息来源和截图来源:
    https://twitter.com/JeroenFrijters/status/1615204074588180481

    标题只是简单地翻译了一下
    78 replies  •  2023-01-20 13:17:15 +08:00
    sadfQED2
    sadfQED2
    Jan 18, 2023 via Android❤️4
    1
    挺好的呀,清晰易懂,比那些套了一层又一层最后循环了 800 次才输出几个点的代码好多了
    bubblegz
    bubblegz
    Jan 18, 2023❤️1
    2
    清晰即可
    crab
    crab
    Jan 18, 2023
    3
    🔵⚪ 这两个不复制的话怎么快捷打出来。
    murmur
    murmur
    Jan 18, 2023❤️3
    4
    这代码维护性无敌,以后需求一改还可以 OOXXXOOXXX 这样换花样
    zidian
    zidian
    Jan 18, 2023❤️2
    5
    清晰明了。想起之前看过一个判断闰年的,直接把未来的十几个闰年写死在一个 list 里
    hhjswf
    hhjswf
    Jan 18, 2023 via Android
    6
    这也叫挺好吗。。
    luob
    luob
    Jan 18, 2023❤️11
    7
    这段代码不是“挺好”,“也可以”,而是标准的最佳实践

    经常会遇到一些自作聪明的人把这样的逻辑继续抽象出一个函数来计算每 0.1 percentage 等于几个球,感觉自己能省好几行代码,实际上是蠢到家了。
    awalkingman
    awalkingman
    Jan 18, 2023
    8
    @crab 诶你这不是做到了嘛。帖子里是图片,复制都没得复制
    lakehylia
    lakehylia
    Jan 18, 2023
    9
    反正现在内存硬盘用不完,这段代码很好啊。
    hhjswf
    hhjswf
    Jan 18, 2023 via Android❤️4
    10
    @luob 这不是二极管吗,*10 取整就完了。。
    TWorldIsNButThis
    TWorldIsNButThis
    Jan 18, 2023 via iPhone
    11
    如果用 pattern matching 的 switch 就更 declarative 了
    luob
    luob
    Jan 18, 2023
    12
    @hhjswf 欢迎对号入座
    Jimmyisme
    Jimmyisme
    Jan 18, 2023❤️4
    13
    @crab Windiws 有个叫 IME 的功能。Win+v 是剪贴板历史; Win+; || win+.打开搜索面板. 直接搜 blue || white circle
    MAGA2022
    MAGA2022
    Jan 18, 2023 via Android
    14
    这都能吹
    gimp
    gimp
    Jan 18, 2023
    15
    清晰易懂,我觉得不错。
    NoOneNoBody
    NoOneNoBody
    Jan 18, 2023
    16
    有些看不懂……楼上的一些楼层
    那 ppm 该怎么写呢?
    urnoob
    urnoob
    Jan 18, 2023
    17
    最喜欢这样的代码了
    唯一的缺点 最后一行默认返回全白比较好
    mozhizhu
    mozhizhu
    Jan 18, 2023❤️5
    18
    完全不需要&&左边的判断
    kkkkkkhalil
    kkkkkkhalil
    Jan 18, 2023
    19
    @luob #7 不明白抽象函数的坏处,能指点一下原因吗?
    ikushi
    ikushi
    Jan 18, 2023 via iPad
    20
    @luob 不太明白这个“最佳实践”里的>判断是干什么用的?
    churchill
    churchill
    Jan 18, 2023❤️3
    21
    “最佳实践”可还行,逻辑都不讲了
    eris
    eris
    Jan 18, 2023❤️2
    22
    @luob 产品: 我们要显示更精准的进度,用 100 个球来显示
    AV1
    AV1
    Jan 18, 2023
    23
    我也有过同样的实现,但我不用人力一个一个地写,会另写一段代码来生成代码。
    Yourshell
    Yourshell
    Jan 18, 2023 via Android
    24
    看来我还是太菜了,想不出来该怎么吹这段代码。
    luob
    luob
    Jan 18, 2023❤️5
    25
    @NoOneNoBody
    @dingjs

    有一个从别人那里接手的陈年老项目,需求是把十个球改成一百万个球,你是希望原项目写的是上面那样的,还是这样一串?

    x = Int(Math.ceil(p*10))
    String.repeat("🔵" * x) + String.repeat("⚪" * (10-x))

    任何一个智力正常的人最多 0.5 秒就能知道这十行球写的什么,但是推明白这两行各位需要多长时间?
    simple2025
    simple2025
    Jan 18, 2023❤️1
    26
    居然是 C#
    iseki
    iseki
    Jan 18, 2023 via Android
    27
    10 个球有点多了,要是 3 个 5 个这么写我觉得还行
    iseki
    iseki
    Jan 18, 2023 via Android
    28
    主要是 3 个以内不容易写错看错,10 个一手滑就不好了。至于代码生成的还是歇一会儿吧,还不如拿 Math 函数凑合下

    @luob 这两行有个两三秒也看懂了,可按上例堆上个几十行我得仔细看有没有反直觉的条件,改时候也得小心翼翼
    iseki
    iseki
    Jan 18, 2023 via Android
    29
    顺带一提…你那两行写的不太对吧
    iseki
    iseki
    Jan 18, 2023 via Android
    30
    如果你们用 Math 函数写东西都是这种风格,我建议还是老老实实堆条件吧,起码不出错
    n18255447846
    n18255447846
    Jan 18, 2023
    31
    跟标题有什么关系?
    elfive
    elfive
    Jan 18, 2023 via iPhone
    32
    @luob 属于前期计划不足,后期写代码过度设计了。

    能完成当前设定的目标,而且足够简单,就足够了。当然前提是前期设计足够细致完善。
    mogita
    mogita
    Jan 18, 2023 via iPhone
    33
    @dingjs 放心,不是所有 PM 都怀揣着一颗和世界较劲的心。
    20015jjw
    20015jjw
    Jan 18, 2023 via iPhone
    34
    当年 obama care 的网页也就这水平
    政 @府外包嘛不能要求什么
    clrss
    clrss
    Jan 18, 2023❤️20
    35
    var get_rating_string = function(rating) {
    return "★★★★★☆☆☆☆☆".substring(5 - rating, 10 - rating);
    };
    NoOneNoBody
    NoOneNoBody
    Jan 19, 2023❤️1
    36
    @luob #25
    你想的点错了,这两行只适合一个项目,但不应只考虑眼前问题
    我写的话,会以 dict, enum 等等类似的格式传入,这样调用的人在构建参数的时候自然也清楚目的是什么
    因为问题的本质就是一一对应的选择,输入 a 输出 A ,使用的人理清出入的格式就够了,不需理会中间如何实现

    此题的话,传入 0.1 ~ 0.9 九个 breakpoint ,("🔵" * x) 组成的十个结果,以及测试值
    构建前面这两个参数的人自然清楚是做什么
    至于中间实现的代码,难读也没所谓,快速和高效更重要

    例如这个 python 小函数,我几乎全部项目都有用到,是个通用函数
    def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
    ... i = bisect(breakpoints, score)
    ... return grades[i]
    理解 breakpoints, grades 两个参数应该比四个 if 容易吧
    KMpAn8Obw1QhPoEP
    KMpAn8Obw1QhPoEP
    Jan 19, 2023 via Android
    37
    @clrss 妙啊 滑动窗口了
    binux
    binux
    Jan 19, 2023 via Android
    38
    @luob 任何一个智力正常的人检验#24 的正确性只用 2 秒,但是看完原文这十行需要多长时间?
    pikashi
    pikashi
    Jan 19, 2023 via Android
    39
    这代码不光简单易读,而且性能应该也是最高吧
    jaggle
    jaggle
    Jan 19, 2023 via iPhone
    40
    @enchilada2020 抱歉好像是你看懂了,能否解释一下,长度不够还能回到第一列取?
    manhere
    manhere
    Jan 19, 2023
    41
    人和代码有一个能跑就行
    rocksolid
    rocksolid
    Jan 19, 2023❤️5
    42
    大开眼界,这小学生代码也能吹一波
    Sezxy
    Sezxy
    Jan 19, 2023 via Android
    43
    @rocksolid 国外大师惊世之作
    rocksolid
    rocksolid
    Jan 19, 2023❤️3
    44
    还有吹性能的,就算是 20 年前这点性能区别狗都看不上
    lysS
    lysS
    Jan 19, 2023
    45
    @Jimmyisme 用自带的输入法,选择列表的最右边就有
    nevergotit
    nevergotit
    Jan 19, 2023
    46
    人家 10 秒钟写完代码回家陪孩子了,你还在这掰扯写的不够高级
    ncepuzs
    ncepuzs
    Jan 19, 2023
    47
    这也能吹,还“性能应该也是最高吧”……
    wwbfred
    wwbfred
    Jan 19, 2023
    48
    @luob 我希望采用的是"标准的最佳实践",毕竟把十个明文字符改成一百万个明文字符,那可太容易了。
    这个实践的优点还包括简单易读,一百万个字符,大家数一数就是知道是多少个了,完全不需要注释,也很好检查是否少了一个。
    KMpAn8Obw1QhPoEP
    KMpAn8Obw1QhPoEP
    Jan 19, 2023 via Android
    49
    @jaggle 我没太看明白你的问题是什么。。他定义了一个长度为 10 的字符串 然后从中取固定长度为 5 的子串 根据 rating 的值来决定起点 终点即是起点+5
    agdhole
    agdhole
    Jan 19, 2023
    50
    意大利面条
    wdwwtzy
    wdwwtzy
    Jan 19, 2023
    51
    竟然是用 C#的 xamarin 写的 ios 和安卓 app 。
    其实 C#可以使用模式匹配,达到更好的效果。
    ```
    return percentage switch
    {
    > 0.1 and < 0.2 => "1",
    > 0.2 and < 0.3 => "2",
    > 0.3 and < 0.4 => "3",
    ......
    };
    ```
    watzds
    watzds
    Jan 19, 2023
    52
    很优雅的代码,扩展性很强,比如大于多少分,圆圈换个颜色之类的
    badbye
    badbye
    Jan 19, 2023
    53
    我去荷兰是不是也能找到这样的工作
    lchynn
    lchynn
    Jan 19, 2023
    54
    @sadfQED2 的确这才是写给人来维护的代码。循环嵌套也就算了, 还用各种奇技淫巧,美其名为代码 geek ,压根是不想其他人正常读懂吧。
    Jirajine
    Jirajine
    Jan 19, 2023❤️2
    55
    难道重点不是标题里 gov 开源身份验证应用的源码吗
    iceheart
    iceheart
    Jan 19, 2023 via Android
    56
    简洁,高效,自注释,易维护,易排错。
    取舍恰到好处,不知道有啥可喷的。觉得不好的贴个你认为更好的版本呀
    Genshin2020
    Genshin2020
    Jan 19, 2023❤️3
    57
    楼主,你应该说国内的同事写的代码,这样大家的想法就一致了,你用洋大人的源码,肯定有牧羊犬的
    darknoll
    darknoll
    Jan 19, 2023
    58
    简单明快,舒服
    SimbaPeng
    SimbaPeng
    Jan 19, 2023
    59
    总有拿可读性来尬吹小学生代码的
    learningman
    learningman
    Jan 19, 2023
    60
    觉得可读性强的,盲猜是自己只会写这种代码
    Jimmyisme
    Jimmyisme
    Jan 19, 2023
    61
    @lysS 自带输入法 bug 很多(很多游戏里不能打中文)😂已经习惯搜狗+双拼了
    Lighfer
    Lighfer
    Jan 19, 2023 via iPhone
    62
    在能满足现有需求的前提下这代码没什么可挑剔的。
    至于有些人说产品经理之后要改成显示更精确的进度,这段代码改起来也很轻松,无论是什么人来改都没问题。
    在我看来,一个项目不必在每一个如此小的功能点都要设计得很复杂,所谓的可扩展应该是针对整个项目的局部,但不是局部到如此细节,更多的情况下是这段代码可能这辈子都不会动它了。
    最后,每个人的品味都不一样,单单这段代码我个人认为并不存在可挑剔的地方,更上升不到人身攻击的程度。
    叠个盾牌: 仅针对这段代码及这个帖子内容发言,不要拿我没看过项目中的其他代码说事,因为我真的没看。
    netabare
    netabare
    Jan 19, 2023 via Android❤️1
    63
    这哪里最佳实践了,扯性能,10 个 if 也不是没有代价的,说可读性,写代码的人一般情况下都懂小学数学,这种代码没有任何优势,而且一堆小于大于号粗心写错的可能性也不是没有。

    而且,如果传入的是负数怎么办?
    ramondoo
    ramondoo
    Jan 19, 2023❤️1
    64
    代码还是有些问题的
    ( 1 )参数小于 0 的情况处理不当
    ( 2 ) double 类型的参数与零比较方式有问题
    revlis7
    revlis7
    Jan 19, 2023
    65
    哪儿呢么多废话,就问一句,你就说这结果对不对吧!
    Genshin2020
    Genshin2020
    Jan 19, 2023
    66
    说一个冷知识点,蓝色字符长度为 2 ,白色字符长度为 1

    好了,继续讨论
    k9982874
    k9982874
    Jan 19, 2023 via Android
    67
    发现楼上有个看不懂 10 取模的程序员
    Genshin2020
    Genshin2020
    Jan 19, 2023❤️1
    68
    @netabare 我不知道多少人尝试自己优化一下,我尝试以后发现这样的办法也许真的是比较高效的方法。

    但是那些说这个代码好的,我怀疑他们没有自己去实现,单纯因为是洋人写的

    比如,蓝色字符长度为 2 ,白色字符长度为 1 ,这个关键点都没有人点出来
    Genshin2020
    Genshin2020
    Jan 19, 2023
    69
    console.log('🔵 ===>','🔵'.length)
    console.log('⚪ ===>', '⚪'.length)

    可以自己在控制台打印一下
    westoy
    westoy
    Jan 19, 2023
    70
    @Genshin2020

    也不一定, 🔵的 unicode 码是 128309

    支持 UCS4 的语言实现里是 1 个字长, 比如 python 、ruby 、haskell 、rust 、go(utf8.RuneCountInString)等等

    只支持 UCS2 的语言里是 2 个, 像 jvm 系、c#、node 等等
    moioooo
    moioooo
    Jan 19, 2023 via iPhone
    71
    js 里我也这么写的。
    一开始想着等逻辑理清楚,代码完成之后再吧打印改的简洁点
    后来回头看,感觉挺适合 review ,就留着了
    ccraohng
    ccraohng
    Jan 19, 2023
    72
    b.repeat(y ,b) + w.repeat(10 - y, 'w')
    在我这是一坨大便
    Genshin2020
    Genshin2020
    Jan 19, 2023
    73
    @westoy 原来如此,受教了,十分感谢。

    我是前端,JS 回家的路上想到解决方案,但是按照之前的答主,写出来也是对阅读不友好的方案。

    #35 的改版,只是计算公式符合我说的这种情况
    iikebug
    iikebug
    Jan 19, 2023
    74
    这样的代码都有人吹易读性的吗?
    adoal
    adoal
    Jan 19, 2023
    75
    当代程序员价值观众生相😃
    hhjswf
    hhjswf
    Jan 19, 2023 via Android
    76
    有内味了,把贾浅浅的屎屁尿放进高考阅读理解,想必各位大佬也能品出一番风味。别问,问就是蠢人欢迎对号入座
    lengyuqu
    lengyuqu
    Jan 20, 2023
    77
    国外的屎都是可以吹的😃
    zhlxsh
    zhlxsh
    Jan 20, 2023 via iPhone
    78
    看了下原文的推特机翻的标题:荷兰 gov 被迫发布其 DigiD 数字身份验证 iOS 应用程序的源代码。它是用 C# 编写的。

    我记得高中 pascal 写的字母塔也是用 for 循环
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2793 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 138ms · UTC 14:26 · PVG 22:26 · LAX 06:26 · JFK 09:26
    ♥ Do have faith in what you're doing.