微信开发工具禁用鼠标悬停提示功能

提示雖然方便,但總在不需要時彈出,很鬧心。而且說它方便只是相對而言,絕大多數情況下彈出來的提示只會擾亂視綫、影響操作,尤其在性能不高的電腦上更會引起界面卡頓,因而將它禁用才是更明智的做法。

CodeIgniter4框架中的Entity類

曾經使用CI3框架的時候就覺得在Model層上應該增加一個Entity層,那時我還不知道這個正規的命名是Entity。等到了CI4中,發現Entity實體類,經過瞭解和試用,發現它正是我所需要的,對於MVC架構開發,實體類概念的引入十分有價值。

在iPhone上用電容筆塗鴉的主觀評測

平時很喜歡畫畫、塗鴉,雖然自己繪畫水平非常差,但是閑暇的時候塗一塗能夠令自己的心情十分愉悅。自從得到了新的手機,我就一直想再買一根電容筆,這樣就可以直接使用手機塗鴉,隨時隨地、享受樂趣。

大学毕业后入职的第一家公司

今天翻看相册,找到了几张拍摄于2006年4月1日的照片,勾起了无限回忆: 这里是我刚刚工作的时候“公司所在地”,当时的公司老板是一位非常有生活、有兴致的南方老板,平日喜欢约朋友到公司喝茶、聊天。 所以他将公司设立在了这么一个环境优雅、清净的小四合院中。 我每天到公司上班也很享受,毕竟在北京这座现代化的大都市中,能够有这么一个雅致的小院子,是非常舒适的。每天工作累了,可以随时站在院子里伸伸腰、动动腿。而且老板随和,他的会客茶室也是可以让我们员工进去喝茶、休息的。 也是在那个时候,我也就跟着老板学会了喝功夫茶。作为一个在北京生活了多年的“北京人”,平日习惯了喝浓艳的花茶,初识铁观音时觉得非常的新奇——喝个水还要如此繁琐、好大的仪式感! 这个小院子如今也不知道是什么人在居住、又或者是哪个公司的人在这里继续为梦想而打拼。一晃快二十年了,今天无意中翻看自己的历史相册,找到了这几张照片,重新发到自己的blog中,当是一个纪念吧。

两块Ryzen 5的CPU无法被点亮

一、攒机翻车,点亮过程中主板启动自检灯卡CPU长亮: 最近想攒一台新的台式机、以替代当前使用的电脑。恰巧手中有一块AMD Ryzen 5 4500的CPU闲置,于是想着买块新的主板将它装上。结果买回来的昂达B550-VH-W主板,却无法点亮。 毕竟手中的Ryzen 5 4500是家中闲置了很久的,这块CPU具体是好是坏并不清楚,所以无法点亮也就不好判断是谁的责任了。索性一咬牙,又买了一块全新的AMD Ryzen 5 5500的CPU,结果还是无法完成点亮过程。 两块CPU分别是Ryzen 5 4500和Ryzen 5 5500,其中又有一块是从官网渠道购买的全新盒装,恰巧两块CPU都是有问题的可能性并不大,所以我认为CPU一定是好的,无法点亮的根源应该是在其他硬件设备上。 Ryzen 3、Ryzen 5、Ryzen 7是三个AMD Ryzen的系列,其中3系是基础入门、5系是主流应用、7系是高端产品。 4500和5500是产品的规格编码,其中Ryzen 5 4500是2020年发布的基于Zen2架构的CPU;Ryzen 5 5500则是2021年发布的基于Zen3架构的CPU。 因为手中现役的主板是B450M主板、而新购买的是B550主板,两块主板一个是现在正常使用、另一个是全新购买,经过相互替换也无一能够完成设备点亮。所以主板与CPU损坏或不兼容性,也基本可以排除。…

前阵子闲来无事做了一些键帽模型

前阵子闲来无事做了一些键帽模型,主要是针对CherryMX键轴制作的原厂键帽和OEM版键帽,这两套模型制作完了之后,有一些网友提出来需要特殊长度的空格。 搜索了一下,发现空格键帽的长度规格的确不是很统一,虽然6.25U是比较主流的,但还有诸如6U、6.5U甚至7U等,结合与网友的交流,发现还有一些人需要3U的空格和80mm的空格…… 所以今天又花了一些时间,将主要长度的空格分别制作了一下,并导出成step格式和stl格式,方便大家使用。 空格和其他常规按键最大的不同在于:空格的上面是凸出的,其他常规按键的上表面是略微凹陷的。所以从侧视图上看,能看出来这些空格都是凸起的。 底面与常规按键也有一些差异,因为空格是比较长的按键,所以有卫星轴做左右两侧的承托,所以空格键帽里面的立柱是3个。当然常规按键中比较长的按键,例如shift、enter等按键,因为比较长所以里面的立柱也是有3个。 今天主要制作的就是上面7颗空格键帽的模型文件,分别是3U、6U、6.25U、6.5U、7U和80mm长度。 如上就是今天完成的工作,使用的建模工具是freeCAD,我很喜欢这款软件。

路由器变砖及复活记

一、原因 为什么要尝试升级手中的路由器呢?我不记得原因了,哦,想起来了。 我最近有幸终于换了一部手机,新手机性能远比自己之前使用的手机好非常多。但唯一的遗憾是:当手机做为热点,分享给路由器的时候,路由器找不到这台新手机热点。 虽然后来莫名其妙的找到了手机热点、也连接上了。但我心中始终有个疙瘩——是不是路由器的固件版本比较低、找不到这个新手机设备? 这么想着,我就想升级一下路由器的固件。 二、直接升级失败 我的路由器是GL.iNet AR750S-EXT,原来里面的固件大概是3.1.202吧,总之就是3.x的固件版本,看它官网上,最新固件已经是4.3.17了。于是下载、升级。 升级失败,原因在于通过web端上传固件之后,始终卡在verifying阶段,无法完成MD5验证,也就无法完成升级(当然这个问题后来我知道原因了)。 在始终处于verifying阶段时,我误以为是需要联网远程验证,而也许远程验证服务器访问不到,所以无法完成verifying结果。我就贸然的进入shell,尝试了一把直接通过命令行强制手动升级。 三、路由器变砖头了 这个通过shell的命令行强制手动升级直接导致路由器变砖。后来才知道,verifying之所以无法完成,是因为那个压缩包本身也许就存在问题:我尝试在另一台电脑上进行解压缩,解压失败。这是官网提供的压缩包,不知道为什么会出这个情况,也无需细究,总之就是:冒然使用了一个非标准的升级方式,导致路由器变砖了。 直接upgrade固件不成、路由器变砖之后。想到不如直接使用UBOOT方式升级,于是又从官网下载了UBOOT刷机包,直接UBOOT刷机。 刷机估计是成功了。 为什么要说“估计”呢?因为我不知道是否成功了。起初因为没有做过这个设备的刷机,所以也不知道刷机究竟成功了没有。但当时我以为UBOOT刷机是失败的,因为刷机完成之后看不出来哪里有成功的迹象。 我以为,如果刷机成功,路由器会给个LED的闪烁提示吧?我以为,刷机成功之后,无线WIFI会出现吧?都没有,既没有LED闪烁、也没有WIFI信号出现。所以我以为是刷机失败了。 后来换成其他固件、刷机之后也没有任何提示。但察觉到原因,刷机之后默认路由器是不开启WIFI的、也没有LED闪烁,也就是说成功了时无法通过观察判断出来。 所以官网给出的UBOOT刷机,我估计是成功了,但因为自己不会操作、不会访问,也就一直以为仍然失败、路由器仍然是砖头。 这个估计已经是好了的路由器,在我当时以为仍然是砖头。既然是砖头,也就破罐破摔了! 这个“砖头”直接通过长按power进入UBOOT界面,我也就只能看到UBOOT升级界面。 四、UBOOT刷机成功 此时迎来了转机:下载到一个第三方的固件,这个第三方固件做的比较好,中文版本、并且刷机成功之后默认是开启WIFI的。 所以当我第三次尝试刷机(第一次是upgrade失败、第二次是uboot官方固件以为失败),完成之后,顺利的通过无线观察到了路由器WIFI信号。进入路由器,看到了与官网固件截然不同的luci框架和功能界面。 这个时候按理来说,就别再折腾了,直接使用这个第三方固件就是了。 但是第三方固件的版本比较低,是个4年前的发行包,这甚至要比我这个路由器最初能用是的官方固件版本还要低。 另一方面,这个第三方固件是个人制作的,我有些担忧,虽然它也是开源产品,但毕竟是个人发布,万一里面有些隐患呢? 考虑到这个第三方固件版本低、又是个人制作的,有些如鲠在喉的不悦。于是我找到了openwrt的官网,如果说我的路由器以前是安装的OEM厂商的厂商固件,如今不如直接再试试openwrt的官方通用固件?…

高阶导数的意义和应用

对于某个函数,如果这个函数描述的是位置随时间的关系,那么这个函数反映的就是某个时刻所在的位置。 当对它求导,得到其一阶导函数,这个一阶导函数反映的是速度。如果一阶导数是个定值,意味着速度恒定;如果一阶求导结果不是定值、而是一个函数、或者更准确地说成是“导函数”,则意味着它的速度并不恒定,任意时刻的速度都是那一时刻的速度,此时只有带入具体的t参数,才能知道t时的瞬时速度。 继续再对一阶导函数求导,得到二阶导函数,反映的是加速度。和上面提到的速度相似的,如果二阶导结果是定值,意味着加速度恒定、否则意味着加速度也是随着时间变化的,因而二阶导的结果便是“二阶导函数”,这个导函数可以反映出加速度随时间的变化关系。 这时,如果继续升阶、求导,分别依次得到它的三阶导、四阶导、五阶导、甚至六阶导……这些导函数还有意义吗?又或者它们已经没有物理上的意义、只是一个纯粹的数学运算了呢? 实际上这些高阶导函数依然有着物理意义的,这里有一张来自于wikipedia的图,示意出了这些高阶导函数的名称(是的,它们都有自己的明确的名称): 在上图中的一阶导称为Velocity、二阶导称为Acceleration,这已经在此文开始提到了、也是微分课程中最先引入微分概念和应用时的举例,当是基础知识,不言自明了。而后面三阶导开始,每一个高阶导数的含义又是什么呢? 三阶导数Jerk,是在Acceleration(加速度)的基础上,再次对时间求导。通常情况下中学物理中的物体运动,最复杂的情况也就是匀加速运动、加速度恒定的了。所以在中学物理中,Jerk得到的一般都是0。而显示情况下,加速度也不是恒定不变的,所以对加速度再次求导,便是Jerk,它称为“加加速度”、或者称为“冲击速度”。 Jerk在现实的运动物体(例如汽车)中,反映出来的就是颠簸、震荡;在航天器(例如飞机、火箭)上反映成的也是抖动、失速等情形。这是理想运动状态下不希望见到的情况,但现实中就是会遇到这些情况,使得加速度并不恒定,总会因为路面的石子、坑洞等引起加速度的变化。通过对Jerk的分析或记录,可以了解到运动物体的受冲击或震荡程度。 四阶导数Snap,五阶导数Crackle,还有六阶的Pop,则是依次对前者进行再一次的高阶求导。对于精密仪器或航天工程领域而言,越复杂的“震动”其高阶变化率约可能成为问题的隐患。现实和一般情况下这些高阶变化率是可以近似成零、或者就是零的,但当他们不为零是则意味着这些数值中隐含着产生振动的本源。 通过对取样数据进行这些高阶计算得到的“高阶加速度数值”的分析,便可以对当前震动进行归类归因,分析出当前震动产生的具体原因,从而为故障分析进行指导。 Snap、Crackle、Pop这三个名称因为已经不在通常的运动分析中出现,所以他们既没有一个很大众化的名称、甚至也没有比较公共的研究文献。仅在特定领域的运动分析中才会用到,因而命名上也就并不如速度、加速度、冲击速度等那么简明、共识了。 实际上,这三个名称更像是专业领域的科研人员临时、随性命名出来的,它们原本是一款早餐麦片的电视广告中出现的三个吉祥物,分别叫Snap、Crackle、Pop,也许是当时研究这些运动行为的高阶震动表现的科研人员在吃过这款早餐、或看过这则广告之后,随性起出来的名称吧。

为Awstats开启GeoIP2插件支持功能

使用Awstats做网站的访问统计已经有些日子了,渐入佳境。不过看到统计报告中的方可来源都是IP地址,实在有些茫然——人脑是很难直接将IP地址换算成国家、地区的。而且即便能够快速的完成人脑中的联想,也于统计无用。所以还是应开启IP转地区的插件,才能更方便进行统计。 为了启用这个功能,主要需要进行如下三个操作: 1、下载IP地址库;2、安装Perl相关功能模块;3、在Awstats配置中启用相关插件。 下面分别说一下每一个步骤具体的注意事项。 一、下载IP地址库 国家地区IP地址库,有一家成熟知名的功能负责维护、提供。这便是maxmind.com,到他们的官网就能够找到IP库下载页面。这里值得注意4点: 1、他们提供的IP地址库,是有免费版和付费版区分的,对于一般的小型网站或个人用户,可以下载免费版进行使用; 2、下载免费版IP地址库,需要是maxmind网站的注册用户才能进行下载。所以需要先进行用户注册、然后登录进入自己的账号。注册过程并不复杂,也没有苛刻的门槛,基本1分钟即可完成注册、下载; 3、免费IP库分为两个版本,分别是GeoIP版、GeoIP2版,也就是第一代和第二代,我是使用的GeoIP2,所以后面的Perl模块安装、插件启动,都是针对GeoIP2这一版本而言。如果您下载的是GeoIP版,则后面所有步骤,也要进行相关调整; 4、GeoIP2地址库是分为两个数据库的,分别是Country库和City库,两个数据库都下载回来即可。当然如果后面开启插件部分之需要对国家进行统计分析,那这里只下载Country库即可。 小结:第一步是注册并登录maxmind网站,下载免费版GeoIP2数据库文件到本地,并上传至web server服务器待用。 二、安装Perl相关功能模块 因为Awstats是基于Perl语言的项目,与之相关的IP地区统计功能也是基于Perl开发的,这就要完成相关Perl功能模块的安装,这里有如下几点值得注意: 1、首先就是为了安装Perl的功能模块,先要关注自己的服务器性能。我起初使用的是Amazon的虚拟主机,用的t2.micro配置,结果这个性能配置下是无法完成Perl模块的安装的(经常会因为CPU100%占用导致服务器僵死),当将服务器配置升级至t2.small之后,才能顺利完成后续安装; 2、确保服务器至少是Amazon Linux 2023 t2.small以上的性能。首先利用包管理器安装perl-CPAN。这样就可以利用cpan包管理器完成perl中的module的安装了; 3、安装完cpan之后,第一次运行时会有一些交互问答完成初始化、更新,按步骤操作即可。这里唯一的问题就是当服务器配置是t2.micro时,这个步骤是无法完成的; 4、完成cpan的首次运行并初始化之后,在cpan shell中,安装awstats统计时需要的模块。例如我启用的是GeoIP2-Country和GeoIP2-City两个插件,则需要在Perl中安装GeoIP2::Database::Reader模块,直接在cpan shell中使用install命令即可以完成安装,所需依赖也会一并安装完成; 5、对于2.4中值得注意:安装过程并非无人值守的,其中有一些问答过程,按照默认给出的选项回答即可; 6、对于2.4中另一个值得注意:我在Amazon Linux 2023系统中进行GeoIP2::Database::Reader安装是无法将所有依赖全部安装好的,GeoIP2::Database::Reader需要依赖于LWP::Protocol::https,而LWP::Protocol::https又依赖于IO::Socket::SSL,但是IO::Socket::SSL模块已经不在cpan的维护列表中了,所以仅通过cpan是无法完成一键安装的;…

如何将STP格式模型转换成STL格式

一、基本操作流程 我使用的是FreeCAD软件,以下是具体过程。 1、首先启动FreeCAD,并使用“打开”功能将STP格式模型载入到工作区; 2、之后选择“视图”-“工作台”-“Mesh Design“进入到Mesh Design工作模式; 3、选中刚刚导入的STP零件,并点击菜单中的细分形状图标、也就是“实体->面形”图标; 4、在左侧任务面板中,可以看到“曲面细分”任务,此时如果直接点击“OK”按钮是可以依“标准”公差和细分粒度完成STP转STL的,但是转换出来的效果并不理想,所以可以改用其他算法和细分粒度进行转换; 5、使用Netgen算法,精细度选择“精细“、参数属性中选中“优化曲面”和“二阶元素“,此时在点击“OK”,便可以生成更高质量的STL模型; 6、如果需要生成的STL更加细腻、平滑,可以在上面第5步环节,精细度选择”非常精细“,这样生成的效果会更好,但是相应的生成出来的文件尺寸也会更大; 7、稍等片刻,完成转换,可以看到零件列表面板中已经有了STL格式的零件模型; 8、在STL零件模型上点击鼠标右键,弹出菜单中选择“导出网络”,就可以弹出Stl文件保存对话框,完成最终的文件输出了; 二、相关话题: 1、FreeCAD中的曲面细分中,标准、Mefisto、Netgen、gmsh四种方式有什么区别? 答:这是四种不同的曲面细分网格生成器、也就是不同的四种曲面生成算法。标准生成器是基于三角形进行曲面描述的,优点是速度快、缺点是复杂形状的零件难以完成准确的表述,导致生成的曲面失真严重;Mefisto相对标准生成的曲面更精细,但是依然难以处理复杂零件结构;Netgen可以使用三角形、四边形综合生成曲面形状,从而表达复杂的零件结构;gmsh是四种曲面生成器中最复杂、最慢、但也是最细腻的,因为它可以使用三角形、四边形、六边形表达曲面; 2、Netgen 曲面生成器中的优化曲面、二阶元素、四角形为主分别有什么区别? 答:如图零件,如果是曲面较多的,或曲面要求精度严格的,则应该选中曲面优化、二阶元素两个优化策略,这样可以零STL表述曲面时更加的准确、平滑。当然代价是计算量比较大、转换耗时较多、最终生成的文件尺寸也比较大。四角形为主则是当三角形、四角形描述曲面时,如果两个三角形可以构造成矩形则会使用矩形替代,这样显然会令最终的STL文件尺寸小、但因为转换过程中增加了矩形代替两个三角形的判断策略,转换时间会更长。