Forwarded from Yuze Wu | 女子高中生 | 喵!
duangsuse::Echo
#project #drawing #web 这个大概更新了一次,支持配置参数(调时序和事件入口弄了好久😅 现在实质算法与动画、位图坐标系套板完全分离了。 看看这个 此外旧版我也留了 https://duangsuse-valid-projects.github.io/Share/HTMLs/lrud/old.html #js bookmarklet 半成品见下方。
噢对了,为了演示下这玩意的确有点用,我做了个动画导出工具
调查了一下 browser side GIF encoder ,发现看起来打包最靠谱的(好吧我承认他是唯一没打包纯 source... 另一个没 CDN)是一从 AS3 移植过来的…… 草
jnordberg/gif.js 也挺好,可惜速度有点慢,作者貌似是函数式迷。
顺便看出个鱼: 标竿式的前端项目 freezeframe.js 🌚 JS 生态圈真混乱
调查了一下 browser side GIF encoder ,发现看起来打包最靠谱的(好吧我承认他是唯一没打包纯 source... 另一个没 CDN)是一从 AS3 移植过来的…… 草
class GIF { // 只能这样了,没见我顺眼的接口
constructor(dt, loop=0) {let g=new GIFEncoder(); g.setRepeat(loop); this.dt=dt; this.gif=g;}
start() {this.gif.start();} stop() {this.gif.finish();}
onFrame(g) {this.gif.addFrame(g);this.gif.setDelay(this.dt);}
save(s) {this.gif.download(s+".gif");}
} await Promise.all(["LZWEncoder", "NeuQuant", "GIFEncoder"].map(name => fetch(`https://raw.githubusercontent.com/antimatter15/jsgif/master/${name}.js`).then(it => it.text()).then(eval)) );
然后 (话说 #js 里为什么不能嵌套两层 (await (await fetch(s)).text()) 语句 )for(let k of ["width","height"])eCanvas.style[k]=eCanvas[k]+"px";
rec = new GIF(dtStep);
delayStep = async () => { rec.onFrame(g); console.log("1"); return new Promise(f => setTimeout(f, dtStep)); };
async function rend(sord) { eOrd.value=sord; eOrd.onchange(); beforeDraw(); rec.start(); await draw(); rec.stop(); rec.save(`bfs_${sord}`); }
啊连 afterDraw 事件都不必设置了, coroutine 还真是方便呢…… 无论是放 non-async func 里还是直接用 😋jnordberg/gif.js 也挺好,可惜速度有点慢,作者貌似是函数式迷。
顺便看出个鱼: 标竿式的前端项目 freezeframe.js 🌚 JS 生态圈真混乱
GitHub
GitHub - jnordberg/gif.js: JavaScript GIF encoding library
JavaScript GIF encoding library. Contribute to jnordberg/gif.js development by creating an account on GitHub.
duangsuse::Echo
噢对了,为了演示下这玩意的确有点用,我做了个动画导出工具 调查了一下 browser side GIF encoder ,发现看起来打包最靠谱的(好吧我承认他是唯一没打包纯 source... 另一个没 CDN)是一从 AS3 移植过来的…… 草 class GIF { // 只能这样了,没见我顺眼的接口 constructor(dt, loop=0) {let g=new GIFEncoder(); g.setRepeat(loop); this.dt=dt; this.gif=g;} start()…
草受不了了…… 那个很 成熟 的库不仅慢 而且帧率有限制最低 10ms ( 草这个函数我没写 onload PromisehrefScript("https://jnordberg.github.io/gif.js/gif.js?v=3")
const OGIF = window.GIF;
class GIF {
constructor(dt,loop=0) {this.loop=loop;this.dt=dt;this.gopt={repeat: this.loop};this.opt={delay:dt};this.last=null;}
renew(){this.gif=new OGIF(this.gopt);}
start() {} stop() {this.last=this.gif;this.renew();}
onFrame(g) {this.gif.addFrame(g, this.opt)}
save(s) {console.info(`save ${s}`); this.last.on('finished', (blob)=>window.open(URL.createObjectURL(blob))); this.last.render();}
} rec = new GIF(dtStep);
+function(kWH) {
for(let k of kWH)eCanvas.style[k]=eCanvas[k]*2+"px";
Object.assign(rec.gopt, assoc(kWH, k=>eCanvas[k])); rec.renew(); }(["width","height"])
rec.gopt.workerScript="https://jnordberg.github.io/gif.js/gif.worker.js" 做不到, cannot be accessed from origin ,真可笑。 全部都是 local install static files ,没有 CDN ?
tail -n+2 |python -c 'import sys; s="".join(ln if i%2==0 else f"**{ln[:-1]}**\n" for i,ln in enumerate(sys.stdin));print(s)' #日常精神分裂过两个星期就开学了,想整理下之前计划的项目。完了,我好像忘了项目队列上的一个项目。
是引用丢了还是整个丢了?它处在什么位置?
记得当时记忆用的是 大小小 大小小 的顺序,好像是 第二个大大丢了,在 fourier 之后 hachiko py, mohu cpp 重写之前。
项目是什么平台的? linux? windows? 有没有用到 DOM, Qt, OpenGL 等框架?
应该是跨平台的,肯定不是 Qt 或 GL。
项目和二进制格式、输入输出、网络、数据库、算法、绘制、编译原理、API 设计有没有关系?
应该都没有关系吧,是单个的应用,而且输入输出哪个程序没有啊,算法也不少吧。
项目有图形界面吗?还是通过 CLI 或 socket 流呢?
应该有界面吧。
是不是 CASCompiler 重写?那个已经有了也足够大 。
不是吧…… 这个是后来岔的。
是不是完成 LittleDict ?
可能吧,可是它也是小项目啊?
应该不算了。 fourier 和 mohu 都是单页的,LittleDict 已经可以说是大点的东西了。
刚才就记下来应该完成了,那就不用改了。
关于这些杂七杂八代码与结构的设计,你有什么建议给大家呢?
我觉得吧最关键是要懂拆分,要能看出程序所需要最关键的子程序和这些片段所依赖的变量(好像 make 的规则一样),然后还要把「领域」和「下层API」的变量 集区分开,比如 video 的 w,h 宽高和 fps 帧率 t 当前时间就是领域的变量,什么 encoder, decoder 就是应用框架的变量,不一样的变量集不同对待。
See you at @fishing_daily ! | (Archived) YuutaW 的版聊频道
darkeet 的编程技术真的很好呢(黑脸
https://t.me/kn007_channel/7253 (这个) #Android #dev 完全没改 🌝..
好吧,我承认对于一个优秀的设计者而言,视付费(或共享)软件为自己的私有之物并没有问题,但是我也觉得 Xposed 或 Lucky Unlocker (1)是搞机圈广泛使用的 (2)是用户的自由 ,开发者无权干涉或者做进一步限制,没有必要对破解太敏感。
dreamtonics.com 和它的 SynthesizerV 也遭到过声库授权验证的破解,作者对这个软件花了很大心思,但是他也没有把这个问题迁怒到*任何使用者*身上,增加一些对用户而言很多余的限制。
不过对于「持久化跟踪破解者」的方法,我觉得还是不要看得太重。理论上 Xposed,Magisk 什么的去 AOP 就相当于复制所有有效代码的「抄袭版」应用的…… 而且持久封禁什么的也别太指望,其实用 ramdisk 的 Android x86 每次都是全新开机, adb 连上就能直接调试(大不了虚拟机写 init.rc 开机自动双清),这种纯客户端应用的反破解(注意不是反逆向工程)造成不了太大麻烦😒
整个应用对真的了解「运行时」概念的人都是运行在沙箱里的;总有方法能 trace 。你用文件系统别人可以 fs watch 嘛😒,dnotify inotify 树变动监听机制,fs IO 都是透明的。 Win32 下也有 Spy++, process explorer 等「实际上不算是调试」的工具能查看,只是见闻不够而已(当然 drakeet 自己也说了『存储重定向』里列得很清楚,不过跟踪破解者还是容易误会成恶意跟踪)。
而且我真不觉得 Xposed 注入代码是问题之源, AOP 本来就是对用户很有利的事情,能实现既有代码缺失的功能,许多人的代码就是缺乏一些用户需要的选项,所以才有 Xposed 和辅助功能去改变。为什么要站到极客们的对立面呢,明明应该是一起的。 #reveng
补充 SAF 访问 Android/data :
好吧,我承认对于一个优秀的设计者而言,视付费(或共享)软件为自己的私有之物并没有问题,但是我也觉得 Xposed 或 Lucky Unlocker (1)是搞机圈广泛使用的 (2)是用户的自由 ,开发者无权干涉或者做进一步限制,没有必要对破解太敏感。
dreamtonics.com 和它的 SynthesizerV 也遭到过声库授权验证的破解,作者对这个软件花了很大心思,但是他也没有把这个问题迁怒到*任何使用者*身上,增加一些对用户而言很多余的限制。
不过对于「持久化跟踪破解者」的方法,我觉得还是不要看得太重。理论上 Xposed,Magisk 什么的去 AOP 就相当于复制所有有效代码的「抄袭版」应用的…… 而且持久封禁什么的也别太指望,其实用 ramdisk 的 Android x86 每次都是全新开机, adb 连上就能直接调试(大不了虚拟机写 init.rc 开机自动双清),这种纯客户端应用的反破解(注意不是反逆向工程)造成不了太大麻烦😒
整个应用对真的了解「运行时」概念的人都是运行在沙箱里的;总有方法能 trace 。你用文件系统别人可以 fs watch 嘛😒,dnotify inotify 树变动监听机制,fs IO 都是透明的。 Win32 下也有 Spy++, process explorer 等「实际上不算是调试」的工具能查看,只是见闻不够而已(当然 drakeet 自己也说了『存储重定向』里列得很清楚,不过跟踪破解者还是容易误会成恶意跟踪)。
而且我真不觉得 Xposed 注入代码是问题之源, AOP 本来就是对用户很有利的事情,能实现既有代码缺失的功能,许多人的代码就是缺乏一些用户需要的选项,所以才有 Xposed 和辅助功能去改变。为什么要站到极客们的对立面呢,明明应该是一起的。 #reveng
补充 SAF 访问 Android/data :
"content://com.android.externalstorage.documents/tree/primary:Android/${name}/document/primary:Android/${name}"
#Java #Android #codeIntent intent = new Intent("android.intent.action.OPEN_DOCUMENT_TREE");
intent.putExtra("android.provider.extra.INITIAL_URI", Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2F${name}/document/primary%3AAndroid%2F${name}"));
startActivityForResult(intent, SOME_RESULT_CODE);Telegram
天天向上
https://t.me/drakeets/1918
See you at @fishing_daily ! | (Archived) YuutaW 的版聊频道
darkeet 的编程技术真的很好呢(黑脸
https://t.me/vvb2060Channel/411
没想到这个人也雷区蹦迪,真是太草了 🌚👌
看起来完全不知道 drakeet 讨厌什么呢,为什么要在用户群直播呢?这个……
我是杂学开发的(严格意义仅是程序员不是工程而已),目前没在 Android ,这位算是 Android 工具侧有点经验吧, Magisk 检测都会写。
没想到这个人也雷区蹦迪,真是太草了 🌚👌
看起来完全不知道 drakeet 讨厌什么呢,为什么要在用户群直播呢?这个……
我是杂学开发的(严格意义仅是程序员不是工程而已),目前没在 Android ,这位算是 Android 工具侧有点经验吧, Magisk 检测都会写。
Telegram
南宫雪珊
最开始纯纯写作上线xposed检测时,我就找了一次,想看看是怎么检测的。在群里drakeet说是包名黑名单,所以我把所有含xposed功能的app都pm hide,结果无效。想继续找时服务器关闭了检查。
昨天在纯纯写作群里看见在讨论17.7.100旧版开启了xposed检测。于是继续试验,并在群里时时公布进度,最终发现了前文结果。(但drakeet当时不在线)
我发帖的直接原因是在Android/media放置文件来跟踪用户恶心到我了,这种需求应该使用SSAID。
绕过Android/data访问限制我…
昨天在纯纯写作群里看见在讨论17.7.100旧版开启了xposed检测。于是继续试验,并在群里时时公布进度,最终发现了前文结果。(但drakeet当时不在线)
我发帖的直接原因是在Android/media放置文件来跟踪用户恶心到我了,这种需求应该使用SSAID。
绕过Android/data访问限制我…
duangsuse::Echo
https://t.me/kn007_channel/7253 (这个) #Android #dev 完全没改 🌝.. 好吧,我承认对于一个优秀的设计者而言,视付费(或共享)软件为自己的私有之物并没有问题,但是我也觉得 Xposed 或 Lucky Unlocker (1)是搞机圈广泛使用的 (2)是用户的自由 ,开发者无权干涉或者做进一步限制,没有必要对破解太敏感。 dreamtonics.com 和它的 SynthesizerV 也遭到过声库授权验证的破解,作者对这个软件花了很大心思,但是他也没有…
#cplusplus 嘛,为了避免有人说我指点江山 🐸我就写几行证明下 fcntl() dnotify 是超级简单地。
Android 除了 RootFS 和 libc 结构外本质就是为嵌入式优化的 Linux ,而 DNotify 是 Linux 2.4 引入的目录变更监听机制(为兼容性, in_ 是 2.6 feature),所以我用 C++11 lambda 不需要几行代码就能实现「文件变更的监听和删除文件的保存」
众所周知写程序先写测试:
#cplusplus #code 草,居然不支持文件名…… 真的只能看目录么 那样只能 fstat() readdir() 扫 dirent 了,而且也没法知道具体什么文件有变更,非常草。之前还以为是不能递归监听
https://www.linuxjournal.com/article/8478 #linux #dev
https://github.com/NexusBots/Umbreon-Rootkit/blob/master/readlink.c
关于 dnotify 如何取得 path 的问题可以
#DontKnow MAX_CANON PATH_MAX 第一次知道 canon 是指 termios 意义的…… 难怪 termcontrol 会有相关常量名 😳
https://gist.github.com/duangsuse/a8984950c563894eea54fc2f537b5003#file-inotify-cpp
唉现在想着初学时不知道 stdio, fcntl, unistd, stdlib 这些 header 都是干什么的呢…… 不知道怎么选。不过,或许新手会觉得 C 的 std in/out/err; fprintf,fscanf; fread,fwrite 比 Java 的 I/O Stream 要方便些,其实 libc 的确更不方便呢
Android 除了 RootFS 和 libc 结构外本质就是为嵌入式优化的 Linux ,而 DNotify 是 Linux 2.4 引入的目录变更监听机制(为兼容性, in_ 是 2.6 feature),所以我用 C++11 lambda 不需要几行代码就能实现「文件变更的监听和删除文件的保存」
众所周知写程序先写测试:
touch a b; echo 1>b预期
rm a b
cat saved/b
./fsw_amd . 输出 Aa Ab Mb Da Db 行。#cplusplus #code 草,居然不支持文件名…… 真的只能看目录么 那样只能 fstat() readdir() 扫 dirent 了,而且也没法知道具体什么文件有变更,非常草。
#include <fcntl.h>fs watch 是 Ruby/Node 系 CLI 应用重要的特性,包括 jekyll, inotifywatch 在内支持者不在少数,封装好的东西例子就不举了 睡大觉😴。
#include <csignal>
#include <unistd.h>
#include <cstdio>
const int sigPrior = SIGRTMIN+1;
#define notNeg(v) v; if (v<0) return -1
void printFPath(int signo, siginfo_t* si, void*) {
auto o = *si;
getFPath(o.si_fd); printf(" %s\n", fpDesc);
}
int main(int argc, char** argv) {
auto fp = (argc>1)? argv[1] : ".";
int fd = notNeg(open(fp, O_RDONLY));
fcntl(fd, F_SETSIG, sigPrior);
fcntl(fd, F_NOTIFY, DN_MULTISHOT|DN_CREATE|DN_MODIFY|DN_DELETE);
struct sigaction dnAct = { .sa_sigaction=printFPath, .sa_flags=SA_SIGINFO };
sigemptyset(&dnAct.sa_mask);
sigaction(sigPrior, &dnAct, NULL);
while(true) pause();
return 0;
}
https://www.linuxjournal.com/article/8478 #linux #dev
https://github.com/NexusBots/Umbreon-Rootkit/blob/master/readlink.c
关于 dnotify 如何取得 path 的问题可以
readlink /proc/self/fd/0 ,看这个 #DontKnow MAX_CANON PATH_MAX 第一次知道 canon 是指 termios 意义的…… 难怪 termcontrol 会有相关常量名 😳
https://gist.github.com/duangsuse/a8984950c563894eea54fc2f537b5003#file-inotify-cpp
唉现在想着初学时不知道 stdio, fcntl, unistd, stdlib 这些 header 都是干什么的呢…… 不知道怎么选。不过,或许新手会觉得 C 的 std in/out/err; fprintf,fscanf; fread,fwrite 比 Java 的 I/O Stream 要方便些,其实 libc 的确更不方便呢
GitHub
NexusBots/Umbreon-Rootkit
Contribute to NexusBots/Umbreon-Rootkit development by creating an account on GitHub.
啊哈,直接完整封装 inotify 的所有功能了,不过 70 行代码 😋
下载代码,
$ infsw #sysadmin #cplusplus #tools
R M attrib close close.rd open move.from move.to A D self.D self.move self.unmount in.queovf in.ignore
evNames=above evFlags=dFu1 hasPrefix=1 bufSize=1360
下载代码,
clang fsw.cpp -O3 &&install -Dm755 a.out /usr/bin/infsw 就可以收获简单易用的 fs watcher 了 😊$ infsw #sysadmin #cplusplus #tools
R M attrib close close.rd open move.from move.to A D self.D self.move self.unmount in.queovf in.ignore
evNames=above evFlags=dFu1 hasPrefix=1 bufSize=1360
Forwarded from 荔枝木
Bilibili
当它们重叠在一起 - oooooohmygosh_哔哩哔哩_bilibili
无论是对图形轮廓的创作,还对色彩的描绘,亦或是对技术的处理。只要是两个事物的重叠与碰撞,答案都不可能只有一个而已。而设计师要做的,就是为了得到更好的答案,去探索那无限的可能。, 视频播放量 2509127、弹幕量 4778、点赞数 215978、投硬币枚数 91758、收藏人数 95326、转发人数 8489, 视频作者 oooooohmygosh, 作者简介 合作vx:aichimeicaikourou,相关视频:这,不可能!,如何画一个不可能图形,5个著名商标中存在的“错误”,5秒视觉高潮,逃跑 -…
Forwarded from dnaugsuz
面试题都是屑,有胆就让通过的人在实际工程里写出那样精巧的代码啊
就是无聊的智商测试,过滤人的而已,根本不在乎实际应用能力。
应聘的人等于做题家,学习的过程等于填鸭,内卷死了。 你能做成什么样和用成什么样根本是两码事。
就是无聊的智商测试,过滤人的而已,根本不在乎实际应用能力。
应聘的人等于做题家,学习的过程等于填鸭,内卷死了。 你能做成什么样和用成什么样根本是两码事。