造过轮子的程序员们,你们创造过多少个轮子? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX    程序员

造过轮子的程序员们,你们创造过多少个轮子?

  •  
  •   tctc4869 2020-07-28 08:45:54 +08:00 7891 次点击
    这是一个创建于 1902 天前的主题,其中的信息可能已经有所发展或是发生改变。

    你们为什么要造轮子?是因为觉得现有轮子不好,无法满足,还是现有轮子根本无法做到。到底造过多少个轮子?这些轮子有多大?还是有多小

    第 1 条附言    2020-07-28 10:54:18 +08:00
    你们觉得什么样的轮子是比较优雅的?
    54 条回复    2020-07-29 15:53:19 +08:00
    zlu1123
        1
    zlu1123  
       2020-07-28 08:54:17 +08:00
    从来都只是用的路过
    kzfile
        2
    kzfile  
       2020-07-28 09:04:22 +08:00
    我造不出来
    cco
        3
    cco  
       2020-07-28 09:09:05 +08:00
    DateTimeUtils.java 之类的算不算? 算的话大约有 10 个吧
    wweir
        4
    wweir  
       2020-07-28 09:09:11 +08:00 via Android
    完整造的轮子不多,更多是包一层。
    因为很多轮子是真的不好用,但又没把握短时间能写个东西把旧轮子 PK 下去,包一层能提供个相对干净的使用方式
    xkzhangsan
        5
    xkzhangsan  
       2020-07-28 09:12:09 +08:00 via Android
    自己业余时间就造过几个,刚开始,需要不断向前辈们学习,不断完善项目。其中一个 xk-time .

    1.一方面是自己有一些需求,现有的轮子不太好用,自己造轮子,发布出来后,有很多人提了一些需求和建议,得到进一步的完善。

    2.我造的轮子非常小,只专注一个领域,日期时间工具,大的轮子需要耗费非常多的时间,需要团队合作开发。
    大家可以提一些建议。
    tctc4869
        6
    tctc4869  
    OP
       2020-07-28 09:18:54 +08:00
    @kzfile 调包侠?
    tctc4869
        7
    tctc4869  
    OP
       2020-07-28 09:20:08 +08:00
    @xkzhangsan
    @cco
    你们是 java 的吗?如果是的话,现在 java8 不是有新的时间日期体系工具了么?难道你们还用着以 Date 类位主的时间体系,用习惯了?
    Rwing
        8
    Rwing  
       2020-07-28 09:22:06 +08:00
    java 和 js 的轮子比较多吧。。。。毕竟语言表达力和基础库不多。。。。
    Hyouka
        9
    Hyouka  
       2020-07-28 09:22:26 +08:00
    大的也有小的也有.没有统计过...大到框架底层,小到方法函数;
    想要用的时候就去翻以前的代码...所以有时候会重复造
    supermoonie
        10
    supermoonie  
       2020-07-28 09:23:42 +08:00 via iPhone
    winio4J AutoChrome4J 还有最近在写的 mitmproxy4J 就这三个吧
    mathzhaoliang
        11
    mathzhaoliang  
       2020-07-28 09:43:13 +08:00   9
    我之前造过一个小轮子,可以用纯 python 在仅使用内置函数和模块的情况下几秒内生成几包含几千帧的演示算法的 gif 动画: http://pywonderland.com/gifmaze-cn/
    这个也是我人生第一个轮子。后来还造过一些,但是我觉得都没有这个有创意。
    whileFalse
        12
    whileFalse  
       2020-07-28 09:47:30 +08:00
    1. 就当前项目来讲,现有轮子过于复杂或过于简单或在项目中使用时不够优雅
    2. 没有类似的轮子,或者已有的轮子都不够知名
    raaaaaar
        13
    raaaaaar  
       2020-07-28 09:48:00 +08:00 via Android
    轮子是方的,还漏气
    qiutianaimeili
        14
    qiutianaimeili  
       2020-07-28 09:56:29 +08:00
    所以楼主只满足于用轮子?
    tctc4869
        15
    tctc4869  
    OP
       2020-07-28 09:57:06 +08:00
    @whileFalse 优雅的轮子,你认为哪些轮子使用起来优雅?为什么优雅,优雅的感觉在哪?
    leimao
        16
    leimao  
       2020-07-28 10:08:48 +08:00
    轮子是 library 的意思吗?
    whisky221
        17
    whisky221  
       2020-07-28 10:10:12 +08:00
    没造过,只会用

    就算是不好用的轮子,就修改修改,但也没有二次封装,惭愧
    libook
        18
    libook  
       2020-07-28 10:18:28 +08:00
    通常用第三方的轮子觉得有问题或满足不了需求会提 Pull Request,如果第三方轮子实现不了,或是阿里系的轮子,或没有对应的第三方轮子就自己造。

    一个原则是:社区维护的轮子因为经受了更多的检验,通常比自己造的稳定、高效。

    所以到现在自己造的轮子屈指可数,但是 Fork 和 Pull Request 比较多。
    LXGMAX
        19
    LXGMAX  
       2020-07-28 10:23:47 +08:00 via iPhone
    python 和 C#造了几个小工具代替人力重复工作
    rex0791
        20
    rex0791  
       2020-07-28 10:32:16 +08:00
    早期的时候针对项目做过一些小工具,比如说根据模板生成一些 java 代码。
    现在不需要了,有各种的 cli tools
    paoqi2048
        21
    paoqi2048  
       2020-07-28 10:43:55 +08:00
    此时一名调包侠路过
    whileFalse
        22
    whileFalse  
       2020-07-28 10:46:24 +08:00
    @tctc4869

    Flask 就是一个非常优雅的工程向轮子。工程轮子的优雅首先体现在接口设计:一看就懂,并且无法设计出比他更明确易懂的接口。我写 Web 的时候首选 Flask 框架。
    另外 Python 本身已经是个优雅的语言了,同样具有极易理解,短而清晰的优势(还是有些 sx 设计,比如变量作用域……)

    作为对比可以想想 Java 。为了静态编译废话一堆(相同的逻辑代码量得有 Python 的三倍不止吧);本来这也不是个坏事,我印象最深刻的是 Java 代码基本上能编译通过就能正确运行,而 Python 总要跑起来才发现自己有哪些手残或脑残打错。有充足的静态检查是企业级语言的优势,特别适合构建大型工程。然而 Java 程序员实在是厌恶了打这么多废话,发明了大量使用标签和动态反射的框架,于是 Java 程序也要跑起来才能确定正确与否了。那你说这是废个什么劲啊。

    再想想 Node,那个回调地狱能跟优雅沾上边吗。
    qwerthhusn
        23
    qwerthhusn  
       2020-07-28 10:46:47 +08:00
    任何一个“比较通用的”功能,都会先试图去找一下,而且基本上还都能找到。。
    DoodleSit
        24
    DoodleSit  
       2020-07-28 10:46:55 +08:00
    能自己造的坚决不用现成的轮子,wc,漏气。。。
    Doracis
        25
    Doracis  
       2020-07-28 10:52:11 +08:00
    早年不懂事的时候自己造过,造到一半发现有个正则怎么也写不好,百度发现这个工具类 人写的比我写的不知高了几百倍,顿时羞愧难忍,再也不提造轮子了。。。
    magen
        26
    magen  
       2020-07-28 10:58:12 +08:00
    常年内网开发,造了无数的轮子...
    Date 、String 、Xml 、Excel 、File 、Cache 、Route 、Parser(各种解析器)、ftp 、ssh(服务器远程 shell 操作)、crawler(爬虫框架)、task(定时任务框架),然后基于这些组合出好多应用层小工具...
    xuanbg
        27
    xuanbg  
       2020-07-28 11:23:57 +08:00
    造了一个分页控件的轮子,用到今天才发现原先做了很多的无用功……把那些无用代码删除后,终于自认为足够优雅了。
    pushback
        28
    pushback  
       2020-07-28 11:40:53 +08:00
    https://blog.csdn.net/mars_Q/article/details/107253254
    这种吧,喜欢用反射和注解,最近才想起来放到博客上,以前工作上都有十多个吧
    xkzhangsan
        29
    xkzhangsan  
       2020-07-28 12:19:37 +08:00 via Android
    @tctc4869 Java8 的已经非常好了,这个工具就是在 Java8 上面扩展出来的。

    https://github.com/xkzhangsan/xk-time

    xk-time 是时间转换,计算,格式化,解析,日历和 cron 表达式等的工具,使用 Java8,线程安全,简单易用,多达 70 几种常用日期格式化模板,支持 Java8 时间类和 Date,轻量级,无第三方依赖。

    这个工具比较像 Dateutil,因为 Date 仍然在广泛应用,所以,所有相关功能都兼容 Date 。
    tctc4869
        30
    tctc4869  
    OP
       2020-07-28 12:26:02 +08:00
    @xuanbg 分页的逻辑其实很简单,界面上就上一页下一页,跳转目标页,本质上都是一样的,对页码缓存变量进行改变,然后发上去请求就可以了。还搞什么显示 1 页,2 页,3 页,4 页,5 页。我觉得是多余的
    xuanbg
        31
    xuanbg  
       2020-07-28 13:20:37 +08:00
    @tctc4869 不是这么简单。你得考虑下面几个问题:
    1 、每页行数从 30 变成 50 时,你选中的第 3 页第 24 行变成了第 2 页第 34 行。反过来从 50 行每页变成 30 行每页也是一样。当然很多人觉得这个没有必要,但我觉得失去焦点很不友好。
    2 、列表里面添加了一行,顺序排列的时候你要使焦点跳到最后一页最后一行,选中新增加的一行,倒序排列的时候需要选中第一页第一行。
    3 、删除一条数据的时候,焦点自动切换到下一行(保持位置不变)直到最后一条数据。不是最后一页的时候,要重新加载当前页数据。当前页最后一条数据删除后要自动跳上一页最后一条。

    总之,你要想使当前焦点行不丢失,逻辑还是比较复杂的。一般做 web 的估计从来没有想过分页还有这么复杂的场景。
    heiheidewo
        32
    heiheidewo  
       2020-07-28 13:25:32 +08:00
    apiboy 路过
    wangyzj
        33
    wangyzj  
       2020-07-28 13:30:45 +08:00
    轮子可以造
    但更重要的是持续维护
    leafre
        34
    leafre  
       2020-07-28 13:31:45 +08:00
    造过轮子谁还混 V 站
    cco
        35
    cco  
       2020-07-28 14:00:19 +08:00
    @tctc4869 即使有新的时间日期工具,那也有很多模板代码啊。再往高封装一层呗。
    CoderGeek
        36
    CoderGeek  
       2020-07-28 14:18:24 +08:00
    大轮子没有 这一年写了不少小轮 都是自己用 三轮都算不上 - -
    mccken
        37
    mccken  
       2020-07-28 14:24:47 +08:00
    看了公司内部的 framework / lib,想自己也搞个轮子,搭建企业级基础组件,没有现有 step,现在的阶段是手动 copy 好的轮子,比如说 hutool, jooq, 一些好的 dataUtil, 反射,注解,事务等等,(容易忘记的也集成,相当于忘记怎么用了,直接看下自己写的“最佳实践”)。
    abersheeran
        38
    abersheeran  
       2020-07-28 14:56:30 +08:00   1
    造过挺多。一般不是没有满足需求的,就是我对现有的库不满意。大部分我都放在我 GitHub 上了。

    为了业务,写了一个中国行政地区的库,数据来自官方网站。github.com/abersheeran/china-region-data
    还是为了业务,又写了一个匹配 TLD 的库,github.com/abersheeran/onlytld
    又又又是为了业务,写了一个 ASGI 协议的限流器,github.com/abersheeran/asgi-ratelimit
    又又又又是为了业务,写了一个阿里云函数计算 API 接口转换,github.com/abersheeran/aligi

    github.com/abersheeran/a2wsgi 这是我写的 WSGI/ASGI 互转的库,这个库主要是 starlette 不肯合并我的 pr,我就自己独立出来用。
    github.com/abersheeran/index.py 这是目前最高性能的 Python web 框架,主要还是我和 starlette 有分歧,一气之下自己写完了。
    github.com/abersheeran/rpc.py 这个是为了娱乐,但是的确可用,测试用例什么的都是打满的。后面如果业务要上 rpc 我就打算用这个。

    这么一看,我自己比较满意的库还是有不少的哈哈哈。
    nutting
        39
    nutting  
       2020-07-28 15:04:44 +08:00
    我用 netty 造了个 server,自己定义了一个 html 模板,渲染完吐出来,实现了一个 wap 页面 game
    walsh
        40
    walsh  
       2020-07-28 18:00:52 +08:00
    唯一一个有用户而且用户比较多的就是自己设计协议的一个 Windows 下以太网满速收发 socket,稳定跑了两年多了吧,现在公司所有下位机都是基于这个 socket 开发。
    dustinth
        41
    dustinth  
       2020-07-28 18:27:43 +08:00
    不造轮子怎么进步? 哈哈.

    大部分的时候不是造轮子, 而是包装现有框架到特定的应用场景(引入默认选项或者砍掉用不到的通用选线), 减少重复.
    VDimos
        42
    VDimos  
       2020-07-28 18:37:58 +08:00 via Android
    用 rust 造了个开发 cli 的轮子,主要是觉得用 clap 这实在太麻烦了,就仿造 rocket rs 和 commander js 写了个 commander-rust 。
    用宏来写的,写完觉得对 rust 的理解又深了
    xkzhangsan
        43
    xkzhangsan  
       2020-07-28 18:44:11 +08:00 via Android
    @VDimos 造轮子会加深对语言的理解,看了 Java 日期时间 api 源码,发现写的非常好,学到很多东西。
    gamexg
        44
    gamexg  
       2020-07-28 18:46:19 +08:00
    没找到 go 的非 cgo 的嵌入式数据库。做一个项目时,头铁的写了个,虽然是半成品。
    VDimos
        45
    VDimos  
       2020-07-28 18:46:55 +08:00 via Android
    @xkzhangsan 是的,我造这个轮子很大的一部分原因,就是因为我对 rust 的宏理解太浅
    zicla
        46
    zicla  
       2020-07-28 18:48:31 +08:00
    用 golang 造了一个云盘,开源了。
    nimdanoob
        47
    nimdanoob  
       2020-07-28 18:53:08 +08:00
    造过 4 、5 个轮子, 造轮子的原因是需要在已有开源库的基础上做功能拓展,或者是开源库迭代和 bugfix 的速度满足不了公司的发展 所以需要 copy 一个然后自己维护。
    a62527776a
        48
    a62527776a  
       2020-07-28 22:54:33 +08:00 via iPhone
    https://github.com/a62527776a/vue-floating-action-button 前端的 fab 小轮子 之前用来找工作用的 没想到一直维护了很久 也收获了近 100star
    https://github.com/a62527776a/vue-dialog-x 这个弹窗小轮子 是我比较喜欢的轮子 已经非常成熟的在我工作中的项目里用起来了 这个弹窗代码结构参考了另一个开源弹窗的设计 学习了很多 按照 ios 设计复刻的很漂亮 也基本满足 h5 的各种弹窗需求


    开发开源项目 还是非常能锻炼水平的 会学习到很多设计上的东西
    maoxs2
        49
    maoxs2  
       2020-07-29 00:32:16 +08:00 via Android
    @gamexg bbolt(纯 go)还有 badger(可用 cgo 也可不用)。
    lizz666
        50
    lizz666  
       2020-07-29 08:55:09 +08:00
    ui 组件算吗?
    算的话 3 个,没啥技术含量
    不算的话就没有了
    xiaojun1994
        51
    xiaojun1994  
       2020-07-29 09:43:05 +08:00
    没啥用,练手写过,部分倒是在项目中用到过 https://github.com/xiaojun1994
    9dP06m83vIV00l72
        52
    9dP06m83vIV00l72  
       2020-07-29 13:27:56 +08:00
    袋鼠数据库管理工具( DBKangaroo ),正在造轮子。。。

    没亲自尝试过,永远也不知道造轮子的路上有多精彩。
    fgd
        53
    fgd  
       2020-07-29 13:45:16 +08:00 via iPhone
    @raaaaaar 哈哈哈哈哈 real
    jones2000
        54
    jones2000  
       2020-07-29 15:53:19 +08:00
    我造过 1 个, 金融图形库(js),和分析家语法指标执行器( js, py, c++)。https://github.com/jones2000/HQChart
    这个东西国内开源的就我一家,没有第 2 家。
    造轮子比较辛苦, 特别是多个语言版本移植, 学习强度比较大。 我前后化了 1 年左右才基本稳定完善。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2740 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:46 PVG 22:46 LAX 07:46 JFK 10:46
    Do have faith in what you're doing.
    ubao 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