2023-08
26

一次一个小愿望

By xrspook @ 10:58:44 归类于: 烂日记

每次都定下一个小目标,然后去实现。结果发现一天多一点的时间居然就能搞定一个问题,这种进度有点出乎我意料,因为之前的那些问题让我挣扎了好长一段时间,起码有两三天,之所以后来进度加快了,大概是因为我明了了我要做什么,但是尽管是这样,还是会遇到很多奇奇怪怪的问题。

这周初我解决的是批量生成月度核对表。我把这个任务分成两个步骤,一个是查询到底要生成多少,接着就是把查询到的结果生成文件,但是那个结果跟文件又不一定是完全对应的,根据不同条件可能10条查询结果最终会生成9个表。因为实际上某些条件是需要合并才能得到我想要的文件。在怎么设定条件,如何进行循环方面,我纠结了好长时间,几乎可以这么说,上个周末我一直在做各种尝试,为的就是最终实现这个目标。

在完成了批量生成月报以后,接下来我要做的是生成某个仓的分仓台账。相对于之前的月度核对表,这个单仓台账相对而言条件是固定的,而且必定只生成一个文件。同样我首先做的也是做一个查询,查询一下这个仓到底有多少条记录是可以生成分仓台账的,我又要生成具体哪一条。有些是无法自动实现的,因为实际情况是某些仓某些筛选条件是不一样的,但实际上应该反映在同一个分仓台账里。这个时候就需要手动合并一下条件。这种例外的事件不确定会在什么时候发生,所以必须给手动留有余地。之所以分步骤,其实一个很重要的原因是其实有时并不是为了生成分仓台账,只是要查询一下这个仓的情况。批量生成月度核对表,我花了好几天的时间,但是生成分仓台账,我只花了一天不到。

接着,我研究的是库存查询。在不同的条件之下进行库存查询,最后的结果是以一个透视表的方式展现出来,根据不同的查询条件透视的项目不一样。虽然我想到透视的项目是不一样的,但实际上在我研究的过程中,我先在单一的条件上做尝试,当单一的条件生成的数据没有问题以后再把它扩充到动态条件。因为有了之前月度核对表的锻炼,所以动态条件该怎么做我是有点底的。

SQL最基本的查询语句基本上我已经比较熟悉,这一次库存查询最后一步需要做一个透视。透视这个东西是我之前没有尝试过的,虽然我是Excel数据透视表的超级粉丝,但是在SQL里面控制这个东西,我还是很不在行的。所以到底什么条件可以控制,可以控制到什么程度我是不知道的。教程通常都只是最简单的那些,用上面的数据你重复100遍都不会出什么幺蛾子,但是在实际情况下你会有更多需求。比如当我要控制被透视列的排序的时候发现好像在Excel的SQL里无法做到。即便我在透视之前那一步已经排好序了,但是透视的时候依然是我行我素。让我比较挣扎的是,在透视之前我已经通过分组合并计算出被透视的列的合计数了,但是透视之后合计混在了那一堆被透视的字段中间。最后我已经想到不计算合计,在SQL里面生成透视以后输出到数组,我在数组里面做合计。就在我几乎要放弃的时候,原来合计可以通过在透视的select里用一个聚合函数实现,这样的话透视之后的表格就是先是条件列,然后是合计,接着是那些被透视的列。虽然合计不是放在我想要的最后面,但起码放在了最前面。

库存查询研究过程中让我纠结的问题是什么,明天继续。

2023-08
25

电烙铁不务正业惹的祸

By xrspook @ 8:35:01 归类于: 烂日记

昨天说到当我想把摄像头电路板上的焊点融掉重来的时候,我遇到了幺蛾子。这个幺蛾子是什么呢?就是我的电烙铁。我的这个电烙铁大概是10年前买的。之所以买这个东西是因为要去上海看WWE,要做个LED的灯牌,要把一个一个的LED灯焊在板上我就必须用到电烙铁。在那之前我见过电烙铁,但我没摸过电烙铁,应该怎么用?怎么个操作法,实际上我是不知道的。但是做灯牌强烈的欲望让我学会了这个。正是因为我抠门,所以我选择全程都自己学回来,而不是直接在外面定制一款。电视上看到那些粉丝的灯牌,基本上都千篇一律,都是一个模式的,所以无所谓定制,如果真的需要定制出来,估计价格会非常的高,甚至需要4位数。如果是我自己动手,全部材料加起来不算人工还不到100块。

电烙铁在做完LED灯牌以后,基本上我就没有在正经的事情上用过它了。之后我用得最多的是把电烙铁加热,然后在某些塑料上戳洞。绝大多数情况下是在各种塑料瓶盖上戳洞。

电烙铁买回来是为了做LED灯牌,所以那个时候除了焊接,我没有拿电烙铁做过其他东西。LED灯牌的焊接,实际上就是用镊子先把LED灯的灯脚弯曲到我需要的角度,然后右手拿着电烙铁碰在两个灯脚交接的地方,然后锡丝在上面碰上去一下就好。我根本不知道电烙铁头原来是要上锡的。又或者说实际上电烙铁头表面有一些抗氧化涂层的。有那个东西电烙铁就不会氧化,不会变黑,也能稍微粘住融化的锡,但也可以很快掉落。直到我不把电烙铁的正业当正业,而完全把它的副业当正业以后,我才发现电烙铁头变黑了,但因为我只是做一个加热,所以黑不黑都无所谓。

我这一次当我要把电路板的焊点融化掉重来,发现即便已经预热足够长时间,电烙铁的尖碰在那个点上依然一点反应都没有,锡完全没有要融化的样子。当我把锡丝碰在电烙铁的尖尖的时候,发现一点融化的感觉都没有。尖尖没反应,但往后靠一点好像就有反应了,虽然锡丝没有粘在电烙铁上面,但是起码锡丝从锡丝变成了锡球。所以大概是尖尖对上一厘米的位置,温度还是要比尖端热一点。之所以电路板上的锡不能被溶掉,肯定是因为我的电烙铁尖尖端温度太低了。以前我一直用的那些锡丝尚且融化不了,就更加不用说如果电路板的焊点是高温锡做的。

电烙铁尖怎么就不热了呢?电烙铁尖不仅仅不热,而且完全粘不住锡。我的老电工网友跟我说,这是因为电烙铁尖表面氧化了变黑了,所以就粘不住,同时尖尖的温度也不够。最彻底的解决方法是直接买一个头换上,但如果没有的话,只能让电烙铁冷却下来,用砂纸打磨掉表面的氧化,然后加热电烙铁,同时赶紧放到松香里,接着就是给电烙铁上锡,但打磨肯定会损害抗氧化涂层。这个操作是治标不治本的,但如果没有其它方法也就只能这样。以前电烙铁表面黑了或者有它杂质,我会拿个折纸刀一点点刮,所以那个时候估计我就已经把抗氧化涂层刮掉了。这一次我拿出了打磨玉石用的那种很细的砂纸去打磨。磨掉了黑色氧化层以后加热,放松香折腾一段时间以后,总算电烙铁的尖尖可以上一点锡了。我觉得电烙铁尖尖的那个温度有点可以融化掉电路板上的虚焊锡点了。稍微融化开了那个点以后,我赶紧在那个地方补锡。补完那个点以后再拿去测,发现红线的连通敏感程度大大提升了。但问题是当我把摄像头接到电脑上,发现虽然电脑马上能识别到摄像头,但是和我刚开始坏的时候一模一样,漆黑一片,完全没有画面。

所以折腾了一大轮以后,我依然没有实现我的愿望,挺可惜的。

2023-08
24

时好时坏的焊点

By xrspook @ 8:32:49 归类于: 烂日记

周三的上午有人过来检查,所以在那之前我都不敢花时间去做我自己的事情。虽然实际上这种检查一年要发生好几回,早就已经习惯了,如果已经翻来覆去查了好几遍也就没什么好后悔的。问题是在检查之前,即便你有时间,要是你做其它事情的话,别人总觉得你不够认真。周三的中午,检查的人终于走了,没人跟我说发现了我的那个工作里有任何的问题,所以我也就当作什么事情都没有发生。周三的下午我开始检查上周六我那个坏掉的谷客HD98 1080P摄像头。

我知道肯定能用万用表测某条电线是否连通,但实际上怎么测我不知道,所以在开始之前我先度娘了一下。说是要调到 欧姆档,有些说调到风鸣器那里,如果连通,蜂鸣器会响。幸好我那个很便宜的万用表也有蜂鸣器。我首先测的是那条红色的手机充电线。红色跟黑色都很灵敏,但是绿色跟白色反应迟钝一些,线头那边是很清晰的,但是USB插头那里我估计那个铁片可能做得比较隐秘。红色充电线,四线都是通的。摄像头被我剪下来的USB头那一段也都是通的,而且反应正常。正在和摄像头连在一起的小米一代大概只有10cm长的橙色USB数据线四线都是通的,而且灵敏程度高于谷客的USB头,因为从那个USB头的铁片看来,非常久远的小米USB头是最好的。

接下来我再次拆开摄像头的外壳,让里面的电路板暴露出来。周六的晚上,当我第一次成功拆开那个的时候发现USB的四线是通过四个洞洞和电路板连接的。黑色绿色白色都是正常的,但红色的那个接线头真的做得非常糟糕,其它线虽然手工也不太好,但起码你看到一坨锡封住了那个洞,但红色的那个洞,锡若有若无,而且我觉得暴露出来红色的那个线的头也不是太多,因为露出来的就只有细细的一小根。家里没有万用表,但看到这么个状况,我觉得即便摸上去红线跟电路板结合得还是比较牢固的,但实际上里面有没有虚焊非常难说。非常有可能焊上去的人那个人测试过,能连通,但是经过某些震动或者暴力拉扯以后就虚焊了。

当我拿万用表去测试时,摄像头电路板上的四个点以及暴露的线头的时候,黑色白色绿色都马上有反应非常灵敏,但红色就是那种有时有反应有时没反应。如果我的万用表的针碰在那个细细的线上是几乎是不会有反应的,但即便我戳在洞洞旁边的那些锡上也是时有时无。周六的晚上,当我第一次把电路板暴露出来,把那四个焊点拍下来发给我网友的时候,作为老电工的他觉得只要我把红色那个点搞定了,这个东西就好了。当我用万用表测量红线那个点,发现的确是时好时坏的时候,我也觉得我应该马上在那个点补锡,又或者我应该先把那个点的锡融化掉,然后重新在那个线头上加锡再接连上去。想是这么想的,但是操作的时候又出现了其它幺蛾子。

至于具体是什么,下回分解。

2023-08
23

追求更好

By xrspook @ 8:32:56 归类于: 烂日记

实现功能,我觉得只是最基本的要求。接下来我会考虑到底有什么是可以优化的,比如如果我做了很多个判断,我能不能少做一些,把那些判断合并起来或者里面我做了不少循环,循环通常是为了赋值,赋值完以后我有没有立即就把那个数组或者字典之类的释放。我不知道那些东西释放跟不释放效率会不会相差很多,但可以肯定的是,如果我在一个脚本里同一个数组或者字典的名字被重复用多次,而在使用之前我又没有重新定义,在上一个数组或者字典使用完毕之后,把它清除干净会让我安心很多。

一开始要实现某个功能的时候,我都是写完一大堆,然后发现另外一个功能可能就是在那一大堆里面改一点点,然后就可以实现了,我就会把那一大堆复制粘贴,然后改一点点,发现的确是可以的,但是当这个脚本真的要放出来的时候,我就得合并同类项,能不能把这两个东西通过以某个判断把它们合并在一起呢?如果那两段话的差别就只是某个条件判断不一样,我能不能把那个条件判断放在前面,然后把判断结果赋值给一个变量接着后面就可以在同一段话里面引用那个变量了。这样的话从脚本的体积来说可以缩短很多,起码可以减肥一半,甚至更多。

一直以来我都想不通,如果我要从一个工作簿里复制某个工作表到另外一个新的工作簿。那么我是应该把整个工作表复制过去呢,还是说在新的那个工作簿里面新建一个工作表,然后把原来那个的内容复制到那边。在生成这篇blog的时候,其实我依然没有做过这种尝试,到底哪一个的效率会高一点呢?我选择的是直接把工作表复制过去。当我全部复制完毕以后,因为每个工作簿新建的时候都会有一个默认的工作表,我最后的步骤就是把默认的那个工作表删掉。但是让我想不明白的是,如果我不是在VBA里操作,而是直接操作Excel,我在某个已经打开的工作簿的工作表的表名那里点右键之后选择在新的工作簿里面建立这个工作表的副本,那么新的工作簿里是不会有默认空白工作表的。这是不是证明,如果我在新建工作簿里面设定某些参数可以不让那个默认空白的工作表生成呢?因为如果这样的话,我就不需要在后面再做一个删除的操作了。从数据上说,删不删除都无所谓,因为那个是空白的,但是对完美主义者来说,总觉得有那么一个空表实在很碍眼。

当我终于实现了批量生成文件以后,我发现批量生成文件的速度很慢。慢到大概每个表都需要一秒钟,如果要批量生成9个表就得9秒钟甚至更多。在考虑如何缩短时间的时候,我马上想到我把那些批量生成的表全部都放在一个工作簿里,事情就变成了批量生成一个工作簿里面的N个工作表,而不是生成N个工作簿。接着我发现这样的确能提高一点速度,如果要生成9个表的话,时间会从大概9秒钟下降到6秒钟,但是我觉得还是不行。于是我就开始研究我这个生成的过程到底有没有什么地方可以改进。因为之前我的策略是生成9个工作簿,所以我肯定是从原始的文件里先把自带格式的工作表复制到新的工作簿,然后再把新的数据粘贴到新的工作簿,然后保存。同样的思路,用在一个工作簿的N个工作表里,效率很低。所以接下来我做的就是新建一个工作簿,然后把带有格式的工作表复制过去。接着在新的工作簿里面复制里面带有格式的工作表,改名,接着在新的工作表里赋值。这样最大的区别就在于在多次复制工作表的时候,我不再需要跨工作簿了。这么一个不跨文件的操作,直接让批量生成的时间从6秒下降到2秒,效果非常明显。我觉得两秒也几乎基本上是个极限了,因为即便我用最简单的循环,基本上不在工作表里面录入什么数据也需要接近2秒的时间,现在我粘贴了那么多数据,还有就是生成这些数据之前还进行了N步操作,整个过程下来不到三秒,我觉得完全可以接受。

追求更快更好是从来没有尽头的。

2023-08
22

继续沉迷

By xrspook @ 9:12:09 归类于: 烂日记

星期天的晚上,我觉得自己睡了个寂寞。本来就很晚才去睡觉,再加上睡觉之前我正在想某些很烧脑的事情,所以现在躺在床上,我觉得整个晚上我的脑子里都是那些烧脑的玩意。在迷迷糊糊之中睡觉,我也说不准自己到底是清醒的还是睡着的。在睡梦之中我还在为那个睡觉之前折腾的问题烦恼,但醒了以后,我实在不记得睡梦之中我做了什么方案,所以说在其实在睡觉之前真的不应该努力思考,那样的话不仅仅会很久都睡不着,睡着了以后也会很挣扎。但我读书的时候不会这样,话说回来,读书的时候我就从来没有为某些问题主动这么努力过。如果是老师出的某些习题,通常都会有标准的答案。那个时候我们都不会自找麻烦,故意给自己制造难题,又或者说即便在那个时候我们找到了什么问题,你自己解决不了的,我也会主动去找同学或者直接去找老师。退一步说,我们找的那些答案只要到那是某些习题本上或者卷子上的题目,那些东西绝大多数情况之下都有标准答案,所以找到那个标准答案就好了,有可能是配套的答案也有可能是某些教辅的书籍里面有相关类似的解题说明。

现在我做的那些事情,我感觉没有一个标准答案。不同的人会用不同的方式去实现。不仅仅是实现的工具不一样,即便是一致的工具,也会有不同的实现思路。就我自己的实际情况而言,即便只是我一个人,可能今天跟明天的想法也会有区别,即便我把某个VBA脚本写得我自己满意,但说不准过上一段时间我又会有新的想法,觉得某些地方可以做某些改进。之所以这样,是因为首先我还一直在思考。其次,之所以一开始想得不周全,是因为我根本不知道周全应该是怎么样的,很多方法是参照过来的,可能在其它的编程里面是那么个用法,但什么才是最适合在VBA里实现的,又是另外一回事。比如其实VBA通过api是可以调用Excel自己前端函数,但那一定不是VBA最高效的方式。在VBA里,只要你玩好了判断和循环,对高手来说,就能解决几乎所有的问题。数组才是VBA的核心,但是数组不仅仅是一回事。可能是我一开始学VBA的时候并没有意识到原来数组是那么的复杂。因为在我印象之中,C语言的数组不是这样的。

VBA里的数组千变万化,虽然都用数组去命名,但实际定义赋值使用等等完全不一样,又或者是说它们的确有共性,但是它们的特性会让你觉得它们大概都是一回事的人无数次掉坑里,我就是这样的人。当我掉坑里很多次以后,我才发现原来它们是有很多特性的。

要清楚了解我的工具是做什么的。可以怎么用,然后我才能在用的时候得心应手。什么场合应该用什么样的数组,得到了数组以后,我又可以对那进行什么样的改造都是我应该烂熟于心的。

大概一周之前,我跟网友谈起我在VBA里遇到的烦恼的时候,我的网友说了一句,可能你连怎么VBA里调试都不知道。其实调试我是会的,因为如果我完全不懂调试的话,搞循环就是在数组瞎掰,显然除了碰壁就是碰壁。但是我真的没有系统的学习过在VBA里怎么高效调试。既然知道自己弱在哪里,我就得把这个补回来。现在我的调试要比之前高效那么一点点了。

在AI流行的现在,我还靠我自己写VBA,写那个超级八股又非常奇怪的编程语言,在别人看来非常反人类反潮流,但是当你从不大认识到比较熟悉一种编程语言,当你能得心应手轻而易举实现之前你想做到,但是却无法做到的事情的时候,那种成就感是无法言语的。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress