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

2020-07-28 08:45:54 +08:00
 tctc4869

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

7142 次点击
所在节点    程序员
54 条回复
paoqi2048
2020-07-28 10:43:55 +08:00
此时一名调包侠路过
whileFalse
2020-07-28 10:46:24 +08:00
@tctc4869

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

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

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

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

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

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

总之,你要想使当前焦点行不丢失,逻辑还是比较复杂的。一般做 web 的估计从来没有想过分页还有这么复杂的场景。
heiheidewo
2020-07-28 13:25:32 +08:00
apiboy 路过
wangyzj
2020-07-28 13:30:45 +08:00
轮子可以造
但更重要的是持续维护
leafre
2020-07-28 13:31:45 +08:00
造过轮子谁还混 V 站
cco
2020-07-28 14:00:19 +08:00
@tctc4869 即使有新的时间日期工具,那也有很多模板代码啊。再往高封装一层呗。
CoderGeek
2020-07-28 14:18:24 +08:00
大轮子没有 这一年写了不少小轮 都是自己用 三轮都算不上 - -
mccken
2020-07-28 14:24:47 +08:00
看了公司内部的 framework / lib,想自己也搞个轮子,搭建企业级基础组件,没有现有 step,现在的阶段是手动 copy 好的轮子,比如说 hutool, jooq, 一些好的 dataUtil, 反射,注解,事务等等,(容易忘记的也集成,相当于忘记怎么用了,直接看下自己写的“最佳实践”)。
abersheeran
2020-07-28 14:56:30 +08:00
造过挺多。一般不是没有满足需求的,就是我对现有的库不满意。大部分我都放在我 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
2020-07-28 15:04:44 +08:00
我用 netty 造了个 server,自己定义了一个 html 模板,渲染完吐出来,实现了一个 wap 页面 game
walsh
2020-07-28 18:00:52 +08:00
唯一一个有用户而且用户比较多的就是自己设计协议的一个 Windows 下以太网满速收发 socket,稳定跑了两年多了吧,现在公司所有下位机都是基于这个 socket 开发。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX