自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (5)
  • 收藏
  • 关注

原创 C语言传统垃圾收集器的缺陷以及我的思路

的解释,因为C数据结构是无法预料的,内存里面并没有特殊标记,很难判断哪些是指针哪些是数据,比如BoehmGC就只能尽最大能力判断。而高级语言都是自己定义一套完整数据结构,禁止用户直接操作内存,指针和数据都精确记录,就能在理论上确保,但是对C语言来讲似乎又显得太笨重。】,沿用最精确的套路,在指针上做文章,十几年的经验,Json那几个类型足够用,标记/清除算法的根指针就是C语言里创建在栈上的变量,记录它们的状态,就可以之后正确判断是否失效,叶子指针是在堆上创建的,因为数据结构固定,就能轻松递归处理。

2024-04-14 11:33:09 348

原创 一个极简鲁棒的C语言的动态数据类型扩展,取代诸如C++/Rust那些愚蠢的东西

我用过很多高级语言,喜欢简单的东西,讨厌C++,一直在想C语言能不能用最简洁的手段扩充动态语言特性,并且支持垃圾回收呢?偶然迸发出灵感,网上查了查没有人做过,那么开始动手吧。更多示例代码,参见test_var.c。

2024-04-13 15:46:07 899

原创 偶然发现一个平均分布得不可思议的伪随机函数

却非常神奇地完美覆盖了数组的每一个位置,也就是循环len次,数组每个位置都是完美的1,如果把循环次数减少,也会发现分布足够均匀,而且我测试了不同的2的次方的数组长度,发现没有例外。起因是我在构思哈希表的结构,不想用链表处理冲突,那么就必须找一个伪随机函数,如果哈希值n对应的数组位置有值了,那么循环执行。显然不合适,也必须是“伪”的,也就是同样的输入值,算出的结果必须一样。,直到n对应位置为空,函数必须足够“分散”,也就是每次调用结果“激烈跳动”,比如。我数学不好,这个现象能从数学上证明吗?

2024-04-06 17:37:51 246 2

原创 卷积核相当于小孔成像板

接上文,再举个例子,小孔成像,如果把小孔扩大成某个形状,那么它就是卷积核,所成的像旋转180度,就是卷积结果。由此引申,眼科疾病散光、动物的不同瞳孔形状,都可以看作卷积核。

2023-12-26 19:56:43 446

原创 卷积相当于散射投影

设想一个点光源,投射到银幕上形成某种形状的光斑,如果把图片的每个像素都看作点光源,投射的光斑形状一致,那么这个过程等同于卷积,这个光斑旋转180度,就是卷积核。

2023-12-26 12:52:18 386

原创 解决msvc编译luajit找不到ftelli64的问题

找到些许线索,用dependency walker检查msvcrt.dll,果然缺少_ftelli64(特么_fseeki64倒是有),搜索luajit项目目录,只有一处地方出现_ftelli64,于是按照线索在前面加上一行。为避免恶心的版本套版本的msvcxxx,我一直用的是wdk-7600.16385.1,执行msvcbuild.bat编译,报错。,网上搜索,问题出在_ftelli64函数,写测试代码test.c。失败,提示同样的错误,继续网上搜索,在。成功,静态链接没问题,但是。

2023-08-07 12:39:23 208

原创 解决在Linux下使用Firefox浏览Google搜索页面时,键盘方向键无法移动搜索框光标的问题

原以为是X Window键盘或者输入法的什么Bug,但是后来发现只有Firefox,只有Google页面里的搜索框有此问题。经过F12检查,发现删除元素的键盘事件监听程序后就正常了,那么如何用Greasemonkey做呢?DOM没有枚举元素绑定的事件监听程序的函数,不得不说是一大缺陷,除了Chrome调试控制台提供了一个。,但是Firefox没有,于是我想到在document-start之时hook。函数,但是发现并无作用,为什么没法改?有效,却依旧没有解释,不管了,Web的世界就是这么凌乱,无所谓了。

2023-04-16 12:28:21 224

原创 Windows环境下与POSIX兼容的strerror()函数的正确实现方法

输出的不同,以及用任务管理器可以看出没有内存泄漏。函数,但只是个样子货,与Windows的。经测试,没有内存泄漏和空指针问题。我的方式相比于别的烂大街文章,有。返回的错误码毫不相干,这里使用。

2023-03-24 15:21:03 314

原创 安全的malloc/realloc/free宏

已经释放过的指针等,此处规定所有指针定义的时候必须初始化为。根据ISO C标准,这几个函数的某些行为是未定义的,比如。,之后就能任意调用下面两个宏而不会产生内存泄漏等问题。

2023-03-01 21:32:16 149

原创 C语言编译期/运行期动态替换某些函数的实现

比如这些函数有缺省的实现,但是在不同环境下可以被替换成更优化的实现,那么可以使用函数指针,甚至在动态链接的情况下也是可以的,比如下面的例子,例子非常简陋,随手写的,没用到头文件宏之类的。

2023-02-26 20:51:23 247

原创 适用于老版本的魔兽世界登陆器编写指南

Windows批处理代码,放在WOW根目录下,没什么复杂的,多个服务器依样画葫芦改就是了。realmlist.wtf文件不同语言不用版本的位置不一样,我用的是3.3.5 enUS版,注意调整。密码自动进剪贴板,游戏启动后Ctrl-V粘贴即可。

2023-01-30 19:37:04 1254

原创 Lua数组下标从1开始的习惯导致容易犯的错误

不过其实#号取数组长度本身就有nil缺陷,所以最佳做法还是另外开个值存长度,把它看成类似c语言数组那种半成品就行了。首先说明,下标0完全没问题,只是习惯问题。写起来非常自然,但是注意,此时t的下标从3开始了,这就会导致。

2022-11-03 13:01:54 455

原创 Lua三元表达式的坑

但是,当b为false/nil的时候将失败,此时会一直返回c。

2022-10-14 18:48:51 211

原创 清空微博的油猴脚本

能完美应对页面弹出异常对话框、页面刷新等情况,证明了脚本是可以完美模拟浏览器操作的。

2022-09-23 07:45:14 421

原创 Lua一些容易被忽视的性能问题

branch1和branch2耗时相差无几,而branch3则为6倍。根据查询到的相关信息,查询分支较少的时候,if else比hash算法快,反之则hash快。而branch3为何如此之慢是因为每次执行都new了table,所以对于固定的table应该放在函数外面。

2022-09-14 08:37:49 217

原创 JavaScript生成器(Generator)和Lua协程(Coroutine)如何传入值的区别

返回的已经是协程了;前者调用之时可以通过参数往里传值,所以第一次。是“生成”生成器的函数,需要调用它才能得到生成器,而后者。原理一样,本质都是协程。无需再传,而后者必须通过第一次。话说如果Lua设计成。,就和JS差不多了。...

2022-08-16 09:41:25 273

原创 JavaScript协程(function*/yield)转化为异步(async/await)

现在生成器函数是执行的主体,而调用方则是辅助的。一直感觉这两者之间存在某种联系,奈何智商不够,辗转反侧了好几年,终于查到了一篇醍醐灌顶的回答。函数里进一步包装成Promise,正如上述StackOverflow回答里面所写的那样。的重大意义在于让表达式的返回值“出去再进来”绕了一圈,这样就能在。当然,以上最简单的写法纯属“脱裤子放屁”,没有任何实际功能,把。,是返回数据给调用方的,调用方是主体。在生成器函数里的作用相当于。的关键字,需要写成诸如。后面语句的值,也就是。都删掉结果一样,但是。.........

2022-08-14 16:52:15 581

原创 为了更好地理解await关键字

暂时没有找到严格的确切的说明,有知道的吗?

2022-08-11 22:08:07 52

原创 WebAssembly就是个垃圾

好奇查了一下,这破玩意儿居然没有标准库,特么只能做数值运算吗?不能像js一样直接操作浏览器?还得用一套巨复杂的规则加载?哪个脑子进水的设计的?JavaScript用的是,我以前就想过,完全可以在此基础上扩充其它语言支持啊,比如Python是不是可以?WebAssembly可以啊?真是脑子有💩,全球IT界被印度阿三占领的恶果!...

2022-07-03 10:14:51 283

原创 Lua的多重返回和多重赋值混合在一起的神奇化学反应

比如:输出:可以看到,“2”被吃了。原因参见Everything You Didn’t Want to Know About Lua’s Multi-Values

2022-06-09 13:49:48 62

原创 Windows控制台全屏幕

实现按下Alt-Enter按键后全屏的效果,查了一下没有相关命令,只有SetConsoleDisplayMode()函数,于是测试,失败,GetLastError()的错误信息是**“这个系统不支持该功能。”**我的系统是Win10。只得另辟蹊径,尝试向控制台窗口发送Alt-Enter按键消息,参考https://stackoverflow.com/questions/10280000/how-to-create-lparam-of-sendmessage-wm-keydown后成功,代码很简单,就一行:

2022-04-19 12:05:07 272

原创 屏蔽某些XX在某瓣的帖子

某瓣小组,比如那些长期霸版的,或者某种原因引起不适的。思路很简单,小组讨论列表的“作者”列,超链接里带有用户ID,如下图所示。我最初的做法是把这些超链接简单地放入哈希表里,查询效率很显然是O(帖子数量)的,但是没过几天发现失灵了,原来超链接后面加了个尾巴?_dicc=1,天晓得以后会不会变,如果挨个儿对用户ID进行includes(),那么时间复杂度将上升到O(帖子数量x黑名单数量),这还得了?没办法,只得祭出JavaScript Aho-Corasick (AC) 多模匹配算法,我写了才两个月不到,就

2022-01-12 10:39:52 180

原创 Debian 9 VirtualBox启用摄像头支持

宿主机(Host)是Debian 9,需要额外安装Oracle VM VirtualBox Extension Pack,下载地址是,我的版本是5.1比较老,所以得在Old Builds里面查找对应的。界面里此处安装:不过我的出类似如下错误,网上找的图片,内容不一定一样,反正估计是权限不够吧打开命令行,取得root权限,执行以下命令安装:VBoxManage extpack install --replace XXX,成功。Guest OS是Win7,能够发现virtualbox webcam

2022-01-03 20:38:53 414

原创 Windows环境便携工具链

有这样的需求,各种编辑器、编译器、实用工具等,不想经历挨个儿繁琐的安装配置过程,能既拷即用,且能够方便地增删和升级替换。Linux里面依赖的是环境变量,虽然现代的Linux很多地方已经变味了,比如大量依赖配置文件,比如把绝对路径硬编译到二进制文件中,再比如Linux所有软件都糅合在一个目录树下,卸载和更新非常繁琐,在我看来都是KISS原则的禁忌。我的做法是,每个软件都有自己单独的目录,自己设置自己的环境变量,通过定好的规则,由外层脚本依次调用,完成所有软件环境变量的设置。优点是,每个软件都是“绿色”的,

2021-12-29 20:47:12 503

原创 纯JavaScript的UTF8和Base64URL编解码算法,不依赖第三方库

鉴于原生的btoa() atob() TextEncoder() TextDecoder()存在的问题,我自己动手丰衣足食,修改自一些著名的C语言实现,见以下的参考链接。UTF-8编解码,参考:https://taoshu.in/c-utf-8.htmlhttps://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txtconst utf8_encoding_table = [ { cmask: 0x80, cval: 0x00, shift: 0,

2021-11-22 13:34:00 1210

原创 JavaScript用TextEncoder编码再用TextDecoder解码后与原始内容不一致的问题

今天发现编解码后的文字里面总是会出现一些“乱码”,于是写了一段代码测试,发现从55296之后统统变成了65533。let enc = new TextEncoder();let dec = new TextDecoder();for (let i = 0; i <= 0xffff; i++) { let j = dec.decode(enc.encode(String.fromCodePoint(i))).codePointAt(); if (i != j) console.lo

2021-11-21 22:17:13 2576

原创 JavaScript的char code、code point以及字符串和字符数组的相互转换

我喜欢略过不相关的概念,直奔主题,当过教师的习惯。人的思维总是有历史局限性的,早期人们在C语言中用char命名256个ASCII码,却没想到全世界的文字数量远不止这么多。后来人们在JavaScript语言里用char命名65536个Unicode字符,却没想到现在的数量又远远超出,比如各种生僻字、Emoji等。所以JavaScript只能增加一个新名词code point表示现代意义的字符,可以超过65536,而原来不能超过65536的命名char为了兼容性只能保留。str.length、str[i

2021-11-20 13:34:35 2144

原创 JavaScript Aho-Corasick (AC) 多模匹配算法

论文参考:Efficient String Matching: An Aid to Bibliographic Search,代码风格尽量和论文保持一致。function ac(keywords) { let _g = {}; // goto表 let f = {}; // failure表 let output = {}; // output表 let zero_state_neverfail = false; // 如果为true那么g(0, a)失败总是返回0

2021-11-15 22:04:18 709

原创 GreaseMonkey批量删除微博代码

没直接使用HTTP协议,我想试试JavaScript直接操控Web界面,类似某些自动化测试工具那样。删除确认对话框不知道是动画效果还是防bot保护等缘故,同一个div会弹出消失重复6次,如果在第一次自动点击“确定”,会无效,并且之后再也无法弹出。我写了一个自动删除下一条的按钮,效果还行,按一下删除一个。代码如下:let button = document.createElement('button');button.innerHTML = '删除下一条';button.style.cssText

2021-11-12 12:52:39 1376

原创 Geany Windows(GTK 3+ )修改皮肤

Geany Windows(GTK 3+ )修改皮肤Win10的Geany跟原生Win32程序一样,默认都是白花花的界面,不随Win10暗黑主题变化,这在晚上会非常晃眼。按理说GTK的应用应该是可以改皮肤的,参考了网上的一些资料,修改成功。首先参考issueGeany 1.38 (GTK3) UI dark theme for Windows?,GTK 3+的配置目录位于“C:\Users\用户名\AppData\Local\gtk-3.0\,如果没有则创建,然后下载https://github.com

2021-11-11 10:46:11 786

原创 Node.js静态服务器,单文件,无任何依赖,拟添加部分SSI支持

代码尽可能精简防目录遍历攻击支持Last-Modified异步机制,大文件优化#!/usr/bin/env nodeconst http = require('http');const process = require('process');const fs = require('fs');const path = require('path');const root = process.cwd() + path.sep;http.createServer(async (re.

2021-05-22 16:20:41 130

原创 QuickJS的LibFFI模块,使用JavaScript调用任意C动态库

QuickJS的LibFFI模块,使用JavaScript调用任意C动态库https://github.com/shajunxing/quickjs-ffi例如以下三个C函数,包含在test-lib.so动态库中。void test1();double test2(float, double, const char *);void test3(struct {long; double; struct {int; float} });在QuickJS下使用该模块的调用范例如下:import {

2021-03-15 18:37:53 1196

原创 Java语言是垃圾中的战斗机

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-05-03-Java语言是垃圾中的战斗机/index.htmlJava重复造轮子是前无古人后无来者的:有人嫌JDK Logging不好用,于是发明了Log4j;又有人嫌这两个都不好用,于是又发明了Slf4j;然后又觉得这三个不兼容很麻烦,于是又发明了Commons Logging把它们包起来

2018-05-03 22:30:43 701 1

原创 一句话告诉你什么是区块链

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-05-03-一句话告诉你什么是区块链/index.html什么是分布式哈希?一份数据拆成很多块,每个点存一部分,为了可靠,允许冗余;什么是分布式区块链?每个点都存完整的数据。造假怎么办?大家都拿出来比对一下,半数通过就算。金融高可靠场景必须这样做,但是,拿屁股想都知道,如此低效率的分布式怎么

2018-05-03 22:30:43 1155

原创 三句废话,关于中兴被制裁

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-04-20-三句废话,关于中兴被制裁/index.html一国人这些所谓套壳儿的“开源”,虚假的繁荣,面对垄断和竞争,都是垃圾,不堪一击!二软件也是有核心和非核心之分的,你觉得闭源后国人能轻易搞出核心软件?国人除了套套壳儿还能搞什么?就不说操作系统了,你弄个通用程序设计语言、编译器优化看

2018-04-20 14:03:15 398

原创 中兴遭美国禁运有感

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-04-17-中兴遭美国禁运有感/index.html早晨看到的新闻http://tech.163.com/18/0417/10/DFJCF5M700097U7T.html以下是我的废话中兴的应该希望能让我们醒醒了,我很多年前就说过,关键的命门千万不能被别人攥在手里。注意,以下谈的不是

2018-04-17 21:14:43 1451

原创 Python读取文件最末N行,实现Linux的tail命令功能

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-04-17-Python读取文件最末N行,实现Linux的tail命令功能/index.html思路主要使用fseek()函数的随机读写能力,从文件末尾按子节反向读取,遇到CR、LF作相应的处理。因为操作系统有缓存优化,所以这种方式的性能应该没问题,另外我看过tail的源代码,用的是lsee

2018-04-17 12:29:47 1754

原创 Python使用Whois协议查询域名、IP地址信息

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-04-17-Python使用Whois协议查询域名、IP地址信息/index.html问题由来我想查询某个IP地址所属的运营商,于是在百度里搜索,得到了结果,而且告诉我是从http://www.ip138.com/获取的。进入该网站,得知最原始出处是https://www.apnic.net

2018-04-17 12:29:46 11019 2

原创 什么是好的技术

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2017-10-12-什么是好的技术/index.html如果技术本身比解决的问题还要复杂,那么它就不是好的技术。道理很简单,人的精力是有限的,学习技术的时间比分析问题都多,吃饱了撑的。比如最近流行的“响应式编程”,我扫了一遍没看懂,然后再看看它“擅长”的领域,就知道了不是好技术,不值得学和用。

2018-04-06 16:20:42 309

原创 关于生存、繁衍、进化的模拟

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2017-09-30-关于生存、繁衍、进化的模拟/index.html自然法则的简化模拟系统有一个恒定的总能量,生物的产生、消亡、运动会导致能量的重新分配,但是总能量恒定对于一切生物,优势和劣势都是同时存在的,有得必有失模拟系统使用程序设计语言的循环来模拟时间进度,一次循环为一个时间单位植物不

2018-04-06 16:20:38 572

JBPM 5.1官方文档

官方指南加+API文档,手工下载,手工打包CHM

2011-11-02

PhoneGap文档

PhoneGap是跨平台移动开发的利器,这是我手工下载并打包的文档

2011-11-02

HTML5教程(无广告)

从W3C School抓取的HTML5教程,然后编译成了CHM文件,相比网上流传的那份带垃圾广告的教程,我的CHM是绝对纯净没有广告的。 第一次发资源,谢谢支持。

2011-05-17

Web Service介绍

Web Service介绍Web Service介绍Web Service介绍

2007-08-02

Base64编码

Base64编码Base64编码Base64编码

2007-08-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除