duangsuse::Echo
#py 周刊 #recommend #tool 带有 "Android 子系统", taskmgr,... 的网页版Win12 demo 🎨 #algorithm Hello Algo 多语言实例 #tool EasySpider +可视化编程 #android 高级包管理器 js: await using fp = openFile() Flask 深入探索: 请求上文、会话、CORS fastapi-users:开箱即用的 FastAPI 用户管理库 Django 发送带有验证链接的电子邮件…
#web 前端真的是需要新血液了…… 连个绝对定位和drag,resize 都那么稀罕
https://zhuanlan.zhihu.com/p/654984542
htmx 也是魔怔了,React(SSR组件)确实烂,但把烂代码放在node侧,那也是一样的,而是是反直觉的。 Vue都算最良心的了
htmx 在Django, Streamlit 之类爆火可能取决于前后端谁主场的问题, 反正我会站JS,py和直连DOM比谁更成熟不用说的
Van 支持 hydrate 了,好吧…… 好像只+1行代码 ,看起来就是纯replace
本来我想去建议Tao加个
后来觉得算了,只支持“选中”也怪割裂的,何况它的列表模板还在用map 甚至不支持真正的hydrate,可以遇见到它以后也很难支持:低抽象度这时是缺点。Van和Eqv差得太多了
https://zhuanlan.zhihu.com/p/654984542
htmx 也是魔怔了,React(SSR组件)确实烂,但把烂代码放在node侧,那也是一样的,而是是反直觉的。 Vue都算最良心的了
htmx 在Django, Streamlit 之类爆火可能取决于前后端谁主场的问题, 反正我会站JS,py和直连DOM比谁更成熟不用说的
Van 支持 hydrate 了,好吧…… 好像只+1行代码 ,看起来就是纯replace
init: Number(dom.getAttribute("data-counter")),
再看到 interface Props {
和 const{} = van.tags
我有点失望,不过 link({rel: "icon", href: "logo.svg"})
确实比 link(wKV({}))
好看,也更一致…… 很多接口要定型了。😐本来我想去建议Tao加个
state(0)(x=>x+1)
的用法,因为只有非JSX非模板的框架,能用好这种写法后来觉得算了,只支持“选中”也怪割裂的,何况它的列表模板还在用map 甚至不支持真正的hydrate,可以遇见到它以后也很难支持:低抽象度这时是缺点。Van和Eqv差得太多了
知乎专栏
看完这位小哥的GitHub,我沉默了
就在昨天,一个名为win12的开源项目一度冲上了GitHub的Trending热榜。 而且最近项目的Star量也在飙升,目前已经获得了2.2k+的Star标星。 出于好奇,点进去看了看。好家伙,项目README里写道这是一个14岁的初中生所…
#ai #tool
xiaomi https://t.me/LetITFlyW/10089
#web 前端框架的时代, https://nextjs.org/blog/next-14
新单脚本MVVM框架 https://ofajs.com/cn/index.html
wx md预览器 https://editor.mdnice.com/
#china
方脸:细颈瓶是斯大林,而不是玩群众互斗的毛泽东
- 改革开放不是作为,是曲线共产主义经济计划,是放权
小郑:切换字体,并不会让人分不清文明与野蛮
xiaomi https://t.me/LetITFlyW/10089
#web 前端框架的时代, https://nextjs.org/blog/next-14
新单脚本MVVM框架 https://ofajs.com/cn/index.html
wx md预览器 https://editor.mdnice.com/
#china
方脸:细颈瓶是斯大林,而不是玩群众互斗的毛泽东
- 改革开放不是作为,是曲线共产主义经济计划,是放权
小郑:切换字体,并不会让人分不清文明与野蛮
Telegram
LetITFly News
关于 ChatGPT 的一些有用的玩意儿👀
😋第三方前端/客户端(API)
https://github.com/Yidadaa/ChatGPT-Next-Web (Web)
https://github.com/Bin-Huang/chatbox (Windows/macOS/Linux)
https://play.google.com/store/apps/details?id=com.bytemyth.ama&hl=en_US&gl=US (Android)
https://apps.apple.…
😋第三方前端/客户端(API)
https://github.com/Yidadaa/ChatGPT-Next-Web (Web)
https://github.com/Bin-Huang/chatbox (Windows/macOS/Linux)
https://play.google.com/store/apps/details?id=com.bytemyth.ama&hl=en_US&gl=US (Android)
https://apps.apple.…
duangsuse::Echo
还有一些FP的错误 #design »=: (我们知道,OOP对象 constructor() 就是一个“多方法函数”,等同 when(arg0, {run:(self)=>overridedFun ,.})的闭包。是这样的「高阶函数」 - 函数作为值并不稀奇, 相反,滥用 partial(f) 与compose而非this链来隐藏参数,虽等价于 obj.bind.f ,却是一种无序亦无类型的表达习惯。typeclass是和C一样的无心智模型,这种散漫 不值得被崇拜 Python,Rust,Go 都…
https://www.zhihu.com/question/631144121/answer/3299457578
#js #java #web #news React系还有一张刁图,让我感叹
目前还只有JS能做str安全注入
当然20年前C#就支持ASP, Razor还支持
原来Javaer才意识到自己只是 CRUD boy??
#js #java #web #news React系还有一张刁图,让我感叹
sql`${}`
居然都能成为稀奇事(虽然之前我想用但没找到包。貌似用BaaS有 prisma 目前还只有JS能做str安全注入
当然20年前C#就支持ASP, Razor还支持
<button formAction="@( () => await Db( $"INSERT INTO Bookmarks VALUES ( {slug} )" ) )" >
前后端同构当然更合理(并不是像PHP那样的伪共用),但不要区分use client和use server更好原来Javaer才意识到自己只是 CRUD boy??
#js #ai Discord 其实Web版直接按 Ctrl+L 右方向 输入 "/0" 回车就可以跳到一楼
https://support.discord.com/hc/en-us/community/posts/360032043971-Scrolling-up-to-the-beginning-of-a-conversation
找了一下,发现全端都有这个 oldest message 看不到的问题,一般靠搜索和手动滚 😅
用机器人的话,可以每天对top10频道 pin message#0
请用 discordjs/rest 实现获取论坛A 的 top10个频道并 pin their message#0
> 请实现userscript(用于Discord): [aria-
label="子区标题"].ondblclick= location+='/0'
每次 transitionend时若url包含 /threads/ 注册此函数
#web 😅 scroll to top 都没有但有滚到最下和 Adv. Search 也是逆天,就像disc必须登录才能看一样
https://support.discord.com/hc/en-us/community/posts/360032043971-Scrolling-up-to-the-beginning-of-a-conversation
找了一下,发现全端都有这个 oldest message 看不到的问题,一般靠搜索和手动滚 😅
用机器人的话,可以每天对top10频道 pin message#0
请用 discordjs/rest 实现获取论坛A 的 top10个频道并 pin their message#0
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const rest = new REST({ version: '9' }).setToken('your token here');
// 获取论坛A的ID
const guildID = 'your guild id here';
// 获取论坛A的所有频道
rest.get(Routes.guildChannels(guildID))
.then(channels => {
// 按照你的标准对频道进行排序并获取前10个频道
const top10Channels = channels.sort(/* your sorting function here */).slice(0, 10);
// 对每个频道执行固定操作
for (const channel of top10Channels) {
rest.put(Routes.channelPin(channel.id, '0'))
.then(() => console.log(`Successfully pinned message in ${channel.id}`))
.catch(console.error);
}
})
.catch(console.error);
> 请实现userscript(用于Discord): [aria-
label="子区标题"].ondblclick= location+='/0'
每次 transitionend时若url包含 /threads/ 注册此函数
#web 😅 scroll to top 都没有但有滚到最下和 Adv. Search 也是逆天,就像disc必须登录才能看一样
Discord
Scrolling up to the beginning of a conversation
You can read the latest messages (JUMP TO PRESENT), but you can't simply do it with a first post of your conversation, like: JUMP TO THE FIRST POST.
duangsuse::Echo
#py #tool 浏览器缓存 图片 爬虫 python a.py 'x\.com' 200 ~/.cache/chromium/Default/Cache/Cache_Data/* python imgdump.py 'www' 100 `ls --sort time --reverse ~/.cache/chromium/Default/Cache/Cache_Data/*` #code import re,struct, os def ls_cache(urlRegex, kbSizeMin,…
#security #linux #reveng https://mastodon.social/@AndresFreundTec/112180083704606941
https://boehs.org/node/everything-i-know-about-the-xz-backdoor
https://twitter.com/Blankwonder/status/1773921956615877110
发现后门的人还只是一个 pg 社区的开发者
#tool srt 我来示范一下怎么获取全集字幕吧,《国宝特工》
https://pypi.org/project/SpeechRecognition/ 也可以用Azure等云服务
最后,如果能买API Key 的话可以直接用
https://platform.openai.com/docs/api-reference/audio/createTranscription#audio-createtranscription-response_format
#web GPU(类似 waifu4x https://real-cugan.animesales.xyz/) https://huggingface.co/spaces/Xenova/whisper-web
https://huggingface.co/spaces/aadnk/whisper-webui
>#china #ai 代购我不知道,API黄牛倒是不少,但免费的可以薅
据说 Claude.ai 更好,但也封锁了
国区魅力时刻:https://www.bilibili.com/video/BV1ip421U7Qx 大清苏联重现
如果你没有VISA(不能注册Azure的GPT或ASR/TTS),只有微信,可以用 https://openai-hk.com/?i=25623 这个中间商,起步价10块(有更好的推荐请私我.. 😓)
whisper-1 0.006美元/分钟 0.0426人民币 每段限25MB
网页版 https://github.com/openai/whisper/discussions/1018
和离线版是一样的
主要是Whisper的听说性价比在目前能算SOTA吧,而且能顺带充一个GPT4和midj(1个问题3毛钱啊)
可以在 ChatHub.gg (Alt+J) 使用代理商的API,各种 client webui, 本地GLM也都能用
我看了一下,淘宝有卖apikey的(openai不让搜了),gpt3 一口价5块,无需帐号。 也能用Whisper服务 🥰
单靠官方APIkey 只能限权,不能量贩,除了虚拟手机卡注册,这大概是公用号.. ( 我当时也很惊讶gpt4可以直接卖key) 现在gpt3栏大街了,我把sk贴出来:
ssk - v4SRWkhYGKu7EoUeIMJuT3BlbkFJFii1vkU3ZCdO7dyoADrG
我当时也很惊讶gpt4可以直接卖key
https://boehs.org/node/everything-i-know-about-the-xz-backdoor
https://twitter.com/Blankwonder/status/1773921956615877110
发现后门的人还只是一个 pg 社区的开发者
#tool srt 我来示范一下怎么获取全集字幕吧,《国宝特工》
>准备ASR服务+降噪优化
pip install -U openai-whisper demucs
>下载视频全P
yt-dlp -f0 https://www.bilibili.com/video/BV1Rx411j7aw?p={1..52}
>ffmpeg concat all m4a, start seek 110s, to wav 16k
audcat() { for f in `find *.$1|sort -n`; do echo -e "file '$f' \ninpoint $2"; done>ALL.txt; ffmpeg -f concat -safe 0 -i ALL.txt -ac 1 -ar 16000 -sample_fmt s16 -y ALL.wav; }
audcat m4a 110s
>去BGM
#demucs --two-stems vocals ALL.wav; mv separated/*/vocals.wav ALL.wav
#因为配置低就不示范了
>20M一个文件夹(24min一集,建议5集一批), 用同样原理把{1..6}/a.srt 收集回来
find *.m4a|sort -n|pr -aT -10|nl|xargs -L1 ruby -e'puts "mv "+ARGV.rotate.join(" ")'
mkdir {1..6}
for f in `find * -type d`; do cd $f; audcat m4a 110s; cd ..; done
#find -name *.m4a -exec mv {} $PWD \;
>识别生成中文srt
whisper --model base --language Mandarin ALL.wav
>去除回音代表的行
>transform srt file a (using srt.parse), iterate over a[], when a[i] not in a[i-1:i-N], keep it
for i in {1..11};do echo>>a "# $((i*5))前的5集";srt-process -f print --input ep$i.srt >>a; done
import srt,sys
# Set N value for checking against previous N lines
N = 2
_,srt_file=sys.argv
subs = list(srt.parse(open(srt_file)))
noDup=lambda cap,i: cap.content not in [c.content for c in subs[i-N:i] ]
filtered_captions = [cap for i,cap in enumerate(subs) if noDup(cap,i)]
# Save the result to a new SRT file
with open("ep" + srt_file, "w") as f:
f.write(srt.compose(filtered_captions))
https://pypi.org/project/SpeechRecognition/ 也可以用Azure等云服务
最后,如果能买API Key 的话可以直接用
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F "timestamp_granularities[]=segment" \
-F model="whisper-1" \
-F response_format="srt"
https://platform.openai.com/docs/api-reference/audio/createTranscription#audio-createtranscription-response_format
#web GPU(类似 waifu4x https://real-cugan.animesales.xyz/) https://huggingface.co/spaces/Xenova/whisper-web
https://huggingface.co/spaces/aadnk/whisper-webui
>#china #ai 代购我不知道,API黄牛倒是不少,但免费的可以薅
据说 Claude.ai 更好,但也封锁了
国区魅力时刻:https://www.bilibili.com/video/BV1ip421U7Qx 大清苏联重现
如果你没有VISA(不能注册Azure的GPT或ASR/TTS),只有微信,可以用 https://openai-hk.com/?i=25623 这个中间商,起步价10块(有更好的推荐请私我.. 😓)
whisper-1 0.006美元/分钟 0.0426人民币 每段限25MB
curl https://api.openai-hk.com/v1/audio/transcriptions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: multipart/form-data" -F file="@ALL.mp3" -F "timestamp_granularities[]=segment" -F model="whisper-1" -F response_format="srt"
网页版 https://github.com/openai/whisper/discussions/1018
和离线版是一样的
主要是Whisper的听说性价比在目前能算SOTA吧,而且能顺带充一个GPT4和midj(1个问题3毛钱啊)
可以在 ChatHub.gg (Alt+J) 使用代理商的API,各种 client webui, 本地GLM也都能用
我看了一下,淘宝有卖apikey的(openai不让搜了),gpt3 一口价5块,无需帐号。 也能用Whisper服务 🥰
单靠官方APIkey 只能限权,不能量贩,除了虚拟手机卡注册,这大概是公用号.. ( 我当时也很惊讶gpt4可以直接卖key) 现在gpt3栏大街了,我把sk贴出来:
OPENAI_API_KEY= ssk - X6muuhftCItNxCFy6bP7T3BlbkFJlkcCKxV8Js2v3mnoCAtZ
ssk - v4SRWkhYGKu7EoUeIMJuT3BlbkFJFii1vkU3ZCdO7dyoADrG
我当时也很惊讶gpt4可以直接卖key
PyPI
SpeechRecognition
Library for performing speech recognition, with support for several engines and APIs, online and offline.
#learn #web #tool spider
以yt-dlp 为首的刺头,支持 e-hentai.org 什么的
https://github.com/yt-dlp/yt-dlp
https://github.com/iawia002/lux?tab=readme-ov-file#supported-sites
https://github.com/KurtBestor/Hitomi-Downloader
https://t.me/dsuse/19360 😅直接从缓存下图片,ImageAssistant
https://github.com/nilaoda/N_m3u8DL-RE
https://jeanslack.github.io/Videomass/screenshots.html
特选零代码的
https://github.com/VinciGit00/Scrapegraph-ai/blob/main/examples/openai/json_scraper_openai.py
https://github.com/NaiboWang/EasySpider
https://www.octoparse.com/download
https://www.parsehub.com/quickstart
还有两个付费/仅关键词的
https://github.com/harismuneer/Ultimate-Social-Scrapers
https://github.com/alirezamika/autoscraper
以yt-dlp 为首的刺头,支持 e-hentai.org 什么的
https://github.com/yt-dlp/yt-dlp
https://github.com/iawia002/lux?tab=readme-ov-file#supported-sites
https://github.com/KurtBestor/Hitomi-Downloader
https://t.me/dsuse/19360 😅直接从缓存下图片,ImageAssistant
https://github.com/nilaoda/N_m3u8DL-RE
https://jeanslack.github.io/Videomass/screenshots.html
特选零代码的
https://github.com/VinciGit00/Scrapegraph-ai/blob/main/examples/openai/json_scraper_openai.py
https://github.com/NaiboWang/EasySpider
https://www.octoparse.com/download
https://www.parsehub.com/quickstart
还有两个付费/仅关键词的
https://github.com/harismuneer/Ultimate-Social-Scrapers
https://github.com/alirezamika/autoscraper
#think #web #tool
https://cssgridgenerator.io/
https://crocotile3d.com/
https://fixupx.com/Oroshibu/status/1808500235263418441?t=BtGGBHj9jnN2AReHW2VTWA&s=19
三視圖?
有趣的建模工具
帅啊!
螺莉莉的黑板报:
(๑•ㅂ•)و✧
https://dataset.wav.pub/
https://brython.info/demo.html
https://github.com/Distributive-Network/PythonMonkey
#py
螺莉莉的黑板报:
https://github.com/baskerville/plato/blob/master/README.md
你们 rust 真是啥都能干……
https://www.sea-ql.org/SeaORM/
这东西好用么……求教……
https://gitlab.com/coolreader-ng/crengine-ng
有趣的引擎
https://chinese-font.netlify.app/ font
https://typst.app/universe/package/bob-draw
#svg
https://ivanceras.github.io/svgbob-editor/
#code
duangsuse:
大量复制粘贴十分抽象
list有那么难用吗
难道你没注意到近十行只变了1个参数
AIGC也没脚本化得这么严重吧
我看还是用list first!null好了,这么八股文…… 大家现在都是用get null取代预判has的
这种到处预判的风格,很像你找大佬问问题,先发「您在不在」,他只好回个在,然后你不在线……
表达式化比你想的要多哦:
>Spring如何把 @Autowired T xx; 换为 var xx=find(T.class)
var Ts = [T.class].map( applicationContext::getBean);
你在class{}里加那一堆定义,如果只引用了一次,就完全不应该引用。 到底都是要查bean的
从code smell来看,只使用了1次的变量名是无效的;如果只是为了易读新建变量,只能证明你的helper fn命名的有问题
kt已经有!! 了,还想要更多
Java 一大特色,注解属于元数据,和函数调用有重大区别
duangsuse:
那这是定义“随用随扔”变量名的理由吗
函数和变量是这么用的?
java以省略[""] 为由引入太多常量复杂度的优化了,都要所谓框架来解决
纯粹是make compiler happy,把一个schema弄成它能读懂的class,然后再强转Any来构造class而已
js里一个字典让java用就是这么麻烦,其实能用几次呢? init完就扔了,根本不是性能瓶颈。
注解的本意,应该和py的 @decorator 一样,是接受class元数据的编译期函数才对
而不是等到运行时才去查什么field有哪些@属性 然后逐个.set()
要动态生成一个类型,来获取注入,简直无理取闹。 明明就该在编译期产生Registry.get&fillNew的样板函数
这是属于既把元编程的路封死了,还不让基于注解的注入框架提供统一的“反射”方法
其实jawa懂这个道理,但它偏偏就做得很烂,就会个@Override
duangsuse:
为了编译速度这也太幽默了,其实,jvm作为栈机 基本就是带类型签名的GNU dc计算器,不需要什么编译优化
如果递归下降一遍,校验下类型 生成个push call 就能花什么编译时间,属于是用PHP的方式搞算法了
而且javac的能力还远没有到c预处理器的程度,为了优化? 我看是他们不在乎程序/类定义的优雅性
什么序列化啊,也没有做规范,和py能 import json,yaml,toml,marshal 能比?就一个用来RPC的ObjStream,还被业界遗忘,哈哈
汤姆猫是大专必学
虽然汤姆猫的Biz程度也就比Node http-server强半点吧
所以问题就是Result类型为何没有重载 !!, 让它看起来仿佛只是带有错误消息是null
凭什么!! 只能校验 Type? 呢?
assert也是乐观/悲观路径
Exception也是,为什么不能一起判定了?
还非得搞个ifEmpty, ifBlank.. ifNullOrBlank..
莫名其妙
duangsuse:
这不是废话吗?例如买30天大会员,肯定是30* 24*60*60秒后失效,这才是世俗意义上的电脑时间
看到py关于时间和日期/时差有3个API
我就觉得抽象
audit就是一个不懂AOP的,其实unix可以靠strace审查syscall,win32的 sysinternals.com 也有进程日志功能
与其自己搞个无人知晓的轮子,不如封装别人的,两全其美
把OS的活都包揽了,难道py是要运行在Ring0把内核驱动都带上? 那必须支持啊
绷不住了,抽象程度直逼jawa
一开始就不该搞所谓orNull
默认 first{}!! 就够了
我在js里都是把Error视为object返回值的特例,和null是一个意思
这样就不存在什么orNull orElse的,catch表达式也免了
就是语言设计者对值体系的理解不过关,例如NaN就是numbers的null才对,而不是什么number?
这样才能用统一的方法去报错/换默认值
可悲的是一开始就没把悲伤/快乐路径当问题啊,真是异常搞心态
duangsuse:
幽默IDE
完全相信它的API有一大堆根本用不上的class
忸怩作态的软件没必要去维护
kcp是这样的,可 import ast 自 https://python-future.org 就没变过😋
py只是用:隔离一个表达式先于=执行,就实现了高贵语言们的静态检查
既可以用于静态分析,也能在运行时查看f.annotation ,完备的数据不需要反射
btw. 大佬应该会做一个DSL
Message.invoke{ id==mid }
Message.select{ id==mid }//多项
可是这种写法才是真正的SQL逻辑式
既然Msg(id=)能构造数据, Msg{id==} 就能查询
这不是很合理么 #kt
很简单,如果做得太标准,以至于移植到任何一门语言里都没必要修改的话
就没人给官方docs贡献流量了
duangsuse:
https://www.liuwj.me/posts/ktorm-introduction/
🤔 一个SQL函数.xml codegen 能被吹爆,还有人卖课是我没想到的
ES6里一句 sql${} 解决的东西,哈哈
「没想到他文化程度那么低」……
怎么会呢,语句能缓存,再怎么也比一次加载完dao好
你要是不喜欢,或者不相信语法糖有缓存,可以做成生成函数的形式
例如
updateId=f=sqlFn2{a,b-> Pair{B/b, A/a}}
f("bye",0)
所以说,如果你不相信DSL能被缓存,可以转为生成sql函数的形式啊
这不是MyBatis++ ?
https://github.com/JetBrains/Exposed/blob/main/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Op.kt#L184
我只能说,缓存键要么是调用点或次数
要么是函数
似乎很难单独缓存DSL对象,除非对它们的构造器
幸运的是, key eq x 里x的修改能缓存,因为它是参数
https://jetbrains.github.io/Exposed/frequently-asked-questions.html#q-how-to-get-a-plain-sql-query-which-will-be-executed
https://stackoverflow.com/questions/74821893/postgresql-arrays-instead-of-extra-table-in-a-many-to-many-relationship
涨姿势了,以后 1:N用数组json N:N用join
duangsuse: #fp
要是kt能允许编译期生成一部分表达式,就没这问题了😅😅😅
可惜啊, unquote{bash(q(trim("trimedStr")))} 这当然是lisp的专利
其中q() 被生成为一个字面量,就像闭包捕获:
fun bash(s)=trim(s).let:
paste {system(it)}
并没有所谓的编译期,因为编译器能访问所有lib API
0开销不是瓶颈问题,但事关语言的脸面
明明就很有用,可被一些人理解为「并非瓶颈的东西」
然后被rustc拿来完魔法
要我说他们就是傻屌,只不过是把闭包「捕获」的实现方式,改为内联字面量(unquote)
就能轻松突破编译、运行的动静边界,根本没有引入任何新API ,没有什么循环展开和 kotlinpoet javapoet的区别
他们做成什么样了? 正则的缓存还不如py的拿dict查😅
https://cssgridgenerator.io/
https://crocotile3d.com/
https://fixupx.com/Oroshibu/status/1808500235263418441?t=BtGGBHj9jnN2AReHW2VTWA&s=19
三視圖?
有趣的建模工具
帅啊!
螺莉莉的黑板报:
(๑•ㅂ•)و✧
https://dataset.wav.pub/
https://brython.info/demo.html
https://github.com/Distributive-Network/PythonMonkey
#py
螺莉莉的黑板报:
https://github.com/baskerville/plato/blob/master/README.md
你们 rust 真是啥都能干……
https://www.sea-ql.org/SeaORM/
这东西好用么……求教……
https://gitlab.com/coolreader-ng/crengine-ng
有趣的引擎
https://chinese-font.netlify.app/ font
https://typst.app/universe/package/bob-draw
#svg
https://ivanceras.github.io/svgbob-editor/
#code
duangsuse:
大量复制粘贴十分抽象
list有那么难用吗
难道你没注意到近十行只变了1个参数
AIGC也没脚本化得这么严重吧
我看还是用list first!null好了,这么八股文…… 大家现在都是用get null取代预判has的
这种到处预判的风格,很像你找大佬问问题,先发「您在不在」,他只好回个在,然后你不在线……
表达式化比你想的要多哦:
>Spring如何把 @Autowired T xx; 换为 var xx=find(T.class)
var Ts = [T.class].map( applicationContext::getBean);
你在class{}里加那一堆定义,如果只引用了一次,就完全不应该引用。 到底都是要查bean的
从code smell来看,只使用了1次的变量名是无效的;如果只是为了易读新建变量,只能证明你的helper fn命名的有问题
kt已经有!! 了,还想要更多
Java 一大特色,注解属于元数据,和函数调用有重大区别
duangsuse:
那这是定义“随用随扔”变量名的理由吗
函数和变量是这么用的?
java以省略[""] 为由引入太多常量复杂度的优化了,都要所谓框架来解决
纯粹是make compiler happy,把一个schema弄成它能读懂的class,然后再强转Any来构造class而已
js里一个字典让java用就是这么麻烦,其实能用几次呢? init完就扔了,根本不是性能瓶颈。
注解的本意,应该和py的 @decorator 一样,是接受class元数据的编译期函数才对
而不是等到运行时才去查什么field有哪些@属性 然后逐个.set()
要动态生成一个类型,来获取注入,简直无理取闹。 明明就该在编译期产生Registry.get&fillNew的样板函数
这是属于既把元编程的路封死了,还不让基于注解的注入框架提供统一的“反射”方法
其实jawa懂这个道理,但它偏偏就做得很烂,就会个@Override
duangsuse:
为了编译速度这也太幽默了,其实,jvm作为栈机 基本就是带类型签名的GNU dc计算器,不需要什么编译优化
如果递归下降一遍,校验下类型 生成个push call 就能花什么编译时间,属于是用PHP的方式搞算法了
而且javac的能力还远没有到c预处理器的程度,为了优化? 我看是他们不在乎程序/类定义的优雅性
什么序列化啊,也没有做规范,和py能 import json,yaml,toml,marshal 能比?就一个用来RPC的ObjStream,还被业界遗忘,哈哈
汤姆猫是大专必学
虽然汤姆猫的Biz程度也就比Node http-server强半点吧
所以问题就是Result类型为何没有重载 !!, 让它看起来仿佛只是带有错误消息是null
凭什么!! 只能校验 Type? 呢?
assert也是乐观/悲观路径
Exception也是,为什么不能一起判定了?
还非得搞个ifEmpty, ifBlank.. ifNullOrBlank..
莫名其妙
duangsuse:
这不是废话吗?例如买30天大会员,肯定是30* 24*60*60秒后失效,这才是世俗意义上的电脑时间
看到py关于时间和日期/时差有3个API
我就觉得抽象
audit就是一个不懂AOP的,其实unix可以靠strace审查syscall,win32的 sysinternals.com 也有进程日志功能
与其自己搞个无人知晓的轮子,不如封装别人的,两全其美
把OS的活都包揽了,难道py是要运行在Ring0把内核驱动都带上? 那必须支持啊
绷不住了,抽象程度直逼jawa
一开始就不该搞所谓orNull
默认 first{}!! 就够了
我在js里都是把Error视为object返回值的特例,和null是一个意思
这样就不存在什么orNull orElse的,catch表达式也免了
就是语言设计者对值体系的理解不过关,例如NaN就是numbers的null才对,而不是什么number?
这样才能用统一的方法去报错/换默认值
可悲的是一开始就没把悲伤/快乐路径当问题啊,真是异常搞心态
duangsuse:
幽默IDE
完全相信它的API有一大堆根本用不上的class
忸怩作态的软件没必要去维护
kcp是这样的,可 import ast 自 https://python-future.org 就没变过😋
py只是用:隔离一个表达式先于=执行,就实现了高贵语言们的静态检查
既可以用于静态分析,也能在运行时查看f.annotation ,完备的数据不需要反射
btw. 大佬应该会做一个DSL
Message.invoke{ id==mid }
Message.select{ id==mid }//多项
可是这种写法才是真正的SQL逻辑式
既然Msg(id=)能构造数据, Msg{id==} 就能查询
这不是很合理么 #kt
很简单,如果做得太标准,以至于移植到任何一门语言里都没必要修改的话
就没人给官方docs贡献流量了
duangsuse:
https://www.liuwj.me/posts/ktorm-introduction/
🤔 一个SQL函数.xml codegen 能被吹爆,还有人卖课是我没想到的
ES6里一句 sql${} 解决的东西,哈哈
「没想到他文化程度那么低」……
怎么会呢,语句能缓存,再怎么也比一次加载完dao好
你要是不喜欢,或者不相信语法糖有缓存,可以做成生成函数的形式
例如
updateId=f=sqlFn2{a,b-> Pair{B/b, A/a}}
f("bye",0)
所以说,如果你不相信DSL能被缓存,可以转为生成sql函数的形式啊
这不是MyBatis++ ?
https://github.com/JetBrains/Exposed/blob/main/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Op.kt#L184
我只能说,缓存键要么是调用点或次数
要么是函数
似乎很难单独缓存DSL对象,除非对它们的构造器
幸运的是, key eq x 里x的修改能缓存,因为它是参数
https://jetbrains.github.io/Exposed/frequently-asked-questions.html#q-how-to-get-a-plain-sql-query-which-will-be-executed
https://stackoverflow.com/questions/74821893/postgresql-arrays-instead-of-extra-table-in-a-many-to-many-relationship
涨姿势了,以后 1:N用数组json N:N用join
duangsuse: #fp
要是kt能允许编译期生成一部分表达式,就没这问题了😅😅😅
可惜啊, unquote{bash(q(trim("trimedStr")))} 这当然是lisp的专利
其中q() 被生成为一个字面量,就像闭包捕获:
fun bash(s)=trim(s).let:
paste {system(it)}
并没有所谓的编译期,因为编译器能访问所有lib API
0开销不是瓶颈问题,但事关语言的脸面
明明就很有用,可被一些人理解为「并非瓶颈的东西」
然后被rustc拿来完魔法
要我说他们就是傻屌,只不过是把闭包「捕获」的实现方式,改为内联字面量(unquote)
就能轻松突破编译、运行的动静边界,根本没有引入任何新API ,没有什么循环展开和 kotlinpoet javapoet的区别
他们做成什么样了? 正则的缓存还不如py的拿dict查😅
cssgridgenerator.io
CSS Grid Generator
CSS Grid Generator - a user-friendly tool designed for web developers to effortlessly create customizable CSS grids for seamless web development.