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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
悲惨的起因,只是因为在 GitHub 上看到别人有用 Python+Pillow 写这个:

https://github.com/FerryYoungFan/SimpleTextMontage

虽然数学不好,对某些关系不那么扁平的数据处理也会非常吃力的 duangsuse 就头脑发热地想:

『这么简单的程序,我怎么可能不会写?我一定要写出来看看』

结果就杯具…… 😭 不过还是有一点收获,就是我学会了如何用 color average 插值写位图 scale 算法
虽然花了我至少 6 个小时的时间才完成到可以生成图片(本来应该只要一个小时,可是被 argparse 坑了…… 我不该一上来就填那么多参数),但感觉也还可以,而且我没有在任何关键问题上查资料,也没有看太多次 help
学习还是有效果的,毕竟我学会了这些 API:

Image.open(path)
Image.new(space, coord, fill)
Image#width, Image#height
Image#convert(space)
Image#getpixel(p) -> tuple
Image#setpixel(p, tuple)
ImageDraw.Draw(img: Image)
Draw#text(p, txt, font=, fill=)
ImageFont.load_path(path)
ImageFont.truetype(name, size=fntsz)
ImageFont.FreeTypeFont

当然一般来说为了性能(其实当然在 DIP 的时候算法是最重要的)都直接用 JVM 的 awt.BufferedImage 吧……

javap javax.imageio.ImageIO
javap java.awt.image.BufferedImage


我的 Gist 上有 Kotlin 字符画 ASCII Art 生成器的源码

看了 FerryYoungFan 的版本,10:52-11:27 花了半个多小时,好像不是提前写好了的,唉

算法上,除了 [xs[k:(k+2)] for k in (0,2,4)] 这种没见过(也不是不会写)都知道
不过设计上,没有扣像、 (keyColor, keyThres, keyRatio) 、自动渐变的背景色 (刚才我以为 count avgcolor 是拿来判断背景色的…) 和 xy padding (w- colPxs*m) /2
也没有加 textVsp 和 textHsp 文字间距,和图像边角的间距,我的版本写的更活一点,不过大概是没有太大意义的……

另外 (keyColor, keyThres), keyRatio 我还是会写的,之前的 Kotlin ASCII Art 就用到了 filter 色值的算法;只不过这个是按照 abs 符合要求色块数目来取舍是否生成文字

如果我使用高效的 Numpy/Pillow 内建函数,而不是我手动的 average 插值 scale 算法(Montage.clippy) 的话,就可以拿来处理视频(否则太慢了,处理不过来),实际上 B 站也有一个罗小黑战绩《晚安喵》的这种视频,有心人不妨试试重构。

#Python #tools #DIP
#school #text
《职业生涯规划》 手抄报文本
学习的技巧

* 懂得坚持,两百页书本,十个小时不换书
* 奋发图强,一天阅读一千行
* 少出门、少坐汽车,小心 PM2.5
* 注意身体,做到12点,就不做了,睡大觉
大不了第二天再重新来过。
* 意识到中国程序员人均就业前写8000, 0000字…位
的代码,不仅在于积累,关键在于积累。
* 编程要学数据库、ASP、运维、测试、全栈、PHP、
MySQL、表格、数据整理迁移、关系代数、C、Basic、
计算机二级、分布式、JavaEE 、Hadoop、Mybatis、Glassfish、
Tomcat、LAMP, 关键在于紧抓当下,最好青年时期就学过。
* 不能以追求经济逆付为目标去大公司实习,不然会被996
* 遇到困难,要珍惜身体,就不做了, 睡大觉;你一不输出bug,二不发表抱怨,三不强要奖金,还有什么好说的。

管理的技巧
* 那些做错事的员工,他也是有一本账,这个账是记在那的。
他一旦出事了,这个账全给你拉出来了,别看他们今天闹得欢,你今后拉清单,都得应验的,别让他们做这种事情。
* 团队有任务要 deadline,必须急得像热锅上的蚂蚁,全员996,
不准吃饱了没事干的人睡大觉。
* 如果有员工咧了嘴,后诉他“咧了就好啦,免得下次你倒大霉”
* 打牢团结基础,基础不牢,地动山摇
* 对员工轻税允差(chaī),通商宽衣
* 市场有风平浪静之时,也有风狂雨骤之时,狂风骤雨可以掀翻小池塘,但不能折欠番羽大公司,因为即便波涛汹涌,
找准了自强不息之道的管理者还是会堤防,而不麻痹大意。
* 注重在基层员工,的艰难困苦难艰困的职位,要亲自指挥、亲自部署他们的员工福利。
* 小技巧:在大会现场反对你的气焰发酵时,可以发起不同意者举手的投票,你经验就多了;举手的人全都倒大霉。
#HTML #JS #DontKnow 你知道吗? 🤔
HTMLElement 的 remove()replaceWith(e1) 都不需要手动拿 e.parentElement ,只有 insertBefore(e1, e) 需要在 parent 上
如果不用 JQ ,可选注册 document "DOMContentLoaded"window "load" 事件

element 和 node 的区别在于,前者只能是 <a> <b> <div> 这样的元素,后者可以是 #text 文本标签。

HTML 里基于 XML 的部分有三种情况: <meta charset="UTF-8"> 的单独标签、 <div></div> 的配对标签(with childNodes)、 <link rel="stylesheet"/> 的折叠(collapsed)标签,有些配对标签也有折叠形式,但折叠和 no children 是不同情况。

有许多方法可以缩写 HTML ,最常见的是基于 CSS 选择器的 emmet.io 和基于缩进的 模板语言 #Ruby slim-lang.com ,而 DOMParser 本身也支持兼容解析修正一些不完整的文档。
想在社交平台分享自己的网站, OpenGraph 了解下?

- !!""!!0!![] 都是 true ,第一点往往造成隐患 必须详细检查
- undefined == null ,所以有时用 === 区别严格相等性
- JS 最不常用的两个关键字: delete o[k];v=with(o,o1) { attr }

许多时候:
如果用 e.onclick = 的简写,在任何地方的(其他)脚本重复注册时会导致覆盖,所以尽可能用 addEventListener
JS 里较短参数的函数兼容较长处的类型限制(允许无视参数),但在调用时省略默认参数可能造成性能问题,在绘图/大批/频繁处理时,需要多用图形界面的 profiler