duangsuse::Echo
我写了一个拿无损视频存下终端色号的…… 估计虽然修改版性能有改善,还是要把整帧 buffer 下来才不会抹布…… 要考虑是不是做一个 buffer , chunked 化 stdout 呢 https://stackoverflow.com/questions/15728939/lossless-compression-for-video-in-opencv https://docs.opencv.org/4.5.0/dd/d9e/classcv_1_1VideoWriter.html#ad59c61d8…
不追求优化性能了,也懒得用函数指针替换静态 if 判断了,思量着解决了个返回变量关系搞好的 bug ,最后重构下发了吧
实在熬不下去了吧 🌚 再说有很多事情可做 为什么要烂苹果啊
C++ 和 Java 的 IO stream 都可以有很多 tweak 啊,数据流各种 buf, chunk, cache 的处理也屡见不鲜,都不知道
实在熬不下去了吧 🌚 再说有很多事情可做 为什么要烂苹果啊
C++ 和 Java 的 IO stream 都可以有很多 tweak 啊,数据流各种 buf, chunk, cache 的处理也屡见不鲜,都不知道
setvbuf(); sync_with_stdio(); cout.tie(0); 这些有什么用,但最终还是明白了 termios 怎么写贪吃蛇吧,还是多开坑少硬杠比较健康
duangsuse::Echo
https://gist.github.com/duangsuse/64c9ac7a278da48f4b3de3dafd70e9df 🥳遇到困难,就老熬夜;后来我就提了一个,年轻人早点睡,做到12点就不做了睡大觉,长大了有福报。
🌚简单说一下技术细节吧。
这次新增两个py脚本,一个是对 mvn.py 继续缩行的复用性测试,一个是 C++ 版更新(支持 mech=0 ,1,2 变量) 后能播放其录制无损动画的脚本
C++ 这次修复了一个 unstop=vid.read(/*to*/frame) 生命周期关系 使用旧值的 bug(导致视频结束时出错)
性能方面是没什么好说的(我都懒得优化,它毕竟是 C++🌝
mech0 是既有的直接生成 ANSI 控制台转义/换行符序列
1则是带录制到文件效果(编码器参数 FOURCC)的 goto-line 无换行符序列, 2 可以回放生成的 cache.avi (render窗 p键敲字可设置色码偏移)
Java 早就有 b,p,s,sr 四种 MECH
buffered 是用 framebuffer 每帧部分生成色值(渲染)并刷新屏幕,这个很重要,性能往往是最好的(C++: 🌚就是霸道)
posited 就是全屏重绘的 buffered
seq 是用换行符到, seqrst 是用 [y H 转义跳至行的,性能好一点
这次新增两个py脚本,一个是对 mvn.py 继续缩行的复用性测试,一个是 C++ 版更新(支持 mech=0 ,1,2 变量) 后能播放其录制无损动画的脚本
C++ 这次修复了一个 unstop=vid.read(/*to*/frame) 生命周期关系 使用旧值的 bug(导致视频结束时出错)
性能方面是没什么好说的(我都懒得优化,它毕竟是 C++🌝
mech0 是既有的直接生成 ANSI 控制台转义/换行符序列
1则是带录制到文件效果(编码器参数 FOURCC)的 goto-line 无换行符序列, 2 可以回放生成的 cache.avi (render窗 p键敲字可设置色码偏移)
Java 早就有 b,p,s,sr 四种 MECH
buffered 是用 framebuffer 每帧部分生成色值(渲染)并刷新屏幕,这个很重要,性能往往是最好的(C++: 🌚就是霸道)
posited 就是全屏重绘的 buffered
seq 是用换行符到, seqrst 是用 [y H 转义跳至行的,性能好一点
Forwarded from mivik::channels::tech
*Mivik 发觉自己完全不会出题:瞎想两道题一道题不会
毕生出题水平巅峰:
https://www.luogu.com.cn/problem/P7121 | 根据 mt19937 随机数引擎初始化后给出的 N 个随机数反推初始化种子
https://www.luogu.com.cn/problem/U135806 | 求字符串所有子串的本质不同子串个数之和
https://www.luogu.com.cn/problem/P1316 | 一个长度为 n,字符集为 m 的随机字符串的期望本质不同子串个数
毕生出题水平巅峰:
https://www.luogu.com.cn/problem/P7121 | 根据 mt19937 随机数引擎初始化后给出的 N 个随机数反推初始化种子
https://www.luogu.com.cn/problem/U135806 | 求字符串所有子串的本质不同子串个数之和
https://www.luogu.com.cn/problem/P1316 | 一个长度为 n,字符集为 m 的随机字符串的期望本质不同子串个数
https://i.redd.it/ttltg0p0jnb61.jpg #Security IncaseFormat 写出 bug (DAY_MS 过大) 导致的设计发作日期拖延问题
https://segmentfault.com/a/1190000012641345 #Java #DontKnow #Stream
其实 ParserKt 里出现过的 Reducer 在 Java stream 里叫 Consumer, 动词都一样
这是个 Java8
简单说下, builder() 出一个 Consumer 然后会被拿去 sequential().forEach()
其中 m1.entries.reduce(new Map 的是 ... 啊不对,
这实际相当于
其中 queues:List<BlockingQueue<T>>
m1=forks as Map<Object, Function<Stream<T>, ?>>
waitOperationTo 把 StreamSupport.stream(newSpliterator(addQueue()) ) 在 CompletableFuture.supplyAsync 里 apply 给 op
它返回
其实 ParserKt 里出现过的 Reducer 在 Java stream 里叫 Consumer, 动词都一样
这是个 Java8
StreamForker 实现,可以流一遍出多个结果,实质上和我的版本功能一致简单说下, builder() 出一个 Consumer 然后会被拿去 sequential().forEach()
其中 m1.entries.reduce(new Map 的是 ... 啊不对,
reduce(initial, op, op_finish={ m1.putAll(m2); m1 }) 这实际相当于
forEach { (k,v) -> m1[k]=waitOperationTo(queues, v) } 其中 queues:List<BlockingQueue<T>>
m1=forks as Map<Object, Function<Stream<T>, ?>>
waitOperationTo 把 StreamSupport.stream(newSpliterator(addQueue()) ) 在 CompletableFuture.supplyAsync 里 apply 给 op
它返回
ForkingStreamConsumer(queues,actions=m1) , 这个里面定义一个 EndOf S(tream) 对象是“帮助”被 queue 的子 stream 鉴别的, finish() 时使用accept() = queues.forEach(q -> q.add(item));
get(i) = ((Future<R>) actions[i]).get();Segmentfault
java - Java8流的复制_个人文章
此处重写了tryAdvance接口,只是简单的从BlockingQueue中取出数据,执行action。业务逻辑中复制流是为了做什么事情,action就是这件事情。ForkingStreamConsumer.END_OF_STREAM是Queue中数据结束的标示
Forwarded from duangsuse::Echo (duangsuse)
fold.kt
1.1 KB
Forwarded from dnaugsuz
Reducer 这个设计是我之前写那啥的时候搞出来的,有一段时间了但设计没变
想必工程界也有框架有类似的功能吧,但是语言自带的库一般都写得很垃圾,不能过一遍生成多个值……
想必工程界也有框架有类似的功能吧,但是语言自带的库一般都写得很垃圾,不能过一遍生成多个值……
GitHub
ParserKt/ParserKt
Naive one-pass recursive descent, scannerless parser framework for Kotlin - ParserKt/ParserKt
Forwarded from PollutedHeck
看了下 Java8 实战,附录有提到用
有兴趣可以自己去看看,相当于一个
StreamForker 并行用一个流出多个结果有兴趣可以自己去看看,相当于一个
fork 的操作
duangsuse::Echo
https://segmentfault.com/a/1190000012641345 #Java #DontKnow #Stream 其实 ParserKt 里出现过的 Reducer 在 Java stream 里叫 Consumer, 动词都一样 这是个 Java8 StreamForker 实现,可以流一遍出多个结果,实质上和我的版本功能一致 简单说下, builder() 出一个 Consumer 然后会被拿去 sequential().forEach() 其中 m1.entries.reduce(new…
This media is not supported in your browser
VIEW IN TELEGRAM
看了以后我算是了解了下 Java 的流,和 Kotlin 的 Iterable/Collection operators ext funs 完全不是一个概念,这个流是 queue,async 的
但是上面实现的人明显不重视简洁性(甚至在
我感觉不是很优雅。(M<V>=Map<Object,V>) 理论上 forks: M<Function<Stream<T>, ?>>不能说难看,应该说是错的,完全滥用了流窗口大小 (不对,本身没有窗口,应该说传参方式太奇怪了
forks: M<String, Consumer<T>> 才算正常,或者说这根本就应该实现为组合些许 Consumer 的 Consumer 才对
在 build() 里它把函数们默认参
get(i)=actions[i].await() ?
实际上就是
🌚?? 这么麻烦
但是上面实现的人明显不重视简洁性(甚至在
map.assignEach {v->op(a,v)} 时有拽技巧的嫌疑)我感觉不是很优雅。(M<V>=Map<Object,V>) 理论上 forks: M<Function<Stream<T>, ?>>
forks: M<String, Consumer<T>> 才算正常,或者说这根本就应该实现为组合些许 Consumer 的 Consumer 才对
在 build() 里它把函数们默认参
()->op.apply(queueStream) 再套了一层 future (supplyAsync) ,然后再在 consumer 里 apply(x) = queues.forEach { it.add(x) } ?get(i)=actions[i].await() ?
实际上就是
workers: M<Pair<Queue<T>, /*supplyAsync(op.bind(queueStream))*/Future<R>>> 🌚?? 这么麻烦
Forwarded from Epics of Anti-Censorship
Telegraph
也论腾讯拿你的历史记录做了点啥
拿到历史记录之后干了什么?应该是读取了淘宝、天猫和京东的搜索记录,并且通过统一接口上传了特定的搜索关键词吧。 根据有关灵媒的说法,内部算法具体 URL 检查步骤如下: 确保 URL 是 UTF-16LE 编码的宽字符串 把整条 URL 转换成大写 寻找长度为 size 的,MD5(4个整数)哈希为 A B C D的子字符串。 MD5 是一种将任意长度内容转换为四个整数的单向函数。由于它找的是一小段字符串的 MD5,所以我们没法恢复出它想要找的真正原文是什么。 总共有四对这样的 (size, A, B, C…
Forwarded from dnaugsuz
https://t.me/dsuse/15727
总结了下,最后得出三行:
queues 也可以不放在
原版的其它函数:
Forker 类的 fork() 和 build() 感觉不至于用设计模式、命名失败,不作评。
Forker 可以用于归纳流至结果(如 1,2,3 => 6),但是默认带 async ,而且你的
看了我真的觉得一些 JavaEE 者必须学习一个,净搞些花里胡哨的,功能都没做好。
总结了下,最后得出三行:
workers: Map<Object, Pair<Queue<T>, Future<R>>> = forks.entries.associate { (k,op) -> val q=BlockingQueue(); k to (q to Complet_Future.supplyAsync(op.bind(SSupport.stream(BQSpilterator(q)) ))) }
apply(x) = workers.forEach { it.first.add(x) }
get(k) = workers[k].second.get()/*await*/ queues 也可以不放在
Pair.first ,而独立成 List 或 Set 。原版的其它函数:
finish() = apply((T)(Object)END_OF_STREAM) //unchecked cast
getResults() = sequential().forEach { accept(it) }.let { finish(); this }Forker 类的 fork() 和 build() 感觉不至于用设计模式、命名失败,不作评。
Forker 可以用于归纳流至结果(如 1,2,3 => 6),但是默认带 async ,而且你的
op: Function<Stream<T>,?> 必须处理一个 (Object)END_OF_STREAM ,返回类型无泛型参数,需强转看了我真的觉得一些 JavaEE 者必须学习一个,净搞些花里胡哨的,功能都没做好。
Telegram
duangsuse::Echo
https://segmentfault.com/a/1190000012641345 #Java #DontKnow #Stream
其实 ParserKt 里出现过的 Reducer 在 Java stream 里叫 Consumer, 动词都一样
这是个 Java8 StreamForker 实现,可以流一遍出多个结果,实质上和我的版本功能一致
简单说下, builder() 出一个 Consumer 然后会被拿去 sequential().forEach()
其中 m1.entries.reduce(new…
其实 ParserKt 里出现过的 Reducer 在 Java stream 里叫 Consumer, 动词都一样
这是个 Java8 StreamForker 实现,可以流一遍出多个结果,实质上和我的版本功能一致
简单说下, builder() 出一个 Consumer 然后会被拿去 sequential().forEach()
其中 m1.entries.reduce(new…
Forwarded from dnaugsuz
如果看的懂的话,可能我就没时间写它了🌝
想要提高技术水平,就必须压缩不重要的细节带来的时间开销,否则很难有精力走下去而不被表象蒙住眼睛。
其实原版也半通不通吧…… 看看以后能不能有改善
想要提高技术水平,就必须压缩不重要的细节带来的时间开销,否则很难有精力走下去而不被表象蒙住眼睛。
其实原版也半通不通吧…… 看看以后能不能有改善
Forwarded from duangsues.is_a? SaltedFish
duangsuse::Echo
执拗的我最后TM 还是写了,但是发现性能并没有比使用 Console.flush 之后有任何改善,看来不是渲染速度问题,是 IO 问题, Jawa 的 IO 速率他妈是废的 🌝 为了寻找减少抹布效应的方法我把原版 StringBuilder 都试过了,结果只是更慢 还是算了吧,不过 chunk buffering 写都写了,还是留着吧(本来直接 while ((frame = vid.getNativeFrame()) != null) 渲染也没问题的)
RingBuffer 支持的,奇妙的是我还用了 Android 上应该没的 AtomicInteger …… 其实 Queue 的实现才好吧 🌚
#Java #serialize #parsing, [18.01.21 10:11]
chen leiothrix: json反序列化的时候,有key对应两种不同结构有什么办法能针对性读取吗
捏造的信仰: [In reply to chen leiothrix]
这种情况的原因是类型信息缺失。如果你用 Jackson 可以看这篇 https://segmentfault.com/a/1190000023218408
ヾ(^▽^*)))Sam: 这种你的分别处理
要根据value值去if else
没啥好办法
I lluZ: 是的,直接当 map 处理,没法反序列化成一个 List<POJO>
ヾ(^▽^*)))Sam: list不行,因为你的数组不属于同一个类型无法搞
chen leiothrix: json反序列化的时候,有key对应两种不同结构有什么办法能针对性读取吗
捏造的信仰: [In reply to chen leiothrix]
这种情况的原因是类型信息缺失。如果你用 Jackson 可以看这篇 https://segmentfault.com/a/1190000023218408
ヾ(^▽^*)))Sam: 这种你的分别处理
要根据value值去if else
没啥好办法
I lluZ: 是的,直接当 map 处理,没法反序列化成一个 List<POJO>
ヾ(^▽^*)))Sam: list不行,因为你的数组不属于同一个类型无法搞
Telegram
ヾ(^▽^*)))Sam in Java 编程语言
要根据value值去if else
duangsuse::Echo
https://gist.github.com/duangsuse/64c9ac7a278da48f4b3de3dafd70e9df 🥳遇到困难,就老熬夜;后来我就提了一个,年轻人早点睡,做到12点就不做了睡大觉,长大了有福报。
#Kotlin #parser #ce https://t.me/dsuses/4519 🤔看来想做 REPL ,对字符终端模型没有坚实的理解是不可以的
写完贪吃蛇和烂苹果,就有经验了,不要老侥幸,下次就不会出了事,倒大霉。
写完贪吃蛇和烂苹果,就有经验了,不要老侥幸,下次就不会出了事,倒大霉。
Telegram
duangsues.is_a? SaltedFish
看了一下我觉得 Java 上的 REPL 最好有个 LineEditReader 这种,需要的 native API 仅 termios tcaget/set attr; struct termios 一个 (Windows 上再实现即可)
像这样:
class X extends Reader {
static native void cbreak(boolean on);
static void hmove(int offset); // 水平移动
static void vmove(int…
像这样:
class X extends Reader {
static native void cbreak(boolean on);
static void hmove(int offset); // 水平移动
static void vmove(int…