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
Forwarded from dnaugsuz
如果你要做,还有更好的方法吗……
要这么写就别担心太多

为什么 html 是 var 啊…… 你应该写
val html: String = client.get(LOGIN_API).body?.string() ?: throw Errors.NetError() 不是么…

为什么你要写 html!! 啊,而且如果你只 parse(resp.string()) 的话调用 string() 也没问题啊
Forwarded from 记挂
Forwarded from 记挂
下面要用到。。懒得新建变量了。。
Forwarded from dnaugsuz
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from dnaugsuz
草生,你这么编程的话…… 在一段子程序里,是一类东西都可以叫一个名字了

用户的 1:1 宠物叫 val pat,用户 1:N 的寄养宠物也叫 for (pat in pats) ,然后你就可以把 patpat 变成一个 var 来“复用”废“好大脑力”编造的名字了,真棒……

如非必要,请别写 var …… 你要明白有些 val 都是可以 inline 进引用处的,只不过为了简化代码提升可读性才拆开成不可变具名量,你用 var 语义就全毁了。

真正用 var 的情况往往是 for while 里循环更新变量,你这种完全可以内联的……
Forwarded from Hinnka Zhou
@ask2332 这是你想要的效果吗?
Forwarded from dnaugsuz
#OCR #Java #code
float scale = 246f / 255;
Paint paint = new Paint() ;
ColorMatrix matrix = new ColorMatrix();
matrix.set(new float[] {
scale, 0, 0, 0, 0,
0, scale, 0, 0, 0,
0, 0, scale, 0, 0,
0, 0, 0, 1, 0,
});
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
paint.setColorFilter(filter);
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
Forwarded from Hinnka Zhou
matrix.setScale(scale, scale, scale, 1);就可以
Forwarded from dnaugsuz
ColorMatrix.set(float[]) 是有一定 (float[]) 长度要求的吗 🤔
scale 后面跟着4个0 是什么意思
最后一个 1,0 是什么意思
Forwarded from Hinnka Zhou
4x5
Forwarded from Hinnka Zhou
Forwarded from dnaugsuz
哇,一个色彩通道对应 5 个浮点值
Forwarded from dnaugsuz
fun setupColorFilter(scale: Float = 246.0 / 0xFF) {
val matrix = floatArrayOf(
scale, 0,0,0,0,
0, scale, 0,0,0,
0,0, scale, 0,0,
0,0,0,1,0
)
val rgbaMatrix = ColorMatrix().apply { set(matrix) }
val filter = ColorMatrixFilter(rgbaMatrix)
val paint = Paint().apply { colorFilter = filter }
window.decorView.setLayerType(View.LAYER_TYPE_HARDWARE, paint)
}
说实话,看到 #Ruby 关系式求解器 里作者实现了个 Iterable.interleave_with 我觉得挺奇怪的,真的是要 interleave? 总觉得可以 zipWith 什么的,但作者的水平又不可能不知道 zipWith
作者的实现方式也很奇怪, interleaveWith 就是 (xs=[a, b], ys=[c, d]) res=[a, c, b, d] 而已,但他用的方式是一个 Array 不断 push pop 这么 cycle 下去的
#GitHub emmmm 🤔 🎉
Forwarded from 开发者日报
GitHub is now free for teams

GitHub 刚才宣布,团队的私库也免费了。这就是说,GitHub 基本上是一个免费网站了,核心功能几乎都不要钱,只剩下企业版收费了。「分享自ruanyf
Forwarded from Solidot
Stephen Wolfram 称找到了物理学基础理论的途径

Wolfram Research 创始人、Mathematica 软件的创作者、数学家/物理学家 Stephen Wolfram 发表博文,宣称找到了通往物理学基础理论的途径。Wolfram 称,1980 年代初他开始研究简单程序产生的计算宇宙时得到了一个惊人而重要的发现:即使一个系统的底层规则十分简单,总体上的系统行为能任意的丰富而复杂。这促使他思考:宇宙是不是也是以此方式工作的?我们在物理中所看到的丰富性和复杂性其底层是否是简单的规则。他因此写下了 100 页的《一种新科学》。现在,在年轻物理学家的督促下,他再次发表了 448 页的技术论文,描述了我们宇宙的物理属性从简单通用可计算的规则产生出来。Wolfram 表示这些属性与相对论和量子理论一致。其他人认为他的理论和弦论一样难以验证。Media

https://www.solidot.org/story?sid=64129
为实现扒谱程序做了一点搜集

https://github.com/nwhitehead/pyfluidsynth 可以作为音阶合成库
https://github.com/vishnubob/python-midi 可以作为 MIDI 库

https://pypi.org/project/pyreadline/ 可以作为 CLI 监听库

MIDI 这个比较灵性,它不像 subtitle 那么简单,一个 MID 文件是由 events 构成的,如 NoteOn(tick,veloc,pitch), NoteOff(tick,pitch), EndOfTrack

程序的设计大概有两个过程
def cliReadPitches(note_base=note.C) -> List[int]
def cliReadTimeline(mode="normal", seekback_ms = 5000) -> List[Subtitle]


第一个过程利用数字键盘输入( [12] 这个语法可以输入高音阶 )
可以用 Delete 删除上个音阶、 C-R 重放一遍、 C-I 粘贴、 Enter 确认

第二个过程可配合进度条和时间
用 A 来创建音符事件(但不会改变音高流)、S 来迭代下一个音高(从保持按下的A键切分)
用 Delete 回溯 5s 的音符,用 Enter 确认

-note-base 是指简谱基础音高
-play music 是在 cliReadTimeline 时配合放的音乐文件
-hot 是个 flag,可以禁用 S 键并且让 A 键带有迭代音高的效果
import pyaudio, fluidsynth
RATE = 44100
pa = pyaudio.PyAudio()
stream = pa.open(RATE, 2, pyaudio.paInt16, output=True)

class NoteSynth:
def __init__(self):
self.synth = fluidsynth.Synth()
def setFont(self, path_sfont):
self.synth.program_select(0, self.synth.sfload(path_sfont), 0, 0)
def sampleNotePitch(self, pitch, n):
self.synth.noteoff(0, pitch)
self.synth.noteon(0, pitch, 100)
return self.synth.get_samples(RATE*n)

synth = NoteSynth()
synth.setFont("example.sf2")
stream.write(synth.sampleNotePitch(20, 5))