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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from Android Repository (『 ⴼITⵠLØ 』)
bootanimation_androidQ.zip
2.3 MB
Pixel Bootanimation Android Q

⚡️Bootanimation of the Android Q from Beta 2

Follow: @AndroidRepo
另外你也可以使用 Java 8 的 Lambda 语法糖,看起来这是个 SAM(Single Abstract Method) 开放类,可以这么写

private static final Migration MIGRATION = new Migration(12, 13);

.... 好吧是我看错了,好像不能.... (刚才准备发 Yuuta 的,可是发现是自己错的)
Forwarded from YuutaW 鱼塔
哪个大佬帮忙写下 SQLite 升级鸭,可以给 Scheme
#Java 我好绝望啊,Java 又得重新学了,我容易吗我... 😭

https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4#L1042

Jawa 8 啥时候多了这种语法,我怎么就不知道呢?

public ResourceTable.Package parsePackage(final ResourceTable table) throws IOException {
return table.new Package() {...};


methodBody : block| ';'
block : '{' blockStatements? '}';
blockStatements : blockStatement+;
blockStatement : ... | statement;
statement : ... | returnStatement;
returnStatement : 'return' expression? ';';
statementExpression : ... | classInstanceCreationExpression;
classInstanceCreationExpression : ... | expressionName '.' 'new' typeArguments? annotation* Identifier typeArgumentsOrDiamond? '(' argumentList? ')' classBody?

matches
table.new Package() {...}
expressionName="table"
'.' 'new'
typeArguments=null annotation=[]
Identifier="Package"
typeArgumentsOrDiamond=null
'('
argumentList?=Some([])
')'
classBody?
=Some(...)

Qualified class instance creation expressions begin with a Primary expression or an ExpressionName.
A
qualified class instance creation expression enables the creation of instances of inner member classes and their anonymous subclasses.

看来我不够了解 Java,垃圾 duangsuse... 🌶🐔

为什么...

1.3: Plain Old Java (2000)
1.4: assert keyword (2002)

5: Autoboxing, enum, generics (2004)
6: @Override in interfaces (2006)
7: ARM, Diamond, multi-catch (2011)

8: Lambda and Type annotations (2013)
9: Modules, private fields in interfaces (2017)

10: Local variable inference (2018)
11: Local variable syntax for lambda parameters (2018)


啥时候 Java 8 我认不得
原来世界上最合格的 #Java 程序员是 James 老爹,我都不知道 Java 8 啥时候支持 new List(oldid = id) 这种了... 我只知 Lambda
刚才发现其实没有 oldid 这个参数啊... 弄了半天是 James 老爹他们瞎搞...
new List(oldid = id); 其实是
new List(id); oldid = id;...
而且 Java 的爹爹们带头没有使用 camelCase...
duangsuse::Echo
#Java 我好绝望啊,Java 又得重新学了,我容易吗我... 😭 https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4#L1042 Jawa 8 啥时候又多了这种语法,我怎么就不知道呢? public ResourceTable.Package parsePackage(final ResourceTable table) throws IOException { return table.new Package() {...};…
https://github.com/sdklite/aapt/blob/9e6d1ad98469dffbc9940821551bd7a2e07dd1e0/src/main/java/com/sdklite/aapt/ResourceTable.java #Java

哇这才是真的大佬,写成那个 B 样的算什么面向对象设计,越复杂越容易堆砌、越简单才越难于设计。

不应该只以算法有多秀为标准,更应该考虑对设计模式的适当使用

开发库真正的难点,不单单是你对你这知识领域的理解,而是你怎么看你实现一切的材料 — 语言和平台
设计的好了,程序就健壮、易读、易维护、易测试、易移植、易扩展,还高性能高效能,安全,简明扼要却又容易理解。
设计的不好,算法到处乱传乱用,毫无章法,数据到处复制,造成一大堆无谓的开销,设计不当、编程困难,难以正常维护和更新。

这么优雅的设计,真的我觉得这个开发者的能力比某些 JavaSE API 实现的开发者还要强,怎么说也是个优秀的程序员,真正优秀避开半吊子误区的程序员。

看隔壁的 axmlparser 呢?一大堆秀死的位运算、偏移量计算,不良的 OO 设计(不是说不必要的 Event 系做的不对,但是『追求性能』到有点太过了)

那么多位运算、那么多加减乘除判断偏移手算,秀死人了,可是最后有个暖用呢?代码健壮性可读性可扩展性爆炸、接口辅助方法定义不足,充其量是个玩具,而且还是失败的玩具,这也能叫面向对象?这也能叫库?丝毫不友好,你造出来给空气用?

尤其还是某些计算,不知道是嫌计算机快了还是怎么的,我真的搞不懂一会为了节省内存减小处理延迟用 Event 抽象一会又延迟,哦不对是每次使用都重新计算,本该早就解析好的东西,还包含一大堆循环,我真的弄不懂,为啥要这么干,是因为这些堆里的二进制序列会受到外星人的干扰?所以为了给全球外星人探索事业贡献,必须得每次使用都重新算一遍??? 🤔

还好最后连个毛线都没写出来,就勉强写了个大结构和字符串池解析,真是让我大大的松了一口气,要不然就真的是带坏小孩了,搞不好重新算输入相同输出还不一样,三体人要入侵地球了,怕死宝宝了。


AXMLEditor,一看就知道是 cracker 们写的,非常『UNIX』风格啊,尤其是一遇到插入操作,根本丝毫不考虑性能,不考虑 GC 的压力,一大堆 ByteUtil 应用上去,什么 readXXX 啊 replace 啊 copy 啊,手算偏移量,手工用类似 subsequence 的方法去强行拆开解析二进制,写一大堆丝毫没有可读性丝毫不告诉人是做什么的位运算操作,而且还不完全解析,还专门造一大堆对象保存其实是 int32 的字节数组!智障复制造了一大堆不必要的字节数组内存副本,还是可能几兆多的大文件,尤其是插入时莫名其妙的循环 byte insert,简直是不知内存分配为何物,疯狂给 GC 填堵。

使用 java.io 内定的 DataInputStream,有这么难么?
对该用的抽象不用,是为什么?因为手动偏移量,大批位运算很牛逼,很秀操作?看得别人越蒙蔽自己优越感越强?

真的是和之前的 LayoutFormatter 一样啊,这个也得被顺带着批判一下,代码健壮性都成那样了,什么 retrofit 啊, fix 啊,在代码里嵌入一大堆残缺不齐的『花瓶』模式抽提那些可能根本不是问题本质的字面样版,有必要么?XML 解析器 API 有那么难用么?
它的作者之前不是不知道 XML 是啥子,作者之前还秀过 iOS ObjectiveC 开发呢,可是,偏偏就不知道啥是 XML 了,偏偏就要不断 O(n) 判断字符串起始了,偏偏就要制造无端的性能开销了

XML 解析器/生成器就真的有那么难用吗?狸猫换太子,自己写个对数据适应性可怜的『解析器』去处理 XML,有必要么?

在开始编程之前好好想想该怎么做,最适合妥帖,有那么难么?

UNIX 风格也不是随便用的啊,谁说 UNIX 风格就是那种烂文本处理代码,不断复制复制复制,还不能 Copy On Write 写时再复制优化,不但性能、开销丝毫不考虑,我想这可真的未必是『一切皆字符串』的初衷啊

SDKLite 的这个 Aapt 库,才是真的强,不仅真的完全完成了解析工作,而且还贼优雅,方便重构、易于扩展,将必须的位运算尽可能放在一个帮助方法里,并且方法名里写明用途(直接继承 AssetEditor 类就可以了)

很多人都不知道真正是什么的,所谓的『优雅』,这才是面向对象运动的初衷啊

我对面向对象编程的目标从来就不是复用,相反,对象提供了一种处理复杂性问题的方式。这个问题可以追溯到亚里士多德;在面向对象兴起之前,编程以过程为中心,例如:结构化设计方法,然而,现在系统已经达到了超越其处理能力的发展极点,有了对象,我们能够通过提升抽象级别来构建更大的,更复杂的系统。所以,我认为这才是面向对象编程运动的真正胜利。 — UML 创始人之一, GradyBooch

如果每个有能力的人,都把他们的算法做成类似 AXMLEdit、axmlparser、LayoutFormatter 这种样子,要面向对象编程何用?JavaSE 几百个包上千个类何用?都回去写 C, Pascal 这种算了
没什么的,不必说所谓,因为还是有点不错的东西的,另外,少提了个 #Baidu, 百度有一个和大学合作的 echarts 是不错的数据可视化库,都在用
Forwarded from 永久封存 | Yuuta 台 | 😷 #Pray4Wuhan (YuutaW 鱼塔)
不错,我觉得前端应该试试 JFlex 实现这种功能,打算怎么写 flex?还是使用正则表达式?

如果使用正则表达式也有一种方法:

看看我们的打算,我觉得应该是这样:

1. 匹配 <西文字符> <中文字符> 这个模式,为 abc一二三 这种加上空格
2. 匹配 <中文字符> <西文字符> 这个模式,为 一二三abc 这种加上空格

其实也未必需要遍历两次, 一a一 这种判断『西文前面是中文,加空格』『中文前面是西文,加空格』就可以完成一个 travelse 加空格的功能了

一 a (加空格)一 (加空格)

最终是这样,必须得用到正则匹配替换:

三个规则,中文前面西文加空格、西文前面中文加空格、空格符号(比如,换行符)前面不能加空格

1. /(\w)(?!\w)(.)/, 它匹配 "abc中文" 这种
2. /(?!\w)(.)(\w)/, 它匹配 "中文abc" 这种
3. 上面二规则综合后,不允许 \s 字符类里的字符匹配第一项

... 头疼,还是算了,而且这种简单问题 Regex 也未必能发挥最大效果

== 有更好的算法吗?
不知道。
Forwarded from 即刻精选
即厂今天的新功能,阅读体验大大提升

赞美 @Arthur #大产品小细节
呵呵呵... 要是我是 Dalvik 的作者和优化者,或者是 Oracle HotSpot、Java VM 的设计者,早就喷死这玩意了,怎么能污蔑 Java 平台,谁告诉你们 ART 是吃素的了?
并发垃圾收集器,Lua 这么个几百 K 的实现再稍微修改一点加点颜色,多个 marker 支持就可以实现并发垃圾回收,这能拿来吹?
如果我以后和 imKiva 的 KiVM(JVM) 有时间实现自己的编程语言运行时了,华为这种.... 我觉得还是太令人迷惑了,都是上个世纪的人么?

DalvikVM 在 Android L 从 Dalvik 模式到 ART 模式,就引入了 AOT 编译技术,你说不能编译优化?AOT 的好处就是敢做耗时的分析优化,你说 ART 模式是模板解释器,说它和姜饼时代之前没有 JIT 支持的 Dalvik 一样,说它不敢做代码优化,请问,我们手机上的 dex2oat 程序是做什么的?oat 又是什么文件?为啥软件包的安装时间变长了?让用户白等的?

要这么说,还不如和 LLVM 之类的优化编译框架扯点关系,然后这种扯 B 污蔑 Google 技术团队的消息就不要发,省得被内行人喷。

更好的策略我信,但这么大白天的糊弄人是真当学 CS 的傻逼?还是觉得 Android 开发者比较好骗?
duangsuse::Echo
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - weishu的回答 - 知乎 https://www.zhihu.com/question/319688949/answer/648358786 我觉得华为应该研发出一种新『HuaMIPS』架构,推出限量款芯片,这样就不管目标机器平台,可以直接编译成机器码到处发布,直接执行了 😸 呵呵呵。
说到底,某些 #Android 开发者还是真对性能的误区太大了,以为『It's fast』就是一切

一般来讲,真正需要高性能计算的部分,比如 canvas, opengl,都是无 GC,C/C++ 之类的实现的,可能连 shared_ptr Rc 智能指针都舍不得用
C、C++ 的编译 native code 实现,GCC、LLVM 都是经过的编译器框架,足以生成让人满意的优化代码

而你们写的程序逻辑,别往自己脸上贴金了,对所谓的性能,都没啥太大需求

真正有需求的敏感点,必要的时候,很多人都直接用 JNI 实现或者并行化了(当然 JNI 本身调用检查也有不少开销,所以一般是大批量任务和内存敏感任务),只有傻瓜才觉得应用逻辑的『性能』提升可以改变『生态环境』

至于应用使用 JVM 平台函数库的性能,比如说,人工神经网络,再文本解析器,你当真以为普通的编译优化能对这个『一次一字符』的东西有啥,客户端要绝对速度,是不是给闪电侠用的手机?为啥不开发个 NeonJSON 出来?

我到是很想看看,华为的工程师如何弄出可以汇编出 ARM, x86 等一大堆流行支持架构都能解释『超性能机器代码』的汇编器,或者 dirty 一点,把安装包和更新补丁再加上个几兆 😉

如果真的有这样的黑科技,我真的要为蛤为五体投地啊。可怜也是做电子电路出生的,居然现在弄这种事情?

后面的知乎回答也说了,猾为的优化,主要还是一些『非高级分析编译优化』领域的事情,有一个『IO 密集模式切换优化』

至于 GPU Turbo,我来看就是 GPGPU 并行化技术,如果配合修改算法的话自然有很大提升,当真自大了?不知道这并不是首创?论文在哪里?

其他的优化,诸如视图缓存什么的,和编译原理没太大关系,主要还是 runtime

绘制策略、系统服务架构、异步、事件 IO
说到底还是系统图形动画架构的事情,和编译什么方舟啊圆粥的有啥关系?

什么 IO 计算分析,也不能说是多么高大上的程序分析,可以看看这个

猾为这瞎说能力,我也是佩服了,Android 业界没谁了呃。 🤪