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 用
可以在 docs.oracle.com/javase/8/docs/api 在线查看(草
RegExp 用
java.util.regex.Pattern#matcher matches() 后也可以看 MatchResult.group(int) 的Forwarded from duangsuse::Echo (duangsuse)
补充提取代码的 #Python #code :
replacecode.py:
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 #codedef regress(*code_parts):这个做完发现第一项需要 fpath 就没用了 QAQ
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
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.
噢,原来如此
诶,如果你把密码发出来,它会被自动码掉!
<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.
噢,原来如此
#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,没问题的 ;只需要提供
(吐嘈:写完坏苹果以后我还会做 buffering 了……什么鬼)
现在我终于明白了命令台 REPL 的 Tab 补全是可以 10 行代码以内实现的,看来杂学对 ParserKt 也有用啊,下次就有经验了,复杂的初始化逻辑都倒大霉。
搞完这些又要把之前 耿爽模拟器、傅立叶变换动画 重构了
之前我还以为耿爽模拟器多难写,主要就是想
刚开始不习惯编程 记忆变量关系,老是把 N append iter : 1 [noun,verb] cfg 这种简单逻辑背岔,现在不会了(老智障了 草)
主要是当初想“既然能拼接,能不能再写个函数「学习」这些文本数据”,后来才发现其实一个 String.replace 就能搞定,也就是说这个函数没比 replace 高到哪去,还是要 text 以外的参数,不过现在我觉得是可以统计下词频的,但那就要 NLP 了,目前我会用 Py 的
傅立叶的那个是真大佬,不知道是否驾驭的住,反正我对 js canvas 是绝对不熟练的
搞完了还有 mohu 的控制台 game 要重构,得把 List<
C++ 11 的 coding convert 还真是不习惯,看起来 wcout 在 Wine 没有用,只能是 wstring_convert API 了
想着这个按换行、分号切分的 2维文本数组 可不可以用
还是要走 C 的 malloc +full read 那种吗,当然 bytes->Unicode int 是必须的,有时候真想念 Python 那奇怪的 encode decode 啊,写完了或许能做 WASM 支持
我是想给 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 支持