家用工作站方案:ThinkBook 14 2023 版
本篇文章聊聊今年双十一,我新购置的家用工作站设备:ThinkBook 14 2023,一台五千元价位,没有显卡的笔记本。我为什么选择它,它又能做些什么。
写在前面
2021 年年中的时候,我写过一篇《廉价的家用工作站方案:前篇》,第一次公开的和我的朋友介绍了我在使用的方案,在家里用笔记本做服务器。虽然从 15~16 年就开始这么用,但那次是第一次做了公开的、相对详细的对比分析,包括性能、成本的比较,以及使用上的“爽”和“坑”。
在随后《AMD 4750u 及 5800u 笔记本安装 Ubuntu 20.04》这篇文章中,我提到了为什么会选择搭载 AMD Zen2 4750u 的 ThinkPad L14 和搭载 AMD Zen3 5800u 的 ThinkBook 15。在今年下半年的早些时候,《廉价的家用工作站方案:ThinkPad 存储升级及数据迁移》这篇文章中,我提到了针对之前运行两年的设备进行存储升级的事情。包括如何减少笔记本硬盘发热的问题,减少 SSD 速度越来越快,温度过高硬盘触发自我保护机制,而出现掉盘的风险。
没错,过去两年里,家里有两台持续运行的 ThinkPad L14,它们作为 HomeLab 中不可或缺的计算设备,提供了非常多的实战经验验证和欢乐。而我只投入了相比较云上服务器八分之一或更低的成本。
接下来,先将聊聊为什么我会选择新入手这台机器,这台机器有什么好的。
为什么入手 ThinkBook 14 2023 版
要聊聊为什么会选择入手这台设备,首先需要聊聊它的前任,年初被我出手的 ThinkBook 15,当初的入手价格是 4899,回收价格是 2600,回血百分比 53%,我个人认为还是比较值得的。
年初出手的 ThinkBook 15 (AMD 5800u)
在购置这台新设备(ThinkBook 14 )之前,不算几种台式机,单是同类型的“笔记本服务器”,在家里还有两台:搭载 AMD 4750u 的 ThinkPad L14(官方规格说明),各自插满 64G 内存,2TB SSD,跑跑服务和数据,做做实验也还是很欢脱的。而这款 ThinkBook 的前辈 ThinkBook 15 则被我在年初出手了。
虽然 ThinkBook 15(AMD 5800u),比其他两台设备性能要好不少,软件的适配性也很不错,也能随便安装 ESXi 和 PVE (AMD 5800u 笔记本折腾 Proxmox VE 7.0 虚拟化)使用,还能折腾一台 All In One 的私有云。但是因为下面的原因,我还是将它换掉了。
首先是,细节使用体验:
其他两台笔记本在机柜里,可以折叠为三角形,支棱在机柜同一层的格子里,屏幕保持关闭,既非常利于散热,又非常节约空间。
但是 ThinkPad 15 如果想关闭屏幕,需要将笔记本几乎折叠闭合起来,但是又不能完全闭合,还需要在笔记本中间放一个手环高度的东西,这样非常不利于散热,如果想跑编译或者大型数据处理,还是比较担心跑一半出问题的。当然,平时跑跑 K8s 和 Docker,一般情况,它是静音 & 非常凉快的,但只要你给它一些交互和压力,它温热的速度还是要比其他设备快的。
其次是,硬件的可靠性:
其他两台设备都能够支持 64GB 的内存,所以容量方面倒是没有那么紧迫,这台板载内存搭配一条内存插槽,也能插到 40GB。但是我属实担心这个板载内存什么时候颗粒出现问题,导致这个设备的可靠性大幅下降。在过去的几年里,不论是因为支持国产的原因,还是因为性价比,我购买过几种国产内存(包括少量出产的型号),因为内存导致设备死机或者数据处理出问题,遇到了好几次。
虽然国产内存的售后很棒,两次都给我更换了新内存,但是一来一回的折腾,还是挺耽误时间的。
接着是,能耗问题:
其他两台设备都是 45w 的适配器,实际运行的功耗也自然在这个范围内,在不跑密集计算时,一般就几瓦到十几瓦,但是这台 ThinkBook 则是 65w 的适配器,有时候一台顶两台的功耗,但是它又没有体现出一台打两台的性能素质。当然,相比较带显卡的设备,现在一台台灯或者一台路由器的功耗也差不多了,不过我追求的是超长期的使用,功耗能扣还是要扣一些,不然年底的时候,阶梯计费的电费会做“延迟补偿的”。
最后是,设备的重量和可便携性:
ThinkPad L14 的重量在 1.6 kg,ThinkBook 15 的重量是 1.7 kg,除此之外,15 寸的体积有一说一还是挺大的。我之前的主力输入设备(打字机)是 19 款 16寸 MacBook Pro ,它的重量是 2 kg。这三台设备随便两台合体,重量都冲着 4 kg 去了,算上背包和包其他东西,对我来说负担挺大的。
当时的主力输入设备芯片还是 Intel 系列的 i9-9980hk,除了 Mac 风扇老轰鸣、设备发热严重之外,性能和应用兼容性真的挺好的,所以,很少的时候,我会带两台设备同时出门,一般情况一台就行啦。
但是今年国庆的时候,考虑到各种原因(后面单独写一篇),我将主力输入设备换成了 Mac Book Air,这几年的 Mac 设备只有 Apple Silicon 芯片(M1、M2、M3 这类 ARM 芯片),好多应用和 Docker 的兼容性真的还是有很大问题。我就又开始想,能不能多带一台轻便易携多设备出门,解决日常的开发体验、方案验证问题,还可以避免糟糕网络带来的糟糕的远程使用体验和可访问性的问题,并且成本还低。 当然,主力输入设备重量降低到了 1.5kg,也是我可以再考虑多带一台设备的原因。
以及,还有一个很重要的原因,年初因为要入手能够有 128G ECC 内存的 Mac Pro(廉价的家庭工作站设备改造记录:苹果垃圾桶(Mac Pro 2013)),考虑到设备利用率和性价比,我必须奉行“入一出一”原则,出掉一台设备。
选择一台“两栖”笔记本
有了上面的需求后,我就需要选择一台“两栖”的笔记本:我出门的时候,栖息在我的包里,我在家里的时候,“栖息”在机柜或者作为扩展坞,“栖息”在我的主力输入设备附近。
因为这台设备是一台辅助设备,它是用来扩展主要设备的,所以它们的链接的易用性也需要考虑。我之前折腾过三套方案:
- 通过 2.5G 网卡和网线来,让不同的设备直接连通在一起,比如:《MacBook 与其他设备的低成本高性能数据传输方案(二)》
- 通过一台小巧的便携路由器,让不同设备连通在一起
- 通过雷电线,让不同设备连通在一起:《MacBook 与其他设备的低成本高性能数据传输方案(一)》、《廉价的全闪存雷电 NAS 折腾笔记:组网方案的选择》、《廉价的全闪存雷电 NAS 折腾笔记:NUC9 操作系统踩坑》
单从文章数量就不难看出这三种方案中,我个人最喜欢的方案是第三种,雷电连接。结合上面提到的 ThinkBook 15 使用过程中的经验,不难推理出我需要什么样的新设备:
- 轻便易携,重量要是轻薄本的范畴(1.5kg内),尺寸绝对要小于 15 寸
- 要支持雷电连接,方便设备之间的数据交互
- 非主板外的主要外设(内存、硬盘)要能够更换,保证整体可靠性
- 性能也要过的去,功耗控制要比较优秀,起码有计算压力在去“热锅”
第一波筛选,我考虑的体积成分比较大,不带显卡,但是性能还不错的游戏掌机进入了视线,包括 GX1 Pro(1165g7)、onexplayer mini(1195g7、1280p)、GPD Win4。
但是很快我就放弃了这个选项,因为:
- 体积虽然很小,但是散热模块也相应的缩小了,如果想长时间运行,可靠性目前没有得到充分验证。原本是游戏机定位,续航时间也就一个钟头到几个钟头,时间太短了。
- 重量虽然都控制在 1kg 内,但是发热带来的散热压力,产生的噪音是无法消除或减弱的。作为游戏机带着耳机可能可以忽略掉这个问题,但是作为副机使用,缺点就很明显了。
- “海鲜市场”上二手的数量有点多,网上搜索,偶尔能够看到对售后不满意的评价,稍微有点担心。
- 因为 UMPC 属性和玩家小众群体的加成,设备价格都比较高,即使是二手设备,相比较同性能的笔记本也是贵了一些。
经过搜集资料发现,虽然 USB 4 也能实现雷电3 级别的连接,但是每一家都对于接口性能保障闭口不提,所以推测全功能 USB 4 接口和雷电4设备组网,可能不见得百分百靠谱,所以为了稳妥和省心,我接下来就只看 Intel 芯片的设备啦。
当然,这里也少不了 Intel 的宣传中提到的“雷电技术 4 的最低要求更高”。
第二波筛选,从上面的设备中筛选出了最高性价比的包含 1280p 处理器笔记本,1280p 比我之前主力使用的 i9 MacBook 性能只高不低,不过只有两款设备合适:ThinkPad t14s Gen3、Lenovo Yoga 2022(美行)。
这两台设备的重量都非常的好,差不多都只有 1kg,但是结合上面的需求,也很快就可以放弃掉这个选择:
- 散热能力依旧是打折扣的,找到了一些用户吐槽散热问题的帖子。散热会导致降频,看着纸面参数再好的芯片,性能也是发挥不出来的。
- 入手渠道非常有限,我习惯的京东自营是没有货的,而且标价真的贵,比一台带显卡的游戏本的平均价格还高。如果从“海鲜市场”入手,二手的成本接近一台当季的 13 代 CPU 的全新笔记本。
- 这两台设备的内存都是板载的,加之如果高性价比入手,渠道自然是二手,售后和质保可能要打一个大大的问号。
考虑到售后和质保也是很大的一个诉求,于是最后一波筛选范围,就回归到了正常的京东自营渠道上了,送的又快,又有退换维修保障。直接看上有什么性能在 1280p 上下的全新设备。因为 1280p 是十二代最高性价比的芯片,所以其他搭载十二代芯片的设备就可以忽略掉了,直接只看十三代。而十三代芯片里,虽然 13900hx 最强,但是这个芯片的设备一般都还捆绑显卡一起卖(游戏本),所以其实选择一共有三种:i5 款的 13500h、i7 款的 13700h,以及 i9 款的 13900h。这三种里最强的 13900h 除了主频比 13700h 稍高一些,以及支持 vPro 企业版外,其他重要参数包括线程和缓存等完全一致,而 13500h 则比其他两款少了 2 颗关键的大核,核显中的 EU 也少了 16 个。
所以,最后一波筛选的优先级就变成了优先寻找带有 13700h 或者 13900h 的纯 CPU 笔记本,实在没有,13500h 也行。
在一番简单筛选后,找到了联想 ThinkBook 14,14寸的机身,原生支持雷电4 (CPU而非外置芯片),拥有双内存插槽、双硬盘槽、有 13500h 或 13700h 两种 CPU 型号选择的笔记本,设备重量也只有 1.4kg。硬要说不足,可能就只有内存最大只支持到 32g。不过前文中提到了,我还有其他设备有大内存,费内存的应用可以在那些设备上跑,问题不大。
这台设备在京东上的评价其实不是很好,同时在 ThinkBook 和 ThinkPad 两个自营店铺销售,通过评价数量推理,13700h 版本累计卖出去了 1500 台左右。其中有一个销量 1000+ 的店铺的好评率只有 93%。把 13500h 和 13700h 版本的问题一起看,会发现主要有以下几个原因:
- 快速降价背刺用户(我买的价格比较低,不是问题)
- 硬盘是亿联的,被吐槽(我会换的,不是问题)
- 屏幕漏光,晚上用不太好(我不用这个设备的屏幕,不是问题)
- 不送赠品背包(家里一堆电脑包,真别送了,不是问题)
- Windows 使用卡、噪音大、烫(这台设备几乎不使用 Windows,不是问题)
- 开机注册激活后无法退换(不进系统检测就好啦,不是问题)
- 部分机器可能品控有问题,无法开机、开关有问题、屏幕有问题、接口有问题(这个需要重视下,到手看看有没有问题)
ThinkBook 14 简单折腾
早晨下单,晚上京东就送到家啦。包装是原封,不是京东退换货的后封,所以我只需要检查屏幕、和基础硬件可用性就好。
毕竟其中一个考量是背在包里走,所以到手后,简单对比了下笔记本的尺寸,ThinkBook 14 比 13 寸的 Mac 稍微大一圈,比 15 寸的 Air 稍微少一圈,之前的笔记本内胆包可以完美复用啦。
用上一篇文章中提到的《开源的全能维护 U 盘工具:Ventoy》,搭配 memtest 先跑一轮内存测试,避免后续因为内存有问题导致设备死机之类的问题,排查挺浪费时间的。
内存测试没问题,一般笔记本设备在内存测试的时候,因为没有温度控制程序,温度都会跑到上限,这台也是,CPU 温度接近 100 度了呢,也算是间接验证了设备可靠性,有没有过热重启的问题。
接着,使用 Ventoy 随便进入一个 PE(根据你喜好来就行,不安装系统差别不大,有机会再写一篇聊聊 PE),检查下系统基础配置,看了眼没啥问题,温度已经骤降到可用温度了,还是很不错的,再 PE 里烤了会机,表现也还行。那么,就可以拆机开始更换硬盘啦。
和上次《廉价的家用工作站方案:ThinkPad 存储升级及数据迁移》里一样,我依旧选择了两块 2TB 的致钛 PCIE 3.0 的盘,温度更可靠,更不容易掉盘。考虑到长时间使用,还是搭配了佳翼厚版本的散热铜片组合。至于内存升级,先不着急,等我把应用都搭建完毕,看情况再升级不迟。
装好笔记本后,再次插上 Ventoy 的 U 盘 ,用 Ubuntu 23.10 光盘引导笔记本,完成系统安装即可。
系统相关基础配置,可以参考这篇文章《在笔记本上搭建高性价比的 Linux 学习环境:基础篇》。
在系统安装完毕之后,我们可以使用一根短的雷电4数据线将设备连在一起。
在主力打字机的系统信息中,很快就识别出了一台“完整的设备”。还记得上文中提到的基于 ThinkBook 搭建的私有云和基于雷电的 NAS 系统吗?下一篇相关的文章中,我会继续展开,它到底能变成什么样。
最后
好了,这篇文章里,我们聊了一些过去使用笔记本做家用服务器的经验,以及花了比较多篇幅介绍了我的硬件选择思路,以及这台设备在我的使用场景下的优势。
希望能够帮助到有同样需要或想法的你。我们下一篇文章见。
–EOF
我们有一个小小的折腾群,里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。
我们在里面会一起聊聊软硬件、HomeLab、编程上、生活里以及职场中的一些问题,偶尔也在群里不定期的分享一些技术资料。
关于交友的标准,请参考下面的文章:
致新朋友:为生活投票,不断寻找更好的朋友
当然,通过下面这篇文章添加好友时,请备注实名和公司或学校、注明来源和目的,珍惜彼此的时间 😄
关于折腾群入群的那些事
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: 苏洋
创建时间: 2023年11月09日
统计字数: 8968字
阅读时间: 18分钟阅读
本文链接: https://soulteary.com/2023/11/09/home-workstation-solution-thinkbook-14-2023.html
相关文章:

家用工作站方案:ThinkBook 14 2023 版
本篇文章聊聊今年双十一,我新购置的家用工作站设备:ThinkBook 14 2023,一台五千元价位,没有显卡的笔记本。我为什么选择它,它又能做些什么。 写在前面 2021 年年中的时候,我写过一篇《廉价的家用工作站方…...

电脑篇——本地串口转TCP,TCP转虚拟串口,网络调试助手,串口调试助手
TCP/UDP工具、串口工具 https://pan.baidu.com/s/1SY03d_RRVhyOZfsPlApmxg?pwd5555 今日有个需求,就是在本机电脑上接了一个串口设备,然后我的QtCreator是在内网远程电脑运行的,我想将串口设备“挂载”到远程电脑上去调试程序,于…...

igbt好坏判断方法有哪些?万用表怎么测试igbt的好坏?
什么是IGBT? IGBT即绝缘栅双极型晶体管,是一种复合全控型电压驱动式功率半导体器件,是电力控制和电力转换的核心器件,在高电压和高电流的光伏逆变器、储能装置和新能源汽车等领域被广泛应用。IGBT具有高输入阻抗,低导通压降&…...

Android UI 开发·界面布局开发·案例分析
目录 编辑 1. 线性布局(LinearLayout) 2. 相对布局(RelativeLayout) 3. 表格布局(TableLayout) 4. 帧布局(FrameLayout) 5. 网格布局(GridLayout࿰…...
2023-11-06 monetdb-事务-insert-delta缓存-分析
摘要: monetdb在事务处理时, 会将数据写入delta缓存中, 然后在commit时将数据写入wal文件, 随后由控制器决定何时将wal中的数据真正的写入BAT列文件中. 本文从delta缓存入手, 分析monetdb在事务处理中的细节. SQL: DML: create table t1 (a int); 事务DDL: START TRANSACTI…...
ubuntu 22.04 flameshot 截图异常的问题
方法找了好久,终于找到一个有用的 Firstly do not install flameshot from snapstore, install it using apt. Go to /etc/gdm3/custom.confRemove the comment on #WaylandEnablefalse Your custom.conf file should be like this: # GDM configuration storag…...

正点原子嵌入式linux驱动开发——Linux WIFI驱动
WIFI的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候很多设备存在布线困难的情况,此时WIFI就是一个不错的选择。正点原子STM32MP1开发板支持USB和SDIO这两种接口的WIFI,本章就来学习一下如何…...
React中的“状态”(state)和“属性”(props)的区别
在React中,"状态"(state)和"属性"(props)是两个重要的概念,它们在组件的生命周期和数据流中扮演着不同的角色。 状态(State): 状态是React组件中用…...

棋牌室电脑计时灯控,棋牌室计时灯控安装,佳易王计时计费管理系统软件
棋牌室电脑计时灯控,棋牌室计时灯控安装,佳易王计时计费管理系统软件 棋牌室的灯可以用佳易王计时计费软件来控制开关,当开始计时的时候,软件发送开灯的指令,灯打开,在结账后,软件发送关灯指令…...

P02项目诊断报警组件(学习操作日志记录、单元测试开发)
★ P02项目诊断报警组件 诊断报警组件的主要功能有: 接收、记录硬件设备上报的报警信息。从预先设定的错误码对照表中找到对应的声光报警和蜂鸣器报警策略,结合当前的报警情况对设备下发报警指示。将报警消息发送到消息队列,由其它组件发送…...

【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】
请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 T32MARM 介绍Trace32 .t32 和 .cmm 差异veloce 下启动TRACE321.1.3 TAP 状态机操作命令1.1.3.1 IDCODE(Identification Code)寄存器 介绍 T32MARM 介绍 T32MARM 是 Lauterbach 的 Trace32 …...
服务器硬件有哪些组成
服务器是由处理器、硬盘、内存、显卡、主板、网卡等组成,今天小编带大家了解一下服务器有哪些硬件吧! 1.最重要的当然就是处理器了,处理器就相当于是服务器的大脑,负责执行各种运算和指令,例如运行程序或者处理数据&am…...

【Git】Git基础命令操作速记
【Git】Git基础命令操作速记 文章目录 【Git】Git基础命令操作速记1. 初始化1.1 设置用户名和邮箱1.2 初始化仓库 2. 基础命令2.1 add和commit2.2 reset2.3 查看日志2.4 删除/找回本地仓库文件2.5 找回暂存区文件2.6 diff命令(找不同) 3. 分支命令3.1 查看分支3.2 创建分支3.3 …...
使用CDN有什么好处?
近年来,随着互联网的快速发展,越来越多的企业开始发展互联网业务,出现了各种各样的网站和web程序,互联网改变了人们的生活习惯与消费行为,人们也是越来越依赖网络,而这些改变让互联网产业得到更加迅速发展。…...

11.7加减计数器,可置位~,数字钟分秒,串转并,串累加转并,24位串并128,流水乘法器,一些乘法器
信号发生器 方波,就是一段时间内都输出相同的信号 锯齿波就是递增 三角波就是先增后减 加减计数器 当mode为1则加,Mode为0则减;只要为0就输出zero 这样会出问题,因为要求是十进制,但是这里并没有考虑到9之后怎么办&a…...
【模型推理优化学习笔记】CUDA加速矩阵乘计算
矩阵乘可以利用gpu多线程并行的特点进行加速计算,但是传统简单的方法需要多次读取数据到寄存器中,增加耗时,因此利用gpu的共享内存可以被一个block内的所有线程访问到的特性,结合tiling技术进行加速计算。 理论部分不解释了&#…...

第三届 “鹏城杯”(初赛)
第三届 “鹏城杯”(初赛) WEB Web-web1 反序列化tostring打Hack类 Payload:O%3A1%3A%22H%22%3A1%3A%7Bs%3A8%3A%22username%22%3BO%3A6%3A%22Hacker%22%3A2%3A%7Bs%3A11%3A%22%00Hacker%00exp%22%3BN%3Bs%3A11%3A%22%00Hacker%00cmd%22%3BN%3B%7D%7D…...
React Hooks为什么要在顶层使用?
为什么必须在函数顶层使用hooks? 使用过 hooks 的小伙伴应该都会发现,hooks只能在函数式组件的顶层使用,不能在循环,条件或嵌套函数中调用 Hook。 为什么呢? 查阅了很多答案,总结如下: hook…...

Vscode Vim自动切换
在VsCode里安装了Vim插件,由于Vim插件存在Normal和Insert两种模式,会需要经常性的按shift切换中英文,太过麻烦,本文介绍一下如何通过im-select来解决。 首先先确保自己的电脑里装有英文语言包,win10系统下可以使用Win…...
C语言初学1:详解#include <stdio.h>
一、概念 #include <stdio.h> 称为编译预处理命令,它在告诉C编译器在编译时包含stdio.h文件,如果在代码中,调用了这个头文件中的函数或者宏定义,则需引用该头文件。 二、作用 stdio.h是c语言中的标准输入输出的头文件&am…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...