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
duangsuse::Echo
值得一提的是,很多东西看起来简单,其实后面复杂的要死。比如 audacity 那个人声消除和隔离处理算法,如果不知道后面真正用的处理方式想理解很难。
那个算法是基于 FFT(快速傅里叶变换) 的(类似商业 VSTi VocalTrap),不是简单一个通道减另一个通道(类似 Audacity 的另外一个 Nyquist 插件)

(第一个插件 200 多行代码复杂得要命还用了一些外部函数,第二个只是简单的 100 多行,其实他们对一些 centered 的波形处理完效果都差不多,可见算法啊是多么重要)(喷,不是说某些都差不多么)
Audio
效果,第一个是原音频、第二个 VocieTrap 的处理结果、第三个 VoiceTrap 的 Isolation (隔离人声)结果、第四个 Audacity 通道差算法插件的结果、第五个 Audacity FFT 插件的结果。FFT 插件的处理速度比简单算法的慢很多但有 bass
duangsuse::Echo
值得一提的是,很多东西看起来简单,其实后面复杂的要死。比如 audacity 那个人声消除和隔离处理算法,如果不知道后面真正用的处理方式想理解很难。
所以我上面列举出的就是我以前所谓的『和现实世界相关的编程』

因为数学... 不管是 G'MIC 的各种计算机图形学 CGI、Filtering/分析 算法
还是对波形的分析处理... 还是数字信号模拟信号... 无线电... 一切真正的现实,那些从现实世界进来的数据

蕴含着多少东西... 隐含的信息 需要程序自己来发掘

微积分... 导数... 卷积... Octave、Matlab....

数据和数据... 都是数字和各种各样的指标... 两开花(跑


我喜欢,即使是我看不懂的列表 primitive recursion 和各种奇妙的 FP 组合子,因为隔壁的 FFT 算法我根本看不懂。

即便是可能被喷自虐的 GADT、Coinductive 和循环写成递归,各种不常见的设计模式?不 trivial 的了解。不是『复读机』抄来的代码,而是真正理解自己在做什么。

listOf(1, 2, 3).reverse().reverse() 为什么等于 listOf(1, 2, 3) 呢? (当然这个其实很 trivial,我现在也能理解归纳证明了,我这里只是举个例子,再说很多人连这个都不知道)
证明这个有什么用?这么 immediate 的属性不是随便找个阿猫阿狗的都知道,负负得正一样的东西。

就是和自己过不去啊,就是这样了还要递推下去用某些非常基本的命题成立来推导到 forall v. reverse (reverse v) = v...
无聊吗?有时候当益智游戏可以玩玩吧...

即便是开始像数学、像物理的计算机科学上一些 FP、PL 的理论、模式...

h [] = v
h (x : xs) = g x (h xs)
<=> h = fold g v

h y [] = f y
h y (x : xs) = g y x (h y xs)
<=>
h y = fold (g y) (f y)

h y [] = f y
h y (x : xs) = g y x xs (h y xs)


(上面的东西如果有兴趣可以在这里看,第十页)

对隔壁『面向现实世界的软件工程』:头晕 😵
duangsuse::Echo
#Kotlin #JVM 靠,被坑了,原来 Java 那么喜欢副作用的么... » listOf(1, 2, 3).reverse() error: unresolved reference. None of the following candidates is applicable because of receiver type mismatch 返回值居然都是 Unit... listOf(1, 2, 3).reversed().reversed() 才想起来
object Foo {
@JvmStatic fun reverseTwice(l: List<*>) = l.reversed().reversed()

fun main(vararg args: String) = println(reverseTwice(args.asList()))
}


简单的测试程序,看看 kotlinc-jvm 知不知道 reversed() 两次是没有效果的


public final class Foo: ACC_PUBLIC, ACC_FINAL, ACC_SUPER {

static (stack = 2, locals = 2, args = 0) {
new class Foo
dup
invokespecial <init>:()V
astore_0
aload_0
putstatic INSTANCE:LFoo
return
}

public static final Foo INSTANCE

public static final java.util.List<java.lang.Object> reverseTwice(java.util.List<?>) (stack=2, locals=1, args=1) {
aload_0
ldc l
invokestatic kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V
aload_0
checkcast class java/lang/Iterable
invokestatic kotlin/collections/CollectionsKt.reversed:(Ljava/lang/Iterable;)Ljava/util/List;
checkcast class java/lang/Iterable
invokestatic kotlin/collections/CollectionsKt.reversed:(Ljava/lang/Iterable;)Ljava/util/List;
areturn
}

}

好吧,好像没有优化掉,我没开 -Xno-optimize
Oracle HotSpot JVM 上不知道会不会,我想可能不会,要不然黑科技了?
准备折腾一下 HSDIS(看看优化情况
duangsuse::Echo
object Foo { @JvmStatic fun reverseTwice(l: List<*>) = l.reversed().reversed() fun main(vararg args: String) = println(reverseTwice(args.asList())) } 简单的测试程序,看看 kotlinc-jvm 知不知道 reversed() 两次是没有效果的 public final class Foo: ACC_PUBLIC, ACC_FINAL, ACC_SUPER…
KOTLIN_RUNNER=1 kotlin -J-XX:+AggressiveOpts -J-XX:+UnlockDiagnosticVMOptions -J-XX:+UnlockExperimentalVMOptions -J-server -J-Xdiag -J-Xcomp "-J-XX:CompileCommand=print,*Foo.*" Foo 1 2 3

Could not load hsdis-amd64.so; library not loadable; PrintAssembly is disabled

没有 HSDIS...

妈耶又要全部重新编译别人编译的还不能用。
duangsuse::Echo
object Foo { @JvmStatic fun reverseTwice(l: List<*>) = l.reversed().reversed() fun main(vararg args: String) = println(reverseTwice(args.asList())) } 简单的测试程序,看看 kotlinc-jvm 知不知道 reversed() 两次是没有效果的 public final class Foo: ACC_PUBLIC, ACC_FINAL, ACC_SUPER…
(其实这里『优化掉』是比较不严谨的,因为这个本来就不应该被优化『掉』嘛。虽然说可以认为大部分情况『优化掉』也没有什么问题,我是想了解一下 HotSpot 那些『基于证明』的优化...(但其实如果都无法识别出来这种情况自动证明也没用...)(主要还是分析啊)
#media #SynthesizerV 正在试用,以后如果有钱了可以购买支持一下(
duangsuse::Echo
所以我上面列举出的就是我以前所谓的『和现实世界相关的编程』 因为数学... 不管是 G'MIC 的各种计算机图形学 CGI、Filtering/分析 算法 还是对波形的分析处理... 还是数字信号模拟信号... 无线电... 一切真正的现实,那些从现实世界进来的数据 蕴含着多少东西... 隐含的信息 需要程序自己来发掘 微积分... 导数... 卷积... Octave、Matlab.... 数据和数据... 都是数字和各种各样的指标... 两开花(跑 我喜欢,即使是我看不懂的列表 primitive…
我觉得 CG 各种『数形结合』才是坠痛苦的... 🐸... 五点共圆... 鸭嘴笔... engineerning,,,

看那种程序就是满脑子 sin,,, cos,,, tan... 整个人 tangent 90deg 了(跑

『虽然最后他们画出来的图真的很漂亮,每一个圆角都是那么平滑细腻,但是后面一大堆三角函数真的是惨不忍睹(对我来说)』 #Math #CG ...
#Firefox #Mozilla #Haha 顺便科普一下 #Regex 来表述 『(只要)带一个英文冒号并且(冒号)前面是纯英文』的 URL(URI) 模式就是这样:

grep --perl-regexp '\s*\S+\:.*'
也即(其实是一个... 呃,方便不会正则的人看,虽然我觉得不会有人不会正则)
SequenceOf
InSet(Spaces).repeatAnyTimes()
NotInSet(Spaces).repeatForAtLeastOneTime()
Character(':')
InSet(All).repeatAnyTimes()

如果用 『后行否定断言』

比如 scheme:hierarchical-part 这个的 : 只有在 scheme 这个 [A-Za-z]+(假设我们只允许『常见的』ALPHABETS 集合)后面才匹配

这次我们直接上 Perl & PCRE 了(因为 Perl 就是做这个的,AWK 懒得用)。

perl -e 'while ($ln = <STDIN>) { print ($ln =~ m/(?<=[A-Za-z]):.*/) }'

如果用具名组匹配(大家熟悉并且喜欢的 ECMAScript):

TODO()
Forwarded from Rachel 碎碎念 (IFTTT)
这个就更厉害了,只要带一个英文冒号并且冒号前面为纯英文,那么 Firefox 就认为这是一个 url pic.twitter.com/u8yN6GwYRE
— 是萝莉控 (@GermanyOrthoped) January 31, 2019
Rachel 碎碎念
这个就更厉害了,只要带一个英文冒号并且冒号前面为纯英文,那么 Firefox 就认为这是一个 url pic.twitter.com/u8yN6GwYRE — 是萝莉控 (@GermanyOrthoped) January 31, 2019
另外从某种意义上这么解析其实没问题,URI 的规范在这里(IETF RFC 3986)

BNF 在这里

不考虑 URI 里别的那些东西(比如 Encoding),BNF 是这样的

[IETF RFC 3986] [Wikipedia]

URI = scheme:[//authority]path[?query][#fragment]
authority = [userinfo@]host[:port]

这是个比较不严谨的定义,Wiki 上还有图解(推荐,类似 JSON 那个)


最后我给大家一个严谨一点的 Bison + Flex (就是 Yacc/Lex Style 的解析器风格)程序
顺便还可以学一点 C,何乐而不为呢?(虽然我其实也不怎么会 C... 不是特别熟

RFC3989 上 ABNF 语法集合的,然后我们做一下翻译的工作就可以了,因为 BNF 很长不可能直接弄成 Bison 写消息里,我再写。

至于 Firefox 的 URL 解析器实现(其实在这里基本上就是个 validator,因为不像网页正文有时候可能需要扫描识别 URL)

他们是放在 FTP 上的,当然或许也有自己的 DVCS 版本库... 不过不在 GitHub 或者 GitLab 之类可以搜索的话不方便,这里有一个 iOS 版的实现我们看看

OpenSearchParser class 就是上面那个的 parser
他们为它准备的 test cases 单元测试很有价值可以看看

emmm... 不是,这个是 OpenSearchEngines API 的东西

找了一会,然后放弃了... 没啥价值,这种东西...