自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 C# tuple是个好东西

bug是个玩笑,其实它最大的价值就是一个轻量级“数据块”,这有点写汇编的感觉,你可以把还未实现的贝塔版功能写在发行版程序里,以后不用修改程序就能增加功能。它还能写bug,因为你用object参数可以随意重新定义成它,你就能在实现正常代码的基础上隐藏一些不正常代码。它有点像R语言的list把不同的东西塞进一个列表,解决了简单的泛型问题。如果你想要灵活的变量,又不想它太灵活像var,tuple是个好东西。C之后的高级语言,使用数据块变得很奢侈,现在又回来了。数据块返璞归真,是Opencv和R成功的基础。

2023-09-21 10:03:21 98

原创 Invoke = 召唤

【代码】Invoke = 召唤。

2023-09-01 14:46:18 67

原创 C#语法糖的原罪

2、性能并没有提高甚至降低了:因为编译系统最终还是要把未明确的变量类型明确下来,把未命名的函数自动生成静态函数,这对编译器来说都是多余的负担。1、逻辑并没有减少甚至增加了:表达式的简化表面上降低了代码量,但实际上并没有减少脑力消耗,甚至还是因为糖带来的新规则引发更多逻辑思考的损耗。3、bug藏得更深了:因为逻辑过程被多种糖格式封装,找bug就要先拆分糖的逻辑层,然后才能看见bug在哪儿。4、并没有减少代码总量:程序员会多次使用相同的及类似的代码块,而这些代码块原本是应该重新组织并复用的。

2023-09-01 10:32:07 75

原创 opencvsharp二值图像反色

像素操作

2022-06-16 15:14:54 464 1

原创 线程的阻塞问题

线程很灵活,但是也很扯淡

2022-06-12 13:27:03 1324

原创 各种高级语言都有锁,可是锁真的有存在的必要吗?

我一直很奇怪锁这种东西,为什么要多个生产者共同生产一个产品?如果是模块分工,那么就是多个生产者对应多个产品而已;如果不分工,不是应该一个生产者管N个助理,最终还是一个生产者出一个产品吗?莫非锁能提高性能?排序也绕不开啊。百思不得其解…哎...

2022-02-11 10:40:00 269

原创 如果有个汉字命令的IDE

一直梦想有个纯汉字操作的编程环境,譬如汉字命令的vi,总觉得拼音盲打很快很容易,且不会出错。而英文+符号+大小写+半角…… 写程序非常难以实现盲打,另外线性排列的代码阅读很不方便,行数太多影响逻辑结构的梳理。如果编程面对的是一张图纸,对象之间的逻辑关系有很清晰直观的流向,命令和代码都是中文。但我并不是在向往labview、易语言、ue4蓝图……我想要的是一个可以轻松缩放蓝图层级的编辑模式。当我选择一个模块,相关的数据流就会显现。或许我可以尝试一下纯汉字模式写一个应用系统,所有的变量、类、函数…都是汉字

2022-01-15 23:39:33 151

原创 面向对象吐槽

从第一天学计算机开始,老师就讲生产者与消费者。而面向对象技术却没有给成员变量、成员函数设计read和write功能。其实内部复杂性到一定程度时,依然绕不开“竞争滥用”的情况,所以它并没有通过私有化解决问题。同时,对外的敞口却不得不用大量代码去做方法,如果以类的内部函数为生产者,外部引用为消费者的模型,事情就会变的非常简单。就好比你的脸是自己洗的,但你的脸难道不是给人看的吗?使用private对消费者的过度限制,导致界面和实体之间的大量冲突。然后… “技术突飞猛进”,于是诞生了xaml…从此,理论上

2021-12-20 15:40:50 93

原创 全局变量和全局对象

全局变量就像你住在自己家里,东西(变量)随处放,放多了就乱,找不到,尤其是别人(其他程序员改你的代码)找不到。这就是面向对象的起因。现在走到另一个极端,我在自己家里,冲一杯咖啡都变得非常复杂,得先找“洗碗机”对象申请杯子,勺子,再跟“食品柜”对象申请咖啡,还要找“厨房”申请使用剪刀和开水… 然后你发现了没?一个奇怪的现象,原本混乱不堪的全局变量不见了,取而代之的是混乱不堪的“全局申请”。嗯… “申请”这种“全局行为(变量)”占领了你的家,因为如果功能不是全局的你又怎么拿到别人的东西?更不用说满世界的类

2021-12-11 09:29:39 146

原创 C# 的三个TImer

1、System.Timers.Timer应该是底层定时器,是比线层还底层、优先级更高的存在,是硬件定时器,理论上,它是最精准的。如果程序设计出错,你会发现exception里有“中断”字样、“外部访问”字样,中断机制是从30年前的DOS系统开始就有了。2、System.Threading.Timer顾名思义是线程级别的定时器,它的时间是“线程时间”,放在主线程里调度子线程和逻辑模块是合适的,不会像第一个定时器,主线程退出了它可能还在。3、System.Windows.Forms.Timer则是基于wi

2021-12-07 13:26:57 736

原创 面向对象?海王啊,你需要那么多对象?

我相信大多数人冲着标题进来看的,而且大多数在2秒之内开始点x。但是下面这些句话很重要:面向对象是数据私有化的技术模型,而面向过程(我称之面向循环)是数据公有化的技术模型。前者像脑满肥肠的商人,守着自己的金库,甚至把用户的隐私也变成自己的金币,所以用bat比喻他们是很恰当的。后者像云游四海的和尚,摇着蒲扇普渡众生——其实就是告诉你一切都是循环,一切都会回到起点,一切都不是你的。作为丛林里的猿猴,你应该知道,天气才是数据公有、私有的关键。所以,下一个成为泰山的机会,不是你的对象,而是面向循环。...

2021-12-07 09:29:57 104

原创 分布式加锁问题

其实,既然写的时候必须加锁,那何不一个人写。或者,把要写的数据块提前切成N个区域,由N个人独立负责写。优化,再给一个主管,做这N个队列的负载平衡。当然,没有主管也可以查看队列长度。于是,在“计算/写入”比确定时,有一个最优解。不过,进程调度、网络、内存资源的消耗也要作为参数,避免产生新的锁。...

2021-12-07 09:04:17 85

原创 C# 的新发明

1、delegate把指针变成委托,是在迁就日益降低的程序员素质,因为他们擅长制造野指针。至于action,func,一个是void * 一个是 *2、=>把匿名函数直接写出来,能减少书写ifelse组合逻辑,除此之外看不出有什么别的价值。如果把表达式封装成传统的函数,更符合各类高级语言的通用逻辑范式,若加上重载,灵活性更高,虽然没那么直观,调用深度也增加了,但是水平方向的逻辑长度降低了、代码重用性提高了。3、event以前管态的叫中断信号。后来windows发明了消息机制。再后来是ti

2021-11-09 10:37:14 329

原创 Atm模型才是史上最强模型

没有140的智商看不懂这张图。纵轴的层次关系:每一层为其上层提供操作系统、编程语言的职能,每一层都没有理由“啃老”,也要避免“过劳死”。横轴的复杂度并不按照“你以为”去定义,而是根据应用场景的实际“需要”来动态变化。总结一下:层级匀称是健康,春生秋亡才正常。...

2021-11-07 01:34:05 386

原创 有感mvvm

30年来,程序设计没用任何理论上的进步。当年windows95为了解决单进程问题,使用了消息机制,说白了就是一个底层的timer,强制每个view都在这个timer里插一脚,来过滤与自己有关的信息。然后就实现了每个窗口各自运行。现在这玩意叫event。表面上event不是timer,本质上还是。表面上event不是“全局变量”,其实要找一个上级的官员注册一下,其实还是绕不开全局变量。。。啰哩啰嗦,只是觉得滑稽。像mvvm这种,早年是窗口、数据、窗口+数据处理函数,一长串switch根据消息event处理不同

2021-11-07 00:57:33 118

原创 上帝视角

程序员如果是程序的主宰,就不会受制于意识形态:面向对象vs面向函数、过程。程序员如果是码农,那就二选一吧。就像上帝不会在男女之间二选一。

2021-10-24 11:51:19 151

原创 F#函数式编程的核心原理剖析

函数式编程的核心1、传统的编程是包含数据和函数,函数式编程,即剥离数据专注功能。2、函数式编程是程序集公有化、不操作数据只操作指针的表现。3、函数式编程是无法频繁挪动大数据量至私有数据区的无奈之举。4、R语言、各种命令行脚本语言、sql都算是一种函数式编程。5、函数式编程的数据对象是复合的、相对重量级的。6、实际上,如果在做应用系统架构的时候,留足公共函数、公共数据区,不要把一切都对象化、私有化,在公私之间找一个平衡点。就不再需要F#了。当然c和c#做大数据处理时可以嵌入f#函数。r语言、she

2021-10-24 11:09:55 676

原创 讨论Sqlite并发是不是很滑稽?

既然sqlite数据库是一个文件,既然它是小巧的,既然它是本地的… 那么为什么要用锁、用并发去折腾它?如果程序需要并发,建一组db文件,写数据时各找各妈不香吗?读数据时同时打开10个100个1000个进程有问题吗?当然没有。不过,如果你超过了操作系统的并发读上限,肯定也是不行的。人家设计了一辆五菱mini给你装b,你非要当省际大巴车来使用,当油罐车水泥车土方车使用。我去!...

2021-10-15 16:55:50 113

原创 文化差异和编程

东西方文化差异是编程思想的终极矛盾。东方文化是先给你终极理论和绝对自由,然后你把它落地,不断补充各种规则:戒律。西方文化是相反,先把终极神化,然后你得从蝼蚁做起,不断打破各种规则,走向自由。譬如c,c就是那个东方的绝对自由,然后大家觉得难以驾驭,不断把它的各种api整合成新语言。而java,从设计之初就要求你做一个码农,准确说是“码蚁”,你必须严格遵守底层约束,当你的架构层级越来越高时,你才拥有绝对自由和权威。而这时候你的破坏力堪比核弹,丝毫不亚于拿c写个野指针。某种意义上说,如果你要进入西方的逻

2021-01-28 22:57:29 186

原创 tableLayoutPanel 防抖动

#其实很简单,用visible包起来即可。 tableLayoutPanel1.Visible = false; tableLayoutPanel1.Controls.Clear(); tableLayoutPanel1.Visible = true;

2020-11-22 00:37:54 236

原创 少年不识c强大 妄说python是大神

#include <stdio.h>#include <stdlib.h>void main(int argc,char *r[]){printf("%.1f",(atof(r[3])+atof(r[1])+atof(r[2]))/3);}

2020-11-21 01:15:52 86

原创 c#和net 4.6

写了一个c#的小程序,在安装了全套net的win7上运行正常,在win10系统毫无问题。拿到一个win7的新电脑上突然报错,就是调用一下open文件对话框而已。简直无语。!![]… 错误提示是这种鬼东西,幸亏有百度,这要是没有互联网,岂不是得折腾一星期都搞不清问题出在哪?搞清了是net版本问题但还是解决不了问题,因为迷之net4.6安装始终失败。无奈,把程序改为4.5版本编译一遍。晚上看到有大神说win7需要sp1补丁,好吧!有空试一下,好用就扩充百度网盘… 现如今写个程序最累的不是算法和逻辑,而是

2020-11-20 01:14:30 190

原创 被诟病的c指针

拿范型怼指针的人总是说,指针不好用,因为写了分配内存还要写释放内存。我就不明白了,你写if语句就只需要写左括号不需要右括号的吗?

2020-11-08 13:28:35 91

原创 C#还有多少没用的东西?

elementHost 几乎屁用没有,同一应用层级,相近的表达效果,除了浪费生命,还能有什么价值呢?

2020-10-28 00:36:23 95

原创 c#吐槽

隐藏:Tab1.TabPage3.Parent = null;显示:Tab1.TabPage3.Parent =Tab1;tab1为tab控件名,TabPage3为选项卡名。大姐!从form传下来的visible哪里去了?容器一级不香吗?非要搞两级?不太喜欢c#这种处理方式,感觉它的开发团队是vc的那一波人,而vb的简洁逻辑、属性和方法命名的一贯性、干净的层级… 这些优点都被优化没了。不得不说,提高了学习门槛,复杂和混乱的确能给企业带来巨大利益。默哀:死去的Borland C!...

2020-10-27 16:32:16 184 3

原创 c#调用32位dll报错

vs2017 只要勾选首选32位即可正常。

2020-10-27 14:38:37 687

原创 被骚扰却不能屏蔽

2020-10-26 15:34:59 75

原创 恶心的迭代器

语言越发展越混乱,迭代器就是一个例子,本来不想吐槽,实在忍不了!迭代的中文本意,是反复操作然后逼近目标,在工程上是针对同一个东西反复操作,并且!画重点:把第一次迭代的输出作为第二次迭代的输入之一。然而,迭代器是什么狗屁玩意,foreach… 仅此而已。用cursor表述才是合适的。1、闭环反馈在哪?2、逼近操作在哪?什么都没有,也敢顶着迭代之名。废!还有人说迭代器是指针的升级版,阉割了指针的功能也能叫升级?wfd!...

2020-10-24 09:48:20 103

原创 关于global续

然鹅!公私不明的系统虽然强壮完美,但是却不得人眼球,卖不出好价钱。表面看,这是市场行为,实际上却是人性。偏激的系统,要么如苹果,要么如Java。前者至私,后者至公。私者,连个摄像头都不给驱动接口,公者,源代码随便抄。难怪当年有大神说“唯有偏执狂才可以生存”。商业,本质上就是玩偏执。所以,作为程序员,要么做python这种,要么做oc。这是发财之路、装b之路,但不是个大师之路。...

2020-10-20 17:15:44 638 1

原创 redis的global性质

面向对象的封装功能破坏了旧的c程序系统,其实global作为程序的公共数据空间,虽然安全性受到影响但是效率更高(就像地铁)。所以,为了提高性能,一些具有global属性的产品越来越多,比如redis。早年银行的atm机后台系统,为了解决排队、隔离风险、并发等问题,是使用前置机程序来实现缓冲,其原理跟redis没有区别。换个角度:现在可以使用redis取代“复杂度较高、实时性要求不极端”的socket服务。包括数据采集、工业控制、机器人应用。等等。所以,强壮的系统,private和public都很重要。

2020-10-18 09:51:44 236 1

原创 关于逆泛型和人性

新人先学习泛型,再回头看c和c++的泛化,感觉是不同的。早年我们是先学void*,再看c++模版类搞怪和java发神经的泛型。实际上图灵原理本身就是一种泛化思想——用计算机泛化世界,也只需要一种语言表达图灵原理。c++这种抛弃c的void*另起炉灶反而是一种“逆泛型”的做法。回头看软件业三十年,应用领域除了web层面的一些不同,其他都没变,大量可重用的代码被丢进垃圾桶,然后重新写,一边为了迁就程序员和商业,几十年不断做着重复劳动,一边却拿着泛型概念自吹自擂,呵呵!其实语言越高级性能越低,而bug却依然藏

2020-10-08 20:46:50 166

原创 c#泛型

尼玛!这玩意不就是“对象指针”?说句大实话,c语言的指针不就是泛型?像排序算法,只要排指针数组,管你int、char、string… 哪怕把人类拉进去排序还不是一样的代码?Java果然是最垃圾的语言,没有之一,自己挖坑自己填,吃了造反的钱又赚平反的钱。...

2020-10-08 11:44:48 86

原创 R语言的小坑

就是这样一段代码setwd(“d:/”)层架标签 <- read.csv(file=“层架标签.txt”, header=FALSE,row.names=NULL, encoding=“UTF-8”, sep=",",dec=".", quote=""", comment.char="")层架标签[2:5,1]在Rstdio里运行很正常,但是保存r文件,用source引用就是错。层架标签 <- read.csv(file=“层架标签.txt”, header=FALSE, row.n

2020-09-28 19:48:55 745

原创 2020-09-28

这几天把r,redis,mongo,c#都翻了翻,还回味了一下c,刚巧看到一篇博文,使我顿悟:“程序设计语言的演变——更啰嗦更庞大更严格…,是一个不断适应程序员智商持续下降,以及越来越丧失工匠精神的过程。”...

2020-09-28 16:40:07 77

空空如也

空空如也

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

TA关注的人

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