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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
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 多了
This media is not supported in your browser
VIEW IN TELEGRAM
等到我写完 Spec 文件并且解决 API 客户端的兼容问题、下一步就该讨论怎么破解酷安的『官方』客户端口令验证保护,让它能在 Ruby Spectrum 的环境下可用

完全用 Ruby 还原校验码生成算法,这很困难(因为编译优化),我之前试过逆向一点小逻辑,都花了很长时间 #reveng
不过,x86 是个很通用的平台,我觉得可以拿 radare 修改汇编代码、对象文件属性给它 port 到一个相对宽泛一点的平台,然后每次用的时候直接用 v86.js 这样的虚拟机器执行,反正桌面端基本都是 x86,Android 端不是有 Token generator 么。

困难在于,如果类似的虚拟机比较『底层』,不是我想的那样只是基于宿主环境,作为一个『翻译』工具而工作,而是在没有操作系统支持的情况下工作,就会很困难。

还有个问题是,很多机器是 x86_64 的,和 x86 不完全兼容,当然有了虚拟机这个或许可以无视