K

Kenvix's Blog

一条业余写代码的咸鱼的博客

手动保留常用端口,解决 Windows 端口被 Hyper-V / WinNAT 占用的问题

对于 Windows 10 及 Windows 11,当启用 Hyper-V 或者虚拟机平台后,Windows NAT 服务会随机保留一些端口以便于提供 NAT (网络地址转换) 服务,以实现虚拟机的上网。这些端口范围是随机确定的,因此很容易导致开发时遇到端口占用问题。比如会遇到以下错误: Error: listen EADDRINUSE: address already in use :::3000 以一种访问权限不允许的方式做了一个访问套接字的尝试。 An attempt was made to access a socket in a way forbidden by its access permissions 除此以外,还可能会遇到明明服务启动成功但是却访问不了的问题,这也很有可能是因为端口被 WinNAT 给占了。 解决方案 网络上普遍建议重新设置一下「TCP 动态端口范围」(如文章 解决 Windows 10 端口被 Hyper-V 随机保留(占用)的问题 ),但是这种方法并不总是有效,因为你并不知道自己未来会即兴用到哪些端口,如果端口分的少了,又会导致其他问题,比如因为可用端口不够用而妨碍上网。 好在,Windows有一个很有趣的特性,就是用户可以 自行保留端口 给用户态程序使用。被用户保留的端口只能被用户态程序分配使用,却不能被内核驱动程序和服务使用。比如我设置保留 1080 端口后,Clash 这类普通用户态程序可以直接申请到这个端口,但是 IIS、WinNAT 等内核驱动程序和服务试图申请时却会被系统拒绝。这样一来,就可以避免端口被 WinNAT 占用的问题。

2024/6/3
articleCard.readMore

免Telent/TTL屏蔽运营商新版光猫的远控、TR069和RMS,获取动态随机超级管理员密码并固化权限

前言 在校园网、小区网等环境中,运营商的光猫通常会被 Technical Report - 069(TR069)和远程维护系统(RMS)远程管理,这些系统会在你不知情的情况下修改你的光猫配置,甚至会在你不知情的情况下重置你的光猫,导致你的网络配置失效,甚至设备全部失联。因此,屏蔽这些远程管理机制是非常有必要的。 然而,不幸地是,新版本的光猫早已修复了一切可以删除 TR069 和 RMS的漏洞,包括但不限于: 不可能通过面板直接删除 TR069 不可能通过 F12 或者改包、发包的方式变相删除 TR069 或修改接口的配置 RMS 的配置被写死,不可能通过修改配置文件的方式禁用或修改 RMS 没有任何漏洞或后门可以在不拆机的情况下打开 Telenet 甚至连拆机都不一定能的打开 Telenet,因为 uart_en=0 本文将介绍一种全新的思路:通过故意制造 IP 冲撞,使得 RMS 服务访问异常,从而达到光猫不能正常拉取远程配置的目的。本方法不仅可以防止配置被远程修改,还能防止局端修改你的光猫超级管理员密码,以实现权限的固化,以解决我在 V2EX 提出的这个问题。

2024/2/25
articleCard.readMore

利用Windows卷影副本(Volume Shadow)找回被覆盖和删除的数据

Windows默认启用的系统恢复机制会定期创建卷影副本,创建的时机通常为安装或卸载软件以及系统更新。卷影副本 (Volume Shadow) 实际上就是我们在 Linux 上经常提到的 “快照(Snapshot)”,它利用写时复制 (CoW) 机制为我们提供了文件系统在某个时间点的一个状态的视图。通过利用这个视图,我们可以找回近期不慎删除或被覆盖的数据,也可以用于某些电子取证场景。实际上,系统恢复就是利用快照机制还原文件到先前某个状态实现的。 注意: 由于卷影副本存在一个严重的bug, 该方法并不可靠!找回的文件数据可能不完整,或需要手动拼接。该方法仅供紧急情况或取证场景使用,切勿以此代替备份软件。 前提条件: 系统恢复未被禁用、文件系统为NTFS、存在可用的系统恢复还原点 利用软链接将卷影副本链接到常规磁盘分区下面,就可以访问这些过去时间点的文件系统视图了。

2024/1/4
articleCard.readMore

在Windows下实现WireGuard动态DNS解析(DDNS)的正确方法:避免无意义的开销

WireGuard 隧道一旦建立后,域名就不再重新解析了,一旦服务端的 IP 发生改变,这隧道就断了。 截止文章最后修订,WireGuard 官方始终没有提供 Windows 下的动态 DNS 解析(DDNS)客户端脚本,所以说你想实现,如果你想在 Windows 下使用 WireGuard 配合经常改变 IP 的域名,你就必须要自己写一个动态 DNS 解析脚本。 我基于网上的脚本进行了一番魔改,增加了以下特性: 只处理已启用的 WireGuard 隧道,没开的隧道不会处理 可以作为服务安装,自带延迟功能 增加各类判断条件和错误处理,以便纠错

2023/9/30
articleCard.readMore

OpenWRT/DNSMasq 配置DHCP静态路由主动推送 实现流量直达和旁路由流量零代价分载

背景 通常来说,如果我们划分了另一个网段,流量是需要通过网关来进行路由的。例如 LAN 网段为 172.20.0.0/24,然后我们在家庭 PVE 服务器上创建了一个用于虚拟机的 172.20.1.0/24 网段,其中 PVE 服务器的网卡的 IP 为 172.20.0.3 ,为了能够使得 LAN 的设备能直接访问虚拟机的 IP 段 172.20.1.0/24,就需要在网关设备上添加一个静态路由,指向 172.20.1.0/24,如下图。 诚然,这样做确实可以实现 LAN 的设备能直接访问虚拟机的 IP 段而不需要设置代理,但是这样做有一个缺点:所有访问虚拟机的流量都需要经过网关处理!这就导致了网关的 CPU 负载会变高,而且网关的网络带宽也会被内网访问虚拟机的流量占用。 注意到 PVE 服务器的网卡的 IP 为 172.20.0.3,和 LAN 位于同一网段,有没有什么办法可以直接让 LAN 的设备访问 172.20.1.0/24 段时,直接到达 172.20.0.3 而不要经过网关? 答案是有的,那就是静态路由主动推送。这个功能在 OpenWRT 上可以通过直接在 LUCI 上设置来实现,而在其他 Linux 发行版上可以通过修改 /etc/dnsmasq.conf 来实现。

2023/8/28
articleCard.readMore

解决 Windows 打开视频/图片文件夹很慢的问题

症状:打开视频/图片文件夹时,会卡在“正在加载”界面很久,或者直接卡死。此时打开任务管理器,观察到 explorer.exe 的 CPU 占用率很高,有一些磁盘占用。 一开始以为是我把视频和图片文件夹放到了 OneDrive 里,但是把文件夹移出 OneDrive 后问题依旧存在。后偶然观察到在库上打开此文件夹没有这种问题,遂怀疑到是否是因为 排序/分组 的原因。 解决方法:在文件夹中右键,选择“排序”->“无”,然后再选择“分组依据”->“无”,问题解决。 出现这种问题的根本原因是我们用了需要读取图片EXIF和视频文件本身来做排序的属性,Explorer 需要打开该目录下的所有文件(例如对于照片是寻找EXIF),找到需要的信息,然后做完排序才展示出来。而如果我们选择了“无”,则不需要读取文件本身,直接展示即可。 当然,这样的话分组就没了啊?所以有什么替代方案吗?答案是有的,出现这种问题的根本原因是我们用了需要读取图片EXIF和视频文件本身来做排序的属性,那用文件系统本身支持的属性来做排序就可以了。例如对于“日期”(这个日期是照片的EXIF的日期,需要读取文件),我们可以用“修改日期”来排序(这个修改日期是文件系统的文件写入时间),这样就不需要读取文件本身了。当然两者是不完全等价的,不过一般情况是一样的。

2023/6/15
articleCard.readMore

AltA2DP - 向支持Sony LDAC协议的耳机提供Windows下蓝牙LDAC音频编码器支持

特别注意:禁止任何形式的转载! 本驱动可以解决Windows屎一样的蓝牙音频编码器,向支持 Sony LDAC 协议的耳机提供Windows下蓝牙LDAC音频编码器支持。个人破解版本,非最新版本,反正功能没差。新版授权机制改了,但最近在赶论文,没时间研究,有兴趣的可以自己研究一下(反正又不是不能用嘛 🤣)。 注意: LDAC 对蓝牙信号要求比较高,比如我笔记本自带的蓝牙用 LDAC 990Kbps 能卡的六亲不认,可以买个外接 USB 蓝牙用。 打游戏时如果觉得 LDAC 导致延迟太高可以在它的面板里切换为 SBC 编码器。 由于修改后的驱动没有签名,使得大多数带有反作弊的竞技游戏都会拒绝启动(基本上,除了 CSGO 都没法玩)。有些游戏甚至在只是安装驱动但未加载的情况下也会拒绝启动(点名批评战地2042)。因此,有打竞技游戏的需求则不推荐使用任何破解版本。

2023/3/31
articleCard.readMore

(2024更新)修复黑群晖 DSM7.0 + Btrfs 存储空间/磁盘损毁/堪用 的问题

意外断电重启后,发现群晖提示硬盘损毁了,但是实际上硬盘还是正常的,S.M.A.R.T. 状态也良好,但是无法写入数据,系统状态报告为“严重”,群晖的程序也拒绝工作。 我们来先治标再治本。 治标:修复存储空间故障方法 通过 SSH 直接登录 root 账号。如果不方便直接登录 root,则执行: cd / sudo -i 对于虚拟机黑群晖如果SSH挂了也没事,开个管道模式的串口连接(例如 \\.\pipe\dsm),然后用Putty或者Xshell 以管理员身份运行 连上管道即可。 检查有问题的存储池,此时可以看到 sdc3 后面的 [E] 表示他现在是错误状态: cat /proc/mdstat

2023/3/3
articleCard.readMore

校园网白嫖思路分享:局域网中转-不花钱、不认证、高速上网

本文将分享一些校园网的白嫖思路(WireGuard / SoftEther VPN Server基于 UDP 53 端口的 VPN 三层白嫖、Socks 5 白嫖+科学上网二合一的四层白嫖),也就是不花一分钱就和一般用户一样使用校园网。 2023/2/23: 更新各平台配置NAT命令和L2TP方法,并根据先前在评论区的答复介绍可以直接放弃的一些不可行的思路 前提条件 下面列出的思路均要求使用一个校园网的服务器作为中转,因此,需要能够在不需要付费、认证后就能上网的网络环境(一般为办公区或实验室网络)下放一个电脑(树莓派也行);或者有任意学校服务器的使用权。 整体思路就是找个在学校里面地方搭个服务器中转流量 各种思路 基于 UDP 53 端口的 VPN 三层白嫖 原理:UDP 53 是 DNS 协议所用端口,由于门户(Portal)认证为了实现 HTTP 劫持跳转到登录页面,必须使得浏览器能够正常地进行 DNS 解析,因此在不认证、不付费的情况下也会放行 UDP 53 端口的流量。 特点:不需要校园网认证,不需要购买校园网,不需要校园网账号。此外由于 VPN 自带加密,因此可以克服开放 Wi-Fi 网络通信完全不加密的缺陷。 下面所列出的两个思路均是三层(IP)级的 VPN 方法,可以转发所有三层报文,因此支持 ICMP 协议(可以用ping)。 注意:使用 UDP 53 端口需要所在网络没有DNS劫持的问题,如果你所在的网络存在DNS劫持(例如,OpenWRT的DHCP/DNS下的”DNS重定向”功能就是DNS劫持),则该方法会失败。 实现思路1:WireGuard 我特别推荐此方案。WireGuard 是几乎无状态的VPN协议,切换网络零感知,不需要重新连接VPN,对于经常睡眠-唤醒的电脑特别有用。睡眠唤醒后可以立刻上网。此外 WireGuard 在 Linux 和 Windows 操作系统上均是纯内核态的实现,性能极其高。 方法:搭建一个 wireguard 服务端,然后端口监听在 53 上 搭建 Linux 服务端的教程很多,一键包也很多。但若要搭建 Windows 服务端,请一定要阅读我之前的这篇文章。 缺点:搭建确实有些复杂,另外配置文件对于不懂计算机网络的人来说实在是晦涩难懂

2023/2/23
articleCard.readMore

在 Windows 上配置网卡多个 VLAN、多个虚拟网卡、实现单线多拨网速叠加(无需驱动支持)

本文分为两节,分别是如何在 Windows 上利用 Hyper-V 交换机实现对 VLAN 的支持;以及如何利用 Hyper-V 交换机功能创建多块虚拟网卡,实现单线多拨叠加网速。可以只使用 Hyper-V 交换机而不使用 Hyper-V 虚拟机,所以这不会影响你电脑的性能。以上功能均不需要网卡驱动支持。 效果图: ℹ️ 使用 Hyper-V 功能需要 Windows 10 专业版 或以上版本,如果你使用的是家庭版,可以通过断网更改产品密钥、再通过KMS服务器激活的方式原地升级到专业版。

2022/9/23
articleCard.readMore

解决视频彩铃、语音通话自动转视频通话导致打电话自动挂断的问题

症状 使用Android手机向某些电话号码拨打电话时,由于运营商自动播放视频彩铃,导致电话自动转成视频通话,但由于某些bug,导致电话自动挂断,因而无法打出电话的问题 即:拨打电话,响铃几秒后,提示正在进行运营商视频通话,然后提示通话结束。对方能够听到短时间的响铃。

2022/7/22
articleCard.readMore

超低成本廉价考研教程:如何用小于¥500甚至¥300的开销考个研

在本科学历日渐贬值时代,读研基本成了一个日常话题,然而考研成本甚高,即使是不参与线下培训班、纯网课也往往需要花费万元以上。正好老早就有线下好友吐槽我博客技术文太多 哪有那么多啊,我真的从来都不写复杂技术的文章的啊,乘着手上的拟录取通知还热乎,今天就来分享分享如何用超低成本考研。 我的考研开销情况: 类目 花费(人民币/元) 备注 书本 249.65 126.41(13本书,pdd)+ 123.24(5本书,正版) 初试报名费 180 耗材(纸、笔等) 25 有优惠券那就买纸罢 网课 0 复试费 0 目标院校不收复试费,另外收费院校的复试通知被我鸽了 总计 454.65 这个开销可以更小,至少可以再少 100 生草的是,学信网上关于考研开销的调查表甚至没有这么低的选项。

2022/4/11
articleCard.readMore

在 Ubuntu 21.10 上启用蓝牙 LDAC/AAC/AptX 高质量音频编码支持

Ubuntu 21.10 已经默认 部分 安装了 PipeWire 并用于 WebRTC。我们只需要安装 PipeWire 所需的蓝牙音频编码器,并替代默认的 PulseAudio 声音系统即可自动启用 LDAC / AAC / AptX 支持。

2022/3/10
articleCard.readMore

在 VMware Workstation 桥接模式的网卡上让虚拟机使用 VLAN 的正确方法

要解决的问题 有一个虚拟机运行在 VMWare workstation 中,如何让这个虚拟机桥接到宿主机的网络上的某个 VLAN? 常见使用场景 只有一个网口的单臂软路由,同时宿主机为 Windows,虚拟机软件为 VMware Workstation,在虚拟机中运行 OpenWrt 需要在一个网口上,利用 VLAN 实现虚拟 WAN 口上的 PPPoE 拨号和 虚拟 LAN 口上的上网服务。 方法 根据宿主机网卡的品牌,下载对应的 VLAN 设置软件。已知 Realtek 和 Intel 网卡都提供这样的软件。Realtek 网卡的软件为 Realtek Ethernet Diagnostic Utility 下文以 Realtek 网卡为例。如果你的网卡厂商不提供 VLAN 设置软件,请直接转到文末 在宿主机上设置你想要使用的 VLAN 编号,软件将会创建一个虚拟网卡。记住网卡名称和适配器名称

2022/1/28
articleCard.readMore

在 Windows 上设置 NAT 或网络共享的正确方法——避免Wi-Fi热点无法使用

最近在我的笔记本上用 WireGuardServerForWindows 项目搭了一个 WireGuard 服务端,但是发现一个问题,我一给 WireGuard 开网络共享,我就没法开 Wi-Fi 热点了 罪魁祸首:SharedAccess 目前的NAT的普遍做法是用 SharedAccess 服务,也就是你在控制面板看到的那个 “Internet 连接共享” 但是这个服务是针对热点的设计的,只能支持一个 NAT 实例,这意味着,由于SharedAccess服务已经被wireguard服务器的NAT占用掉了,你就没办法建立一个有 Internet 的 Wi-Fi热点 但是,如果,使用New-NetNat命令,就能够设置许多NAT实例,同时可以用热点。 方法

2022/1/5
articleCard.readMore

自编译 红米 AC2100 OpenWRT R21.7.26

分享一下之前自行编译的路由器固件给有需要的人 一句话总结特点:锐捷 | 闭源驱动 | Wireguard | 组网 | NFS | 多拨 | 弱信号剔除

2021/8/6
articleCard.readMore

Linux 内核结构和子系统简介

本文是对 Anatomy of the Linux kernel

2021/2/17
articleCard.readMore

Java 快速读取文本 (算法竞赛适用)

背景: 远离 Scanner 今天无意翻阅 Scanner 类时,发现了一个很坑的地方: // 摘抄自 Scanner JDK15 源码 public final class Scanner implements Iterator<String>,

2020/10/31
articleCard.readMore

利用 ThreadLocal + Lambda,实现有状态变量的单例模式

通常情况下单例模式的对象不应该具有状态,然而现实是复杂的,总会有那么一些特殊情况下需要小小地【违例】一下。 动机 一个父类的方法执行前需要设置一个变量的值,变量值会对方法的执行结果产生影响。现希望子类以单例的方式继承父类。 以我实际遇到的一个问题为例,JOOQ 是一个 ORM 类库,这个类库能够自动扫描数据库并生成 DAO,但是自动生成的 DAO

2020/8/19
articleCard.readMore

状态压缩的动态规划问题:骨牌完全覆盖棋盘问题

这个算法问题对于算法菊苣们来讲不过是小菜一碟。发到博客主要是希望能够对未来拿到这个问题而毫无头绪的读者带来些许帮助。 这篇文章实际上是我的《算法分析与设计》课程的大作业,从 Word 粘贴到博客仅做了一些格式上的修改,因此文章风格会比较离谱(报告文档的风格),敬请谅解。

2020/7/1
articleCard.readMore

我的 Windows 10 2004 新增 Bug 解决办法记录

虚拟化相关 大量端口被无端保留,50000 以上高位端口无法分配 这是 Hyper-V 导致的,可以卸载 Hyper-V 平台解决它。 具体参考: Hyper-V和IDEA运行端口占用问题 Cannot bind to some ports due to permission denied Unable to bind ports: Docker-for-Windows & Hyper-V excluding but not using important port ranges 系统为每个网卡都创建一个 vEthernet 虚拟网卡 这是 Hyper-V 平台导致的,只要装了 Hyper-V 平台就会这样,暂时没找到关闭办法。 先卸载 Hyper-V 平台、沙盒、容器、虚拟机平台、虚拟机监控程序平台。 如果之后需要使用这些功能可以重启后再启用。 WSL 2 进入 shell 卡死 执行:wsl --shutdown 强制停止 WSL 后再试。 VMware Workstation 兼容性问题 升级最新的 15.5.5 可以兼容 Hyper-V 了。 VMware Workstation 15 频繁未响应 似乎是一个 Bug,当剪贴板有图片时进入虚拟机就会导致卡死。 关于这个,我在 VMWare 社区发了个帖子:Workstation and Player GUI freezed when host clipboard has image on Windows 10 其他软件 手心输入法字体渲染模糊 打开手心输入法的安装目录,对所有的 exe: 属性 -- 兼容性选项 -- 更改所有用户的设置 -- 更改高 DPI 设置 -- 高 DPI 缩放替代 -- 选择 “应用程序” 另外可以禁用掉手心输入法的开机启动,没有任何其他影响 网易云音乐升级成了 x86 转制版本 我保留了一份 网易云音乐 UWP 版 Appx Bundle 存档,可以在这里下载:kenvix/NeteaseMusicUWP 这个沙雕版本正好和 Windows 10 2004 同时发布,就写到一起了 OneDrive 一直在 “连接中” 如果你开启了系统代理,请排除以下地址: mobile.pipe.aria.microsoft.com login.windows.net 此外,如果你使用 OneDrive for Business 还需要排除掉你的 SharePoint 域名,例如 example-my.sharepoint.com

2020/6/6
articleCard.readMore

解决 Android Studio 及 IDEA 中 Gradle 错误信息乱码的问题

错误现象 如图所示,在 IDEA 2019.X 以及 Android Studio 3.6.X, Gradle 在编译项目过程中所有中文错误提示均乱码。

2020/3/5
articleCard.readMore

Kotlin 的那些骚操作

最近在学习 Kotlin 这门编程语言,不得不感叹 Kotlin 这语言是真的骚。 重载操作符 在伴生对象重载 invoke 操作符 interface BotUser { val id: Long val name: String val description: String companion object { operator fun invoke( id: Long, name: String = "", description: String = "" ): BotUser { return BotUserImpl(id, name, description) } } } class BotUserImpl(...) { ... } 如果你这样做的话,可以让接口或者抽象类仿佛看起来能够被实例化一样(看似调用“构造方法”,实际上是调用了 invoke() )。 用途:项目中途将某个类抽象为一个接口,并将原有类作为此接口的默认实现,这样可以做到源代码的兼容(对 Java 代码以及二进制仍不兼容,毕竟本质不同)。 代码来自我的项目 “MoeCraftBotNG” 其他操作符重载 一般可以重载 get() set() 来使对象能够按数组、字典一样去操作。 为对象编写 contains() 方法时(判断某个元素是否“属于”此对象),可以顺便为此方法加个 operator 关键字可以让 in 关键字支持这个对象 然而操作符重载还是慎用为妙,众所周知这个特性就是被 C++ 玩坏的,当你 java 甚至以不支持操作符重载为荣。好在 Kotlin 在这方面也比较节制。 协程 如果想让你的 suspend 函数被 Java 用户友善地调用,防止你被人砍,你可以: 用 Kotlin 编写一个类: class Coroutines { /** * 获取在 Java 代码中调用 Kotlin Suspend 函数所需的最后一个参数 (Continuation) * @param onFinished 当suspend函数执行完毕后所调用的回调。若 Throwable 不为 null 则说明执行失败。否则为执行成功 * @param dispatcher 协程执行线程的类型。可以为 Dispatchers.Default(CPU密集型) Dispatchers.Main(主线程) Dispatchers.IO(IO密集型) */ @JvmOverloads fun <R> getContinuation(onFinished: BiConsumer<R?, Throwable?>, dispatcher: CoroutineDispatcher = Default): Continuation<R> { return object : Continuation<R> { override val context: CoroutineContext get() = dispatcher override fun resumeWith(result: Result<R>) { //注意 Result 是 inline class,不可直接给出去 onFinished.accept(result.getOrNull(), result.exceptionOrNull()) } } } } kotlin suspend 函数的调用难点在于最后一个参数,这个参数是 suspend 函数自动生成的,但是在 Java 方面处理起来却十分棘手。你可以提供这样的一个类来生成最后一个参数的值。 然后在 Java 中,就可以这样调用了: Coroutines coroutines = new Coroutines(); //假设一个 suspend fun login(username: String, password: String): RequestResult,位于 object UserUtils UserUtils.INSTANCE.login("user", "pass", coroutines.getContinuation( (result, throwable) -> { //suspend fun执行结束的回调 System.out.println("Coroutines finished"); System.out.println("Result: " + result); System.out.println("Exception: " + throwable); } ) ); 另外,也可以使用 org.jetbrains.kotlinx:kotlinx-coroutines-jdk8,这个库可以让 suspend fun 返回 CompletableFuture<> 以便在 java 使用 fun doSomethingAsync(): CompletableFuture<List<MyClass>> = GlobalScope.future { doSomething() } //返回 CompletableFuture 包装的 suspend fun doSomething() 内置函数 Kotlin 有很多实用的内置函数,只提几个。 run() run() 字面意思,用于执行一个任意代码块,并返回代码块的返回值 run() 有两种,签名如下: public inline fun <R> run(block: () -> R): R public inline fun <T, R> T.run(block: T.() -> R): R 第一种 run() 在为构造函数委托传递参数时特别有用,例如有一个类和两个次构造函数 class ManagedJavaProperties(val inputStream: InputStream, val outputStream: OutputStream? = null) { constructor(file: File): this(file.inputStream(), file.outputStream()) constructor(fileName: String): this(???) //需要进行处理才能委托给其他构造函数 } 第二个次构造函数中需要对 fileName 进行一些处理,此时需要 run() 登场了: class ... { constructor(fileName: String): this( kotlin.run { val file = File(fileName) if (!file.exists()) { file.createNewFile() } file } ) } 第二种 run() 则是将调用者当作 this 传递给 lambda,除此之外和第一种完全相同 run() 也可以用于防止代码块内变量污染当前作用域。(类似于 Java 的 { } ) 抑制错误 Kotlin 的 @Suppress 注解不仅可以抑制警告,还可以抑制任何错误。具体的错误名字可以到 kotlin 编译器项目按错误提示寻找。

2019/12/13
articleCard.readMore

在普通的 Gradle Java/Kotlin 项目中使用 BuildConfig

简介 Android Studio 为其 Android 项目提供了十分方便的 BuildConfig 功能,该功能在运行编译时自动生成 BuildConfig.java 文件,其中储存了编译时的一些系统信息(如APP版本号、渠道、编译时间、编译器等),并可以用于条件编译。 所幸,有人已经仿照出了具有类似功能的 Gradle

2019/8/20
articleCard.readMore

修复国行 MIUI 打开 Google Play 始终提示 DF-DFERH-01 的问题

问题描述 自带 Google 服务框架的国行 MIUI,即使设置全局代理,打开 Google Play 仍然提示 DF-DFERH-01. 反复对 Play Store/Service 清除数据、插拔 SIM 卡均无效。在其他第三方 ROM 上 Play 正常使用。 使用 adb logcat 查看日志,捕获到下列错误: <img

2019/6/7
articleCard.readMore

解决 VSCode 持续调用 WMIC 导致一个 CPU 核心完全被占满的问题

问题描述 只要启动 VSCode,无论是否有负载,VSCode 都会不停地调用 WMIC.exe ,WMIC.exe 完全占满一个 CPU 核心,导致 CPU 温度很高。 <a href="#解决办法" class="headerlink"

2019/2/15
articleCard.readMore

扔鸡蛋问题

菜鸡第一次看算法题,这篇笔记还是不要看比较好

2019/2/14
articleCard.readMore

计算机幻觉从入门到入土

[NOTICE] 本文仅为一篇我个人学习笔记,不适合作为其他人的学习引导。 因为博主写这篇笔记就是这个状态 ↓ ↑ 为此专门查了怎么用more标签隐藏文章内容

2019/2/10
articleCard.readMore

Java 注解预处理 Annotation Processing & 代码生成

关于 Java 的注解预处理的资料实在是过于稀少,连stackoverflow上都没多少人研究,以致于我这个萌新在尝试使用注解预处理来生成代码时踩了不少坑,正好博客也快长草了,遂决定留一篇文章,希望能够对后来者有所帮助。 本文章同时对一般 Java 项目和 Android 项目适用。 为何使用 Java

2019/2/2
articleCard.readMore

Ubuntu 上通过以太网分享网络连接(NAT)

Ubuntu 自带网络分享功能,但该功能很不稳定,往往断开连接后再连就无法使用了。 现在我们使用 DNSMASQ+IPTables 手动配置NAT. 禁用 systemd-resolved Ubuntu 提供的 systemd-resolved 抢占53端口,首先禁用它。

2019/1/3
articleCard.readMore

Windows 选择指定的网卡来开承载网络型热点

Windows 10 自带的移动热点比较废,只允许带8个设备,并且在断网后自动关闭,不能满足需求。 而通过 netsh 创建的 Microsoft 承载网络虽好,但却不支持选择用于创建热点的网卡。 本文介绍的玄学方法可以让用户做到自己选择网卡开 Microsoft 承载网络 热点。 打开 网络和 Internet 设置 更改适配器选项 选择你希望使用的网卡,重命名 起个字母排序在你不想使用的网卡的名字之前的名字,例如

2018/11/3
articleCard.readMore

修复升级 Windows10 版本后所有内置应用闪退+第三方应用参数错误的问题

昨天把Windows10升级到1809后所有应用都挂了,应用商店和内置应用闪退,常用的应用参数错误,连WSL都出问题了。容我先亲切问候一下微软 :) 修复内置应用闪退、应用商店打不开 这里有 <a

2018/10/5
articleCard.readMore

配置用于 Gradle + SQLite 的 jOOQ 3.11 代码自动生成 (已过期)

敬告:这篇文章已经过期,不适用于最新版的 JOOQ,也不支持 Java11+ 和 Gradle 6.x,关于最新版的 JOOQ 使用说明,点击此处请阅读我的新文章 <a href="#为什么要写这篇文章" class="headerlink"

2018/10/4
articleCard.readMore

配置用于 Gradle6.x + MySQL 8 的 jOOQ 3.14 代码自动生成 (已更新)

为什么要写这篇文章 之前介绍了一下在旧版Gradle、SQLite上配置JOOQ,不过那篇文章实在是太旧了,在新版Gradle上已无法使用,也不兼容Java11。 关于如何配置用于 Gradle + M 的 jOOQ 3.11

2018/10/4
articleCard.readMore

修复 Windows 环境下的程序访问 WSL 中的 MySQL 提示 Access Denied 的问题

症状 Windows 10 版本 1803 + Ubuntu 18.04 位于 Windows 下的程序(例如Navicat)连接 MySQL 提示 Access Denied 同样位于 WSL 的程序可以正常访问 MySQL 原因 MySQL 把 Windows

2018/8/31
articleCard.readMore

修复 WSL 下 PHP+FastCGI 卡死的问题

症状 Windows 10 版本 1803 + Ubuntu 18.04 以 Nginx 服务端为例,访问多数 PHP 文件,PHP 会直接卡死。 访问那些极其简单的 PHP 文件 (例如Hello world, phpinfo()) 虽然可以加载出来但浏览器显示网页仍未加载完全。 <a href="#原因" class="headerlink"

2018/8/31
articleCard.readMore

使用任意磁盘或路径保存 Windows 文件历史记录

不知为何,博主的 Windows 不允许使用本机的机械硬盘保存文件历史记录,这大概又是一个秘制bug吧。 无论是 Windows7 的备份还是 Windows10 的文件历史记录,它们都允许用户选择网络位置保存数据,于是我们就可以这样操作: \\localhost\X$\Path 该路径表示本机 X: 盘的 Path

2018/8/30
articleCard.readMore

[1.12.2+Mod] MoeCraft :: 自由开放的科技向公益 Mod 服务器

特色&概述 MoeCraft 创立于 2016 年六月,是一个非盈利的、旨在为热爱 MC 的玩家创造最优环境的公益 Minecraft

2018/8/11
articleCard.readMore

2018/8/2
articleCard.readMore

禁用使用Intel核显的Windows笔记本自动调节亮度功能

Intel 核显自带一个“节电功能”,它的工作原理: 比如你设置的100%的亮度,放着一张白的图片,那么屏幕只能100%亮度显示。但是如果是50%灰的图片呢,我只要50%亮度显示纯白就行了诶。如果整个屏幕最亮的颜色只有10%,那就干脆把亮度降到10%来省电好了,然而对于电影这种明暗变化较快的没优化好,导致体验较差。 来源: <a href="https://www.zhihu.com/question/25522457/answer/100757369" target="_blank"

2018/7/27
articleCard.readMore

真正实现Minecraft高级登录(外置登录)的几种方案

通常把Minecraft服务器的登录方式分为高级登录(外置登录)和内置登录。高级登录的特点是用户的登录操作在启动器完成,启动器传递token给Minecraft客户端,客户端在加入服务器时直接将token传递给服务端完成身份验证。正版Minecraft登录就是典型的外置登录。而一般的非正版服务器(online-mode=false)则是身份验证仅在用户加入游戏后通过聊天框输入密码完成认证,此时用户已经加入了游戏,仅仅靠登录插件来限制用户进行其他操作。 而内置登录往往存在下列问题:

2018/7/21
articleCard.readMore

谈谈神舟的两艘贼船,Z7M-KP7S1 / Z7M-KP7SC

先放张蓝天的N85xEJ1模具的感人的拆机图镇楼 没错!这感天动地的单铜管散热!压 1050Ti + i7!我大神船的头就是这么铁! <a href="#厉害了,我的船" class="headerlink"

2018/7/15
articleCard.readMore

USBCopyer: 插上U盘自动按需复制文件

注:本文介绍的是带来巨量更新的USBCopyer V5 USBCopyer:

2018/6/22
articleCard.readMore

USBCopyer 回调功能详细说明

“回调” 是 USBCopyer V5.0 新引入的一个概念,它用于在 USBCopyer 执行特定操作时触发用户指定的代码或程序,以便实现某种高级的、程序没有提供的功能。 基本使用方法: 在USBCopyer设置打开回调的开关 打开USBCopyer所在目录下的 USBCopyer\USBCopyerSystem

2018/6/22
articleCard.readMore

C# 实现自定义"应用程序设置"的配置文件(user.config)存储路径

关于“应用程序设置”: 前往MSDN查看 默认提供的 SettingsProvider 不允许我们修改应用程序设置的配置文件的路径,这就导致了以下问题: 设置保存在了 %appdata% 目录下,使应用程序不够绿色化 当用户把程序拷贝到其他电脑上时,设置将丢失 当用户升级程序时,设置将丢失(自带的 Upgrade() 过于复杂) 要解决上述问题,就需要由我们自己来定义在哪里存储应用程序设置 MSDN给出的方法是:自己实现一个 SettingsProvider

2018/6/21
articleCard.readMore

Win10 资源管理器为所有格式激活“编辑”按钮并修改文本文件“编辑”按钮的编辑器

默认情况下,Windows 10 资源管理器的功能区对绝大多数文本格式的不可用的,即使能够使用(例如 .js .cpp .txt

2018/6/14
articleCard.readMore

留言板

这是一个留言板,它什么都不做 联系方式 邮箱: kenvixzure@live.com 社交平台:<a href="https://github.com/kenvix"

2018/2/17
articleCard.readMore

又一次 Hello world

是的我又回来了蛤铪蛤铪蛤铪蛤铪蛤铪 (假装笑得很开心)

2018/2/16
articleCard.readMore

Java 学习笔记 (仍在更新)

内容过多,放到内页显示

2017/11/7
articleCard.readMore

在Win10 Pro下挂载NFS(网络文件系统)

注意:Win10 Creators Update前只有Win10企业版可以挂载NFS, Creators Update后专业版也可挂载NFS了。此外,Windows 不支持挂载 NFSv4。   安装 按Win+R输入OptionalFeatures,勾选”NFS服务” 不需要勾选“管理工具”,那玩意是个废物,非WinServer只能靠命令行挂载NFS。 装好后按Win+R输入cmd

2017/6/24
articleCard.readMore

Nginx 反向代理 Aria2 JSONRPC

给Aria2服务器所用的SSL证书往往不支持Aria2所使用的6800端口,而80/443端口还要提供HTTP服务,为此就需要用Nginx来实现同时提供HTTP和Aria2 JSONRPC服务了。 目前已经测试通过并部署到了生产服务器,本文只做一个记录。 最终效果:

2017/5/13
articleCard.readMore

(Android6.0~9.0) 清除锁屏密码

如果手机已经Root并且开了ADB调试并且以前授权过要连接的电脑,则直接连该电脑即可。 如果手机未Root但刷入了TWRP或CWM等Recovery,则需要重启后进recovery,然后连电脑。 然后运行以下命令即可: adb shell rm /data/system/gallery_private.key rm /data/system/gatekeeper.password.key rm

2017/4/25
articleCard.readMore

WordPress 更换站点地址后批量修改文章/评论中的旧地址

仅作记录,不建议使用。 运行以下代码即可: 前一个地址是要替换的旧地址 后一个地址是新地址

2017/4/23
articleCard.readMore

修复一加3/3T因固件过老导致刷入ROM时提示错误7的问题

博主在刷入Oneplus3 H2OS Openbeta 7后再刷LineageOS遇到了“Comparing TZ version TZ.BF.X.X-X.X.XXXX to TZ.BF.X.X-X.X.XXXX assert failed”报错 原因是当前手机固件版本过低或过高,第三方ROM不兼容。 我们知道,原厂ROM刷机包一般都会带有完整的固件,位于刷机包内 firmware-update 文件夹,可以直接提取这里面的固件,然后使用 fastboot flash 分区名 固件路径,其中分区名就是你看到的文件名再去掉扩展名 于是博主准备使用fastboot刷入固件,但又遇到了以下报错: fastboot flash tz tz.mbn target reported max download size of 440401920 bytes sending ‘tz’ (1628 KB)… OKAY [ 0.080s] writing ‘tz’… FAILED (remote: Partition flashing is not allowed) finished. total time: 0.118s (心情复杂.jpg) 然后博主突然想到recovery也可以刷入固件,抱着试一试的心态,做了一个固件刷机包   wow! 真的成功了哎,现在可以刷LineageOS了

2017/3/11
articleCard.readMore

修复Android DM-Verity 警告

刷入某些ROM可能导致手机在引导时弹出DM-Verity警告,警告内容为 The dm-verity is not started in enforcing mode …. 修复方法:重开DM-Verity然后再禁用。 <span style="color:

2017/3/4
articleCard.readMore

贴吧云签到 资源索引(下载|文档|插件)

贴吧云签到在Git@OSC和Github均有仓库,任选(国内推荐Git@OSC)。 云签到主程序 Git@OSC <a

2016/5/8
articleCard.readMore

继续监控!使用树莓派+Motion实现实时视频监控并通过浏览器查看

之前我们已经实现了使用树莓派实现定时拍照监控并发送邮件到邮箱,但是定时拍照有两个缺点: 1.拍照每5min才进行一次,这中间会错过很多东西;提高拍照频率又会占用太多存储空间 2.不具有即时性。有时候你想查看这个时候的监控,却得等一小时后才能看,因为邮件还没发送。 所以我们还需要视频监控 首先确保手上有下列东西: 1.树莓派(以下简称RPI)一个 2.一个USB免驱摄像头,支持YUY2或者JPEG均可(JPEG最佳)。RPICamera没试过 博主的配置: RPI3b 一个废弃的YUY2摄像头

2016/4/30
articleCard.readMore

自动获取Pixiv每日排行榜第一张图片(600x600 | 可用于博客背景图)

代码来自@mokeyjay的 Pixiv每日排行榜Top50小部件,本人做了一些修改来专用于输出第一张图片的完整图片(也可以输出其他的图片) 可用于获取Pixiv每日排行榜第一张图片并直接输出,比如作为博客背景图像(配合高斯模糊食用效果最佳) 食用方法:(两种任选) 第一种:直接把图片路径指向这个php文件 第二种:图片路径指向保存文件路径(默认为pixiv.jpg),然后挂个计划任务每天自动调用pixiv.php来刷新图片 以下是代码:【建议保存为pixiv.php】

2016/4/28
articleCard.readMore

使用树莓派实现定时拍照监控并发送邮件到邮箱

首先确保手上有下列东西: 1.树莓派(以下简称RPI)一个 2.一个USB免驱摄像头,支持YUY2或者JPEG均可(JPEG最佳)。RPICamera没试过 3.一个支持SMTP的邮箱 博主的配置:RPI3b 一个废弃的YUY2摄像头 QQ邮箱 那么,开工吧!

2016/4/23
articleCard.readMore

好压 V2.7 Beta1 绿色版——功能强大,良心的压缩软件

注:本文所讲的是瑞创网络的好压,并非现在的毒瘤2345好压 以下是官方介绍: 好压压缩软件(HaoZip)是完全免费的新一代压缩软件。好压软件功能包括强力压缩、分卷、加密、自解压,相比其它压缩软件系统资源占用更少,压缩率比较高。 LZ大概从10年就开始使用好压了,功能强大,界面美观,确实是当年的业界良心 可惜现在的好压已经彻底成了毒瘤,毕竟从了2345,哈哈。 本文所推荐是12年发布的V2.7 Beta1版本 该版本虽然在标题有丑陋的“2345”标识,但是并没有任何流氓行为,也没有流氓按钮,可以放心使用 之所以推荐V2.7而不是早期版本,是因为这个版本的支持压缩很多格式(包括RAR),而且UI相当完善 详细说明请戳这里(百度百科)

2016/3/26
articleCard.readMore

任意语言实现读取压缩包注释

前言:用记事本打开压缩包有惊喜。。 首先需要了解一下什么是压缩包注释,为什么要使用压缩包注释 压缩包注释 本质类似RAR+JPG(知乎),就是在压缩包后面追加一堆文本 这些文本就是注释了 由此可见,压缩包注释并不是一种规范,但是大多数压缩软件在生成压缩包的时候都可以携带注释 为什么使用压缩包注释 1.注释本体不会被压缩,可以直接读取 2.压缩软件可以查看和生成注释,生成注释很方便(推荐一下好压2.7老版,挺良心的) 3.使用注释不会影响压缩的文件

2016/3/5
articleCard.readMore

自己实现QQ群自定义分享(管理员开启了群交易?)

不依赖任何第三方网站,自己动手实现自定义的分享 比如管理员已开启群交易

2016/2/28
articleCard.readMore

MoeCDN - 加速Gravatar/GoogleAPIs等无法在国内访问的资源

2016-2-23 新增PHP通用版本(只需一次include) 这大概是我重建博客后第一次发布作品吧。。 目前该插件支持三种博客系统: Wordpress-由Balthild Ires 维护 Typecho -由Kirainmoe 维护 Emlog及PHP通用版 -由Kenvix(博主)维护 (所以说emlog/通用版才是我的作品,请勿在意第一句) 回到重点,什么是MoeCDN? MoeCDN MoeNet Public libraries CDN plugin 我们提供各项加速服务. CDN服务器由 Andy1999 维护 免费Gravatar 头像加速 将gravatar.com的原有域名,直接指向gravatar.moefont.com即可 如果需要HTTPS支持,请使用gravatar-ssl.moefont.com ,非HTTPS站点请勿使用 免费GoogleApis 加速 使用谷歌公共库可以加快网页加载速度,但是,众所周知的原因,在中国您不能享受这一点 但是现在,您只需替换googleapis.com为cdn.moefont.com即可享受这一切 例如: fonts.googleapis.com -> cdn.moefont.com/fonts ajax.googleapis.com -> cdn.moefont.com/ajax

2016/2/23
articleCard.readMore

[Minecraft] WebLogin-连接到你的服务器来检查玩家是否可以登录

这是什么 当玩家尝试连接到服务器时,插件会自动向你填写的服务器POST数据 当服务器返回特定消息的时候,允许或者拒绝玩家登录(默认消息为<[AccessOK]>,其他消息将作为踢出玩家所显示的信息) 1.7.10以下版本未测试,如果能用的话请告知。已测试1.12.2 灵感来源于Beelogin,向其作者致谢 它有什么优势 1.更安全 比起传统的CrazyLogin之类的进游戏后再登录的插件,他更安全 众所周知,CL无法拦截MOD发送的数据包,比如NEI(没登录也能修改世界时间之类的) 2.更开放 WebLogin只是个服务端,一切验证行为都由目标网页端完成,WebLogin几乎不参与交互 比如MoeCraft设计的“按一下按钮登录” 3.功能强大 它会向服务端提交 玩家名称,IP,UUID,时间 信息 支持密码验证 支持自定义消息(支持显示网页端给出的消息) 当网页端服务器宕机时,可以设置是否允许玩家直接登录(此时可以使用Crazylogin等传统插件)

2016/2/1
articleCard.readMore

Android卡刷包提示This package is for device: ... this device is ...的解决方案

本人用的是mi4,刷入秋叶随风的合并分区包以后再刷6.0的包提示“This package is for device: cancro this device is .” 看样子是不认设备了,就想到了直接从脚本里面干掉这个检测 [这里是一张该问题的截图,然而博主在将博客从WP人工迁移到Hexo时找不到了]

2016/1/31
articleCard.readMore

欢迎使用WordPress。这不是您的第一篇文章。编辑或删除它,然后开始写作吧!

2015/11/22
articleCard.readMore

给EMLOG评论框加上复选框[√]防止垃圾评论

注:本文章撰写于2013-03-05,考虑到部分博客仍然在使用这种方法,故于2018-07-31人力导入。 我不推荐在AI技术已经如此发达的今天继续使用这种方法防御垃圾评论。 这是打√的验证机制,打√至少比原生的验证码方便,比滑动条减少文件加载。只要能防住机器刷评论就行。手工垃圾评论不怕。现在把方法无偿分享出来,供各位有需要的emer使用。

2013/3/5
articleCard.readMore

欢迎使用emlog

从今天起,做一个幸福的人。

2008/4/25
articleCard.readMore