duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
Forwarded from 捏造的 ✴️ 信仰
面向对象语法和常用类需要花时间过一遍,比如常用集合,异常处理,文件存取,网络收发,线程和锁,加密解密,这些都过一遍之后就对 Java 有了一个比较全面的观感了。
对应的包及常见类是 (java.) util(List,Map),无,io(File,(Data) (Input/Output) Stream),net(URL),util.concurrent(.locks.ReentrantLock, .atomic.AtomicInteger),security(MessageDigest,KeyPair)
可以在 docs.oracle.com/javase/8/docs/api 在线查看(草
RegExp 用 java.util.regex.Pattern#matcher matches() 后也可以看 MatchResult.group(int)
a _a_ b
Forwarded from duangsuse::Echo (duangsuse)
补充提取代码的 #Python #code

replacecode.py:
@regress("len(it)","+","a")
def headerSize(fp): pass
from sys import argv; fps = argv[1:]

with open(argv[0], "r") as f: headerSize(f.read(), argv[0])
for fp in argv[1:]:
with open(fp, "r") as f: s = f.read(); code = s[headerSize(s)+1:]
with open(fp, "w") as f: f.write(code)

其中 #Python #code
def regress(*code_parts):
code = "".join(code_parts)
def solve(d, x,y): #不懂算法就写死点二元仅(+)啦
vL = eval(code_parts[0], None, d)
for k in d: d[k] = (y - vL)
def excVar(ex): s = ex.args[0]; return s[len("name "):s.rfind("'")]
def wrap(whatever): #我也拽下洋文(迫真
syms = {} #已回归表
def call(x, y=None):
syms["it"] = x
if y != None:
try: eval(code) if len(syms)==0 else None
except NameError as ex: syms[excVar(ex)] = None
solve(syms, x, y)
return eval(code, None, syms)
return call
return wrap
这个做完发现第一项需要 fpath 就没用了 QAQ
def forFstAndTails(op0, op, xs):
xz = iter(xs)
try:
op0(next(xz))
while True: op(next(xz))
except StopIteration: pass
<Cthon98> hey, if you type in your pw, it will show as stars
诶,如果你把密码发出来,它会被自动码掉!
<Cthon98> ***** see!
(星号)看,看!
<AzureDiamond> hunter2
(这货真的把自己密码发出来了,或者在反串😂)
<AzureDiamond> doesnt look like stars to me
看起来它不是星号啊?
<Cthon98> <AzureDiamond> ***
(星号)
<Cthon98> thats what I see
我看见的只有这些。(😂
<AzureDiamond> oh, really?
真的吗?
<Cthon98> Absolutely
当然啦。
<AzureDiamond> you can go hunter2 my hunter2-ing hunter2
(一句全用密码造的玩笑性短句 建议自读)
<AzureDiamond> haha, does that look funny to you?
哈哈,你看这样好玩吗?(🤣
<Cthon98> lol, yes. See, when YOU type hunter2, it shows to us as ***
嗯有意思,当你本人输入 hunter2 时,它会显示为(星号)
<AzureDiamond> thats neat, I didnt know IRC did that
很奇妙,我不知道 IRC 有这种功能。
<Cthon98> yep, no matter how many times you type hunter2, it will show to us as ***
不管你发多少次 hunter2 ,我们都只看到(星号)
<AzureDiamond> awesome!
真是 太 好 玩 了(🤣注入灵魂
<AzureDiamond> wait, how do you know my pw?
等等,你怎么知道我的密码(hunter2)?
<Cthon98> er, I just copy pasted YOUR **'s and it appears to YOU as hunter2 cause its your pw
呃,我只是复制粘贴了你发的(星号),但你会看到你自己的密码。
<AzureDiamond> oh, ok.
噢,原来如此
Forwarded from 可爱 鸭鸭
另外这是典型的XY问题呀
Forwarded from 可爱 鸭鸭
你想完成X,但你认为Y能完成X,于是问了Y
Forwarded from 可爱 鸭鸭
试试二分?
Forwarded from 可爱 鸭鸭
之前dolphin改间距被我二分出来了
Forwarded from 可爱 鸭鸭
然后人肉patch回去
Forwarded from 可爱 鸭鸭
git bisect
Forwarded from 可爱 鸭鸭
软件都是从代码库里来的
Forwarded from 可爱 鸭鸭
你找到一个有问题的版本
Forwarded from 可爱 鸭鸭
找到一个没问题的版本
Forwarded from 可爱 鸭鸭
然后 bisect
Forwarded from 可爱 鸭鸭
二分法,O(log(n))
Forwarded from 可爱 鸭鸭
几下就确定哪个提交有问题了
#Java #code
import java.util.function.Function;
import java.lang.reflect.*; //Proxy, InvocationHandler, Method

class Sam {
<FUNC, T, R> FUNC functor(Class<FUNC> fn_type, Function<T, R> impl) {
FUNC fn = (FUNC)Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{fn_type}, new InvocationHandler() {
@Override public Object invoke(Object o, Method m, Object[] args) { return impl.apply((T)args[0]); } // self(o) ignored, argc&m unchecked
}); //< or use Proxy.getInvocationHandler(impl) to re-dispatch(require samename)
return fn;
}
interface XXCall { int call(int x); }
static public void main(String... a) {
Function<Integer,Integer> f = (x) -> x+1;
System.out.println(new Sam().functor(XXCall.class, f).call(1));
}
}
#essay #Java 想了下最近的操作
我是想给 JPlayer1 加上 buffer size 参数,再允许负 size 的 multi-thead Queue 渲染,不必手动 RingBuffer
再写一个最简版的 JPlayer3 ,反映无 queue 的绘制逻辑(草生)
想到 ANSI 命令台控制,又想拿 Java 配合下 JNI 去写贪吃蛇,死性不改…… 连怎么取 winsize(w,h) 都想了,JNI 返回 int[] 麻烦,就接收 int[] ,或者干脆变成 long(bitsize=2*int) 甚至 double, 没问题的 ;只需要提供 initScr(); printYX(y,x,s); endScr(); 然后封装个 writeLineN(n, s) 即可刷写屏幕(最开始打算让 initScr 返回行列大小,或者搞 yxprintf, mvprintf 什么的,还好我反应块,迫真;甚至还有想利用 OOP 抽象掉这个,去兼容 Android 上刷新字符帧的……可以在手机上玩但不必重写游戏逻辑 就是不方便)
(吐嘈:写完坏苹果以后我还会做 buffering 了……什么鬼)

现在我终于明白了命令台 REPL 的 Tab 补全是可以 10 行代码以内实现的,看来杂学对 ParserKt 也有用啊,下次就有经验了,复杂的初始化逻辑都倒大霉。

搞完这些又要把之前 耿爽模拟器、傅立叶变换动画 重构了
之前我还以为耿爽模拟器多难写,主要就是想 (1..randInt(10,25)).map { quotes.pick().fmt(noun=cfg[0], verb=cfg[1]) }.joinToString("") ,后来发现是主语选错了, quotes.take(randint(10,25)).shuffle { it.fmt(cfg[0],cfg[1]) }.joinToString("") 多简单(提性能可以拒绝临时 shuffled List<String> 创建 改 indices + joinToString transform)
刚开始不习惯编程 记忆变量关系,老是把 N append iter : 1 [noun,verb] cfg 这种简单逻辑背岔,现在不会了(老智障了 草)
主要是当初想“既然能拼接,能不能再写个函数「学习」这些文本数据”,后来才发现其实一个 String.replace 就能搞定,也就是说这个函数没比 replace 高到哪去,还是要 text 以外的参数,不过现在我觉得是可以统计下词频的,但那就要 NLP 了,目前我会用 Py 的 jieba.cut 分词

傅立叶的那个是真大佬,不知道是否驾驭的住,反正我对 js canvas 是绝对不熟练的

搞完了还有 mohu 的控制台 game 要重构,得把 List<Pair<String,String>List<String>> 的文本切分搞出来(前者是选项目对对联的游戏数据,后者是excited的界面翻译随机pick)
C++ 11 的 coding convert 还真是不习惯,看起来 wcout 在 Wine 没有用,只能是 wstring_convert API 了
想着这个按换行、分号切分的 2维文本数组 可不可以用 ifstream 去读取,答案当然是不可以,如果不以 '\n', ' ' 切分就读不了啦(而且很可能不支持 unicode )
还是要走 C 的 malloc +full read 那种吗,当然 bytes->Unicode int 是必须的,有时候真想念 Python 那奇怪的 encode decode 啊,写完了或许能做 WASM 支持
#essay #Java 想了下最近队列的代码坑 #js #python