Skip to content

Instantly share code, notes, and snippets.

View duangsuse's full-sized avatar
👨‍💻
Leaning at school

duangsuse duangsuse

👨‍💻
Leaning at school
View GitHub Profile
@duangsuse
duangsuse / why_not_asyncdef.py
Created December 1, 2024 05:18
脚本语言上想做「非侵入async」,很简单,问题是时延和错误边界的明确性。
#!ipy -i
def cat():
x=yield '1st'
while True:
x=yield x
z=cat(); next(z) #x=() 待执行
[z.send(n) for n in range(10)]
'''
@duangsuse
duangsuse / str_link.cc
Created September 16, 2024 13:31
UmbraString等数据结构话题
N2=(x,y=x)=>new _N2(new Float32Array(2),x,y)
data=(kv,T)=>{
let s=(T+''), sub=(s,f)=>s.replace(/(\w+)/g,f), kvs=kv.split(','), cg='',
vec=(k,v)=>`${k.substr(1)}(v){let a=this._,i=${kvs.length-1};while(i-->0)a[i]${k[0]}=${v}; return this}`
if(kvs[0]=='_') {
'+p *pp -m /mm'.split(' ').forEach(k=> cg+=vec(k,'v')+'_'+vec(k,'v._[i]'))
kvs.slice(1).forEach((k,i)=> cg+=`get ${k}(){return this._[${i}]}set ${k}(v){this._[${i}]=v}`)
}
T=eval(sub(s,(m,k)=>kvs.includes(k)?`this.${k}`:k).replace('{\n',`{constructor(${kv}){${sub(kv, `this.$1=$1`)}}`+cg))(); this[T.name]=T
@duangsuse
duangsuse / catdo
Last active August 5, 2024 01:17
Developing: tool to cache java main() statics e.g. $ kotlinc
#!/bin/env bash
#kotlinc -include-runtime catdo.kt -d ~/catdo.jar; install -Dm755 -t ~ catdo
catdo() { local k=$1;set -- "$PWD0" "${@:2}"; printf "%s\0" "$@" >buf; printf "%08x" $(wc -c <buf)|basenc --base16 -d >>$k; cat buf>>$k
ruby -e 'k,bf=ARGV; while File.read(bf)!=k do end' $k buf; cat $k
}
[ -z $2 ] &&env JAVACMD=$PWD/catdo $1 &&exit
j=$(echo "$@"|sed -E 's/(\S*Main)/CatdoKt \1/;s/-cp /\0catdo.jar:/')
read f fl <<<$(sed -E 's/.* (\S*Main)(.*)/\1.text \2/'<<<$j)
@duangsuse
duangsuse / compile-typer.md
Last active March 12, 2024 12:44
compile-typer, 泛型,Visitor. 懒得喂给GPT了,因为知道要协商很久。在语法低冗余前,这些比DSL还虚的还是少设计的好。从库历史的角度看,复杂理论的“美”绝对是昙花一现的。

请写一个 type inference ,正确判别以下表达式

toAST.run {
  `+`(+1, +1)
  `+`(+"Hi", +"World")
  say(+"Good"); say(Str)
}
toAST.runCatching {
  `+`(+1, +"World")
@duangsuse
duangsuse / compile-typer.md
Created March 9, 2024 13:45
懒得喂给GPT了,因为知道要协商很久。 我觉得在语法低冗余前,这些比DSL还虚的还是少设计的好。从库的角度看,复杂用法的“美”绝对是昙花一现的。

请写一个 type inference ,正确判别以下表达式

toAST.run {
  `+`(+1, +1)
  `+`(+"Hi", +"World")
  say(+"Good"); say(Str)
}
toAST.runCatching {
  `+`(+1, +"World")
@duangsuse
duangsuse / reflect_jsh.kt
Created February 22, 2024 17:21
dumps(Pair::class) (Pair(0,0), mutableMapOf("first" to 3))
import jdk.jshell.JShell
import jdk.jshell.spi.*
import java.lang.reflect.*
import kotlin.reflect.KClass
import kotlin.reflect.full.memberProperties
//dumps(Pair::class) (Pair(0,0), mutableMapOf("first" to 3))
fun dumps(T:KClass<*>, ld:T=JS("(void)(${T} o, java.util.Map<String,Object> m){"+
T.memberProperties.joinToString(""){" m.put(\"${it.name}\",o.get${it.name.capitalize()}());"}+"}")!!
@duangsuse
duangsuse / bing_shotcrop.py
Last active May 25, 2023 03:58
pyQt 框选获取屏幕截图
# 用 pyQt 框选获取屏幕截图,PIL.ImageGrab.grab() 可以获取全屏图,继续,继续capture和鼠标
#xy可以换成两个QPoint
#请用PyGTK兼容 linux 上的 PIL grabclipboard()
import gi; gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
gi.overrides.GdkPixbuf.Pixbuf.toPIL=lambda g: PIL.Image.frombuffer("RGBA",(g.get_width(),g.get_height()),g.get_pixels() )
cc=Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@duangsuse
duangsuse / AI_astcode.py
Last active March 7, 2023 17:25
bing py代码重构工具
from ipywidgets import interact
import ipywidgets as widgets
from lib2to3.refactor import RefactoringTool,get_all_fix_names as lsFix
import ast,astor,pickle
@interact
def convert(code=widgets.Textarea(value="map({it+1},[0])|{[*it]}, 1|{it+1}", description='Input Code'), fixes=widgets.SelectMultiple(options=lsFix('lib2to3.fixes'), description='Fixes')):
if not fixes:
tree = ast.parse(code)
# 使用自定义的访问器类遍历并修改语法树