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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
习惯性的在写 parser 🤔 可是觉得不如 Android 开发有时候用到的 Pattern 们和自己布局的 View 们,怕被喷。
duangsuse::Echo
习惯性的在写 parser 🤔 可是觉得不如 Android 开发有时候用到的 Pattern 们和自己布局的 View 们,怕被喷。
这里为了兼容用的是 Ruby 的 ARGF 特殊文件... emmm

这个对象有时候是没有 ungetc 方法的 🤪
我没法用 ungetc 实现 peek(从输入流拿到一个 char,然后放回去,用来实现简单的结构判定)

不得不说,不能 lookahead 非常淡疼(虽然我可以模拟 buffer 来实现 peek_char)
那么写不写这个 buffer 呢?算了...
This media is not supported in your browser
VIEW IN TELEGRAM
这个 parser 不够好,但也足够用。只要能解析这个文件就可以了。
连这都不会的 duangsuse 总算写出来了... 🤔 不过是一个简单的 scannerless parser 而已就花了好多时间,这还能不能和任何一个懂一分钱设计模式的 Android 前端比呢... 希望哪天能回到 Android.
HackingCoolApk.zip
31.7 KB
目前的工作目录 #CoolApk
居然还要处理多 Annotation 的情况... 气死我了
Forwarded from Solidot
Delphi 二十四岁,释出 10.3.1

Borland 在 1995 年 2 月 14 日释出了 Delphi 1,二十四年后,收购 Borland 的 Embarcadero 公司为了庆祝这一纪念日释出了 Delphi 10.3 Rio Release 1(10.3.1)。对比 Delphi 1 和运行它的 Windows 3 操作系统与 Delphi 10.3.1 和 Windows 10,你可以看到软件在二十四里的巨大变化。Media

https://www.solidot.org/story?sid=59580
Forwarded from 羽毛的小白板
总的还是能发现些套路,虽然还不习惯这种开发模式
duangsuse::Echo
居然还要处理多 Annotation 的情况... 气死我了
我不要处理算了,这就作为另外一个类似 Jawa 的 DSL 算了 hhhh(迫真(跑
改成 @MultiPartPost
ScannerLessParsing 一时爽、一直写 ScannerLessParser 一直爽 🤔 — 妈妈再也不用担心我的 parser 需要 Regex / 速度慢 / 体积大 / 不够灵活了
走出半生(指脚本小子)仍是 Java Parser... 🤔 (图为第一个递归子解析器结构,Java 的泛型参数解析)
勉强完成了这个 Parser,使用的框架还有很多需要修改的地方,希望以后这种能力能派上用场。 #Ruby #PL #Parser
simple_parser.rb
5.4 KB
#Ruby 一个普通的 Scannerless Parser
duangsuse::Echo
simple_parser.rb
🤔 接下来 duangsuse 给大家做一瞬生成的现场的表演(良心) #sysadmin #Ruby #Parser #recommended


首先,按照上面的消息把 Retrofit 接口定义的 Java 代码整成这个 Parser 可以理解的格式

然后,执行命令 ruby simple_parser.rb retrofit.java 1>result.json,导出成果到 JSON 文件

ary = File.read('result.json').yield_self(&JSON.method(:parse))


接下来就是魔法的时候了(迫真)

class Interface
attr_accessor :name, :method, :path, :args, :type
def initialize(json)
@method = json['method']
@path = json['path_template']
@name = json['fun']['name']
@args = json['fun']['args']
@type = json['fun']['type']
end

def codegen_method; return method == 'GET' ? '' : "#{method}@" end
def codegen_type_name; case type['name'] when 'List' then 'array' end; end
def codegen_type
if type.is_a?(String) then "-> #{type}" else "-> #{codegen_type_name}:#{type['inner']}" end
end
def codegen_args
args.map do |a|
web_param = a['name']
param = a['param']
type = a['type']
case a['ann']
when 'Query' then "#{param}:#{type}"
when 'Body' then "#{param}:#{type}-body"
end
end.join(', ')
end

def codegen
"#{codegen_method}#{name}(#{codegen_args})#{codegen_type}\n = #{path}"
end
end

然后

puts ary.map(&Interface.method(:new)).map(&:codegen)

吐嘈:还没有现在某些前端的设计模式魔法呢.... 如果前端再在自己的设计模式上加点东西,是不是就被完爆了呢?
好魔法的设计模式,虽然感觉好像除了能完全记下来以外也没什么特别的牛逼... 但是不明觉历... 🤔
... 能用就好
那么这样就 OK 多了