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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from Phonograph (Ralph 萌新喵)
建议大家升级到 Windows XP
Forwarded from Phonograph (Ralph 萌新喵)
https://github.com/LeadroyaL/pdd_3years/blob/master/pdd_3year.md
我昨天在CC98看到了一篇相同的文章,就是这位校友写的。看起来今天他push到了GitHub上。
在这篇文章中,他具体讲述了在拼多多的经历,写得还是比较细的。供大家参考。
#js #dom #parsing 提问: DOM 里如何拿到 <h1>~<h6> 标题树?
假设所有 heading 都在 document.body.children

和解析 #Python, yaml 的缩进实质相同,我给两种方法(递归层宽、Int栈循环)
输出类似 ["# a", e2, e3, ["## b", ee2], e5] 这种
算法对输入数据的抽象有点问题,关键点两个:
1. 何时解析一个子节点(上面 "## b")
2. 获取头部深度及建设每层 [head, *items] 的函数

和 Python 解析的主要区别在于:
1. 在解析非 <hN> 项时不需要取其深度
2. 没有 : 后无换行的“单行简写”(可选 : layout) 的说法
但是我们仍然会写兼容 Python 缩进解析的代码,用抽象层掩盖 DOM 的对非 <hN> 元素深度(因无此概念)的不处理。

畸形的基础抽象:
var lastHDepth = 0/*当前文段层深度*/;
const RE_HTAG = /H(\d+)/g
, isHeading=(e) => RE_HTAG.test(e.tagName)
, getHeadingDepth=(e) => { var n=parseInt(RE_HTAG.exec(e.tagName)[1]); lastHDepth=n+1; return n; }
, getElementDepth=(e) => lastHDepth;
实现的一些细节:
0. 实现最大的要点是:仅需过一遍,但内部元素皆可能“跌破”两层嵌套,需要级联化处理层结束的逻辑、终末项的实际属从层;
此外第一层是特殊的——它无需 heading 开头,但内部模式和前者一致。
1. 建设每层子树结构不需要提供函数值,统一存储形式允许完后重赋值即可
2. 可以提供 onXXX() 函数值检查缩进深度步进是否合法
递归层宽: #js #code
(补充:算法我都写出来了,调试了很久,待会贴链接)

Int栈算法:
其实就是比较骚的循环显式栈化重写

本身也不是什么复杂的算法(真正“复杂”的在于如何设计高性能、易组合的复用架构),分词器层面处理就只能用栈,然后业界主流实现是转化成 internal 的 END 词条然后交给 yacc 一样的状态机,把嵌套结构解析第二遍。
老ParserKt 的实现是 LayoutPattern (不如 fastparse 的 " ".rep(indent+1).map(_.len).flatMapX(new Layout(i).factor.rep(1, sep = ("\n"+" "*i))
)
方便),写第一遍看起来易用性还不好;当然,这是个泛用 #algorithm ,功能根本不止解析人类易读嵌套结构。
以上
deep.html
2.1 KB
#HTML #code #parsing #algorithm 本以为很快就行的,结果想了半天调试了半天😂,最后一个不是因为十进制移位和数据视口费时,反而是 tailcall 循环忘了加 return,真是眼高手低啊
#PHP while ($x = each($xs)) ,然后 destruct 是 list ($a,$b)=pair? 感觉有点混乱…… 为什么 ArrayIterator 和 Array 是绑在一起的,虽然可能是为了降低分配开销吧
#code:
function para_filter($para) {
$filtered = array()
while (list($k, $v) = each($para)/*deprecated*/) {
if (!($k=="sign"||$k=="sign_type"||$v=="")) $filtered[$k]=$v
}
return $filtered;
}
duangsuse::Echo
#js #dom #parsing 提问: DOM 里如何拿到 <h1>~<h6> 标题树? 假设所有 heading 都在 document.body.children 里 和解析 #Python, yaml 的缩进实质相同,我给两种方法(递归层宽、Int栈循环) 输出类似 ["# a", e2, e3, ["## b", ee2], e5] 这种 算法对输入数据的抽象有点问题,关键点两个: 1. 何时解析一个子节点(上面 "## b") 2. 获取头部深度及建设每层 [head, *items] 的函数…
ParserKt 的新简单版(因为之前说的又懒得写了...正好做个实用的子集 特性未必少) 估计会支持很甜但低开销的缩进 Block 支持,此外 operator parsing 也改进了贼多,从未深化制度的二叉树转为亲自管理逆波兰 List 惰性结构了(因为这次重设,leftRec 左递归最终还没出现就退役了…… 我们怀念它)
(另:冰封哥在上面引用的文章里说 Python 不支持多行 lambda 是因为 Pyteam 的人不了解如何解析可选 layout block,我不太赞同他,多行 lambda 在表达式,和 if: while: 等语句有点区别 会有碍排版整齐性,这点不少圈内人也认同) #plt #ce #parsing

待会这个 html 和昨天要重写的弄完了,就说说新版如何完整支持各种工业语言的解析,以及如何与编辑器建桥代码高亮。
duangsuse::Echo
怎么感染越多我心越荡 幻如一只乒毒随风自由的在传染 我要握紧手中岿然却又不动的权杖 我会变成巨人十里山路不换肩 怎么感染越多我心越荡 犹如一担小麦一天能游泳一千米 我要深埋心头上秉持等待枪毙的清单 一直往大风吹的方向倒车去 传啊传啊我的骄傲放纵传呀传不毁我萨格尔王 任毒传任它乱毁不灭是我头上的王冠 传啊传啊我无产不害怕传啊传啊无所谓批判我你看我在亲自的指挥 你看我在勇敢的去开脱啊 怎么感染越多我心越荡 犹如一件纱衣随风轻飘的在狂舞 疫情可以掀翻美国爸却不影响大中国 不惜了一切的代价莫缅怀他 传啊传啊…
开个小差( #Python #code https://paste.ubuntu.com/p/5kNyQYJXCK/ #linux #tools #cli
还记得之前的曲子吗?弄个简单的 lrc 歌词制作,不需要 async getchar() 。

from subprocess import Popen
from time import time

class LrcRepr:
def show(lines): return "".join([f"[%02d:%02d.%02d]%s" %(t/60, t%60, int(t%1*100), s) for (t, s) in lines])

from sys import argv
from os import getenv
def main(args = argv[1:], srep=LrcRepr):
(fpM, fpT) = sorted(args, key=lambda s:s[s.rfind('.')+1:])
sp = Popen([getenv("PLAYER", "ffplay"), fpM])
t0 = time(); ts = []
with open(fpT, "r") as f:
try:
for ln in f: input(); ts.append(time()); print(ln)
except KeyboardInterrupt: pass
sp.terminate()
f.seek(0); lines = [(t-t0, ln) for (t, ln) in zip(ts, f)]
print(srep.show(lines))
main()


亲自按键,亲自制作的演示可用 mpv 野子.ogg --sub-file=野习.lrc 命令播放(话说 Linux 上竟然没一个 music player 支持滚动歌词?!)
Audio
#bilibili #vocaloid #music 苏运莹版 歌: 幻晓伊
野习.lrc
1.7 KB
#txt 草( 录了四遍
#HTML #js #css #docs 如何创建分屏
[html - Split in half vertically and horizontally second flex item - Stack Overflow](https://stackoverflow.com/questions/49550792/split-in-half-vertically-and-horizontally-second-flex-item)
[How To Create a Two Column Layout](https://www.w3schools.com/howto/howto_css_two_columns.asp)
[How To Create A Split Screen](https://www.w3schools.com/howto/howto_css_split_screen.asp)
[Split.js](https://split.js.org/)
🤔今天才知道 CSS flexbox 不是用来创建 responsive 的,只是可以创建随意缩放而良好排版的嵌套盒
responsive 要靠 @media 指定覆盖条件,浏览器支持好

https://stackoverflow.com/questions/6014702/how-do-i-detect-shiftenter-and-generate-a-new-line-in-textarea 这个用 Selection/Keyboard API
<hr> <label> 这些标签和 resize, outline 的CSS熟悉 都是新学的啊,看来还是得做了才知道。
#javascript #ui #plt #js #web #tools https://rete.js.org/ 有意思,可视化编程框架,但仅仅是框架 写了点加减法、浏览器事件的例子
#cg #js https://threejs.org/editor/ ThreeJS 之前就听说过,没想到除了能弄 3D 动画,还有线上 Blender 式设计器…… 很高端
Forwarded from libra hall
好的内容,读者是随着时间来累积的,可能几十年后还有读者
Forwarded from libra hall
10万+的爽文,可能下周就无人记得了
Screenshot_20210115_010615.png
184.8 KB
估计jekyll还没好,睡了,好无奈(草怎么有错别字……
Forwarded from &'a ::rynco::UntitledChannel (Rynco Maekawa)
dnspy 怎么被 archive 了