#dev #Android #backend 刚才看到 Pink 酱的一篇文章《如何在Android FC(Force Close)之前抢救下》,正好也照应了我在 pygame 实践里对 message loop 的认知,给总结下:
Android程序默认:
+ 在 onClickListener 里,不能做一些View树的变更,说明 handler 应该在 Main 线程外执行
+ 可是有时候 onClick 里的 HTTP.get 逻辑能阻塞住主线程导致 ANR
如果是主线程负责所有绘制,嗯这个的确没问题
出现问题的环境不一样,二者分别是在 Beanshell 解释器、Androlua 里执行(我也没有用纯Java做阻塞操作的经历,但有一次的确是在 onClick handler 里阻塞了重绘)
所以 onClick 到底由谁来 run 啊
Android程序默认:
void main(String... args) {可以设置捕获器:
Looper.prepare();
initMessageQueue();
Looper.loop();
throw new RuntimeException("fatal");
}
Thread.setDefaultUncaughtExceptionHandler(new _Handler { void uncaughtException(Thread t, Throwable e) {}; });在里面可以选择重启:
ctx.startActivity(new Intent(ctx, _Activity.class).addFlags(Intent.NEW_TASK,Intent.CLEAR_TASK));
也可以用 Cockroach 式:Thread.defaultUncaughtExceptionHandler = { t, e ->我还有一个基于之前观察,关于 Android 线程/执行资源调度的疑惑:
logError(e)
while (true) {
try { restartActivity() }
catch (Exception e1) { logError(e1) }
}
}
fun logError(e: Exception) = Log.e("APP", "uncaught exception: ", e)
+ 在 onClickListener 里,不能做一些View树的变更,说明 handler 应该在 Main 线程外执行
+ 可是有时候 onClick 里的 HTTP.get 逻辑能阻塞住主线程导致 ANR
如果是主线程负责所有绘制,嗯这个的确没问题
出现问题的环境不一样,二者分别是在 Beanshell 解释器、Androlua 里执行(我也没有用纯Java做阻塞操作的经历,但有一次的确是在 onClick handler 里阻塞了重绘)
所以 onClick 到底由谁来 run 啊
PinkD の Blog
如何在Android程序FC前抢救一番
page.description
struct,json,yaml,pickle,marshal 等序列化便利库我都用过,无非就是流 dump/load 和便利性 dumps/loads #Python #backend #bin
对于二进制读写的数值读写、字节序解释我也清楚的很, Kotlin Dokuss 和 SomeAxml(挂名) 项目都包含了基本二进制流和读写抽象
序列化(serialize)的用途一般是以二进制表示某种数据, marshal 和 pickle 虽然都是对象序列化,显然 marshal(封送) 更广义、更内部, C# 里也有这个名词,用于在进程间传递数据对象的深拷贝,也类似
对于二进制读写的数值读写、字节序解释我也清楚的很, Kotlin Dokuss 和 SomeAxml(挂名) 项目都包含了基本二进制流和读写抽象
序列化(serialize)的用途一般是以二进制表示某种数据, marshal 和 pickle 虽然都是对象序列化,显然 marshal(封送) 更广义、更内部, C# 里也有这个名词,用于在进程间传递数据对象的深拷贝,也类似
android.os.Parcel
。#linux #sysadmin
YuutaW:
(用fbi无chroot在 #Android 上显示了图片)
以及,fbi 也支持 DRM
duangsuse:
我也猜到 fb=framebuffer ,就是不知道有 imageviewer 这程序……
drm 又是什么缩写
YuutaW:
Direct Rendering Manager
/dev/dri
/sys/class/drm
请妥善使用 drm-info 工具
duangsuse:
噢,我也知道,和 Digital Restriction Management 误会了。
YuutaW:
确实容易误会
和那个东西没一点关系
就是一个 Kernel 的新的(Relatively)显示栈
duangsuse:
所以经常不容易区别 nvidia-drm 到底是干什么的(
YuutaW:
我是 chroot 的啊
duangsuse:
🌚我还以为你是 Termux 之类的,所以专门强调无需chroot
YuutaW:
chroot 只是使用了 Arch 的一些 Userspace和库,dev 还是 bind 过去的。
理论上静态链接一个应该也不用 chroot ,但是太难了,简单起见。
DRM的参考文献: #cg #cplusplus #backend
https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf
https://jan.newmarch.name/Wayland/DRM/
https://waynewolf.github.io/2012/09/05/libdrm-samples/
https://www.linuxplumbersconf.org/event/2/contributions/229/attachments/53/60/10._DRM_KMS_for_Android_v1.pdf (注:YuutaW 的发言有整理)
YuutaW:
(用fbi无chroot在 #Android 上显示了图片)
以及,fbi 也支持 DRM
duangsuse:
我也猜到 fb=framebuffer ,就是不知道有 imageviewer 这程序……
drm 又是什么缩写
YuutaW:
Direct Rendering Manager
/dev/dri
/sys/class/drm
请妥善使用 drm-info 工具
duangsuse:
噢,我也知道,和 Digital Restriction Management 误会了。
YuutaW:
确实容易误会
和那个东西没一点关系
就是一个 Kernel 的新的(Relatively)显示栈
duangsuse:
所以经常不容易区别 nvidia-drm 到底是干什么的(
YuutaW:
我是 chroot 的啊
duangsuse:
🌚我还以为你是 Termux 之类的,所以专门强调无需chroot
YuutaW:
chroot 只是使用了 Arch 的一些 Userspace和库,dev 还是 bind 过去的。
理论上静态链接一个应该也不用 chroot ,但是太难了,简单起见。
DRM的参考文献: #cg #cplusplus #backend
https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf
https://jan.newmarch.name/Wayland/DRM/
https://waynewolf.github.io/2012/09/05/libdrm-samples/
https://www.linuxplumbersconf.org/event/2/contributions/229/attachments/53/60/10._DRM_KMS_for_Android_v1.pdf (注:YuutaW 的发言有整理)
#java #cs #DontKnow Integer.valueOf 的缓存机制 (即 (Integer)x==x 的左范围)
#functional 妈的,函数式和 SICP 现在自造词还不一样了,应用序 vs. 传值、正则序 vs. 传表达式(或是传惰性?)...
#JS #CSS #PLT HTTP #backend #blog 大佬的面试经历 我终于知道cs是学啥了🤔 杂学
#rust #PLT #tt https://edward40.com/tagless-final-in-rust 呃... 看来Ray说自己很菜是有道理的,是我见得少了,没想到同道这么多🌝
https://9bie.org/index.php/archives/635/ 超星邀请码... 这又一个 pwn #Security 的
https://cnblogs.com/Dillonh #oi #dalao 是 cnblogs... 上次一个 commajia 大佬也是
#functional 妈的,函数式和 SICP 现在自造词还不一样了,应用序 vs. 传值、正则序 vs. 传表达式(或是传惰性?)...
#JS #CSS #PLT HTTP #backend #blog 大佬的面试经历 我终于知道cs是学啥了🤔 杂学
#rust #PLT #tt https://edward40.com/tagless-final-in-rust 呃... 看来Ray说自己很菜是有道理的,是我见得少了,没想到同道这么多🌝
https://9bie.org/index.php/archives/635/ 超星邀请码... 这又一个 pwn #Security 的
https://cnblogs.com/Dillonh #oi #dalao 是 cnblogs... 上次一个 commajia 大佬也是
Edward Elric
Tagless Final in Rust
总所周知学习 Java 逃不开对各类设计模式的理解运用。今天千里冰封介绍了一个全新的设计模式——"Tagless Final" Style, 它可以用 trait 在 Rust 中模拟子类型。 第一步实现目标 实现一个 expr…
#recommended #linux #backend #cplusplus #Python https://tttttt.me/c/1492060815/96087, https://tttttt.me/c/1492060815/95986 Q:这个群是干嘛的?
A:《捕蛇者说》是一档播客节目,可前往官网(pythonhunter.org)或各大播客平台(苹果、小宇宙、Spotify 等)收听。本群是捕蛇者说播客的听众群,讨论技术和非技术的各种话题。
Twitter: @pythonhunter__
发电支持我们:https://afdian.net/@pythonhunter
A:《捕蛇者说》是一档播客节目,可前往官网(pythonhunter.org)或各大播客平台(苹果、小宇宙、Spotify 等)收听。本群是捕蛇者说播客的听众群,讨论技术和非技术的各种话题。
Twitter: @pythonhunter__
发电支持我们:https://afdian.net/@pythonhunter
duangsuse::Echo
https://tttttt.me/vvb2060Channel/416 #Android #Security #aop asm inline hook 当然是任意点都可以,实际上 frida 配 xposed 开发是真好吧🤔 /proc/self 都可以 mount --bind ,但是改动是系统级的。 通常做法就是由框架来实现访问权共享,像 Riru 一样换一个 preload .so 来实现 hook 我觉得应用层开发者尝试对抗系统动态分析是很愚蠢的行为,毕竟你又不是搞安全的,凭 Proguard 组搞出来…
为了避免被认为是在指点江山我就简单 PoC 一下,真的不需要十行代码。 毕竟这个「反破解手段」门槛也太低了,只需改动 .h 文件&重编译,其它都自动兼容了。
而加密 bytecode 的各种方法全都逃不过内存 dump ,因为「原原本本」的程序文件是虚拟机要求的,总是要还原。 hook 一下虚拟机的 load() 即 luaZ_undump() 就都出来了,代码保护唯一有效的是削除命名标识符的本义,或者对程序做些预处理和切分什么的(对这些,基于符号执行的 smalivm 类反混工具也能消除),但是大部分有「产权保护」意识的人 意识不到吧😒。
目标只是得出两版 #Lua 指令号直接的对应关系,也就是只需做指令id 数组的读取,得出的对应关系用于 patch 给 chunkspy 等工具。
本来说是可以用 getOpcode(buf, i) 的,忘记数组迭代需要长度的问题了,就用迭代器吧…… 也是惰性计算的😒
首先自编个 lua luac (实质都是 liblua 的命令行工具
看看 https://bbs.pediy.com/thread-250618.htm
https://tttttt.me/berd_channel/1647
可以参考
Luac chunk 文件是比较标准带 insn size 的二进制结构, size_t 一般为 4 (int32) 大端字节序,因为只需要读取 opcode 我就做个比较 hack 的操作——hexdump diff 断言指令数组头的偏移量,本来想可以直接取每条指令首字节,没想到这个好像是仅 7 bit ,那就只能
然后指令集也不必写完整的,反正也没有 unluac ,源码手改的,自己验证意思意思够了。
lopnames.h 对虚拟机无意义, lopcodes.c 只是定义指令格式的,所以要改 .h 里的顺序,稍后 grep -r 'ORDER OP' 还会发现必须同时更改 .c 的顺序,而且还得修正 lua.h 的一处
其实如果不改 ltm.h 而想保证元表事件正常派发,那 OP_ADD 到 OP_NOT 直接的顺序都不能变🌝
不过这里就随便点,反正没用到~
用于乱序的 py 脚本:
同时 shuf .c array 和 .h enum 的索引号,总之就是先搞出 index mapping 再 apply 它两次。 🌚
用于对应的脚本(见下下条):
d[op[i]] = names[op_orig[i]]
胡话:呃,好像是 d[k] = d1[d[k]] ... 不对
其实变的是 k 吧(re-associateBy), d[k1] = d[k] 其中 k1=d1.keyOf(k) ,因为 v 都是复制过来的。
#plt #ce #backend 反破解小指南 🦜
嘛,其实这个还是有强化的方法的。 只需这个有强烈愿望🧐并且敢动 C 虚拟机🌝实现代码的人 对他的每个单个应用 重编译乱 opcode 的私有版 lua
同时更改下 LuaVM 指令格式 bitmask 里操作数的顺序,并且以自有算法加密常量池(必须由虚拟机层来解密,最好是惰性完成的 内部传输性 loadk 只传常量编号不解密),这样对 naive 的破解者就非常棘手了,只能从外部 API 分析某一特性点的实现方法惹🌚
自有版虚拟机的代码文件看起来符合规范(因为你改得少),但是完全无法被通常工具读取,一些虚拟机壳也是出于同样的意图(which 我没在 Android 上见到过,设计这种加壳器需要一定编译原理或状态机的知识 需要预处理 bytecode)
最关键的一点就是孤立自己利用到的技术,让破解者无法使用针对性工具,然后增加破解者自写工具的难度,尽可能用没工具的 native 平台叠加难度。单机程序用惩罚机制来反动态分析?可笑。程序状态是不可信的,稍有常识的坏人完全可以保留某 fork 的整机状态,你检查虚拟机都不行,有的是机会给检测方法 hook 光光;用别人的反破库,也容易被找到针对性反反破工具。😒
其实嘛,越是简单的代码越接近真理,越往程序的根基走,手段越能令破解者头疼。
其实用私有版 luaVM 不暴露指令号对应关系就已经很安全了(当然坏人🌝还是可以用生成 code 看 vm state 的方法甄别指令,虚拟机状态就不是纯二进制领域的人能魔改的了🤪),但最好还是用预处理给 luaV_execute 的 opcode switch 每个 case 加点随机乱代码,防止被源码相似性搜索(这个只需要反汇编字符串匹配 破解者就能完成)。
介于 C 的静态自动分析尚无完整解法,对每个模块都要还原虚拟机指令才能反编译出真实逻辑,就可以说是「无法破解」的软件了🤣。
你掌控程序流程,你掌控无物;你掌控程序码解释,你掌控一切。
越是在根基做限制越难破解,但是外部 API 和 memdump 依然没办法对抗,但至少,这样反调试代码就不易被分析了🌚 这些代码能造成巨大的麻烦,让破解者不知从何下手,例如反外部 API 断点和管理加密的常量池,制造 garbage String 来混淆 memdump 。
什么叫做欺骗系统,「系统」这个概念都是针对软件运行时而言的,运行时可以是带trace/hook的实机、虚拟机或者静态分析器,这些都是合法合理的运行时,因为,程序只是数据而已。「我的代码,我的权利、我的私产」?谁能想到那么多啊😅。
除非有一天 DRM 会无法被模拟复制破解,不然最实际的方法是把软件做得足够大,然后诉诸法律或己方威权。
而加密 bytecode 的各种方法全都逃不过内存 dump ,因为「原原本本」的程序文件是虚拟机要求的,总是要还原。 hook 一下虚拟机的 load() 即 luaZ_undump() 就都出来了,代码保护唯一有效的是削除命名标识符的本义,或者对程序做些预处理和切分什么的(对这些,基于符号执行的 smalivm 类反混工具也能消除),但是大部分有「产权保护」意识的人 意识不到吧😒。
目标只是得出两版 #Lua 指令号直接的对应关系,也就是只需做指令id 数组的读取,得出的对应关系用于 patch 给 chunkspy 等工具。
本来说是可以用 getOpcode(buf, i) 的,忘记数组迭代需要长度的问题了,就用迭代器吧…… 也是惰性计算的😒
首先自编个 lua luac (实质都是 liblua 的命令行工具
curl -O http://www.lua.org/ftp/lua-5.4.2.tar.gz
tar xf lua-* &&cd lua-*/src/
make luac lua
#sysadmin 科普下 lua.org 的 doc 里 curl/tar 的 -R/-z 是 设置文件mtime/gz解压看看 https://bbs.pediy.com/thread-250618.htm
https://tttttt.me/berd_channel/1647
可以参考
Luac chunk 文件是比较标准带 insn size 的二进制结构, size_t 一般为 4 (int32) 大端字节序,因为只需要读取 opcode 我就做个比较 hack 的操作——hexdump diff 断言指令数组头的偏移量,本来想可以直接取每条指令首字节,没想到这个好像是仅 7 bit ,那就只能
import struct
了😓然后指令集也不必写完整的,反正也没有 unluac ,源码手改的,自己验证意思意思够了。
lopnames.h 对虚拟机无意义, lopcodes.c 只是定义指令格式的,所以要改 .h 里的顺序,稍后 grep -r 'ORDER OP' 还会发现必须同时更改 .c 的顺序,而且还得修正 lua.h 的一处
#define 🌚
(不过和 lcode.h 的 OPR_x 以及 ltm.h 没关系,因为 opr 是以 OP_ADD+i 及 TM_ADD+i 的方式两向对应的 )其实如果不改 ltm.h 而想保证元表事件正常派发,那 OP_ADD 到 OP_NOT 直接的顺序都不能变🌝
不过这里就随便点,反正没用到~
用于乱序的 py 脚本:
同时 shuf .c array 和 .h enum 的索引号,总之就是先搞出 index mapping 再 apply 它两次。 🌚
用于对应的脚本(见下下条):
d[op[i]] = names[op_orig[i]]
胡话:呃,好像是 d[k] = d1[d[k]] ... 不对
其实变的是 k 吧(re-associateBy), d[k1] = d[k] 其中 k1=d1.keyOf(k) ,因为 v 都是复制过来的。
#plt #ce #backend 反破解小指南 🦜
嘛,其实这个还是有强化的方法的。 只需这个有强烈愿望🧐并且敢动 C 虚拟机🌝实现代码的人 对他的每个单个应用 重编译乱 opcode 的私有版 lua
同时更改下 LuaVM 指令格式 bitmask 里操作数的顺序,并且以自有算法加密常量池(必须由虚拟机层来解密,最好是惰性完成的 内部传输性 loadk 只传常量编号不解密),这样对 naive 的破解者就非常棘手了,只能从外部 API 分析某一特性点的实现方法惹🌚
自有版虚拟机的代码文件看起来符合规范(因为你改得少),但是完全无法被通常工具读取,一些虚拟机壳也是出于同样的意图(which 我没在 Android 上见到过,设计这种加壳器需要一定编译原理或状态机的知识 需要预处理 bytecode)
最关键的一点就是孤立自己利用到的技术,让破解者无法使用针对性工具,然后增加破解者自写工具的难度,尽可能用没工具的 native 平台叠加难度。单机程序用惩罚机制来反动态分析?可笑。程序状态是不可信的,稍有常识的坏人完全可以保留某 fork 的整机状态,你检查虚拟机都不行,有的是机会给检测方法 hook 光光;用别人的反破库,也容易被找到针对性反反破工具。😒
其实嘛,越是简单的代码越接近真理,越往程序的根基走,手段越能令破解者头疼。
其实用私有版 luaVM 不暴露指令号对应关系就已经很安全了(当然坏人🌝还是可以用生成 code 看 vm state 的方法甄别指令,虚拟机状态就不是纯二进制领域的人能魔改的了🤪),但最好还是用预处理给 luaV_execute 的 opcode switch 每个 case 加点随机乱代码,防止被源码相似性搜索(这个只需要反汇编字符串匹配 破解者就能完成)。
介于 C 的静态自动分析尚无完整解法,对每个模块都要还原虚拟机指令才能反编译出真实逻辑,就可以说是「无法破解」的软件了🤣。
你掌控程序流程,你掌控无物;你掌控程序码解释,你掌控一切。
越是在根基做限制越难破解,但是外部 API 和 memdump 依然没办法对抗,但至少,这样反调试代码就不易被分析了🌚 这些代码能造成巨大的麻烦,让破解者不知从何下手,例如反外部 API 断点和管理加密的常量池,制造 garbage String 来混淆 memdump 。
什么叫做欺骗系统,「系统」这个概念都是针对软件运行时而言的,运行时可以是带trace/hook的实机、虚拟机或者静态分析器,这些都是合法合理的运行时,因为,程序只是数据而已。「我的代码,我的权利、我的私产」?谁能想到那么多啊😅。
除非有一天 DRM 会无法被模拟复制破解,不然最实际的方法是把软件做得足够大,然后诉诸法律或己方威权。
Pediy
[原创]用 Lua 简单还原 OpCode 顺序-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com
Forwarded from duangsues.is_a? SaltedFish
duangsuse::Echo
执行时是怎么样的呢? 🤔(当然这里可能不严谨,不过也够了,反正大家很多人连 CDEF 系统栈是怎么维护的都不知道,也算是科普一下) 我们的 caller 叫做 main,它执行如下代码以调用我们的子程序 bd: sub esp, (2*4) <sp> [....] [....] |***** mov ecx, ; buffer ; ecx = (char *) buffer mov [esp+4], "SGVsbG8K" <sp> [....] [*"SGV....] |***** mov [esp]…
#backend #asm 原来yt上也有这么多人在做CS科普
好怀念以前什么都不了解,没有地方拿到「原始资料」的时候啊..
那时候就是靠猜、靠一些中文资料碎片,也不熟悉「内存布局和跳转」的C语言指针模型,更不会把 struct;union; subtype; weak type;trait; 这些放在一个心智模型里去diff
现在看来是走太多弯路,实现了貌似「科班」轻松就懂的、无意义的东西,但在我看来,用x86 写算法明明就是容易搞懂的事,错误在于最简例、可视化和复用的缺失
说起来,频道的 #tag 太多,成了失去归类能力的野草..😓 对我而言「流行编程语言」就像这样吧;为了摆架子,搞丢了问题的本源
又说了奇怪的话了..😶🌫️ 知乎上也会被PL人喷是民科
幸而最近有点时间编程, 不知道能整出啥
#dalao #blog #inm 野兽的链表里技!
好怀念以前什么都不了解,没有地方拿到「原始资料」的时候啊..
那时候就是靠猜、靠一些中文资料碎片,也不熟悉「内存布局和跳转」的C语言指针模型,更不会把 struct;union; subtype; weak type;trait; 这些放在一个心智模型里去diff
现在看来是走太多弯路,实现了貌似「科班」轻松就懂的、无意义的东西,但在我看来,用x86 写算法明明就是容易搞懂的事,错误在于最简例、可视化和复用的缺失
说起来,频道的 #tag 太多,成了失去归类能力的野草..😓 对我而言「流行编程语言」就像这样吧;为了摆架子,搞丢了问题的本源
又说了奇怪的话了..😶🌫️ 知乎上也会被PL人喷是民科
幸而最近有点时间编程, 不知道能整出啥
#dalao #blog #inm 野兽的链表里技!
YouTube
how does “return” know where to go?
Programming is amazing. Computers allow us to do things that otherwise would be impossible. But sometimes, the code that we write feels like MAGIC. How does all of this stuff work?
Let's talk about how return works.
🛒 GREAT BOOKS FOR THE LOWEST LEVEL🛒…
Let's talk about how return works.
🛒 GREAT BOOKS FOR THE LOWEST LEVEL🛒…
duangsuse::Echo
> https://tttttt.me/dsuse/1064 https://bellard.org/otcc/otccn.c 是tccboot所用JIT编译的最简版 呃.. 第一次见到 wiki 编辑战 小时候(高中) 很喜欢 #mozilla #Rust ,还写了这个(列表处理)程序 大概就是暗暗觉得……高性能又开源(根正描红的那种,练习时长两年半只为开源语言,太感人了) 后来看的就淡了,因为rust真的很(烧脑?) — 我觉得能和 C FFI 的某种意义上都是系统,比如 py 的嵌入式GPIO libs…
#py #backend https://tttttt.me/NewlearnerChannel/11360
Python 潮流周刊 #10:Twitter 的强敌 Threads 是用 Python 开发的
👉
3、Python 3.12 预览版:支持 Linux 性能分析器 (英)
4、FastDepends:从 FastAPI 中提取的依赖注入框架,异步和同步模式都支持 (英)
5、https://github.com/0xpayne/gpt-migrate :将代码仓从一种框架或语言迁移成其它 (英)
6、使用 Golang 和 Docker gRPC 运行 Python 代码
7、DisCo:通过指示生成现实世界的人类舞蹈 (英)
8、用 Python 实现一门简易的编程语言 (英)
如何用 Python 来实现一门编程语言呢?这是一个系列教程,第一篇中实现了一个非常基础的编程语言,可以执行 print 语句,第二篇则拓展成支持变量和数学表达式
#ai CuPy:将 NumPy 数组调度到 GPU 上运行
#statement Paul: 如何选择你的工作
“不要计划太多,不管学过多少,只要做最有趣和最能拓展选择的事情。我叫这种方法“逆风而行”。这是大多数成功人士的秘诀。”
年轻人有时间的极大优势。应该用它来追求好奇心、创造力和专业知识:学习一些你不需要了解的东西,只是出于好奇,或者试着构建一些酷炫的东西,或者成为某个领域的高手。
年轻人容易受到他人的影响。他们常常觉得自己无足轻重。
“避免虚伪”是一个有用的规则,但怎么积极地实践呢?怎么找到自己的方向呢?如果你不诚实,你怎么能对真理有敏锐的眼光呢?
爱因斯坦就是这样做的。他能看透麦克斯韦方程的奥妙,不只是因为他有新思想,而是因为他更严谨。注意那些不合理或缺失的地方。99%可能是你弄错了,但也别忽略它们。
也许有些工作需要愤世嫉俗和悲观主义,但如果你想做出伟大的工作,乐观主义更有用
我不喜欢“创造过程”这个词。它有点误导人。独创性不是一个过程,而是一种思维方式。
我们用独创性、创造力和想象力来描述这种能力,一种特殊的技能。很多人有很多“技术能力”,但在这方面却很少。
Python 潮流周刊 #10:Twitter 的强敌 Threads 是用 Python 开发的
👉
3、Python 3.12 预览版:支持 Linux 性能分析器 (英)
4、FastDepends:从 FastAPI 中提取的依赖注入框架,异步和同步模式都支持 (英)
5、https://github.com/0xpayne/gpt-migrate :将代码仓从一种框架或语言迁移成其它 (英)
6、使用 Golang 和 Docker gRPC 运行 Python 代码
7、DisCo:通过指示生成现实世界的人类舞蹈 (英)
8、用 Python 实现一门简易的编程语言 (英)
如何用 Python 来实现一门编程语言呢?这是一个系列教程,第一篇中实现了一个非常基础的编程语言,可以执行 print 语句,第二篇则拓展成支持变量和数学表达式
#ai CuPy:将 NumPy 数组调度到 GPU 上运行
#statement Paul: 如何选择你的工作
“不要计划太多,不管学过多少,只要做最有趣和最能拓展选择的事情。我叫这种方法“逆风而行”。这是大多数成功人士的秘诀。”
年轻人有时间的极大优势。应该用它来追求好奇心、创造力和专业知识:学习一些你不需要了解的东西,只是出于好奇,或者试着构建一些酷炫的东西,或者成为某个领域的高手。
年轻人容易受到他人的影响。他们常常觉得自己无足轻重。
“避免虚伪”是一个有用的规则,但怎么积极地实践呢?怎么找到自己的方向呢?如果你不诚实,你怎么能对真理有敏锐的眼光呢?
爱因斯坦就是这样做的。他能看透麦克斯韦方程的奥妙,不只是因为他有新思想,而是因为他更严谨。注意那些不合理或缺失的地方。99%可能是你弄错了,但也别忽略它们。
也许有些工作需要愤世嫉俗和悲观主义,但如果你想做出伟大的工作,乐观主义更有用
我不喜欢“创造过程”这个词。它有点误导人。独创性不是一个过程,而是一种思维方式。
我们用独创性、创造力和想象力来描述这种能力,一种特殊的技能。很多人有很多“技术能力”,但在这方面却很少。
Telegram
Newlearnerの自留地
#潮流周刊 #Newsletter
🩴 潮流周刊(第137期)- 九龙公园
🍭技术相关
1. 当我们在浏览器中输 google.com 时,背后发生了什么?
2. 值得技术同学一看的「提问的智慧」
🤖 潮流工具
1. 最近我的输入法选择
2. 中文网字计划
3. 寻隐:一个离线的自然语言相册搜索工具
4. Novu:很不错的开源通知基础设施
🐳 随便看看
1. Youtube:如何才能摆脱贫穷?穷人和富人有什么差别?
2. Deekay:做了大量有趣的可爱动画效果
3. 大家买过最不值的 APP/服务是什么?…
🩴 潮流周刊(第137期)- 九龙公园
🍭技术相关
1. 当我们在浏览器中输 google.com 时,背后发生了什么?
2. 值得技术同学一看的「提问的智慧」
🤖 潮流工具
1. 最近我的输入法选择
2. 中文网字计划
3. 寻隐:一个离线的自然语言相册搜索工具
4. Novu:很不错的开源通知基础设施
🐳 随便看看
1. Youtube:如何才能摆脱贫穷?穷人和富人有什么差别?
2. Deekay:做了大量有趣的可爱动画效果
3. 大家买过最不值的 APP/服务是什么?…
#py 周刊
#ts Mypy: 1.5
Mypy 是 Python 的静态类型检查工具,1.5 版本主要功能有: @overrride 、更灵活的 TypedDict(字面创建的 dataclass) 创建和更新、可显示错误代码的文档、改进了泛型函数的类型推断、
#ai 整理和预处理pdf文件,让GPT访问
- 杀死 ProcessPoolExecutor
Python 自身不适合处理 CPU 密集型任务,文章中项目原本使用进程池来规避 GIL 问题,后使用线程、C++ 扩展,内存使用量减少 50%,CPU 使用量减少约 20%
- 观点: Py 不适合编写100行以上的软件,因为弱类型、重构难和性能
- 上下文管理器
骗你的。Java式接口让人难以评价:
btw. 你可以用 %%showast 和 astor 查看算式的树状图和代码形式
- viztracer 提供了 DevTools profile 页
#datas 绘制多个直方图、折线图表
- #tex 对比"星星旗帜"的海龟画图 Python 来学习 PostScript
PostScript 广泛用于打印机、出版和图形设备。文章将可被
#java 如何编写简单的C模块,篡改 CPython 解释器的数字
导入一个模块后,如何让 print(8) 会打印出 9?只需要拿到整数对象池,交换两个大整数引用的值
在 py 文件中写上一句,执行这个文件,幕后都发生了什么呢?文章使用了 readelf 、strace 、ldd 、debugfs 、/proc 、ltrace 、dd 和 stat 等工具,详细解释了脚本被执行的过程。
主要涉及操作系统,GNU libc 相关的内容
推荐阅读
—
#js htmx: 强化的 form table dialog,交互式界面扩展
#php 🤯 Slack: 我们认真觉得PHP好用
#ts Mypy: 1.5
Mypy 是 Python 的静态类型检查工具,1.5 版本主要功能有: @overrride 、更灵活的 TypedDict(字面创建的 dataclass) 创建和更新、可显示错误代码的文档、改进了泛型函数的类型推断、
__slots__
的优化、步进 Python 3.12#ai 整理和预处理pdf文件,让GPT访问
from bot import Retriever, llm_reply#backend 用 numpy, 线程池 优化数学区间求和函数
- 杀死 ProcessPoolExecutor
Python 自身不适合处理 CPU 密集型任务,文章中项目原本使用进程池来规避 GIL 问题,后使用线程、C++ 扩展,内存使用量减少 50%,CPU 使用量减少约 20%
- 观点: Py 不适合编写100行以上的软件,因为弱类型、重构难和性能
from contextlib import suppress的妙用
with suppress(FileNotFoundError):
- 上下文管理器
from tenacity import Retrying, stop_after_attempt #AbortSignal:
for attempt in Retrying(3):
with attempt
骗你的。Java式接口让人难以评价:
for i in Retrying(stop=stop_after_attempt(3)):#visualize #plt LibCST: 遍历Python3代码树
with i:
print(f"🧨炸弹{'真的'*i.retry_state.attempt_number} 要炸了!")
try: time.sleep(2) # 按Ctrl+C !
except:pass
else: raise Exception("💥!")
btw. 你可以用 %%showast 和 astor 查看算式的树状图和代码形式
- viztracer 提供了 DevTools profile 页
#datas 绘制多个直方图、折线图表
- #tex 对比"星星旗帜"的海龟画图 Python 来学习 PostScript
PostScript 广泛用于打印机、出版和图形设备。文章将可被
convert -page 720x480 flag.ps flag.png
的程序,直译成对接到 matplotlib 的 Python 代码#java 如何编写简单的C模块,篡改 CPython 解释器的数字
导入一个模块后,如何让 print(8) 会打印出 9?只需要拿到整数对象池,交换两个大整数引用的值
swap( (PyLongObject*)PyLong_FromLong(8)->ob_digit[0] , (9) )#os #linux 在 execvp(["python3", “Hello World.py”]) 时,会发生什么?
在 py 文件中写上一句,执行这个文件,幕后都发生了什么呢?文章使用了 readelf 、strace 、ldd 、debugfs 、/proc 、ltrace 、dd 和 stat 等工具,详细解释了脚本被执行的过程。
主要涉及操作系统,GNU libc 相关的内容
推荐阅读
—
#js htmx: 强化的 form table dialog,交互式界面扩展
<form hx-put="/contact/1" hx-target="this" hx-swap="outerHTML">
#php 🤯 Slack: 我们认真觉得PHP好用
Telegram
Newlearnerの自留地
#Python潮流周刊 #Newsletter
Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?
🦄文章&教程
- 如何分析 FastAPI 异步请求的性能?
- 利用 FastAPI 的后台任务:增强性能和响应能力
- 使用 Python 创建直方图
- Mypy 1.5 发布了
- 在 Linux 上运行 Python 的“Hello World”脚本时,会发生什么?
- 通过对比 Python 来学习 PostScript
- Python 中不那么随意的性能优化
-…
Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?
🦄文章&教程
- 如何分析 FastAPI 异步请求的性能?
- 利用 FastAPI 的后台任务:增强性能和响应能力
- 使用 Python 创建直方图
- Mypy 1.5 发布了
- 在 Linux 上运行 Python 的“Hello World”脚本时,会发生什么?
- 通过对比 Python 来学习 PostScript
- Python 中不那么随意的性能优化
-…
duangsuse::Echo
#dev #android 面试题 🤔 - 技术上提升最大的一个项目,展开介绍 对比业界同种算法流行和不流行实现、重写自己的任何项目,都比从事GPT都能完成的原型要好 - 为什么选择 Flutter,在业务方面学到了什么 Compose界原神的名气真的太大了,居然能用Navbar,Tab等自带组件,居然能调style! - Java 里重载和重写的区别 在编译期vs运行期确定函数,改方法签名vs改子类值 - 什么是线程安全 避免共享变量(不相交),或使用Atomic/独占锁 避免读写异步 - Service…
#dev #android #backend 面试题 🤔
- OSI 七层是哪七层
物理,数据链路: WiFi,BLE,eth,rndis驱动
网络传输: IP4,6 , iptables, socket(TCP) UDP
会话表示 Header cookie,json
App 众多Web3.0论坛,.
- HTTP 在哪一层?有些什么内容?
在L5~L6,负责请求响应和MIME类型,暴露为 调用+回调 +Header环境变量
除了会话,HTTP也能做文件传输和填表
- GET 和 POST 核心差异是什么?
body是否为form等私密数据
- HTTP 状态码有哪些?
{2,3,4,5}xx 各指代: 正常 重定向 请求出错 服务出错
- Java 的基本类型有哪些?拆包解包了解过吗?
值类型8种:BSCIJFDZ, byte8 short,char16 默认int32 long64 f32 默认double64 bool
值在放入List,. 前被装箱为Integer,.
Str不能修改,但相等比较也需要用java.lang. 函数 ,称为引用类型
jadx 可用于反编译,但如果是aapt+dx 会默认混淆函数名的
- Java 的访问修饰符有哪些?类级的 final 作用是什么?
可见性 private protected public 默认internal=包私有
确定性 final abstract default
final class或成员不含(函数)变量,等价于struct,因此不应该生成可供覆写的get/setter
- Java 的基本类是什么?有哪些方法?equals 和 == 有什么区别?重载重写是什么?
所有类型的Base class 是Object{eq,hash,toStr ,wait,notify同步锁 }
== 只比较GC对象的引用,而 (1.equals) 需要先valueOf装箱
重载=编译期0开销查找fun invoke()的重写,静态类型的专利
- Java 的常用类型有哪些?immutable 和 mutable 的 list 差异是什么?LinkedList 和 ArrayList 的差异是什么?
java.util.可变性 是从Kotlin抄的,弱类型assert
一般,只在嵌入式设备用易于增长的链表
- HashMap 了解哪些?规避哈希碰撞的方式有哪些?
类似RegExp 地狱回溯,long hashCode() 作为分组key的相同,也会给DDoS可乘之机
因此,对于用户输入的field,可以将其忽略,只用str,int作为Key
C系语言一般用 BTree,AVL 二分法实现KV查找。 如果是要问带锁的/fastutil的 Map实现,或者getOrPut 等惯用法……
- 项目里用到了 Xposed,它的原理是什么?
作为Xp插件的apk们会被 app_process 随 XposedBridge.jar framework.jar加载
在活动前loadPkg时,利用变量或函数名(转为native),修改其JNI代码指针,使调用前先查找覆盖表
- 了解过哪些设计模式?他们分别是什么?
Adapter,Delegate,Proxy,Observer/ 类型转换或AOP覆写
Factory,Visitor,Chain/跨平台的new()方法, 判断"type"的方法, 事件冒泡
被新语言淘汰的:😅👎
Singleton,Builder-Prototype,Command/ 模拟字典、复制数据、枚举操作
Strategy,Bridge,Facade / 函数字典和import式模块
- 单例模式的实现有哪些?可以手撕一个吗?
JVM上的static 已经支持了RAII。也可以用DCL懒加载
- OSI 七层是哪七层
物理,数据链路: WiFi,BLE,eth,rndis驱动
网络传输: IP4,6 , iptables, socket(TCP) UDP
会话表示 Header cookie,json
App 众多Web3.0论坛,.
- HTTP 在哪一层?有些什么内容?
在L5~L6,负责请求响应和MIME类型,暴露为 调用+回调 +Header环境变量
除了会话,HTTP也能做文件传输和填表
- GET 和 POST 核心差异是什么?
body是否为form等私密数据
- HTTP 状态码有哪些?
{2,3,4,5}xx 各指代: 正常 重定向 请求出错 服务出错
- Java 的基本类型有哪些?拆包解包了解过吗?
值类型8种:BSCIJFDZ, byte8 short,char16 默认int32 long64 f32 默认double64 bool
值在放入List,. 前被装箱为Integer,.
Str不能修改,但相等比较也需要用java.lang. 函数 ,称为引用类型
jadx 可用于反编译,但如果是aapt+dx 会默认混淆函数名的
- Java 的访问修饰符有哪些?类级的 final 作用是什么?
可见性 private protected public 默认internal=包私有
确定性 final abstract default
final class或成员不含(函数)变量,等价于struct,因此不应该生成可供覆写的get/setter
- Java 的基本类是什么?有哪些方法?equals 和 == 有什么区别?重载重写是什么?
所有类型的Base class 是Object{eq,hash,toStr ,wait,notify同步锁 }
== 只比较GC对象的引用,而 (1.equals) 需要先valueOf装箱
重载=编译期0开销查找fun invoke()的重写,静态类型的专利
- Java 的常用类型有哪些?immutable 和 mutable 的 list 差异是什么?LinkedList 和 ArrayList 的差异是什么?
java.util.可变性 是从Kotlin抄的,弱类型assert
一般,只在嵌入式设备用易于增长的链表
- HashMap 了解哪些?规避哈希碰撞的方式有哪些?
类似RegExp 地狱回溯,long hashCode() 作为分组key的相同,也会给DDoS可乘之机
因此,对于用户输入的field,可以将其忽略,只用str,int作为Key
C系语言一般用 BTree,AVL 二分法实现KV查找。 如果是要问带锁的/fastutil的 Map实现,或者getOrPut 等惯用法……
- 项目里用到了 Xposed,它的原理是什么?
作为Xp插件的apk们会被 app_process 随 XposedBridge.jar framework.jar加载
在活动前loadPkg时,利用变量或函数名(转为native),修改其JNI代码指针,使调用前先查找覆盖表
- 了解过哪些设计模式?他们分别是什么?
Adapter,Delegate,Proxy,Observer/ 类型转换或AOP覆写
Factory,Visitor,Chain/跨平台的new()方法, 判断"type"的方法, 事件冒泡
被新语言淘汰的:😅👎
Singleton,Builder-Prototype,Command/ 模拟字典、复制数据、枚举操作
Strategy,Bridge,Facade / 函数字典和import式模块
- 单例模式的实现有哪些?可以手撕一个吗?
JVM上的static 已经支持了RAII。也可以用DCL懒加载
@JVM_volatile var cache
get()=run{ //保证单次执行
if(null==cache) sync(this){ if(null==cache) cache=init()}
return cache
}
#os #wasm #backend https://www.bilibili.com/video/BV1oE421w7Vt
猜猜为什么jvm里没有malloc这种概念,只提供了 byte[N]?
因为C语言允许从随机的整数构造指针, 导致每次读写数据结构都像SQL注入一样不安全,各种能越过内核鉴权
C还没有标准的序列化手段(除了 criu.org 按mmap来封送),一个Rc归还内存被cpp弄出魔法的效果
哪怕send(一个bytes[]) 到tcp都要序列化,而C对此的实现,居然是\0结尾字符串😅
不过呢,C struct是和二进制文件对应最好的,指针紧随数据,免重定向就类似于序列化了,但是C没有利用好这个等价关系,那至少需要sizeof的值
这么弱智的数据模型,所以只能用一些4K page实现虚拟地址了,越界就要中断,约等于内核vma就是虚拟机,哈哈。把一个越界检查和union多型整成了页表映射那么臃肿
WASM的JIT就完全不需要这种概念,app和内核驱动一样安全,线程和协程一样轻量
unikernel.org 还不是能跑起来
猜猜为什么jvm里没有malloc这种概念,只提供了 byte[N]?
因为C语言允许从随机的整数构造指针, 导致每次读写数据结构都像SQL注入一样不安全,各种能越过内核鉴权
C还没有标准的序列化手段(除了 criu.org 按mmap来封送),一个Rc归还内存被cpp弄出魔法的效果
哪怕send(一个bytes[]) 到tcp都要序列化,而C对此的实现,居然是\0结尾字符串😅
不过呢,C struct是和二进制文件对应最好的,指针紧随数据,免重定向就类似于序列化了,但是C没有利用好这个等价关系,那至少需要sizeof的值
这么弱智的数据模型,所以只能用一些4K page实现虚拟地址了,越界就要中断,约等于内核vma就是虚拟机,哈哈。把一个越界检查和union多型整成了页表映射那么臃肿
WASM的JIT就完全不需要这种概念,app和内核驱动一样安全,线程和协程一样轻量
unikernel.org 还不是能跑起来
Bilibili
虚拟内存是什么? Lunaix内部设计之再论虚拟内存(上)_哔哩哔哩_bilibili
欢迎来到系列《Lunaix内部设计》的第一期视频。这个系列不算是一个全新的系列,相反,这是对我的另一个系列:《从零自制操作系统》的拓展与延伸,起到一个互补的作用。“再论虚拟内存” - 是该系列的第一集内容,主要是带大家走进 Lunaix 内核中虚拟内存模型的设计,以及背后的动机和理论。而本视频是上半部分,我们将会从头回顾虚拟内存的概念,阐述我们的动机,以及介绍对页表层级的抽象。LunaixOS源代, 视频播放量 2999、弹幕量 1、点赞数 179、投硬币枚数 74、收藏人数 147、转发人数 6, 视频作者…