duangsuse::Echo
717 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from duangsuse Throws
#recommended #Zhihu #statement 推荐一个类似的观点:https://zhuanlan.zhihu.com/p/43914842

这些对兴趣的专注和纯粹本应该是大学生在自己专业上该有的年轻的、百舸争流的样貌,如今却被年薪、房价和社会的物化价值观所左右。如果连我们国家顶尖大学的教育都摆脱不了物欲横流的浮躁,又如何完成国家民族集体人格的进一步塑造?在这种背景下,知乎上的这些编程语言爱好者们的所为有如夏日之凉风,让我意识到咱们国家始终有一群爱学习、爱思考、忠于兴趣的学生。他们的存在激励着我说出今天想说的话,希望让更少的学生被惋惜,让更多的学生受鼓舞。


愿你走出半生、归来仍是 CS lover。
然而终于是无法被掩护在象牙塔后面,到时候,可能不去考虑一些别的、现实的情况么... 羡慕那些好学生... 小时候就智力不错啊...

一找不到自己热爱事情的人是可怜人,不允许人们做自己热爱事情的国家是没有前途的国家。

如果想反驳,考虑一下 morisia 学姐他们(就是冰封他们)和现在部分(专门)去学 CS 的『大学生』们水平的差距
为什么这么说呢?


所谓的百度大佬是什么水平,上面 sleepwaling 几乎独自完成的 synthesizerV 和之前的几次技术送代是什么水平,什么叫大佬,谁能算大佬

当然也可以批判我不看现实,但上面已经澄明过了。
看完列表以后觉得怎么样
anonymous poll

我好菜啊 – 1
👍👍👍👍👍👍👍 50%

both – 1
👍👍👍👍👍👍👍 50%

大佬好多
▫️ 0%

👥 2 people voted so far.
又给 GeekSpec 写了个小工具(脚本),代码质量依然非常的智障,而且我明显既不考虑设计模式也没多想复用也没有什么高级的东西... 目前 Spectrum (对不起这个酷酷的名字)的打算是作为一个测试工具,以后的重构版本可能支持自己内建 DSL 解析器和更灵活的 API 客户端 endpoints 自动绑定
duangsuse::Echo
又给 GeekSpec 写了个小工具(脚本),代码质量依然非常的智障,而且我明显既不考虑设计模式也没多想复用也没有什么高级的东西... 目前 Spectrum (对不起这个酷酷的名字)的打算是作为一个测试工具,以后的重构版本可能支持自己内建 DSL 解析器和更灵活的 API 客户端 endpoints 自动绑定
./spectrum.rb spectrum_geekapk_v1b_api.json
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
Spectrum v0.1.0: usage: ./spectrum.rb <spec json file> [command]{show,licence,help,json}
[1] pry(#<ClientShowcase>)>
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
#FP 现在还没弄懂 Monad 是什么的 duangsuse 感到很难受。但至少稍微了解了一点 Functor,emmm... 🤔 (哭哭)
如果一个月以后还是这么菜的话,那每天晚上早点睡算了,至少我还可以靠脸吃饭(喷)就不用熬夜写代码了(迫 真 自 演)

(无力证明了...)

(瞎玩 inm 梗...)
duangsuse::Echo
又给 GeekSpec 写了个小工具(脚本),代码质量依然非常的智障,而且我明显既不考虑设计模式也没多想复用也没有什么高级的东西... 目前 Spectrum (对不起这个酷酷的名字)的打算是作为一个测试工具,以后的重构版本可能支持自己内建 DSL 解析器和更灵活的 API 客户端 endpoints 自动绑定
现在这个小工具效果还不错,大家可以在见到它的第一个版本,大家有 IDEA / gradle 什么环境的可以下载下来玩玩,目前可以玩这些:

[DuangSUSE@duangsuse]~/文档/geekapk_spring% ./spectrum.rb
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
Spectrum v0.1.0: usage: ./spectrum.rb <spec json file> [command]{show,licence,help,json,debug}

使用 ./spectrum.rb <spec file> json 来自动解析生成 JSON 文件,多次操作可以节省资源
json spec 还是 geekspec 都是 SPEC 文件,只不过是表达方式稍有不同而已,本质没有区别。

后面跟 show 可以打印 API 列表、跟 debug 以调试 API 客户端,普通用户不需要调试(因为我测试好了)

./spectrum.rb spectrum_geekapk_v1b_api.json

然后可以进入 REPL

ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
Spectrum v0.1.0: usage: ./spectrum.rb <spec json file> [command]{show,licence,help,json,debug}
[i] Faraday connection: conn, Apis: apis, Auth configuration: auth
[+] run show [:apiName|apiNameRegex|apiLocationRegex] to see api documentation, run list to view api list, have fun!
spectrum(0.1)>

上面写明的就不用说了,用过 Ruby 的 Rubyist(废话)肯定清楚,很方便

https://github.com/duangsuse/GeekApk/blob/finish_spectrum/spectrum.rb#L260
所有逻辑(命令)都可以在这里查到

我要讲的是 list, list_from, show, status, tree 这几个有用的命令

spectrum(0.1)> list 3
serverVersion
serverDescription
serverBoot

spectrum(0.5)> list_from :unStar
unStar(aid-path:AppId) -> [$oldCount:number, $newCount:number]
= DELETE /star/{aid}
stargazers(aid-path:AppId) -> array:App
= GET /star/{aid}
stars(uid-path:UserId) -> array:App
= GET /star/user/{uid}
=> 64

不带列出全部名称

spectrum(0.2)> show :serverBoot
serverBoot() -> datetime
= GET /serverBoot

spectrum(0.3)> show /server/
serverVersion() -> plain
= GET /serverVersion

serverDescription() -> plain
= GET /serverDescription

serverBoot() -> datetime
= GET /serverBoot

之前没有考虑到 grep URL 的问题,算了,不如你们弄个 PR。

spectrum(0.6)> status
[+] Total 67 APIs, method count: GET: 37; POST: 8; PUT: 11; DELETE: 11
receiving ["String", "UserId", "Int", "CategoryId", "AppId", "CommentId", "UserSize", "TimelineSize", "NotificationSize", "AppSize", "CommentSize"]
and returning 67 types (["string", "GeekUser", "Category", "App", "AppUpdate", "Timeline", "Notification", "number", "Comment"])
[+] 55 path params, 3 body params


tree 可以列出 URL 列表(长得很像树,不过我这里它没被弄成树...)
有四种格式可以选择,plain 只有 URL、return 包含返回值、args 侧重参数、all 全部都有,默认 plain,识别不出选项都是 all

spectrum(0.7)> tree
GET /serverVersion
GET /serverDescription

spectrum(0.8)> tree :return
GET /serverVersion
= plain
GET /serverDescription
= plain

spectrum(0.9)> tree :args
...
POST /admin/makeUser
* username:String
PUT /admin/resetMetaHash/{uid}
* uid-path:UserId
* shash:String?

spectrum(0.10)> tree :all
...
GET /serverDetail ()
= object:string
POST /admin/makeUser (username:String)
= object:GeekUser
PUT /admin/resetMetaHash/{uid} (uid-path:UserId;shash:String?)
= plain

Spectrum 可以帮你从 spec 文件映射所有的参数,可选的还是必须的、是否是枚举、它的位置是在 body、query 还是 path... 都会帮你处理好,因为 Spectrum 是主打 CLI,参数不对它还会帮你指正。
spectrum(0.1)> listUser
[!] Arity mismatch: expected 3 (not optional 0), got 0
[*] NOTE: fill first optional argument to get started
listUser(sort:String?{created, followers}, sliceFrom:UserSize?, sliceTo:UserSize?) -> array:GeekUser
= GET user/all

Spectrum 也是设计为可以被用于真正的 Ruby GeekApk binding 库,虽然貌似 Faraday 这个 HTTP 客户端不支持异步,我们不是可以用 Fiber 么。实际上我打算之后 Ruby GeekApk CLI 就利用 Spectrum 写。

pry -r./spectrum
[1] pry(main)> Spectrum::ClientShowcase
=> Spectrum::ClientShowcase
[2] pry(main)> Spectrum::ClientShowcase.from_
Spectrum::ClientShowcase.from_code  Spectrum::ClientShowcase.from_file  Spectrum::ClientShowcase.from_json
client = Spectrum::ClientShowcase.from_file
client.instance_api_methods
client.show
client.serverDetail
(当然还有稍微实用一点的玩法,比如 Mapper,具体看这里

当然 Spectrum 的代码质量虽然垃圾,但也没有垃圾到一定程度,所以还是能用的(迫真)(神逻辑
所以以后,使用 Spectrum 生成其他弱类型/自动内存管理语言的客户端代码,其实也不是不可能,我个人觉得生成 Haskell 的结构然后用 Haskell 翻译也可以(跑(求不喷

Spectrum CLI 是基于 Pry 的,当然以后写 GeekApk CLI 的时候我会另外再写。
duangsuse::Echo
现在这个小工具效果还不错,大家可以在见到它的第一个版本,大家有 IDEA / gradle 什么环境的可以下载下来玩玩,目前可以玩这些: [DuangSUSE@duangsuse]~/文档/geekapk_spring% ./spectrum.rb ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux] Spectrum v0.1.0: usage: ./spectrum.rb <spec json file> [command]{show,licence…
公正评价:目前 duangsuse 写很多弱类型语言的时候,尤其像 #Ruby 这种非常灵活(无论语法还是 inspect)的语言

该灵活的不灵活(该抽提的东西 hard code、该做成独立模块的绑在一块胡乱引用、该弄设计模式我偏要用 block 还不带文档),不该灵活的乱灵活(疯狂胡乱返回各种类型的对象,然后疯狂 Kernel#is_a? 判断处理...),设计毫无章法和规范、不考虑性能不注意算法,想哪里写哪里,怎么感觉 dalao 怎么写,控制流胡乱搞、代码健壮性很不行、软件测试完全没有考虑、注释胡乱放废弃代码也只是胡乱注释掉,似乎没有基本规格...

大概这就是所谓的脚本小子吧。

真真还不如 statically checked 弄设计模式 trait bounds 算了...
duangsuse::Echo
人生苦短用 Python
Python 和 Ruby 这两种大佬语言都不需要给那些 PLT/FP 大佬们来用的
大佬们看得起 JavaScript 都懒得用 Ruby
duangsuse::Echo
现在这个小工具效果还不错,大家可以在见到它的第一个版本,大家有 IDEA / gradle 什么环境的可以下载下来玩玩,目前可以玩这些: [DuangSUSE@duangsuse]~/文档/geekapk_spring% ./spectrum.rb ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux] Spectrum v0.1.0: usage: ./spectrum.rb <spec json file> [command]{show,licence…
在 GeekApk 项目正式启用 Spectrum (是的... GeekApk 有自己的一套『Swagger Tools』,OpenAPI 3.0 也就是 GeekSpec 0.1、Swagger codegen 也就是 Spectrum 0.1.0)之前,我打算用 Times 先测试一下它是否真的能用(确信

(目前看来,几乎是无论做什么请求,GA SB 均会给出类似如下响应)
spectrum(0.2)> listUser 'created'
=> {"timestamp"=>1549876643013,
"status"=>500,
"error"=>"Internal Server Error",
"message"=>"Optional int parameter 'sliceFrom' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.",
"path"=>"/user/all"}

(好吧,其实更多的是 OperationNotImplemented...)
(是的,Spectrum 还不够成熟,我去重构...)
如果 Spctrum 的确是可用的,那我将使用它来编写 GeekApk 服务器的黑盒测试逻辑(而 JUnit 则仅负责链接测试服务和这些测试逻辑,Ruby 负责实际执行他们,可能需要一些时间,我不想多花时间了解接口所以这部分我宁愿多写点模板代码,而不是写插件什么的),目前 Spectrum 可能只能在 POSIX 平台上用(部分功能依赖 Node.JS),总之 GeekApk 现在可能不会太考虑 POSIX 外的平台移植问题。
#China #Low #life #jvbao 不解释。
Forwarded from duangsuse Throws
这位先生也真是 🌚👍厉害厉害。

服,服,服。
可惜我没有某先生那么好的口才、没有大佬们那么犀利的语言,不然这种情况,这个大佬恐怕是要被公裁了(实际上已经是这样了)。

值不值:你骂得越多,他赚得越多

我的回答是不值,所以我选择不回骂他。
既然侯先生要拿这事说话,而且丝毫不顾及一点道德行为规范也不像机器人,我想请问我哪天在哪里问候过除了先生您之外您优秀的家人们了。

我非常诚恳地相信,您妈对她的儿子有这样优秀的语言和行为一定是无比的骄傲和自豪吧。为国争光在被国墙了的 Telegram 上举报不法翻墙。

也衷心祝愿先生您能在反违法 fq 的路上越走越远,离实际越走越远。
到时候已经肉身翻墙的人们可能会在墙外对着自己的孩子指着您,说千万别学这个人,和『不『法』』翻墙斗争一生,结果既没有做到什么有意义的事情,也没有被任何有关部门采纳自己的优秀情报,而且连墙是怎么工作的都不知道。

真的是两边走不通啊。
正在测试 Times 服务的 API 接口定义...
spectrum(0.6)> conn.url_prefix = 'http://0.0.0.0:234'
=> "http://0.0.0.0:234"
spectrum(0.7)> apiVersion
=> "0.1.0"

Spectrum 可以十分成功的完成基本接入...
不过,其实 Spectrum 的代码质量不怎么样(甚至对于目前的一些 Ruby 应用来说,要加个『很』字才行)

用打开类修改需要修改的方法,凑合着用吧... 🤔(把技术债务压给 Ruby 的元编程灵活性解决)
#Github 湖北襄阳这里偶尔有时候出现 SSL 证书异常,不知道你们有没有 🤔
累死,算是学习(确信)了一下 Ruby 和测试了 Spectrum... 感觉解耦合做得不是很好,response mapper 根本一点用都没有(因为要很多 mapper 必须要拿到一个 ClientShowcase 实例),另外给 ClientShowcase 添加一个 Hash 表来放诸如密码这样的东西隐式传递不错),考虑重构。
duangsuse::Echo
累死,算是学习(确信)了一下 Ruby 和测试了 Spectrum... 感觉解耦合做得不是很好,response mapper 根本一点用都没有(因为要很多 mapper 必须要拿到一个 ClientShowcase 实例),另外给 ClientShowcase 添加一个 Hash 表来放诸如密码这样的东西隐式传递不错),考虑重构。
Times 是之前老 GeekApkR 里唯一一个能用的后端服务... Ruby + Sinatra 写的,其实现在看来都很不良实践(跑)
凑字数(代码行数)吧(

不过它的测试套件也算完整,虽然持久化层的不是 Mock,但也可以用,缺点是如果在生产环境用了很可能导致数据丢失

Times 没有使用 DBMS,而是,这是因为我以为它不会有太大的数据集性能要求,我觉得很可以重构(比方说,使用类似 MongoDB 的面向文档数据库替换纯手动)... 尤其是难看的 API...

值得注意的是我以前智商还低一些的时候,连常用的序列化这种弱智能力都没有...
JSON 序列化(Times 的数据持久化方式)当时非常的混乱,我非常智障的套模板(或许,因为我想我那时就是瞎搅合...)

我没有么写:

[foo, bar, baz].to_json

而是:

[foo, bar, baz].map { |o| o.to_json }.to_json

然后反序列也一样... rofl.