日志篇 惊惊博客轨迹
说明
本篇是用于置顶的博文,本人日志,内容不一定对,但请指出
日志
20241119 RoaringBitmap压缩性质的bitmap
一直想压缩性的bitmap,就是叫这个名字,
压缩原理就是分块,稀疏的就单个分块,数组容器和位图容器.
然后连续的整数就起始值,长度.
因为有序,查询的时候具备二分条件.
20241109
博客上面怎么有几个锚点跳转不了,细查之后发现是:
锚点跳转不了的是:
0S
01S
0X
可以:
0s
0x
20241107
微软多选文件夹的功能
microsoft.codepack包:
https://learn.microsoft.com/en-us/windows/win32/shell/common-file-dialog
新版:
https://www.nuget.org/packages/Microsoft-WindowsAPICodePack-Shell/1.1.3.2?_src=template#supportedframeworks-body-tab
这个库的远古版本,net35的:
https://github.com/aybe/Windows-API-Code-Pack-1.1
20241101
疯狂青蛙故事:
他居然在cad14加载net45的dll,然后产生了错误:出现异常:0x0000005(访问冲突)
然后原来是因为他一直net framework框架上面写代码,
net framework是利用复制几个.csproj文件,
然后修改net版本,不过这样输出目录是相同的,容易造成引用出错.
现在大家都转到net standard工程上面了,
net standard只需要写一个.csproj,里面提供了多框架功能,
多net版本是生成不同文件夹的,这样就很舒服,不需要担心错乱问题了.
然后青蛙又问:
iTextSharp库在低版本没有啊?难道不提供这个功能?
这样只需要一些手法,
创建一个非cad的net4.8独立进程,
它来引用低版本没有的包,
然后进行跨进程通讯,返回值少就传输,返回值大就共享内存.
并且cad层不做预处理,而是引入接口层,
在接口层来预处理,实现解耦.
这样多爽?net3.5也可以用高版本功能...
20240111
现在的c#:
StringBuilder sb = new StringBuilder();
StringBuilder sb = new();
StringBuilder? sb = null;
var sb = new StringBuilder();
1是历史遗留,
2-3是字段用的,
4是为了同时兼容返回值为可空类型和非空类型,以传播它们可空检查,
这样才能在变量上面写对齐变量的代码:
var x = ...
var y = ...
var z = ...
既然吐槽了,那么更好是怎么做呢?
微软在编译器做可空类型检查啊,让我们加问号干什么,害我们复制粘贴都不一样了.
未来会不会后置类型,然后
var sb = StringBuilder?
重新设计,类型后置,可空类型检测在编译器做.
var sb1 = "xx":string;
var sb2 = null:string;
var sb3 = new:StringBuilder();
var sb4 = StringBuilder.Create();
然后字段也可以写成sb1和sb2形式,以此减少字段和变量不一致.
我认为既然null和new设计为关键字,就应该设计为一致性,我非常不喜欢断开的关键字.
var sb5 = new StringBuilder();此方案否决
20231126 伪自定义图元
关于cad.net没有自定义图元怎么处理...那就造一个伪功能.
相信看过四叉树的朋友们已经知道了,四叉树可以制作碰撞检测,而其中最厉害的方式是快速过滤某些图元.那么其实我们经常需要的自定义图元,其目的也是为了过滤,进行快速选择.
怎么制作呢?先等等...
mysql的b+树目的是什么?答案是可以更有效的制作更多索引呀.
所以我们把想要的"自定义图元"名字加入一个字典,把它拥有的子图元id们加入value,是不是就是一种快速索引的方式了.
在什么地方加呢?那就需要构造一系列图元反应器了,在加入图元的时候归类.
有了这个方式之后,标注链式选择功能就可以改为,从字典上面获取图元集合了,而不是每次再从四叉树上面获取,效率更快...每次从四叉树进去的方式就是mysql的回表方式.
那么标注链被修改了怎么办?通过图元修改反应器联动修改就好了...
存在的问题如下:
问题1,如果词典名key+图元集合value,那么这个value的类型用链表,10w个图元加入,就有20w个指针...这里需要用到一种特别的优化方式.
问题2,存不存在一种方式跳过图元修改反应器,例如组块命令时候,对于图元没有修改,但是被归类到块内.获取时候然后通过字典实现了一种"越权"访问图元.
20230404
看了一下UE5的技术原理,发现真的好复杂,学到了一个有向距离场,
lumen渲染器代码居然三个人写两年,光测试时间的代码应该就有一堆...
其他如SOA这样会把代码写很复杂的技术就为了省下0.1毫秒,在渲染上面也很重要,以及优简三角面,稀疏矩阵...
20230326
sql 走了索引但很慢
https://blog.csdn.net/qq_29374433/article/details/113735535
小表驱动大表原来是跟连接数相关...
20230324
真是见鬼了,居然把日记日期写错了好几个年份..
net8的为性能而生类型是不是专门弄了一个类型去减少GC的根查找...毕竟这几个月没去了解net了....
20230323
我怎么感觉这些不是什么有意思的技术,分布式这种东西不是是个人看看就会吗?
用openCV提取一个外轮廓,那才帅呆了哇..
20230318
Reentrantlock的非公平锁原来会退化成公平锁,原因是非公平锁尝试两次之后会进入队列.
所以说不是所有的非公平锁都是反复尝试,而是考虑CPU负载.
20230315
net7代码生成器有个不卡的API方案是IIncrementalGenerator,本质上还是代码生成树.
看了一下net8,发现没有没有想象的给力,发现微软从来不把东西做到最好,只是慢慢推进.
c#还是要有runtime方案,没有转为rust的无GC,说实话转了可能也没有什么必要.
20230311
原来集群重启的时间还不能立马重启,要等票选之后才能重启.
这么深入的东西,感觉不是现在的我应该研究的.
redis的zset是跳表,也可以用来排序,并非只有红黑树才可以排序.
延迟双删:删缓存-更数据库-延迟删缓存
t是线程.
周期{
t1先删除缓存,如果这一步错误,那后续不执行,此步重试.
. t2进入读取缓存,找不到,去db拷贝到缓存,返回.
. t3+++和t2之间很紧:缓存也找不到,也要去db拷贝,大量的请求造成缓存击穿.通过分布式锁再读取,以此避免击穿.
t1更改数据库.
. t4+++因为t2已经缓存有,直接返回.
t1延迟删除缓存(缓存是t2造成的).
}
t5在上一个周期结束后来读取,发现缓存没有,去db拷贝到缓存,返回.
延迟的时间必须大于查询时间.
第二次删除缓存可能存在失败,需要不断重试.
这个方案的从设计上面来说味道就很怪异,
不如监控binlog然后发送修改缓存,只是binlog也是异步的,存在延时.
但是网上都说延时双删一致性效率会更高,不晓得怎么测试...
写方案比较
https://juejin.cn/post/6964531365643550751
分布式锁
https://blog.csdn.net/az44yao/article/details/103996062
缓存穿透类似偷袭,绕过redis袭击数据库.
缓存击穿类似正面硬刚,一直进攻一个地方,直到失效时一起涌入攻击数据库.
缓存雪崩类似鬼子进村.
核心问题是,那布隆过滤器怎么删除?重新初始化替代.
什么时候觉得阿里巴巴技术比腾讯好的?是spring cloud alibaba吗?
不是,是微信小程序的购买流程.
支付宝退出小程序之后有活跃通知栏,而微信小程序内大部分程序员会去小程序内置订单界面,我每次都要进入小程序才能看到我的咖啡订单号成功不成功,跟别人聊完微信再去取货的时候也要再次点进去.如果我不去看,那么此时商家有事退单,我将会饿死在地球.
20230309
ChatGPT写正则表达式啊,嘿嘿
找到一篇分布式事务的概念文...很长...
https://zhuanlan.zhihu.com/p/183753774?utm_id=0
然后知道了Mysql的XA分布式事务,XA是最慢的也是强一致性(还有一个对应的概念是最终一致性),实现方式简单说就是协调者发送一次准备消息并阻塞全部分机数据库,再告诉分机告诉协调者OK了,协调者再发一个执行信号到全部分机数据库一起跑更新,就是2PC(两阶段提交).
XA是数据库层面.
其他都是业务层面:
AT是折衷,自己分析sql语句并生成一个undolog在错误时候回滚,但是分布式读取也屏蔽了,防止脏读.好处是不用自己去手写,也就是用得最多...
其他侵入代码的,但是性能高:
TCC..
SAGA..
GC原理
计数法和分代回收..无论Java还是c#都是后者
计数回收:...略,缺点就是不允许循环引用.
分代回收:
年轻代是标记复制,
年轻代就是0,1,2区,也就是e,s1,s2.
老年代是标记清除和标记整理(标记压缩).
Java基本上所有都是针对CMS的参数优化,
而其中最为年轻代是标记复制不会有碎片,而老年代是通过标记清除所以有.
而SWT是在标记阶段暂停JVM除了GC的线程(native的也可活动),
CMS核心是三色标记法,黑色是自己和成员标记完成,灰色是自己标记完成,白色无标记.
四个阶段:初始标记(SWT),并发标记,重新标记(SWT),并发清理.
为什么需要重新标记?因为标记会出现引用更改,造成错标漏标,具体俺也不知道了,八股文背一背算球了.
而G1基本上不用优化.
20230308
原来单片机是用看门狗实现抗干扰,既有软件也有硬件.发现硬件真麻烦呀...
20230306
感觉压榨性能这方面基本上没什么好学的了的.数据库方面还没有图形学来得多东西.
20230301
原来解析器是这样做了一棵树
https://zhuanlan.zhihu.com/p/112460676?utm_id=0
还有AST树...说难也不难,只是懒得记
20230224
谷歌:不要通过共享内存来通信,而应该通过通信来共享内存.
看了半天人家怎么理解的.
共享内存会涉及到多个线程同时访问修改数据的情况,那得保证数据的安全性,可见性,
那就会加锁,加锁会让并行变为串行,cpu也忙于线程抢锁.
不如换一种方式,把数据复制一份,每个线程有自己的,只要一个线程干完一件事其他线程不用去抢锁了,这就是一种通信方式,把共享的以通知方式交给线程,实现并发.
那具体是怎么做的呢?
原来是不要锁资源而是利用管道顺序来独占通知.队列就是管道+锁.
20230223
今天看了一个java陆总监的视频是说多线程+分布式锁.
多线程环境下,两个线程分别无锁读到了数据.
线程1获取分布式锁并写入数据库成功.
线程2也已经读取数据,但是此时因为线程1已经修改数据库,线程2就是过期数据,出现脏读,线程2脏读数据在判断条件真,也去写数据,出现了脏写.
为了防止脏写,所以分布式锁在写入更新时候要[查询旧值+更新]合并构造一个CAS原子操作,而在此之前可以无锁查询,这样跟单例模式一样了.
既然有CAS的思想,那直接操作数据库不也一样吗?
update goods set stock = stock - 1 where goods_id = #{id} and stock >0
为什么要上分布式锁呢?答案就是高并发令数据库压力剧增,会出现数据库连接或者因为超时等待而报错
结论就是:
1,无高并发可以不用redis(分布式锁),直接打数据库上面就好了.
2,有redis缓存还是要用上,避免bug找不到,同时也要去掉sql判断语句,减少sql内执行.
在程序员郑清的视频《库存超卖问题》也有讲过一些相同的结构.
double-cas思想(乐观锁),也就是添加版本号.
但是要警告秒杀不要用版本号,而是用库存数进行比较:
是因为当库存100,100人秒杀,高并发如果仍然对比版本号,就会导致明明有库存,还是导致有些线程抢不到货.抢不到还不能重试,因为这样就是ddos数据库了...
20230221
cad数据库的边缘测试,一个事务如果过长那么它会爆的.
是提交了十万条多段线发现的,但是cad是闭源的,
然后看了一下mysql结构,发现这个爆的地方是可能是undo log,是cad写了一个阈值或者根本就是bug导致的..
mysql的大事务处理
https://blog.csdn.net/wang_luwei/article/details/123107735
话说起来一个大型系统的mysql事务要把他们分别作为小事务再回滚来完成并发控制.
可谓是一条简单好记的事务优化策略.
编程能干啥?看透了一切之后选条路耕耘吧...
前端,图形学:
三维模型,渲染,游戏,仿真.
照片,视频(编码),网页
后端:
数据库,高并发系统,生产系统,金融系统.
通讯:
纠错编码,加密编码,网络通讯模型(P2P...).
人工智能:
照片,视频,自然语言处理.
硬件设备:
驱动(抗干扰设计,医疗设备,手机,电脑....)
20230218
上次说到了一个弱引用,那么c#弱引用有什么用呢?
看了这篇文章知道了一个很核心的问题,那就是弱事件,如果被调用者注册了,那么就难以卸载了,尤其是多线程环境中.
https://www.cnblogs.com/instance/p/3484739.html
20230217
泛型的痛,c#写matrix<int>和matrix<double>
需要写两个的时候我就觉得这非常蛋疼,
他们不提供一个类似cpp泛型固化编译...这事情我能说十年...
https://www.cnblogs.com/feng9exe/p/11975975.html
铁路售票系统的后台为什么难,主要是QPS达到百万,
为什么淘宝相比它还是难,主要是淘宝是多商品多品类,它的TPS是分散的.
而铁路售票系统是沿线联锁,属于这样的锁达到了平均QPS两百万(2020年数据),
那么问题来了,怎么实现呢?
俺不知道,俺是2016年左右看来去之间转发的(或者回答)
但是俺看过一些人在回答,例如前端还做了一个随机布尔数(我猜是一种哈希站点数),直接显示无票...
后端在这里提及了
《分布式集群内存数据技术引领12306技术革命》
除了一些反抢票机器人之外的业务之外,退款要退到内部钱包(防止黄牛)...
首先是DNS--Nginx--哈希IP分流.
然后消息队列的流量削峰,令牌桶限流,有界数组限流...
他们需要分布式动态扩容内存,然后还得不停机扩容,所以它们做了一个分布式全内存数据库,
连SQL解析器都不要会怎么样?...
它背后数据库也肯定是一个大型的列车表/站点表,
例如要防止超卖,写个count>0,就需要一个count字段在列车作为表上面,不过bitmap表示每一列车座位,这样有个好处就是可以CAS修改.
这让我想起了怎么统计int的1..这样
甚至有人写了这个方案出来了,这里
数据修改也可以分段式,同一条线路无中转的,锁的粒度变小...
接着就是常规的读写分离,主从同步,
磁盘SSD,备份方案也考虑更改为多级,或者节假日闲时备份...如果SSD没有诞生岂不是全内存死扛...
20230215
学了一个LRU结构,属于一看就会系列.这就是redis回收内存的策略,它的改版还有LFU,不过不同的LRU实现本来就不同,所以很蛋疼,明明是同种异构,偏偏要加个名字...
LRU最近最少使用淘汰算法,时间比较.
LFU最不经常使用淘汰算法,计数比较.
redis的哈希容器扩容机制居然和java的不一样,叫渐进式扩容,记忆哈希容器扩容机制挺蛋疼的...跟正则一样,看一次忘一次系列.
渐进式就是两个哈希容器,一个原始的,一个扩容的,然后搬数据的时候重新散列单个阈值超过的.
比redis快的还有EhCache和Dragonfly,但是也不是全部场景...
没有redis还真不知道这个世界在干什么...
开源就是好,他们不愧是对自己技术十分自信的团队.
20230212
随着ChatGPT爆火使得微软服务器崩溃,连带崩溃的还有win激活服务.
一亿用户的涌入,微软是不是用win server来抗这个高并发的...
看了很多java面试的,发现了一件事...背不下来...
哈希容器原理这样的东西不就是看了就忘记的吗...记得它是个O(1)就好了啊...
互斥锁和读写锁这样的东西不是会用就行了吗...这些可以记一下,毕竟各种锁原理是编程核心.
AQS这样的东西压根就不用会的啊,又没有人去改造,当然了,如果是利用其他语言去复刻...那还是要去看源码
原来雪花算法是推特推出的...
雪花算法超过69年,并且已经用完1024台服务器,此时怎么办?
..那么极限的问题,能有那么多id要生成,那就换算法啊,一个int64不够用了.
发现时钟回拨问题没有什么优美的解决方案,这就是为什么互联网大厂要取消润秒.
..有用一个map存一段时间的,有延迟等待的美团leaf.
每毫秒能够生成4096个id,那么一毫秒打进来5000个请求怎么办?
..在当前毫秒数4095的时候打到下一个毫秒去.毕竟一秒钟四百多万个id.
发现SQL规则应该做一个内部代码审查机器人,例如末尾要强制使用limit...
话说这样的公司内代码审查机器人,应该很多人喜欢做这个工作才对,然后发现实际上除了大公司没人会做...
但是我最喜欢做这样的工作了...
一个发动机小知识:
涡喷<涡扇<超燃冲压发动机<核裂热能发动机<核聚变热能发动机
涡扇是涡喷的升级款,主要是省油,省油方式是双涵道,以及三涵道.
但是美国已经有三涵道涡扇发动机,号称领先世界20年.
超燃冲压发动机就是高超音速导弹用的,基本上是飞发一体,就是能打到半个地球的...
它主要的问题是外形气动方式会有呛气...
核能的在上个世界美国也做了大量的实验,只是美苏冷战结束就没了...目前报道是会重启...
20230211
原来学到epoll才知道为什么redis只能在linux安装,
感觉微软应该把这个提供出来才对啊,服务器市场不要了吗?
噢!原来微软也有自己的.
Epoll 是当事件资源满足时发出可处理通知消息,而 IOCP 则是当事件完成时发出完成通知消息.
从应用程序的角度来看,
Epoll 本质上来讲是同步非阻塞的,而 IOCP 本质上来讲则是异步操作.
现在我只要看到异步这两个字,就知道可能破坏了CPU高速缓存...
发现微软很喜欢发挥自己的无穷智慧来抵抗世界耶...这玩意没有专利吧...
20230209
所谓的计算机视觉算法,就是一堆的矩阵算子,也就是笔画.
所谓的AI视觉算法,就是在此基础上面加入神经网络.
说是这样简单,实际上相关度就抓头了
20230207
现在是不是应该有军事AI,
把推演放入神经网络跑一跑,
把集群无人机通过AI自动控制打击目标,还能自动跑去充电...
什么叫时序数据库...
20230203
今天想既然redis是epoll来实现IO多路复用,
那么岂不是socket是mmap的,查了一下发现还真是,linux是利用了mmap的,
而Java的可能在虚拟机层面实现的...控制不了
epoll是用一个红黑树对socket排序,
再通过网卡的信号中断来判断是否就绪,然后拷贝到就绪数组,以此避免遍历,
利用就绪数组减少内核态拷贝到用户态时间消耗,尽可能留下更多的操作在内核态.
实际上这个性能会卡在红黑树上面,不知道这个红黑树是不是CAS那个...
20230130
速刷了vue,发现蛮简单的,就是一个文件三种语言,
很多概念都是WPF已有的,例如MVVM和属性通知,这下我反而觉得WPF不是优美,
例如vue可以实现对一个文件的复制粘贴来实现复用元素,而WPF偏偏多一个cs后台,
难怪那么多人喜欢vue.
而且属性通知不需要自己写,而是利用不同的集合名进行来控制,
一些缓存模型可以形成规范书写,而不是细粒化书写.
主要是细粒化书会引起一件:每个人写起来都不一样的事情.
但是我怎么感觉写界面的含金量和难度不如数据库的并发模型来得有意思...
每秒600万QPS的技术是disruptor,用于股票交易所上面的消息队列.
20230122
发现了几个讲解代码和数学教材
【562 快速傅里叶变换 FFT算法 高精度乘法-哔哩哔哩】 https://b23.tv/woojbge
【这绝对是你在B站能找到的最通俗易懂的【傅里叶变换】教程!计算机博士一个多小时带你感受优美的数学!-哔哩哔哩】 https://b23.tv/PBG8DJe
20230121
ACID数据库事务处理.
想到了我文档栏的线程模型写错了,在消息循环上面用post/send插入任务的时候,要在事务外才可以,不然破坏了事务的原子性,所以需要在执行任务的时候判断当前cad事务栈数量是0才行.
当时为什么这么写呢?因为cad支持嵌套事务的,没注意也没测试到回滚会引起问题,但是思考一下就能知道,嵌套会引起上抛错误,引起了全局错误.
而插入的事务本身只是一个独立任务.
而mysql和redis它们是不支持嵌套.
至于嵌套事物有什么好处呢?没想到...不晓得桌子为什么要这样设计.
电脑坏了一直没改...
然后这几天看了很多分布式数据库设计,主要是CAP三角...看晕了我,非常复杂的样子.
20230114
mysql是用b+树结构储存数据
redis是用跳表和压缩表.
20230113
为什么c#没有软引用
https://www.ssfiction.com/ckf/957494.html
20230105
既然人工智能可以做蛋白质模型,那么有一天用它来设想更小的逻辑门,岂不是硬件自举了...
20221223 无锁队列
靠手机学了一个无锁队列,发现它原来就是用CAS来实现的,
CAS就是原子性对比交换,因为无锁的特性,所以少量并发时候比加锁快,
CAS有个ABA问题,ABA就是一个线程把它交换了又交换,另一个线程觉得跟条件一样就去交换.
这样造成了任务完成的顺序性不同,
那么只需要加个版本号(换另一个原子类含版本号)就能解决.
无锁队列就是判断是不是最后,是就加入任务,多线程高并发插入队列就成为了一种流量削峰的操作.
并且这样比加锁更快.
高并发的红黑树通过无锁队列来制作,需要一次获取它四个节点再做操作具体
这样就是保证它无论何时都是一棵真红黑树...
而最高性能是破坏红黑树结构,分离写入和旋转,等到读取时候再旋转.
20221221
电脑坏了.
去银行办理业务,银行还即日起暂停营业.
20221208 纠错码校验编码
如何做一个迅雷.
先说一下tcp,tcp最麻烦就是有个粘包问题,也就是多次发送短报文的话,可能存放在一个包里.
所以报文需要一个消息头(结构体)指名长度,然后按照长度切割接收的数据.
长文件切割的话,消息头中要有个消息号(私有协议头)让客户端回传,不回传就重试,n次后放弃.
客户端接收报文后,通过消息头长度切割bytes(称为body),
如果消息头长度超过报文长度,就放弃(此时服务端会因为没有回传而重发),
然后消息头+body一起去MD5校验.
那MD5可以放消息头后面.
因为tcp的校验和,实际上不准确,会因为硬件的电子反转而成功通过.具体
发送的MD5是不怕电子反转的,
如果反转了,那么发送的MD5和本机校验的头尾MD5相同的概率极低.
如果还怕,那就头尾各一个MD5,或者头中尾各一个,或MD5的MD5...概率无限拉低.
MD5成功校验就回传消息号给服务端.
这里方案是有个缺点,
一个包的重发次数满足n,那么就放弃了全部.这是得不偿失的.
就连重发这个成本也是有点大(就算包非常小)
所以需要一种前向纠错FEC的奇偶校验技术来进行.具体
并且百度百科介绍了很多种纠错码技术:
海明码:纠错一位,内插纠错编码到2次幂中.
Rs码:多位纠错,本质就是利用矩阵逆运算特性来进行.
具体
具体2
还有简简单单的热门LDPC码具体
迅雷是udp做的,udp没有粘包问题,但是具体的校验还是必须的,这就是为什么迅雷下载了99%就可以改成rar解压缩了.
当然了还有分布式下载技术....
20221207
如何做一个搜索引擎,
除了爬虫(蜘蛛)之外的遍历互联网技术之外,
还有一个就是数据库分词,利用网站的句子去切割为关键词,
关键词写入到数据库索引上,这样可以避免遍历数据库,使得查询效率大大提高.
20221111
C# WPF 当前上下文中不存在名称InitializeComponent
我发生了这个错误,但是编译是可以的,并且打开解决方案的时候上面老是有一条警告工程需要重新载入.
这是因为我有一个x工程里面有一个命名空间是: AA.BB
然后wpf工程是 AA.BB.CC 命名空间,此时就出现这个警告了.
我把wpf工程改成 AA.CC 就好了...
20221001
cad的wmfout为什么用c#的meta类读不出来呢?
害我剪贴板没完成,惹
20220719
多线程下静态构造函数是不用加锁的,链接,说实话,不是微软回复的话,总感觉会因为测试数过少或测试环境问题,导致我不敢相信...
20220705
在cad,ps上面都会遇到一个问题,ctrl+z之后再画一个东西,此时ctrl+y是失效的.
这就是备忘录模式产生的一个无分支的问题,
要是像git一样做一个分支嘛,你甚至不晓得如何把这个分支呈现给用户.
奇怪吼,按理说应该有很多人想过这个问题,怎么我搜不到呢?
net60真快...
20220626
[操作篇 cad一个小技巧--复制视口带冻结信息] 添加方案三
20220625 c#不支持模板约束运算符
//c#不支持模板约束运算符,
//使得值类型之间需要通过一层接口来委婉处理拉低了效率.引用类型倒是无所谓.
//这样令人很失望,无法写出来高效的 Matrix<int>() Matrix<double>() 函数.
//约束 方法/重载符
public interface IConstraints_Add
{
//有这个!
public int Add<T>(T a);
//c#不允许!
//导致值类型都要通过方法约束,从而令所有步骤都进入函数栈内,而不是直接MSIL汇编,
//而且编译器对于+-*/会在编译期求值,以此减少运行时压力.
//所以说c#在这个方面的能力比cpp弱了
public operator <T> + (T a, T b);
}
public class Cdemo<T> where T : IConstraints_Add
{
public int Add(T a, T b)
{
return a.Add(b);
}
//c#不允许!
public operator+(T a, int b)
{
return a + b;
}
}
说明此模板问题的C++:
#include <iostream>
#include <string>
using namespace std;
template <typename T>
T const& Max(T const& a, T const& b)
{
return a < b ? b : a;
}
class Cdemo {
public:
int real;
};
bool operator<(const Cdemo& a, const Cdemo& b)
{
return a.real < b.real;
}
ostream& operator<<(ostream& os, const Cdemo& c)
{
os << c.real;
return os;
}
int main()
{
int i = 39;
int j = 20;
cout << "Max(i, j): " << Max(i, j) << endl;
double f1 = 13.5;
double f2 = 20.7;
cout << "Max(f1, f2): " << Max(f1, f2) << endl;
string s1 = "Hello";
string s2 = "World";
cout << "Max(s1, s2): " << Max(s1, s2) << endl;
Cdemo demo1;
demo1.real = 53;
Cdemo demo2;
demo2.real = 52;
cout << "Max(demo1, demo2): " << Max(demo1, demo2) << endl;
}
20220623
红黑树做点树过滤不了Y范围...
然后我找了一下资料,发现这不就是一个点树嘛,那白嫖的代码呢?没有.
转眼一想,那不就是可以加入一个现在很火的点云嘛...耶...原来做一个超越acad那么简单🤣
20220622
从小我就不会举一反三....
后来发现,人家也不会,都是通过阅读大量案例才晓得的...这个词语简直误导我很久...
想到了四叉树储存cad点可以通过红黑树进行大小排序,
然后发现net35不支持,我又跑去抄微软的net48代码,
然后发现这个东西不太行啊,跳转了很多次函数指针,
为了linq准备的东西很容易引起CPU缓存失效,在cad这样高性能运算就是慢了,
还得自己写一个红黑树...
然后我想,四叉树的rect有记录重复的double值,是否可以内存复用,以此减少内存大小?
接着想了一下,rect可以是int,long,这样可以利用位运算它平方,
最小就是1,并且可以控制四叉树深度,不至于无限递归.
而且指针长度跟值是一样的,所以就不需要复用了,跳转一个函数地址更麻烦.
20220621
volatile+双重锁校验这样的东西在c#为什么很少看到人写呢?
看了java之后反而有点迷...
为什么mysql不加事务处理起来贼慢,一万条34s,加了事务0.08s,慢什么地方啊😀
20220619
一天一片非布司他,对抗尿酸一年了,仍然发现隔几天就疼,然后跑医院检查,指标显示着我在溶晶,
看检查单之后医生让我减少非布司他药量,每天半片,但是听了我说一天一片的时候,觉得我应该保持一天一片.
那不可能一年内都在溶晶...甚至吃了双氯芬酸钠还是感到疼痛...
我觉得是因为身体的炎症因子无法顺利排出...
然后病友们有说碳酸氢钠(小苏打)可以碱化尿液,我觉得比止痛药安全一点,
吃了之后发现连续几天不疼了,妙极了!我得把这个发现告诉医生🤣
(药物治疗请遵循医嘱,尝试前需询问医生)
20220616
现在cad二次开发的群友就是学c#的想学cpp,学cpp的想学c#,都想摸摸对方
20220615
编程本不需要接口,只需要虚函数.
20220611
图都学完了,再学个马尔可夫链不过分吧.
20220610
如果一个动态数组扩容的时候,当前数组后面也有适当的内存长度是扩容长度,
此时能不能直接利用那块,来减少数组的拷贝?
我想微软/英特尔应该有这样的东西吧...(SIMD?懒得查API,希望有人直接告诉我😀)
c#居然没有加入序的哈希容器,而有加入排序的红黑树结构.
20220607
突然想到一个好玩的东西,如果用人工智能进行反编译,会不会使得这个时间大大压缩🤣
20220606
看了一下cpp的优化,发现懂内存结构才是第一步,还得靠着反编译来玩.
难怪高性能渲染是那么难做的...
分支预测直接if高概率还算容易记,
有些是SIMD指令和GCC和MSVC是有区别的...这cpp开局就很难的样子😀
20220601
我给你解释一下这个代码世界.
1,代码是不会骗人的
2,没有人会帮助你理解代码的
3,你不会,入场券都不给你
4,费曼读书法:从头看,看到不懂的地方,再从头看
20220530
学了一个稀疏结构,发现原来这就是渲染的数据结构呀,太妙了,都想放弃c#去玩cpp了😀
20220528
0x01
这几天看了一篇linux如何控制磁盘读写的文章,说占用CPU导致影响了其他进程,所以会用DMA来进行相关操作.
这个东西貌似在大文件拷贝的时候可以用得到的概念0拷贝.
0x02
这个破微软弄了一个内存复用技术,然后不给net45用,然后我把它改好了...
说起来也是神奇,首先山人把元组和切片特性拿过来了,
然后小贱贱给我看了内存复用技术,发现不能用,这里面有些东西跟元组切片重叠的,修修改改弄好了.
然后我又想把Span抄来net35,然后发现抄的东西很多,准备放弃时,猛然发现我居然在研究net底层代码,
跟着山人混着混着,居然研究了那么多我之前从来没有想过的东西...
20220526
0x01
因为有一个nuget包是切片语法包,
不知道为什么net standard2.0的net45项目用不了,net35,40都是可以..
然后山人为了处理元组和切片的dll,准备做源码nuget包,然后功能扒拉到自己的基础dll中,
发现改变代码行为的是利用CLS这些特性,真有趣...(好像也没啥有趣)
属于修改语法行为了.
我总算了解什么叫代码量作为KPI要去抄公共库代码了...
net35没有Span?抄一个进来就行.
net45没有切片语法?抄一个进来就行.
0x02
猜测cad的布局视口那么慢是不是每个视口都遍历一次模型,然后提取图元信息重绘.
如果真的是这样...
a 切换视图之前记录所有修改的图元,这样才能进行嵌套块更新.
b 如果是每个视口都缓存整个模型,那么改成视口选区缓存,缺点每次拉伸视口都重绘.
c 双缓冲进行异步,不卡死用户,虽然这样带来不会立即显示.
这样的方式主要是用空间换时间,需要一个庞大的内存记录更改部分.我怎么老想一次开发的事情...👺
20220521
发现布隆过滤器和后台选择集有惊人相似的地方.
首先我们找到一个射线法来判断点在多段线内,然后发现这太慢了,然后引入轴向矩形实现四叉树,
是一种把"肯定不可能"扔掉,把"可能"留下来,再进行深入判断.
然后回头发现,布隆过滤器也是这样的耶😆
20220519 国产cad的netSDK,真不怪它
0x01
不是很满意cad的SDK封装的地方很多,
有一些合理但是诡异的地方,滥用了"属性"而不是用"字段"
例如当前数据库=数据库
这样是set了,
但是指定允许后台还是前台?自己试吧,起码接受是set吧.
然后它出现了图层.On=图层.On
才会生效,我赋值我,以此触发数据更新...简直了,多写一个函数会感受到生命遭遇威胁吗?
接着不要怀疑,其他地方会有updata函数....
然后又接着一些中望/浩辰之类国产cad厂商实现这个netSDK表示:怎么一模一样也有人抱怨不一样.😅
0x02
发现litcad不支持spline,要不我去支持它一下?
0x03
gitee的政策使得很多无关紧要的cad问答遭遇了屏蔽,还是换源去了.
0x04
发现某个软件明明支持了某个专利功能,但是却要以第三方插件去提供,很好的避开了法律法规.
简直妙到不行.
20220516 曲线
做曲线的时候发现了原来cad的spline的控制点构造时居然是伪造knots,
因为knots只有拟合点才可以算出来,
而API需要提供knots,导致knots是共用的,
因此控制点生成的knots是 0,0,0,0,1,2,3,4,5,6....n,n,n,n 这样的形式伪造一份的.
不愧是你自动桌子,为了数据对称性居然这样干,而且还没有Default方式,而是让人填充进去.
然后e大利用entityInfo分析数据就找出来了.
然后我发现cad的拟合点变控制点,再变回来,会保留原本knots,说明了一但生成就会储存了一份.
若拟合点改控制点,更改控制点,再变成拟合点,此时还能保留吗?
读cpp的spline代码的时候发现没有一个统一的模板标准,不说不同公司,不同的人写出来都是不一样的代码.
然后又出现有无法避免的问题,调用微软的头文件,然后微软还不按照vs的格式化进行格式化.(制定标准的人不标准)
难怪说c/cpp的代码洁癖并不严重,都是无奈...
曲线代码一直有个问题,拟合点画曲线的时候占用速度比控制点很多,而且不是全局绘图参数带来的问题.
今天终于分析出为什么画曲线会慢了,
因为会循环过程中找到一个min数,用它作为累加单位①,
累加数②就是曲线参数u,用它来采样全部曲线拟合点,然后gui画小段直线上就是曲线了.
这样造成在前面部分是大单位,后面全是小单位,转变地方是拐角处.
此时应该作为动态规划,在密的地方密,在不密的地方回退到大单位,
难怪我加了并行处理也没能很好优化此处速度(ฅ≧へ≦)ฅ
20220515
发现优化才是程序的重中之重,要时常想着这个东西怎么加入并行才能更快.
反倒结构这样的东西最后都是服务于优化😆
然后想了半天,找了半天资料也没有看到四叉树八叉树怎么并行计算(. •᷄ࡇ•᷅ )
在抖音上面看了小山,然后推荐了一堆java视频,
意外的发现java居然没有ref和out,难怪他们说java只有值传递.
现在c#为了性能可以ref x = xx;以安全指针赋值.
这个java没办法了,说实话,这样抄代码更难了.
20220512 数组的内存模型
今天Rust群上面有一个很好理解切片和数组的图,当然了其他结构还有链表什么的不在此范围.
按照这个模型来说,
c#的没有数组,
c#的数组是切片,List是Vec(动态数组),Box(是IEnumerable
20220511
终于成功在winform生成与cad一模一样的样条曲线了
连干了我16小时
20220510
昨天把人家博客的曲线反算cpp代码转为c#然后溢出了...🙄
今天群友发我一个新的,然后也没有在openGL预览成功,我很慌
其实学完图算法之后会发现所谓的互联网用户画像实际上就是基于这个制作,敢敢单单
20220509
好烦gitee,用手机登陆了一次电脑就会退登,而且手机网页缩放万能bug不修.
而且手机登陆因为移动网IP属地是会去到广东省其他地方...每次都提示我账号有问题...
看了我十二个小时终于看到几个曲线的定义了,还好国人写的cpp demo我能接受,
纯看数学推理可能要更久(直接放弃),
其实主要白嫖了一段生成的代码,发现有点妙就继续学下去了.
20220508
图形算法真是智商碾压,反算曲线控制点,模拟cad的spl命令.....
http://www.whudj.cn/?p=623
20220507
用控制点创建样条曲线在e大的帮助下弄出来了:创建样条曲线
然后用了一个winform实现了cad的样条曲线.嘻嘻
20220501
在cad2022的jig出现重绘出现了bug,然后搜一下国外的,
发现了怎么国外也搬走了我的国外的programmerall
自己修复了这个bug:cad2022需要防止刷新过程中更改队列 cad.net 封装jig
误导国际+1😆
20220430
c#接入生命周期,居然不是搞一个r#😆
为了处理字符串的0代垃圾,出了一个span
20220429
总结git冲突合并
20220427 利用bing搜索博客园
想破小脑袋啦,Bo算法推翻了好几次想法.
它似乎是邻接表的一种超集算法.
超越邻接表范围处理范围:两个节点之间存在双弧成环,此时遍历一次O(n)完全处理不了.
20220422 哈希值
今天和山人研究了半天哈希值,因为bo算法里面需要词典,词典的key现在是字符串,想转成哈希值(其实官方推荐是不要这样做!)
然后x^y^z
会发生交换算一样的问题,
而元组(x,y).GetHashCode()^z
,元组是膨胀了首位(x<<5+x)^y
就可以避免交换冲突(膨胀系数不同).
然后发现double值需要四舍五入
但是!这个哈希值本质仍然的三个数的累加值,仍然会在概率上冲突!
而且其后的深度优先或者广度优先造成的bug是非必显的.
哈希一样大概率一样,哈希不一样肯定不一样.
解决方案:1,词典用字符串作为key;2,造一棵三维二叉树.
为什么官方不给这样做:
原因是Dictionary的key集合是存放指定对象,
用哈希作为key可能存在太多的不确定因素导致冲突和不同.
当类发生哈希冲突的时候(手动写死返回的哈希值),是词典内部自动指定节点存放.
20220421
bo日志放入博文内
20220418
新写AOP注入事务
发现edge安卓手机版复制不了网页路径到qq,
但是可以粘贴到edge的另一个页面的,因为我一直用的是快速复制按钮,
要用修改按钮,然后选择复制才能进剪贴板...
微软这是什么神奇设计啊!!你就为了不污染一次剪贴板吗😀
20220416
自从开始拒绝低质量代码之后,就喜欢刨人家算法的什么点能比其他快,
然后居然有人说能跑就别动,我给你把头扭下来.
20220414
总算把IFoxAOP搞定了,山人起床就可以看到将近千行代码变动.🤣
原本以为我的成长曲线也是学java那样,线程池,单例模式,设计模式,数据库...
后来发现敲着敲着,是图形计算,并行计算,函数图像,图论...
到现在我都不晓得数据库优化之类的,虽然看了很多视频...但是没有实操过,建设于虚空.
发现了博客园一个问题,md格式传入的图片是没有清理机制的,也就是我传了,然后没有放到博客上.
按照图片地址,我浏览器还能访问到..是不是有延迟删掉我就不知道了,按理说应该检查博文引用..
20220413
博客园的搜索怎么坏掉了啊啊啊啊啊啊
当时贪图edge浏览器可以全平台使用,发现手机端真的差,首页展示收藏不是每次都弹出来...
vs的for tabtab居然不能自动把i换成j,把j换成k...你把i换成ii,然后iii,iiii,iiiii也好啊...
20220412
改着改着ifox发现事务有问题,然后发现我的需求其实蛮难实现的,
我需要在已经 cad命令特性(无权改动) 的函数末尾注入一个函数.
先反射人家的特性倒是简单,怎么注入呢?
Fody 是反射自己的特性.
Mono.Cecil 它不能动态注入.
Harmony2 最后用替换函数指针就好了.
https://www.cnblogs.com/jeason1997/p/6694115.html
20220409
继续bo算法,狐哥的代码基本上被我和山人改得七七八八了,
剩下最后一个图算法,而我发现可以压缩一下图关系,
把一些肯定是首尾相连无多叉先做成一个多段线,剩下两个首尾点参与进邻接表,
因为邻接表关系判断需要穷举...
而且穷举也不能都举,要以逆时针深度优先,否则会获取一个日字外框.而我们需要是两个口.
20220408
原来合作开发那么爽,我搞不定他搞,他搞不定的我搞...
于是乎bo功能已经差不多了
20220402
被邻接表和图搞得死去活来.在广度优先和深度优先徘徊不前.
在制作bo功能,因为当时想得有点ugly,看了人家的论文之后发现了一片新大陆,
然后正和群友们磨合这个东西,发现人家电子cad上面早有这个技术,
我寻思我这个知识破坏者,得撸个开源的出来.
20220331
数学篇 cad.net 葛立恒凸包算法和面积最小包围盒
被发现有bug了...感谢jiegou(杰狗)
20220327
今天想了一个简单但不是很简单的问题:一个非公开的静态字段有什么用?
今天抛了一个简单但不是很简单的题目,
用最短时间来判断四个点为一个矩形(带旋转),写到此处
20220326
该死的痛风.
前一日志说了,尽可能不用感叹号来处理为空检查,但是我发现了一个不用感叹号反而是一种罪的地方.
双向链表的头一旦不为空,那么其他节点必然不是空,此时若还检查一遍才绕开为空检查,那么就是挺傻的.
jig篇最后重绘图元的函数用错了
20220322 为空检查和重载等号运算符
痛苦地改了六百多个可空检查了...
要巧妙的骗过编译检查,重写==运算符的时候要写成
public static bool operator ==(classX? a, classX? b)
{
if(b is null)
return (a is null);
else if (a is null)
return false;
if (ReferenceEquals(a,b))//同一个对象
retrun true;
...类成员对比...
}
还发现其他地方不能单纯if(xx is null),因为这玩意还有传染性,可以传入下级函数再拦截.
如果拆箱的时候,确定不是null,例如遇到符号表或者符号表记录,强转就可以消除警告.
尽可能不用感叹号去处理为空检查才是王道🙄
20220321
改了ifox的双向链表反转了,终于有个舒服的双向链表了...然后因为山人用了一些新语法,逼着我也要用,
把可空类型检查打开,爆了2000个警告😭,修死我了...
利用感叹号只是让为空检查闭嘴,它只是语义层面检查,不会编译和运行时,
你所做的就只需要符合它检查,
例如if(xx is null)return;
20220319
把链式标注改成了四叉树版本,以及用链表完成选择,发现除了百万标注无压力之外,在日常并没有什么卵用..
那就不更新了吧
发现微软的类恶心心,
双向链表反转居然是要手动克隆一个再载入,说好的二分法交换成员呢,只能自己实现一次.
然后rect类不给继承,只能自己实现一个
20220314
增加了两篇文章...
20220309
懒惰...懒惰...这几天相当懒惰...
根本没有研究cad的心情了...
感觉研究这方面要学c/cpp,然后我现在除了看的明白还不晓得怎么敲得明白...(我好像懂了,又好像什么都不懂)
还是去找个敲c#的工作玩玩...
原本从alisp上面学到面向过程,然后从c#面向对象,要处理非常多点的时候告诉我要面向数据...
真是技术深似海...
懒惰...
深圳啥时候结束疫情,我还要去找工作呢(. •᷄ࡇ•᷅ )
20220304 核磁共振原理
你真的懂二维了吗?研究二维可以拿到一个诺贝尔奖.
之前某形针就说过相关的视频,然后仅仅让人弄懂了是傅里叶变换成就了核磁共振,但是没有细究.
核磁共振为何知道-哔哩哔哩
然后出现了这个硬核的UP主,真的太硬了,说了四十多分钟,
他很细心的讲解T1T2片子是怎么看些什么,有啥作用,数学原理,(我觉得顺序有点问题,应该先想片子应该怎么做的,然后怎么想的,不过二刷就可以关联,不成问题,让原理成为更普遍的知识)
能研究出来的人真是超厉害的,全是难上加难的数学原理和电信号原理.
20220302
在糖君的群里中奖了,选了本图形学的书,拿到书之后,最重要就是看目录,之后看了之后再过了一次全部章节,
发现真的很难,
一来是写书的人有一种苏联式教材法,压缩很多知识在一个篇章,让人觉得书很深奥,
二来是书都是伪代码,给点抄的都没有,
这样的教材只能说是给循序渐进的人学的,完全学会几年...大学四年?
我觉得正常人不应该看这样的东西,应该拿一份源码,然后做一份工程...
至今图形学B站的人也只是片段化讲解,因为它真的蛮多内容😅
20220301
网络开发真多东西学,k8s集群,wasm是web....
之前做PPT提案的时候用过WPS,发现它有个问题,满铺PPT的时候打印为PDF会有四周白边,
联系客服发现并没有解决方案...所以用了office进行相关操作.
然后之后出了"导出"PDF功能,但是PPT元素很多则会出现丢失元素或者导出时软件崩溃.
任重道远վ'ᴗ' ի
我怀疑过这个bug产生是Adobe没有提供相关参数让WPS适配,让其忽略默认纸张出血位,
或者单纯就是版权(技术付费之类),然后需要自行根据PDF开源工程来进行数据交换(导出)
深圳现在商场只能24h核酸才能进,那么家门口又没有免费核酸点,
此时此刻一个即将拉肚子的人怎么办?
幸好我每到一个地方都必须熟悉各个地方厕所以及布局...
还是有不需要码能进的厕所....
OOP:
我感觉rust还是丑丑的,
js用的是原型链继承,起码也有点继承的感觉,
rust可以说是没有,那我觉得c类语法还是蛮香的啊.
而且rust既然会编译改名字,那么为什么不提供方法重载...需要通过泛型重载...
微软还是快出一个VisualRust吧 ᐝ◟(˃᷄ꇴ˂᷅ ૂ๑)༡л̵ʱªʱª✧
20220222
无锁代码真好玩,这是不是就是最快的处理多线程安全修改的方案了(•́‸ก )
20220214
实在熟悉vs那套的快捷键,
然后我再想为什么会保存toml的时候会自动打开文件夹,
vsCode有二分查找出问题的插件,找到了rust的crates插件...
并且每次打开的是我存的git的安装包目录(非安装目录),很神奇,这个目录毫不关联,也不在环境变量里...如果我把它改个名字,那么就会打开"win我的文档"目录,并且一次弹四个文件夹.
然后我就卸载了git,再清理掉一些git配置,然后装了最新版的git,
结果ok了.还是用回vscode.
某群群友跟我说了rust并行库,然后搜了一下,发现调用蛮简单的.
20220213
用vsCode开发Rust老是发现打开.toml会弹出一些文件夹,然后转移阵地去IDEA了..
发现也有界面翻译和翻译插件...蛮不错的...
并且一定要安装了MSYS2再安装Rust,否则cargo会提示缺少cfg-if的,老烦人了
而且也有Rust插件,主要是需要Toml插件,不然不会自动下载包...
IDEA的快捷键是另一套...令人烦恼....
20220210
把Rust语法看完了...然后看了一下Flutter,发现它也没有啥学习难度,就是苦力活.
20220208
起初以为Rust不就是一个编程语言,后来发现这群人实际上是做了cargo,
然后我觉得这样的设计蛮巧妙的: 就跟有个教练盯着你敲代码似的.
因为会其他语言之后,入门Rust还是蛮快的.
闭包(匿名函数)真的丑陋...我用它就是为了减少代码,你却给我来个去语法糖ㅍ_ㅍ
20220207
没有几门语言的功力,我还真的看不懂Rust教程的范例...估计人家做教程的也是默认你就有几门语言的功力了..
记得我第一次看编程书,cpp的...看到数值类型定义,我还傻傻的背 •᷄ࡇ•᷅
20220206
我现在怀疑Rust是老美发明出来让阿三好好写代码的.
感觉Rust无法断点调试是蛮纠结的...一切都是通过测试覆盖来完成...
但是Rust怎么做脚本化呢?
虽然我根本没有想过把它嵌入到cad...
20220205
学Rust的第三天,发现它没有预处理...我想#if false
来看看某些段落的运行正确与否,结果只有if´<_`
学过c/cpp的会遇到烦人的头文件,定义顺序,多重包含,以及21种字符串的种种烦恼...
学过java/c#的会遇到GC扫描,把很多东西放到运行时,令运行速度比较慢...
那么有没有java/c#这样新式语法,又有c/cpp的速度的,还反编译不出来源码的,那就是:Rust.
相当于把历史包袱扔掉了一大半.
但是它生命周期的表现就一面光鲜一面粪便.´<_`
20220209
学了一下Rust,发现生命周期真的蛮难看,臭臭的语法和臭臭的语法糖´<_`
20220128
种一棵树最好的时间是十年前,其次是现在.这句话真美.
cad.net 四叉树把一些foreach扔掉了,
因为CPU预读的好处,所以也改成了判断子节点为null,而不是扔掉数组内的null再返回,这样反而运行更快了,有点喵喵的.
总算把十万碰撞变成74毫秒.从3秒到74毫秒٩(ˊᗜˋ*)و
跟gzxl研究好了四叉树了,
特喵的发现自己的代码跟高手写起来区别好大.
不光区别很大,连分析能力都是差了一大截,主要是不晓得CPU怎么干才是最快的.
像盲目使用属性已经成为了C#的常态,
但是字段才不跟属性一样跳转一次函数指针并出栈入栈造成耗时.
20220126
cad.net 封装两个填充类 增加填充边界获取方式.
20220125 CPU缓存机制和SIMD指令
为什么UE5能干上亿个三角面还不卡顿?
CPU 详解缓存 缓存压榨真有意思,那么点云之类的就可以重新构造了..
20220118
cad.net 封装一个填充类 新写
20220115
debug完四叉树的所有内容了,发现人家找邻居的那版cpp代码实际上不适用在cad,他把点加入给做成个链表就完事了,
点实际上要放在 目前对应的空间最下层 的节点内.
而且搜索最近图元并不是邻居,嘻嘻.
20220114
cad.net 事务处理报错增加了报错2.
20220113
cad.net 定义Lisp和发送同步命令 增加多线程同步命令
20220112
四叉树增加了找邻近图元的功能,嘻嘻.
20220107
cad.net 后台选择集和内接正交矩形算法
修改多边形边界选区细粒度的问题,就是不用点集矩阵判断了,改用每条边信息
20220102
修复后台选择集的边界采集,发现单边采集是可以处理自交选取...就是效率老感觉不如其他软件的模板..
总感觉应该看看开源cad源码先...一个链式三角形写了两天没写好...
20211229
https://www.cnblogs.com/JJBox/p/14179921.html 增加思维导图和排版
20211228
今天找cad.net如何插入OLE对象,发现没有!!
stackoverflow:
没有正确的答案
CadLib的拉米:解释为什么没有
感觉这个东西不好做...但是为什么QQ截图是可以粘贴到cad上面的?
总不可能是腾讯适配了cad,而是通过某项微软的ole标准,令cad可以接收到剪贴板相同的东西..
留下了没有技术的眼泪 (;´༎ຶД༎ຶ`)
20211225
这几天我尝试去修复之前制作的一个对齐图元的功能,增加三维对齐,
当我完成了图元部分,再进行了对齐视口内图元时,发现了在布局视口上进行(getpoint)是不会有z高的,即使是开了捕捉.
这样导致了视口呈现三维的时候(观察轴),无法依据我给出的一条对齐线来进行对齐.
(复现方式:在视口内按shift+鼠标中键平移一个三维观察轴,然后在视口外执行getpoint(捕捉有z高的图元),得到pt.z都是0)
这样状态下,需要进行z高获取...
发现这其实是Acad一次开发的问题:
如果是一次开发:
那么执行"捕捉点"时,顺带获取图元id,找到拉伸点.Z即可;
而二次开发非常麻烦:
需要利用获取点(getpoint)扩展成方形(大小依照?),然后置换(chspace)入到模型去选择方区的图元,
再找到捕捉部分的图元,获取置顶图元的z高.
而观察轴会影响选择,需要把四叉树重建,把包围盒变换到DCS再重建....
相当复杂,要测试的东西太多,准备放弃了,去赚点工资再回来敲这个功能.
20211217
昨天修改了一下jig封装,就多了点东西.
突然发现桌子的填充面板做得贼差,还是一个群友问起怎么做"填充预览"我才猛然发现,
桌子是每次打开填充面板都一次性读取所有的填充文件,这样导致用户自定义的填充份量大的时候会卡界面.
所以优化的点的,cad程序启动的时候启动一个泵式线程,
读取支持路径所有的pat,然后把这些pat生成一份bmp,填充面板利用这些bmp显示,还可以做成滚动下滑读取,这样就不会卡了.
接着用户可能修改pat,这样这个泵式线程只需要监控文件修改,然后对比文件哈希值(还得储存一份pat和bmp的对应关系表),有改就再替换bmp就行了.
一个软件好不好用,就看细心不细心.
估计桌子50年后也不会改这个东西,该自己干的活还是要自己干.
20211211
要来了青蛙的博客园账号,然后把它装修得跟我一样,嘻嘻
今天发现了pi的争议:
https://baike.baidu.com/item/τ/2858554
http://tauday.com/
说实话,我比较接受这样,
τ==3.1415926
π==τ*2
结果是反过来的
π==3.1415926
τ==π*2
他们希腊人不懂象形吗(嘻嘻)
20211209
马里奥制造的新用户也可以进入去玩旧版地图使用同样的旧bug操作(超级跳),而新做的地图就修复了.....
相当于每次升级都把旧程序给重新导向了,有点强...
国内游戏每次升级就进行颠覆性更新,所以才把策划骂成狗....
之前看过一个TSP问题的代码是通过类对象里面的静态成员进行类构造,
这样可以让构造函数保持最小初始化,
而拆分参数不同的类型到指定类型则是静态函数完成,
它主要的好处是在IOC容器反射构造时候就需要一个最小构造,
代码真是越写越感觉有趣.
20211206
cad.net 封装jig新写
20211203
cad.net 句柄遍历数据库 大改.
20211201
vs2022真奇怪,net35还有,net40却不见了..
气鼠我辣,移植vs2019的扩展到vs2022的时候在实验环境是正常的,但是装到正常环境的时候不出现了!
现在用也用不了,卸载也没有按钮,重新安装却提示已经安装了...
20211129
今天想了一个画面,要是人类已有的知识都做成一个多叉树,这个树该有多庞大呀.
然后人类不就可以针对未发掘的地方看到对应的关系了,
然后发现这样的需求分析可以成为一门职业...学科分析师?!
然后人类迎来了全球学科分工?
人类工业分工已经打得不可开交了,搞学科分工该不会要组成一个国家再说,又或者一小搓人凭借着自己的先发优势去尽力碰撞每个方方面面,最后发现"自己还是有些东西没有碰撞出来,但是对面搞出来就是比自己做得好...".
修了一下上篇曲线类操作的一些图示,置顶的入门数学增加了一下凸度事件测试
20211127
整理了一下cad.net 曲线类操作,因为有人问起GetParameterAtPoint这个方法怎么肥事...
20211124
今天发现c#的泛型约束不能约束基本类型,这导致矩阵类居然是要单独做一个整数矩阵和浮点数矩阵??
20211123 文件编码UTF-8
今天发现我的文件很多种编码格式,然后网络了一番,BOM就是签名的意思.
发现UTF-8(不带签名)很不错,因为除了微软都用它,结果发现把.sln改成UTF-8(不带签名)之后,vs是打不开的...
林的C#判断文件编码提到的信息来看,签名还是挺好的.
甚至发现了win内部是UTF-16,因为这是配合cpu一次读4个为一页.
跨平台的net standard/net core/net5之后变成了UTF-8(不带签名)的配置文件,而.sln仅为UTF-8(BOM).
觉得文件带签名是很高明的做法呀,但是恰恰那群mac和linux又喜欢不带,一股谁也不服谁的感觉...
然后我的cs文件又有GB2312...
本来想通过代码解决的,担心被改错,还是用vscode一个个看了.所以我的文件变成:
UTF-8:
.json
.md
UTF-8(BOM):
.cs .sln 工程文件(管他什么跨平台)
GB2312:
.lsp 为了cad08,所以不能变成UTF-8
冇眼睇...
20211122 遗传算法
看到网络上关于遗传算法的东西,分成两类,一类是解方程,一类是TSP.
然后撸代码的时候,老是想把他们共同方法抽起来写接口(统一起来)--需求
但是代码太长并且穿插着,没能一下子理解,于是乎做了一张图(果然思维导图敲好用)--分析方法
然后发现了,居然是旅游路线之间交配,交配的时候是不允许同城共存(这很好理解,因为同一个城市不许旅游两次.)
首先我并不是一个聪明人,看到概念就能敲那是很可怕的存在,但是人可以偷懒,却不能停止学习...
而这主要掌握不是代码,而是掌握一种归纳后分析的方法...(可谓是很哲学了)
尽力避免 使其昏昏 ,我只能把理解方式提供给大家了,毕竟闻道有先后,这样比提供结果更重要.
20211119
有一天我问人工智能是怎么体现"智慧"的,然后小轩轩告诉我去看一下遗传算法.
然后发现,原来遗传算法就是暴力算法的一种概率碰撞然后挑选概率大的,有点喵啊.
还真是勤奋可以让人学得更多有意思的东西.
20211118
第一次看到手机版比电脑版好用的软件是思维导图XMind,在电脑上面用的时候就很奇怪,为什么连鼠标中间都平移都没有做好啊?然后今天下载了才发现,手指并不会做到鼠标中间按下之后快速滑动...
可以说是很网页端思维了.(好歹做一个小手啊)
20211117
cad.net 反射com获取包围盒从参数获取返回的数据+net5不能用Marshal.GetActiveObject解决方案
因为内容重复,此文合并到 cad.net Acad外部启动程序
20211112
发现后台选择集的采集边界误差太大,我想了一种轮询边界采集的方法,但是还没有完成...估计这就是桌子的选择集采集法.
一步一步揭开前人的构思.这感觉真是美妙.
20211111
今天日期好多1,光棍节节节高升...
前几天悄悄改了cad变量获取和反应器
也改了上日期的后台选择集,修改了些许逻辑.
今天发现南方cass用了pycad,但是没有留下木兰许可协议.🌚
20211109
cad.net 后台选择集和内接正交矩形算法 我也不知道有没有缺少函数...有些按照文字改成自己的内裤就好了...懂的都懂...
终于完成内接正交矩形了,基本上就是全速选择集了,没想到这个玩意居然那么有意思.
20211106
我利用四叉树建立了一个后台选择集,然后发现点集边界会出现凹多边形选区,
接着想怎么用正交矩形逼近多边形内部,又衍生出内接正交矩形,内接最小矩形,内接最大矩形...
我勒个擦,怎么那么复杂,但是我又不想遍历判断...
20211105
cad.net 四叉树新写一篇.
突然发现写作一大技巧:
举一个可能错误但是理解接近的例子.
20211103
e大给了我一个视口功能玩,然后我整理完了,然后git reset了,没有git add,结果需要重新整理了...
擦...git居然没有reset前自动commit...
今天完成了cad调用四叉树,发现速度蛮快的,再来撸一个八叉树...
20211101
cad.net 定义Lisp和发送同步命令重新梳理了所有的函数,并且增加了同步cad命令,
用了读取PE来动态读取两个文件,因为一些函数被桌子转移到另一个dll了,而且他们名字差不多...
但是委托容器的实现很糟糕,查了一下居然没有人实现...
教育是为了保持最少的沟通成本,
就是,我们在建设一个房子,你说了句会不会惊动山神,我们除了把你赶走别无他法.
既然你要说话,那么就需要证据和逻辑推演.
怀疑论和怀疑是两种东西.
20211031
本来想实现一个字符串+参数输入到委托容器,然后从委托容器内调用功能.
因为调用的接口太多,裹的接口的安全操作太多了.
首先我是把cad的exe和dll的pe读取出来,然后将函数名转为指针,指针转为委托,再把委托放入容器...
不过委托通用的状态找不到,导致整个功能失败...
还得一个个委托慢慢写...
不过倒是想用动态编译生成这些委托,但是这不捡了芝麻丢西瓜了....
20211029
cad.net 关于图元初始化注意事项 新写
cad.net 复制图元的时候按下多次esc导致复制中断的bug 觉得之前写的不好,现在改了一下.
测试篇 创建nuget包 增加csproj直接生成nuget包
cad.net GeometricExtents出错了 增加包围盒的集中出错方式
麻了,原来git不支持路径或者文件有空格,我用ctrl打不开文件啦!
20211027
cad.net 错误日志log4
因为之前看过网上一些net core的教程,有讲怎么用log4写日志,
然后我在cad插件上面实现有点问题,因为大量采用了人家的文章内容,本来不打算公开,不过有人问起来了,所以...
20211026
cad.net 二度封装居然少写了隐式转换...
有些人觉得英语不好就给编程设定义域,然后认定自己接触的是人家吃剩的.
难道学校不好,知识就不好吗?
难道英语不好,数学就不好吗?
难道数学不好,你体力就不好吗?
人不能总为自己找理由,一开始这么想就输了.
要玩就认真玩,先有立足地,后有出头天.
20211025
两直线求交点发现了忘了演示两条线都是斜着的情况.
有的公司为了突破数据库提交极限,想出了各种布隆算法,轮盘式数据库.
有的公司为了把甲方抓在手里,想出了几百次提交就休眠线程....
20211023
笑死,昨天的演示图片没有更新,还是扫不出来,但是代码是对的...改了...同时增加了控制台...
cad.net 二度封装增加了迭代器的自举类型模板,封装再封装0.0
20211022
cad.net 二维码 修复了手机qq扫描不出来的问题
20211020
因为十分讨厌cad08的point在debug的时候看不见信息,所以我做了一个PointV用来转换所有的点到这里,
加上封装了一些线性代数的函数变成一个超级类...(超级累)
它在我共享工程里面
cad.net 入门数学增加了旋转矩阵.
20%是切割字符串,
30%是学习数学,
10%是数据交换,
40%是处理各种面板的关系.
🙉
20211016
我就想知道x^x=c,c已知,怎么求得x,看了一下资料是郎伯W函数
然后搜了一下,发现人家用的迭代法
20211013
有个群友写了一个太阳系行星运行的cad程序,发现蛮好玩的,但是没有做好,然后我去收集星球信息用于模拟真实的.
打开了维基百科,列出excel表的时候,做了前面一堆,然后发现斜角有三个...
怎么还有的斜着黄道面公转的...弄懂每个名词都很困难...
20211012
cad.net 入门数学
- 修改了二维叉乘求方向的说明和函数名MathHelper.CrossAclockwise,明明的逆时针为真的,被我写成了顺时针了;
- 因为这是基础篇,免得大家找函数无法debug,所以增加了镜像函数在求导函数上面;
- 根据上面叉乘问题也联动修改了;
- 日志20211001中提及了修改多段线点集会引起ctrl+u的错误;
- 为了贴合数学的逆时针为真,因此修改多段线点集的方向性全部改成逆时针;
- 并且补充了覆盖点集函数;
- 根据上面叉乘问题也联动修改了;
今天看了一个虚数视频 https://b23.tv/v9NjIA
20211009
cad.net 入门数学增加了导数应用
20211006
cad.net 入门数学增加了二维旋转和三维旋转,发现有的人看不懂矩阵.
database.Purge() 只列能删除的清单,不删除.
突然间觉得图形开发没啥乐趣,又不晓得干什么好,想研究mysql又没有应用的东西.
20211003
cad.net 入门数学增加了凸度求弧长.
20211001 曲线
-
这几天在做倒角命令,发现多段线
polyline.Reset(false, 0);
会引起ctrl+u回退不了...
然后换了一个思路,修改节点,这个时候有旧节点数和新节点数,
若是polyline节点数小于新节点数,先add不足的节点数(节点都是0,0就行),
再修改节点,
若是polyline节点数大于新节点数,最后移除多余节点. -
然后看了一下怎么做一条曲线
https://blog.csdn.net/qq_40597317/article/details/81155571
https://zhuanlan.zhihu.com/p/50626506
感觉曲线这个东西是2d图形学的最后一个问题.
(其实我是想火车在轨道上面跑成曲线,怎么求火车在这条曲线的曲长和坐标...然后通过曲长判断前后车距防止区间占用失效后没有自动停车装置...虽然cad有这个功能,但是数学不能落下啊...)
不过我并没有完全弄懂..嘻嘻
20210929
感觉复刻cad的命令一个月顶多四个,例如倒角之类的写起来是很费神的...
况且我喜欢边做边思考能不能替换成自己的数学库,不用cad自带的,他的本质是怎么样的...
难怪他们说制作一个cad需要50亿美金
20210928
飞诗:
测试高版本2020+ 有个bug
用Editor.CurrentUserCoordinateSystem修改了坐标系原点
再用dimordinate命令标注,标注原点还是没动~
要加Editor.UpdateTiledViewportsInDatabase();
20210926
有没有技术是把云系统的东西载入到客户端,然后在客户端的cad上面边画边上传,
这样可以异步提交,
也就是我在本地拼命画,然后突然关机,这个时候只是少量的操作信息没有上传服务器,重画部分能够接受.
天哪噜,我居然能想到这个方法应对数据库备份的难题.
20210920 地球史与人类
地球被一颗大陨石(小行星)忒伊亚撞击之后,轨道来到了太阳宜居带,也因此地球有了一颗大月亮.
此时是太阳系初期,在行星之间弥漫着各种气体,其中氧和氢被收集到地球上变成海洋,也可能因为忒伊亚就收集了再撞过来.
然后地球融合了各种气体越来越多,地球的自旋开始甩动着气体,气体之间产生了电荷,随着一道道闪电在大气和海洋中打击,将无机物变成了有机物,此时氨基酸诞生了(米勒实验).
大量的氨基酸飘动在海洋里,而海底火山此时不断喷发着,一些细小的孔洞被塞入了氨基酸(石质细胞),也因为海底火山持续的喷发造成的翻滚运动,此时微小作用下将有机物撞击成可以相互契合的东西:RNA.
RNA也在持续的翻滚下契合了核糖体,然后产生了蛋白质.
此时此刻地球上面的迎来了RNA组合大爆发,有RNA首尾相连组成了环的,有RNA抓住蜡质给自己做了个细胞壁的,可以说这个阶段是病毒大爆发呀(⊙o⊙)
蛋白质里面有一种叫水解酶的,它在RNA身上上下其手,将RNA凹陷的地方与游离物凸起的地方放一起,这是自然力的平滑运动(碱基互补配对,就跟抹灰似的把它抹平抹圆滑),然后诞生了DNA.
DNA再通过中心法则等等一系列操作复制粘贴自己,成功把自己挤出了石质细胞后还可以存活,然后一口呼吸!
"死了",这是一个厌氧细胞.
"活了",这是一个喜氧细胞.
然后叶绿体诞生,然后演变各种植物...
然后单细胞生物诞生了,演变成多细胞生物,虫,鱼都出现了...
之后水挥发到太空了,海里的植物露出水面了.
此时陆地上因为大量的水气和云层令到植物疯狂生长,甚至没有腐败植物的细菌和真菌.而蜉蝣生物在此时死了一批又一批.
这个过程存在上亿年,大量的煤碳和石油在此时被掩埋地里.
在这上亿年间,鱼变成了千万种生物状态,有用呼吸器官吸附岩石的,有分泌粘液挂壁的,有很多很多方式,目的就是DNA的复制需要能量(活下来吃东西).
然后是陆地这批生物长出了手,而有的长了手的又回到水里了,这一批叫螃蟹,虾,青蛙,鳄鱼等等...实际上只是一种生态位占据,并不是说它们就傻.
上亿种生物里面,从虫态变成鱼态,变成蜥态,变成恐龙态,变成鸟态.
然后至今6500万年前的一颗小陨石砸到之后,大量的飞溅尘笼罩了整个地球,令全球生物灭绝了70%,不过同样威力的也有宇宙射线爆发说.
灭绝所有恐龙所占据的所有生态位是一种很***钻的操作,不过换个角度想,翼龙后裔的鸡和鸟就飞到了安全区留下来了.
或许恐龙的DNA链比较长导致射线撞击断裂呢?
或许陨石撞击之后含氧量降低支持不了恐龙的呼吸呢?
(6500万年太远了,超过了碳十四支持范围了...DNA也变成无用的了)
在上亿种生物里面,有一种鱼,从虫态变成鱼态,变成蜥态,从变成鼠态(哺乳类),变成猴态,变成猿态,变成人态...其中鼠态的时候还和恐龙打了个照面,甚至追着我的祖先吃了起来...(⊙o⊙)
在经历了全球大冰期(刚刚的陨石灰,射线植物死亡说等等),大陆迎来了阳光,地球最热的地方--非洲,猿类们因为气温升高,开始掉毛了...然后猿类出现了人种分支,逐步离开非洲,然后持续掉毛...
最后一批走的人叫智人,走出非洲之后又和之前的丹尼索瓦人和尼安德特人进行杂交...
随后,在非洲这片高原上面,紫外线越来越强,紫外线令体内叶酸疯狂掉,生育需要叶酸,所以产生了抵抗极强的物质:黑色素!--黑种人.
所以在原地也会有进化.
所以人类至今是头发没有掉完就是为了抵抗阳光,而雄性激素多掉发,是因为这是强关联...嘿嘿...
黄种人怎么来的?其中要提及了如何推翻了多地智人起源.
DNA的变异每次都有标靶位置,这些标靶位置在地图上面是可以看出线性关系的,从而可以分析出人类迁移路线(人类迁移路线图)而绝大部分的亚洲人都是来自于东非(⊙o⊙)
而其中北非也是有部分人类在其后进入世界岛,这部分人在中东上游走,然后分叉走入了欧洲和亚洲.
大概2亿年后,地球就把所有的水蒸发到太空了.
大概45亿年后,太阳就变成红巨星将地球包裹.
参考文章:
RNA起源论.
人类迁移图.
古人是否有生殖隔离
中国的八个原始女性.
20210918
cad怎么做定时备份?
可以分别做两个功能,然后一个功能开计时线程保存,然后一个做监控目录,监控修改之后直接拷贝一份出来.
如果cad支持序列化,那么保存的东西都可以git存起来,然后用文本对比,可惜cad这个狗东西不支持.
就算cad支持,天正图元也不支持,一堆狗东西.
有啥用?你可以快照形式做备份.
这几天发现vs的翻译插件失效了.
20210915
看不懂Fody的源码,不晓得用什么机制完成引用就感染了工程,然后改里面的特性.
关键是这个东西肯定是编译时候完成的,好烦哦...感觉此时此刻自己无比的笨...
20210911
发现做技术的遇到困难心理只需要一句话就行:这个问题除了你之外没有人会帮你解决.
20210908 anycad
一个开源的cad工程 https://github.com/anycad
发现博客园有用这个开发三维图元,感觉有点意思. https://www.cnblogs.com/anycad/
20210831
感觉现在终于有那种回忆代码发现逻辑bug的能力了...
很久之前还是画cad的时候有相同的感觉,然后意识到这样画可以更好...
20210830
敲代码多了之后,发现为什么vs没有把当前行带入到if()的括号内呢...
然后看了一下代码片段写法,里面有$selected$
触发后台选择函数,但是不知道要怎么写才可以指定函数,
我想要个$GetLine$
获取这行...
因此放弃了代码片段触发...(主要是懒得看那一千多页的PDF说明)
然后我在之前插件工程改了一下,发现也可以做到:`if触发 `foreach触发
近期做了一个gdi+画拼图验证码,就是仿网页的那种拖拉拼图验证码.
没想到微软居然封装的多段线是没有凸度的,这不坑爹嘛...还好撸个一天就撸完了...
20210822
继续医疗篇的胡思乱想,看到一门截肢手术动画视频,是通过和大腿骨接驳假肢钢管,
然后有评论说这样并不能保证骨头和钢管在日后使用中无菌,会造成股骨头坏死,越截越上.
那么未来是不是有一种技术可以将骨头进行渐变钢化,利用某种机制替代局部骨质为钢质,
再通过之前乱想的"角质化"进行封口.
不过当我想完这些之后,发现那不如直接克隆一条肉腿(如果局部克隆更方便的话).
但是如果是机械零件替代全身的话,那么肉体克隆似乎变得重要性不强.
20210814
在烦一个事情,不想修改代码的情况下,给工程下的所有全部加一个计时函数,想注入msil,发现有csproj有编译任务,但是我走不通代码🙄
又在撸msil注入,觉得这个东西资料好少...
晚上网终于通了....
增加了些许的说明,更好地理解:
数学篇 cad.net 判断点在多段线内-射线法
测试篇 c#枚举类型怎么用
20210813
断网的一天,即将迎来第二天...村里修整电线居然把一个箱子的光纤都剪掉了🙃
突然想起来,我写博客的目的是为了若干年后有一个读高中或者大学的小朋友看到一道他不会的编程题,
然后一搜,直接搜到了有代码实现,并且具有逻辑和说明,
所以有时候啰嗦的注释往往是用来桥接思路的,我才不会去删掉啰嗦的地方(除非我第二次看它的时候真的啰嗦).
20210812
突然发现居然有一个全国cad软件第三的公司在我一个半小时地铁上...
不知道会不会要我₍₍ ᕕ⍢ᕗ⁾⁾
20210811
抖音app更新了十几个版本都没有解决切换直播间之后,前面一个直播间有几率仍然在播放,
怕不是后台线程常驻用来进行转流...
今天测试了一下网上的c#快速平方根倒数,
发现c#测试速度比起 1/Math.Sqrt() 慢...
安全代码和不安全代码都测试了,安全贼慢,不安全还行,但是仍然比数学库的慢,贼特喵奇怪...
叫了e大帮测试一下cpp的表现,发现他运行却是正确的...
20210808
写了一篇新文章cad.net 透视变换
20210722
小时候因为看了钢之炼金术师,看到了机械铠这个东西,然后我的梦想变成了做出给残疾人用的机械臂,机械眼,结果现在我不光离我的梦想越来越远,甚至到了遥不可及.
干.
我想过没有解决的问题:
神经与电路接驳.
断臂末端可以触生角质化的话,那么是不是就可以制作不需脱卸和透气的机械臂了.
20210721
想了一个问题,均衡负载服务器如果崩了会怎么样...貌似不知道哪里学得到这些知识...
20210719
链接
没想到学mysql索引知道了二叉树,红黑树(二叉平衡树),B+树(多叉树带双向指针)的这几种结构.
之前怎么看怎么奇怪,为什么那么多树.之前也想过,每次加数据进去的时候扭动一下分支不就很慢吗?(比数组慢)
后来想想,查询快才是真的快.(弯道快才是真的快,谁直线不会踩油门啊)
看完mysql的索引,就几个要点.
创建索引.
查询索引:查询要满足最左前缀.
其中查询索引时候触发mysql底层机制,mysql索引条件下推:当满足了最左前缀原则之后,索引项查找条件不完全满足,后面的条件会继续判断,这就是触发下推,下推判断结束之后再进行回表(5.6前是回表之后再判断).
另见此链接
16号的最后问题,原来查询的表存储起来的变量,原来是视图...
存储过程和函数也看完了,这两个东西差别就是返回值啊...
感觉sql没什么难的...就是要多练习...
我现在想知道如果数据库出现断电损坏了,这样可回溯或者可备份的容灾方案是怎么样的...
20210716
发现学一门技能,又觉得它的内容可以搜索得到,那么要把这个学习程度划分成三个部分:
熟练掌握,可能深入,搜索得到.
学sql和cad一样,都是操作命令.
cad需要掌握两百个命令完成熟练,而sql居然比较少...
但是众所周知sql的学习本质不在于sql语言,而是多线程高并发访问.
看完一遍基础sql语句,发现它的ACID的D是永久性,
这很奇怪,居然不是事务提交链组成的,可回溯所有的事务呢?
就连git也是有提交链来回溯.感觉不太符合认知需求.
学基础篇的时候发现教程上面的把返回a表作为条件插入到b表查询内.
怎么没有变量呢?
20210715
本来高高兴兴去学习mysql,发现mysql的dll很奇怪,会影响net35的WPF.
但是编译又是正常的...就是会报个错在那里...
苦恼.
我只能用独立的高版本工程学习了...
嘻嘻,歪哥不愧是做了论坛的,又用了sqlsugar重建一下ORM了,
接下来再撸多几遍sql语句,然后再学数据库锁,自从懂得多线程阻塞机制果然概念都是相似的,起码知道底层原理.
感觉现在脑子转的贼快,之前没听懂的现在都听懂了.
今天的内容大概归纳了重点,
sql的数据表设计三大范式.组合条件查询.联表查询.排序.
我寻思这些东西不都是用到就搜吗....这会很尴尬:上司问我会不会用,我说会,上司问我怎么用?我:bing一下就知道.
一面图形算法,一面数据库熟练度,要两个并存有点难...
20210714
今天突然想到一个实现"cad伪卸载dll"的方法.
卸载cad的dll是为了可以重复载入函数,那么我只需要将命令这一个函数制作成客户端,
缺点就是你客户端调用的接口需要全部撸一遍,也就是全部cad的函数需要撸成接口暴露,加上remoting需要的接口.
嘻嘻,谁会愿意这样干呢...就免了一个重启cad而已...
不知道可不可以把cad的dll反编译之后上这个MarshalByRefObject接口,以及生成对应的函数接口,然后重新打包..
感觉还是可行的,是个不错的远程调用方法...
e大:这和动态编译差不多.
感觉确实动态编译也蛮香的.
破桌子怎么不把每个函数弄成远程.
e大:多线程都没有的的玩意还想远程.
20210712
福萝卜:WPF net3.5如果ComboBox绑定了一个属性,当ComboBox的DataContext改变时,会把之前的DataContext的这个属性给清空了
记录一下:dwgFiler序列化图元这个方法不能使用装饰器模式,只能用组合模式,貌似大部分扩展开发都不能这样干,还是原生开发好...各种概念在很多时候都是撸一遍就天然觉得应该那么干,就好像mvc,即使没有学过,也会在经验积累中逐渐分离出来.
20210711
我又想去摸sql了,虽然dwg的数据库本身就是一个数据库,但是没有sql语句.
发现大部分的人编程就是为了增删改查,而我在画画改改🙄
看B站还说得零零碎碎的...而且居然要学那么多种数据库,什么redis,sqlservice,mysql....
感觉不知道怎么练习起来,虽然我还看过分布式数据库设计来着...
从练习到生产感觉要经历蛮长时间的...不知道找份工作边做边学行不行...
认识了一个在宁德时代的电气工程师,然后人家刚学c#,嘿嘿发现c#的工控类工作也不少.
群友说有一家医疗公司两个程序员就撑起了一个开发部,其重要性在于他们提供了一个行业解决方案,一台设备200w...
今天想了一下,net standard的工程是有文件监控的,监控了文件新增就修改到csproj里.
那微软为什么不一次性修改好所有的工程,例如vcproj.
不过就连同为c#的net framework也不整...
想必有什么私心...
要是一家大公司岂不是会把各种环境给撸成这样的模式,想想就很有趣.
今儿发现了,原来我一直没有说明白.net standard
工程的同net版本
需要加载同net最低版本
的dll,
如果有用到高版本的方法,就反射调用.
增加此说明到这里 cad.net 从.net framework移植到.net standard
[有心人-问道]他一直是多个net版本配置,想每个cad版本对应每个工程(.net framework确实是这样干的)
他是我遇到的第二个对我这么说的人了,明明就是一个复制粘贴csproj的活,问了一天,他也操了一天...
然后他没有做基本的测试就说不要net3.5,结果cad12就是net3.5的.
怒睡!!!
20210710
移除这两天的日志困惑,写了一篇新文cad.net 跨进程通讯
20210709
今天发现一个vs的bug,在打开vs解决方案之后设定一个启动项目,然后用文件夹删除这个项目,
此时vs是不会立即刷新工程的,然后执行编译,那么vs会找不到工程而卡死...
20210705
做完注入了...没想到园子的资料比想象的多...只是有点旧而已
20210704
这几天在研究反编译....学会看msil...
首先是若海问了一个问题,怎么在出现错误的时候打印变量名.
然后是我想拦截属性的get和set访问器,在它们里面注入一些代码,使得它们调用的时候可以debug.writeline(我真正的目的并不是这样,这只是举个例子)
不过目前能力有限,研究不是很成功...还是先找份工作吧😅
目前的成果是先交换GetGetMethod和new Action的函数指针.
获取旧的get方法加入一条旧方法链中.
这样获取属性的时候就能触发到新Action,然而因为我是遍历class下面所有的成员的,也就造成我需要造一个触发链.
但是我并不能获取到是什么成员对象触发了我的Action,也就没法直接对应使用旧的get方法.
感觉其中没有逻辑问题,而是需要深入函数触发的机制,因此我在研究msil...
今天还看了一下什么叫AOP,原来最后就是用特性来减少代码的重复/冗余的,
例如WPF都会实现INotifyPropertyChanged接口来实现通知,通知了什么成员需要自己去写,而每个成员都需要写通知的方式.
如果你觉得这个方法很蠢,那么它就真的很蠢,
所以肯定有前人解决了:如何优雅的实现INotifyPropertyChanged接口
在这篇文章中就有Fody的解决方案.
还看到了有人在前面写了多种处理方案
不过NFox.WPF中使用的是第四种,更为推荐是Fody的方案就是了.
既然Fody用的是msil注入,那么代表里面也有我想要的方法,而不是修改函数指针...妙...去看源码好了
透过上面的文章,还知道有c#拦截器这个东西...
今天还学习了单元测试...
满满的一天
20210701 c# Interactive
今天我的log4出错了,原来是我作死去按了OzCode
的Break On All CLR Exceptions
这个东西,
导致所有的异常全部拦截了...也就是Common Language RunTime Exceptions
都打开了...
还好按了的话,再按一次就取消异常拦截了.
今天还发现了选中代码再ctrl+e e,就可以在c# Interactive
执行求值.
跟lisp一样选中就执行似得!!
甚至可以自己在cmd实现 https://b23.tv/HUoSGrM
真是美好的一天呢.
20210627
修改了文章 cad.net 调用颜色对话框及处理背景色
增加了cad的背景颜色设置处理,一个学lisp就想知道的处理....
20210625
vscode保存json会导致触发三次监控文件修改事件,记事本保存打开只会一次.....我找了半天这个bug!!!!
今天终于找到了修改块编辑器背景颜色然后立即刷新的方法了,开心.
20210624
蠢毙了,原来md的`这样`就是<kbd>这样</kbd>,效果是: 这样
然后我自己实现的kbd是加js渲染的 这样
20210623
这几天在研究ns的文件,终于,我把存档弄回来了...🤣
20210620
弄了一个新仓库ObjectArx日志让大家一起来更新Arx的学习日志,因为市面上的资料过于陈旧,而一个人维护太难了.
修改了操作篇 cad问题小百科_Acad增加S5
20210615 归纳vs插件
把关于vs插件的日志都移动到这里来了.
阿惊插件
阿惊插件 详细操作已经在项目readme上面写了,可以替代以下功能:
- Format document on Save 保存时候进行格式化
- Code alignment 对齐符号,没有保存设置,而且需要手选
- Trailing Whitespace Visualizer 保存文件删除行尾的空格
翻译插件
安装:vs2019-工具栏上面-扩展(x)-扩展管理-搜索:Visual-Studio-Translator(没有china那个),重启vs,安装开始执行.
就可以划词,然后ctrl+shift+d翻译了.
它背后的实现是先切割了驼峰命名的单词,再上传到翻译,这样准确度可以上升.
翻译了之后会弹个小窗口,鼠标点击小窗口就可以将翻译的内容替换到文本上.
然后可以多划几行,看看翻译效果.
其他插件
看知乎这里还发现有几个挺好用的:
- OzCode 调试用
- VSColorOutput 输出窗口不同颜色的输出
- Highlight all occurrences of selected word++ 匹配选中高亮显示
- Code Metrices 代码复杂度评估插件
20210607 项目设计准则
涉及了一些例如集合类不要作为返回值的,而是采用它的继承,用只读集合来操作...或者传参进去...大概这样的东西
https://docs.microsoft.com/zh-cn/dotnet/standard/design-guidelines/
20210606
打苗苗成功了.还不用排队...但是老爸高血压,医生不给打...
20210605
打苗苗没打成功...工作人员说先安排去比较靠近盐田的点先.
今天一直在弄等号对齐,但是发现仅仅做上下对齐是不对的,
应该是大括号内且上下对齐,还要扔掉注释部分,总而言之满麻烦的...加上还有注释对齐...
我不知道微软是否提供了语义分析的功能...我寻思应该有,只是我懒得看,毕竟工具挺小的,直接撸,
结果语义分析敲了足足一天...
因为我敲过十几天cpp,发现vs并不像c#一样有代码风格约束,
难道敲cpp的公司都自己写个插件支持代码风格插件吗?...也不是不可能...
怒睡!
20210604
在e大的帮助下完成了插件,发现原来有个缓冲区,才能无选择拿文本数据...
(睡前刷手机看微软的方法和e大给的一样,结果醒来e大发我代码了)
现在想知道怎么注册成命令,然后用DTE发送命令...发了半天没发成功
不过功能已经实现了,自己写的vs插件代替了前面找到小插件,开心😊
明天要打苗苗了...园山啥时候才有公交车.
20210603
虽然已经做好了vs插件了,但是有个滚动条我没搞定...
20210601
看完新手链接的内容,发现本质上是通过DTE来控制的,
它背后是调用了vs的语言服务器的代码规则里面的项目规则,项目是c#的,所以是c#规则,
c#的规则里面有代码块的定义就是大括号基础,然后切换到代码头和尾的光标处.
之后我就是要摸会DTE...
发现了java有后缀补全,这个宇宙最强IDE怎么没有..
今天还碎片化学了python的jieba分词库,提取人名信息.
20210531
看到那么多vs插件,本来想自己做一个的...结果发现微软的帮助文档并不是立即就能入门的...也就长达2060页...
然后指引了一个新手教程
白嫖失败,还是要从头研究...狐哥说了很久的LSP协议和微软教程也在这个链接上.
修改了cad.net 实现不重复打开文件夹补充特殊文件夹的处理.
20210528
社区隔离中,公交车都停了.
因为之前看了net5教程,上面有个很秀的操作是net5框架把配置文件全部做成了文件监控形式,若有修改则读取并更新.
然后我打算用在cad上面,通过监控文件来实现对.pgp文件的即改即用,修改了就发送一个(setvar "re-init" 16),
做完之后,接着监控.cui也可以发送一个刷新界面,不过出现了cs.SaveAs(path)会触发两次文件监控,令它刷新两次...不知道怎么解决了...
PeInfo文中的构造函数访问不到c盘,现已修改.
Cui文中完善了PeInfo的函数指针调用.
原来c#工程上面可以通过.editorconfig文件来顶替vs本身的缩进设置,也就是可以令团队都不进行换行操作...我逐渐觉得括号不换行还挺好的,看代码行行都是内容,尤其是匿名函数的箭头换行,vs的格式化对这表现的贼奇怪,有时候需要进行格式化两次才有正确效果.
20210524
发现深圳蛮多医疗行业需要cad转gcode的,这些企业又在龙华片区,明明离横岗20公里,偏偏两个钟到,但是工资又高,
然后...我要是有辆车我需要那么纠结...分分钟都去上班了...哎...人生总那么多无奈...
20210521
https://zhuanlan.zhihu.com/p/105433460 云点的发展
https://tool.lu/ 在线运行各种代码.
20210518
补充了PE内容到此处,cui操作
记录一下未来更博客的动力
二维排料算法和三维排料算法,感觉应该有数学大牛做过啊...居然市场需求还挺大...
如果我以后做了我就整个"论一个平板锅怎么放鸡排最多的方法研究"
貌似图元切变没有人写过c#代码
貌似样条曲线偏移也没有
貌似平面图变穹顶立面也没有
20210517
测试篇 c#读PE文件x86和x64 e大帮我测试了昨天的代码发现无法用x64,然后我弄了弄,写了一篇新的
20210516
正在做PE文件解析.
20210515
1.昨天的文章少了射线,补充了进去.
2.删除了20210513日志,把内容修改到了数学篇 cad.net 葛立恒凸包算法和面积最小包围盒
子函数:cad曲线采样: GetLength 和 CurveSplit的Dispose上面.
3.发现了一个做gis又懂CV的人,这算法可以位图转矢量,留个爪,毕竟GL和CV双修才是我的路子.
https://malagis.com/gis-vector-data-conversion-algorithm.html
20210514
写了一篇新文章 cad.net 后台选择集
20210512
小贱贱:例如你的cad为何能打开加密文档?就是你的加密软件实时监控你的文档,判断当前文档你是用什么软件打开,如果软件文档在白名单上就自动将文件解密.所以处理加密文件时候需要进行复制一次.
20210511
今天听到一个有意思的观点,因为成就而喜欢,而没有成就的喜欢大多数会沉沦.
发现还是要找个干图形的工作才好,尤其是我想侧底研究完计算机图形...
因为现在想知道养条曲线偏移和拟合减少,看到一篇CNC机床需要这样的算法的文章,结果文章没有代码,我寻思应该很多人干过呀,但是我的朋友们都没有写过...不过我知道熊掌有处理过cad的偏移bug,他重写过一次随鼠标偏移,就是不知道有没有对应样条曲线.
拟合减少,用小脑瓜子想了一下,发现就是获取一遍采样点之后,依照采样点曲率进行删点和设置控制点.
近期看到一个户外扫描直接扫出云点数据的机子,有点帅.
20210510
我放弃了之后再捡起来看了看,结果修着修着修好了cad.net 文字偏移及符号表
当时在想对齐样式会出现文字/属性,处理完之后需要处理块内属性,结果我寻思不如靠反射处理全部.
重构了一下居然就好了.
现在还有一个疑问是标注上的文字肯定不是左对齐,我的方法是不会设置到它的,
但是已经通过了我的样图测试了,只是日后会不会有新宋体标注再导致这个问题呢...
该不会这就是导致克隆文字偏移的真凶吧...
20210509
不知道为什么克隆块表防止文字偏移的代码有点问题,回滚回去又好像好麻烦,于是我调试了许久后决定放弃.
反正是桌子的问题,让他们自己解决吧
问题如下
因为我要处理文字偏移,
1.后台开图之后提取块信息和属性,并且设置"属性"对齐方式,这个时候如果"属性"是非左,把它变成左才不会有问题.
奇怪的地方是,此时无法正确从块表记录读取到块内"属性"的对齐方式,它全部都是左,但是块外"属性"可以读取到对齐方式.
2.克隆后台图纸块表记录到当前图纸,还原对齐方式.
还原了之后会导致属性位置和原始不同,又不能单纯跟同步属性命令一样调整,毕竟保存原始克隆状态才是正确的操作..
估计是因为数据是块中属性块导致的问题.
我想到了一个特别绕的方案:
因为拿不到后台开图的属性实体点,那我去读取dxf信息拿,克隆之后设置.
20210508 cad组块原理
发现蛮多人不知道组块原理的,这里留个爪让他们来看.
组块步骤: 首先选择了一堆图元,然后获取插入点,将图元们克隆一份,删除旧图元们,
用克隆的图元,把它们从插入点平移到0,0,
再根据鼠标坐标系逆变换到世界坐标系,
加入new块表记录,让new块参照承载块表记录.
插入块步骤: 将块参照插入到0,0,再从世界坐标系变换到鼠标坐标系,然后平移块参照到插入点.
ps:别描述那么多点,只有两个点:0,0和插入点,弄懂了点关系就完成了一半.(0,0=原点,插入点=基点)
20210507
1.有人觉得为什么反射IAutoGO接口不去反射特性...
其实是因为文章很早出的,而且之后南胜写了自动cuix了,我就懒得写了.
不过我还是更新了这篇,嘿嘿cad.net IExtensionApplication接口的妙用_分开写启动运行函数
2.很多论文的公式写得鸡儿复杂,是因为这论文人家写了几年,你怎么可能半天就弄懂了.
某些是等你真的干起来才知道里面的含义.况且,不够复杂老师不收的...
3.看见我博客很多#if DEBUG2,#if true2,它作用跟flase一样,不过有时候我需要调试,flase改成true太麻烦,删掉个2又回来了...
20210505
修改了链式加载类cad.net dll动态加载和卸载
修改了测试篇 关于vs的obj的Debug目录占用
目的是为了vs不要去占用obj,那干脆删掉这几个文件,它就占用不了,然后vs就可以编译了,我之前怎么没有想到呢...
我们为此还研究了那么久vs占用obj是什么原理🙄
20210503
今天去献血转氨酶64.7不给献了,感觉是咖啡和茶喝多了...
我还是万能的O型血,下个月再来.
20210502
青蛙说得对,为什么博客园没有更新浮动到最上的功能🤔
修改了原本的文章cad.net 关于动态块的处理变成了动态块专篇了.
增加了一个属性值读取和设置的方法.
新文章cad.net 一个选择集的bug写了很久,居然忘记了发布?
20210430
修改了文章cad.net dll动态加载和卸载补充了卸载dll的操作,但是有穿透程序域的bug...脐带有一天能解决...脐带...
20210424
修正了文章打开dwg文件夹
把if if if...改成一个递归操作,我之前是怎么想到那么ugly的代码的...
20210422
今天知道了qml.net这个项目 https://github.com/qmlnet/qmlnet
在.net上面运行qml?
20210421
efan说熊掌是晨丰的技术主管.我第一次去定制一个功能就是模仿贱人工具箱的刷块,然后找的熊掌定制的,接着我就开始了模仿他的代码,开始了二次开发之路,再认识了山人,山人提点了我去学习c#,接着就有了这个博客.😉
20210420
看到一个视频是关于linux上检测mysql什么函数耗时多的,然后针对那个耗时的做优化.虽然我除了dwg之外没有怎么摸数据库,但是感觉这样优化的操作真优秀呀,要是dwg也可以就好了...
很多人写代码很注重卡不卡,但是会忽略掉一个前提:能做不能做.
win系统断电恢复机制,根据资料是Vista前后的,但是我测试环境是win10 20H2:
以前:
睡眠,单备份到内存
休眠,单备份到硬盘.
之后:
睡眠,双备份,
休眠,单备份到硬盘.
轮子哥微博之前回复过人家,硬盘的暂存区取决于内存条大小.
20210419
写了一篇新文章cad.net 操作cui和cuix
嘿嘿...
好像剩下Ribbon没有写了...
20210417
Acad2020调试的时候出现以下错误,我删掉了所有的代码依然会出现,是什么问题导致的呢?
System.Runtime.InteropServices.SEHException:“外部组件发生异常。”
发生在 ntdll.dll
0x00007FF936B4EF4D (accore.dll)处(位于 acad.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突
发生在 accore.dll
20210415
修改了操作篇 cad的快捷图标中的启动参数+替换启动logo
在文章后面增加了一些替换Acad启动logo的方法,方法是Koz教我们的.
今天有人问:
怎么将首尾相连的直线和弧线连接成一条多段线?
这就要说到join命令的实现了,
首先判断选择集item1和item1+存在点和点相同,距离<1e-10,
然后你得到一个有向数组,这个数组就是一条图元链条,也就是多段线的每一段组成的.
然后求每段是直线还是弧线,设置多段线凸度即可.
20210411
飞诗今天说,刚生成的标注/文字这类,还没在图中显示,直接GeometricExtents出错
需要Draw一次,才能获取.
修改了文章cad.net 文字偏移及符号表的解决方案2的代码,
提供完整的克隆代码(但是不一定完全保证没有问题).
20210410
发现Typora可以支持url空格,但是博客园不支持,所以要换成%20,否则导致url中断.
20210407
vs的帮助文件只有微软的可以采用F1在线,而在线和离线只能2选1,
也就是如果我用了桌子的离线帮助,也要去下载一份微软的离线帮助,
那为什么不能加一个桌子的网站就好了呢?或者是vs提供共存办法,有离线优先或者在线优先,找不到再切换.
20210406
修改了文章cad.net 重置cad之后创建文档出错,拦截cad致命错误内的一些代码,和CadLabelBar工程保持一致.
20210405
修改了文章移植到.net standard修改了cad的nuget包.
才知道%求余的细则.
例如将数据们非平均分到3个数据库,
先将数据求哈希值,然后对哈希值求余,%3,结果就是0,1,2三个上面...蛮有意思的.
然后还学了一个布隆算法,100亿才占一个G的内存.
20210404
排版了昨天文章的几个段落,不能按照发现时间来写,我的思维太跳跃了,应该按照执行时间来写,
离散的知识点串成链的时候,是要按照链顺序,不然让读者不知道你在干什么...
20210403
删除了文章: "cad.net 在主线程中插入子线程的上下文同步方法"
将此与 "cad.net WPF嵌入技术3_等待cad界面完成+Acad多线程的解决方案"
合并改为:cad.net WPF嵌入技术3_等待界面完成+在主线程中插入子线程的上下文同步方法
因为发现一个重大缺陷,直接运行Acad08的时候空闲事件不起作用,
要放子类化拦截上面才可以.我就想扔掉个WinForm载体居然那么麻烦...
要学线程阻塞标记,要上下文切换,要子类化..还好有福萝卜教过我子类化
代码都在组织工程的CadLabelBar上面,忙这个我这两天竟然都没有咖啡时光了...
20210331
写了一篇新文章:cad.net 在主线程中插入子线程的上下文同步方法
20210329
写了一篇新文章:cad.net 投影三维图元到某个平面上+求图元交点
修改了昨天的文章和日志,把日志的描述也扔到里面了.
20210328
写了一篇新文章:cad.net 反射com获取包围盒从参数获取返回的数据+net5不能用Marshal.GetActiveObject解决方案
20210326
博客园审查结束鸟...
20210318
续上,现在5:42,我没有睡,连续刷了13集B站的openCV,觉得有点好玩,就是用一个个算子(卷积核)来处理图片的清晰度,反差,以及横线保留等等,之前看过李永乐老师讲卷积核,大概知道是个什么东西,零碎的知识居然在这里串联起来了...原来这就是计算机视觉...
识别异形的文字之类,我猜是通过切变之后,然后通过算子过滤,再通过算子看笔画,然后赋予笔画的"权重",比较重量就认为它是某个字了?
呃...这么感觉起来cad/pdf要想用上这个识别文字,需要有一份专用词汇表,把词汇表的文字权重拉高一点...建筑文字识别就不算什么难事了.
睡!
20210317
放下了前端的学习...感觉画界面工作量很大,不是很好学,尤其是自己学习会缺乏例子,需要大量的模仿才能成大神...
然后在Y哥的帮助下开始学习openCV,然后发现demo全部都是cpp代码,连B站视频也是...毕竟我也会点吹泡泡,主要是想识别cad的文字变换,因为cad的文字变图片或者pdf会丢失部分矢量信息,而这个技术似乎和识别车牌是一个东西..图片转cad..pdf转cad...想去打工的话,会这个应该比较加分😆
20210314
今天敲完了net core后端项目开发例子,按照B站例子个人博客项目来做的,终于知道了全套流程...
感觉展示的技术很少,但是记忆点很多,然而我也没有接触过这样的项目开发,实际工作应该会更麻烦...
是没有cad好玩...
今天小轩轩问了一个问题:怎么分堆组块?
然后我研究了一下,此算法是链式选择的扩展,如果链选是一维,那么它是二维.
第一次设想:
拿到所有图元集合,
循环,判断图元a包围盒与图元a+包围盒是否碰撞?
是,就两盒相加(提取两个矩形min和max)成为新包围盒,加入群集an,然后用新包围盒再判断下一个.这样默认会存在一条链条a,b,c...只是我们一直使用头尾两个组合的包围盒.
否,虽然没有碰撞,但是仍可能与链条包围盒相碰,甚至是子集(但一般会先过滤图元,拿出top图元,top就是最外面的),然后一旦链条加入一个新盒,就需要再次判断,直到不再加入新盒.这样完成其中一个集群的判断.
下一个集群再通过剩余的图元们循环.
但是时间复杂度是O(n²)
这也等同ssget c法.
e大来了一句:先排序
我脑子里飞速闪过葛立恒凸包点集排序法!猛的发现,这样时间复杂度才是O(n)
a例子,图元是x轴分布的.
去除子集,拿top图元.
提取最左边的图元和每个top图元的距离.
距离是有分幅度的,
例如0,1,2,3,17,20,99,100
这样0,1,2,3/17,20/99,100分组,大于设定容差就分组.
b例子,此为a例子扩展...图元们是发散的集群(菌落).为了解决斜的图元群.
去除子集,拿top图元.
提取所有top图元的基点,计算出点集的左下角点(min点).
提取所有top图元与左下角图元的距离,并且按照角度排序.(代码可以看看我博客葛立恒凸包算法)
因为设置了左下角,这样范围只有90度,也就是1/4圆,从x轴按长度扫描的感觉
距离之间幅度变化不强(距离容差)的,就按照1/4圆环分了一次图元集合.(分出菌落环状带)
最后通过角度幅度不强的(角度容差)图元一次排序.(从环中分出菌落)
然后,需要把基点拓展成包围盒两个点,就不用计算包围盒碰撞.
把最大的图元包围盒的两点距离设置为容差值,把两点角度也,那就是智能判断了.
几天之后鱼与熊掌给了我这个:希尔伯特R树
net程序内存优化
今天有个群讨论了net内存优化,然后看了这篇文章SetProcessWorkingSetSize 和内存释放.
20210313
写了一篇新文章cad.net 仿猫老师的vlisp小助手
总算把坑都弄完了.
修改了<cad.net DeepCloneObjects WasErased>文章,将标题也改为:
cad.net 所有的克隆方式
总结了所有克隆图元所遇到的问题..
20210312
博客园居然还没调整好手机写博客打一个字就换一行..真是服了..
今天把小贱贱的Lisp小助手给修改成Acad08也能用了,但是不知道为什么copyhist不能在同一个同步命令内调用两次,真的很奇怪.以至于我不能发出来成为一篇博文...
等debug完成之后再发...
可能要异步才行,但是异步的话不知道什么时间点才能去拿剪贴板...调用剪贴板修改通知?!
怒睡!
20210310
修改了cad.net 块裁剪边界反向修剪
修改了<继承DwgFiler的类>和增加了<一个json序列化例子>更好地看cad图元序列化...
我是在cad08和cad21测试的,但是若海是在cad14测试的,它不需要特性也能序列化,导致我很郁闷,
我所有的ObjectId部分都不能序列化...
我们为什么要做序列化呢?
其实是为了看动态块的参数实现,但是貌似看不出个所以然...
e大说:
1:弄一个空的dxf
2:构造一个有动态块的块定义
3:删除后的
弄三个自己比较.
把css看得七七八八了,跟WPF的style很像嘛...原来界面技术都差不多...
我还以为有特别的东西,莫非js跟WPF的动作很像??
这么看来WPF就不能和人家html一样吗...非要自己做一个...
但是我的学习要先停下来了,去敲一个实战开发的工程先.
20210309
一打开博客园的Markdown编辑,发现一边写一边预览的模式出现了,然后发现手机修改的时候每敲一个字换行一次...
把HTML跳着看完了,开始学习css...
20210308
山人在重构了nfox,然后我才发现git的组织成员不加入仓库成员也可以修改仓库的.
然后问了一下山人关于git clone下来的仓库看不见master分支以外的仓库关联,
然后得到了一个我没做过的答案,直接切换分支就好了,之前用循环切割的方法果真不是主流,主要是我老想把那句子放快捷键上面放不了...
手敲了一次IOC容器,发现没有什么坑,就是视频最后留了个环形依赖的处理,简单,就加入前需要判断一下是否存在即可.倒是我很想知道他其他课程的千万级并发是怎么处理数据的...
然后手敲了一次责任链模式,然后发现视频作者代码写错了一个地方...
他把中间件集合转单向链的时候返回了末尾,单向链是不能从末尾找前面的,返回了的末尾next是null,害我查半天...
无论是谁都要debug一下...
20210307
cad08调试启动的时候,什么都不干就被vs反汇编检测到一个空值位置,
然后vs好心的弹出了AdInfoCenter.dll出错位置出来,然后我用了一个同名空文件替代就好了...
继续net5,在看了手写IOC容器和文件配置,发现微软绕来绕去就是为了符合"开闭原则",
然后利用集合+抽象解决了所有的问题,
管道是中间件的集合,然后通过接口抽象关联起来,中间件就可以单独拓展,
配置环境是配置文件的集合,然后通过接口抽象关联起来,配置文件也就可以单独拓展(json,xml,ini...).
看了科学火箭叔关于织毛衣一样编织内存,才关联了宇宙射线令内存电子反转这个零散的知识点,大致就是做得大一点然后改变了读写组成,让射线撞上去也不改变电子状态,因为是磁场方向决定了.
很久之前看神探伽利略(日剧)知道了航天器卫星的CPU比手机的CPU精度还低,
因为信息论里面有干扰无不不在,那么聪明的人类就用可修复编码来传输和储存,以及抗辐射硬件设计,
但是太空环境运算阶段也不能保证CPU没有电子反转,所以马斯克用了三颗U来进行一致性校验.
20210305
写了一篇新文章cad.net 在cad生成二维码
写了一篇新文章cad.net 动态编译
gitee的readme.md文件不能有"汉化"两个字,然后会被移除了文件.加上之前仓库的测试文件放不下的问题,我觉得还是尽量用github了.😡😡
20210304
今天的算法是对比两份图的不同之处.
但是在cad数据库来说怎么对比都好像挺难的.
因为需要打开图元,找数据,再关图元,数据的特征值还自己做一遍?
不对,肯定是别的方法,例如若能理解dwg序列化,从序列化对比图元,再标记出不同,应该才是最快的方法.
然而我没有能知道dwg序列化的方式.可能是要利用dwgout和dwgin方法.
ps.鱼与熊掌:用句柄比较.
cad的句柄关闭图纸依然不变.
然后我想了一下,cad数据库应该是有顺序的,即使B图修改过,那么此时,数据库句柄大概会是:
A图:0,1,2,3
B图:0,1,4,5,3
通过索引器下标取(没有就先遍历了造一个),这样可以减少反复遍历的困扰,从O(n²)减少到O(1).
20210302
修改了文章cad.net 链式选择和标注断分
增加了一个磁铁体的概念.
今天是牙医日,嘿嘿,牙医告诉我下个月摘掉牙套了.
持续物色公司中,看到了一家在深圳做人工智能+建筑的公司.一看阵容还蛮蛮蛮厉害的...
工资高到飞起,但是要求也高...全是硕士博士的谷歌回归的...
阿惊感到自己不是很ok...感觉我都要放弃cad了,还是乖乖去做一些winform和WPF应用算了...
阿惊面试都不知道怎么办,一问算法,我百度的,一问架构,我忘记了...
一问mvvm和mvc,我只能解释个前后端分离的设计模式,
甚至clr,cls,cts全拼一下,不会答...
啊,紧张......
20210228
写教程多了,发现教程的世界分成两派,
一类是直接告诉你怎么做,然后会让人思考为什么是这样,当你思考不到的时候,你就断片了...
这类跟教科书一样,还必须配个老师讲解.
一类是在过程中一边反问,一边补充反问的答案,然后又插入一个反问,又补充反问的答案,
遇到歧义就说歧义是什么,从而消除歧义,
这类会把老师写在里面,但是太啰嗦也是种罪.
后者肯定是比较好,就是章节要分明一点,也口语化一点,不需要你"阅读理解",只需要你按路线阅读.
20210227
我在学习一些.net5编程思想,准备学完再去面试来着.
感觉.net5这个检测文件系统修改很先进,
例如修改cad的命令文件,然后通过端口返回通知给你,然后调用委托更新就好了.
跟WPF的绑定资源似的.
20210226
修改了数学篇 cad.net 向量+点乘+叉乘+矩阵+凸度
增加了c#的凸度计算.
写了一篇新文章cad.net 链式选择和断分标注
主要是想提供一些思路给不懂链式选择的人看的.
青蛙做了用爬虫爬标准网们,用来提取最新的国家标准规范图集号.
然后这样就可以提供给工程图纸的说明更新标准了.
感觉这个功能是每个画图都需要的,但是标准网们的没有提供公开API或者合作渠道API...
具体实操是:
用一个软件爬了之后,生成了数据库,例如标准合并的信息树.
然后和别人进行传输交换节点,防止多爬拦截.
最后做一个cad命令,正则替换特定格式的标记.
为了"最新标准",缺点就是每天一爬,可能会被验证码/IP封禁/大数据预判封禁打掉.
但是毕竟是个查询服务,所以基于攻防战的成本,他们也不会投入时间和精力进去,
而且让用户之间共享数据库已经是最低成本了.
由于存在法律问题,所以请在合规范围内爬取哟.
为了替换个标准号...竟需要费尽心思...挠破头脑...煞费苦心...倾尽全力...
20210224
修改了日志篇 原生git笔记
增加了《项目规范参考》学习大厂存放文件的标准.
20210221
写了一篇新文章cad.net 替换Polyline2d和Polyline3d的点
修改了cad.net 块裁剪边界反向修剪
由于很早之前优化了自己程序的代码,而博客中的这份代码有点旧和冗余,为了相同版本,所以修改了.
修改了cad.net的undo返回操作
修正了例子代码的冗余,增加了中望/浩辰的相关说明.
20210220
今天继续看了依赖注入,ioc容器,就是通过这个ioc容器作为一个服务集合,而创建类都不需要自己去new,
直接通过指定接口和指定类型,让容器帮你实例化,目的是专注于当前对象,不需要管父类,有点意思.
今天发现了vs有反编译到源
原本的F12只能看到函数名,这下可以看到dll内部的方法.虽然cad的都是不安全代码....
修改了cad.net Attsync命令导致属性块的属性位置在高低cad版本产生不同的效果
提供了修正代码仅作参考.
删除了仿lisp函数的所有文章,统一实现在 cad.net 仿lisp函数专篇
保留了纯lisp的文章,创建了分类cad.lisp,主要是一些古怪的lisp技术.
删除的仿lisp函数文章分别是:
<cad.net c#仿lisp的mapcar函数>
<cad.net 与lisp函数ssnamex一样的,获取选择集的选择的方式>
<像lisp一样获取ldata>
动态调用dll
在文章里cad.net 仿lisp函数专篇
修改了<仿vlax-ldata-get函数>的内容,实现了不同cad版本动态调用dll,其中有一个委托调用函数指针的技术.
20210218
修改了cad.net 文字偏移及符号表的排版,并提供了一个CloneBlock函数
修改了cad.net 块裁剪边界反向修剪排版,
以及"判断和设置部分"中将缺少的BlockBoundaryInfo/AddSpatialFilter两个函数增加上去.
20210215
修改了委托的学习开头上面增加了委托的两大特点.
删除了文章<cad.net 做一个启动cad的程序吧,通过注册表获取cad安装路径>
相关内容合并到了文章 cad.net 获取所有已经安装的cad版本信息并制作一个外部启动程序 以此减少博客啰嗦的部分.
20210214
修改了日志篇 原生git笔记
因为一直觉得git status是\223\241\552之类的...
今天偶然觉得这样不对劲,然后去搜了一下发现还真的可以改...
为什么默认不是utf-8...
因此修改了这个部分.
修改了cad.net 读写pc3,pmp打印机文件
文章排版,加入了发布引擎参考,根据文章下的网友提问补充信息到文章上
修改了一下博客园风格,详情在博客园小女孩这篇博客中.
20210212
除夕休息了一天,今天是大年初一啦,广东人喜欢讲:“恭喜发财”!
歪锅说在学神经网络,虽然不知道会学成什么样...
嘿嘿,我也想学,但是好像先找一份工作再学习工作技能比较重要.
尤其是想研究"基于神经网络的位图与矢量图元的转换",教会计算机看建筑图,根据平立剖产生一个建筑模型,然后基于材质又自动填入revit这样的模型,这该多好玩呀.
感叹一下,因为初中毕业时候感到家庭压力和所处环境并不适合学习,所以早早去工作了.
26岁的我已经在建筑行业打滚十年了,做设计以来无论是室内园建电气幕墙我都感觉喜欢不起来,唯独觉得敲代码蛮开心的,有一种“为什么人家想到这个我没想到”这样的错愕而开心.
突然想想,可能就是不务正业才意外地接触了编程,再从编程接触到了线性代数,因为当时十分想在cad制作一个“时间名组块”功能,这个功能一定要完美,所以需要三维旋转,所以就去补充了这部分的学业,突然间还悟了之前没懂lisp猫老师写的图形切变...
然后想弄懂cad的样条曲线,还学了半个月微积分,发现这玩意就是求曲线面积和小数点精度的,应用到编程就是循环,但是掌握不太容易...再之后的建筑力学知识上面,由于没有交流和应用,感觉真的难学...
不久之后开始写博客,能帮助了同样不懂的人,也是蛮开心的.
我总是觉得凡事不会太晚,在学车的时候教练对我说,一个人五十岁学车,那么他的驾照可以用到七十岁,还有二十年.
我现在学代码,虽然可能在之后找不到同类的工作,但是我还有五十年可以把知识传授给别人呢.
而学得会和学不会的问题上,在一次看第五人格直播时候,头鱼说过一句话:“是有的人学得快,有的人学得慢,哪有什么学不会啊.”所以何必惧怕学习新知识呢?Let's try 😃
20210210
日志这里增加了一些博客链接.
修改了日志篇 原生git笔记的一些排版和描述,
把强制推送这个误导人的操作,再后面注明正确的用法 😃
阿惊正在学net5和net core做网站,看看到底为什么net coer那么受欢迎,过了年也准备去找个工作.
20210209
1.在文章上加入了后话 cad.net 读写pc3,pmp打印机文件
2.把一些比较水但是挺有意义的短文放到日志这里来,这样就不会触发博客园的短文拉黑模式了......
博客中多个[返回目录]的错误
今天会看 cad.net 委托的学习 的时候发现怎么重复出现多个[返回目录]的东西!
段落...
[返回目录]
[返回目录]
段落...
[返回目录]
[返回目录]
这个东西和目录是js生成出来的...
我原本是在Tinymce编辑器工作的,重新排列几次无果,所以转到Markdown编辑器了...
但是Markdown不能折叠代码行...比较恼火...
从我电脑的Typora粘贴到博客园的Markdown时,文章如果过短是自动加入```来作为代码段的.
要是博客园有ssh链接,然后用git提交博客那多好玩呀....
一些开源的cad
用c#.Net写的
LitCad https://github.com/wangyao1052/LitCAD
用VC++写的
http://www.newxing.com/Code/VC/TXCL/3671.html
http://www.newxing.com/Code/VC/TXCL/3507.html
http://www.newxing.com/Code/SoftPic.asp?id=3366
20210208
迁移工程《Acad打印配置解析库》到gitee
修改了文章 cad.net 读写pc3,pmp打印机文件
文中的说明仍然有非常重要的作用,尤其是创建pmp这些代码并没有在工程内.
我把工程从github移植到gitee了,并且将github仓库废弃掉了.
并且更新了如下内容:
将PianoCN工程类型从net framework修改为net standard了,更好支持其后的net版本.
将PianoCN_Form修改为net5工程.
可点入文章查看,查看相关修改.
增加多人调试的方法
通过修改win系统的环境变量来实现 cad.net vs调试问题
修改了博客的排版
学会用上了Markdown这款软件,唯一觉得不是很好的地方是,图片是离文档的,也就是我改博客的时候要单独截屏到博客上才可以.
不过git可以用相对路径...
操作篇 cad问题小百科_Acad 同时公开了备份器工程.可点入文章到最后查看相关修改.
同时修改了整个博客的所有分类....并且加入了目录的js代码....
20210125
发现爬虫爬了我的博客之后.
其他技术类网站例如csdn喜欢爬博客园的博客,然后贴个转载就算了,
这不是很大的问题,只是大家都不愿意写博客了,愿意出书了....但是我认为毕竟写出来都是让人家看的...
博客园没有什么广告也没有阻碍人家爬虫的验证码,干净....所以才是个好网站.
然后比较有问题的是搜索网站的爬虫,例如百度.搜索同一个问题会变成:
csdn的转载答案
csdn2的转载答案
csdn3的转载答案
csdn4的转载答案...
这就比较糟糕了...
然后还发现爬虫们其实不会更新博客,爬新不爬旧,
也就是我先写一版错的,等被爬了之后我再改好,
这样我的错误答案就全网流通了.....
因为我会重复看几次我自己的博客看看能不能二次理解,
不能的话就改一改...
20191026 末尾
随着win10更新到最新..我发现电脑出了点状况..
0x01
是电脑睡眠主机不关闭...然后用了此方法
修改注册表 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Power
【AwayModeEnabled】选项,在打开的编辑页面将【数值数据】修改为0,就完成了.
0x02
是微软把txt文本默认改成utf-8了,重要的是Acad不可以识别 utf-8 的 .lsp 文件,只能用 ANSI,
但是用户可能会保存我的 .txt 配置文件更改成 utf-8.
所以我的c#程序在识别 .txt 配置文件的时候,使用了获取文件格式,然后再打开文件.
具体引用
博客园:
阿惊博客的仓库
edata博客
疯狂青蛙博客
南胜博客
尼克劳斯博客
CSDN的:
小蜜蜂
明经通道的:
雪山飞狐:狐哥是明经通道的net版主,他是pycad的作者,也是个大学老师.
落魄山人:他的lisp内库,同时他也在维护IFox内库,他是组织发起人.
我们的gitee组织:跃动方程
AcadLisp和一些cad图形算法网站:mac-Lee
一些没有列出来的仅仅是没有博客和外链 😃 晗子轩,小贱贱,飞诗,高飞鸟,若海,福萝卜....
Autodesk官方人员的链接:
官方博客: https://adndevblog.typepad.com/autocad
员工kean博客: https://www.keanw.com
AutoCAD综合讨论区: https://forums.autodesk.com/t5/autocad-zong-he-tao-lun-qu/bd-p/923
阿惊点亮:
.net:
Winform,WPF,.net framework,.net standard,.net5,socket通讯,WCF通讯
IOC
net服务器程序
c/c++:
MFC,QT...知道但是没有点亮的std,boots...
用过但是不怎么会的Sql server,但是知道上面用SqlSugar做ORM.
也看过java,vue.
(完)