普通视图

发现新文章,点击刷新页面。
昨天以前只是玩玩

天然气热水器国补下单

2025年4月26日 18:08

Photo by Risa / Unsplash

前些日子家电国补线上线下宣传的如火如荼,但是一直觉得国补这个东西好像我占不到啥便宜,因为我暂时没有任何更换家电、手机的想法。

但是老天爷似乎都要推波助澜让我去凑凑热闹——家里的电热水器忽然坏了。

是的,但是其实也并不意外,这台和这个我们家房子同样年纪的万和热水器服役已经十多年了,其实也就这两年开始慢慢有些小毛病,这个时候即便坏了我也不觉得意外。

其实也叫不上坏,热水器的错误码为E1,是点火器故障,去年还是前年开始就出现过几次,我拆开打磨了一下点火器的头子后其实就好了。不过我妈说干脆让这个老家伙退役算了,修来修去的也麻烦。

线上的热水器品牌五花八门,如海尔、美的、万和、樱花等等。不过价格在一片绿色国补到手价的标签下显的尤其划算。16L带增压、水伺服的一级能耗的机器线上基本上只要1100-1300左右,二级能耗就更低了,基本都在1000以下。

我也去线下的实体店看了一下,因为保护线下市场的缘故,线上线下基本上不会售卖同型号的机器,不过同配置参数线下始终要贵个几百,毕竟像是京东、淘宝这种平台还有平台优惠不是。

而且线下不卖一级能耗的产品,不知道为啥。

刚开始的时候我选的美的、海尔的牌子,后来我妈提醒让我看看万和,这才了解到万和才是国内专业做热水器的,而且我们之前那个台服役十多年的热水器也是万和,后来安装的师傅也认同了这个看法。

我最后选的是万和的F9DMAX ,各种优叠加下来价格如下,性价比相当高,国补真的没毛病。👍

  • 商品总价:¥2199.00
  • 运费:+ ¥0.00
  • 商品优惠:- ¥110.00
  • PLUS专享立减:- ¥8.80
  • 以旧换新:- ¥130.00
  • 国家补贴:- ¥390.04
  • 实付款:¥1560.16

产品主要参数如下。

  • 16L水量
  • 国家一级能效
  • 水伺服
  • 下置风机
  • TSI 210% 增压
  • 8年质保

其中我体验下来,各项参数参考的优先级为,排前的我认为重要性更高:

  1. 质保:热水器强制报废是8年,现在几乎都是8年质保了,不过也有5年的。
  2. 能效:国家一级能效每年能比二级的少个1000块左右,我感觉还是相当重要,就是会产生冷凝水,需要有排水的地方,但是这个水量很小,我没观察过,但是估计和空调差不多把。
  3. 水量:我们家之前那台是13L的,有两个地方同时用水时,水量会变的非常小,十分影响体现。
  4. 水伺服:这个其实就是控制水温的,保证多地同时用水时的水温恒定,之前那台没有这个功能,经常厨房用水后洗澡水温度会忽然变凉,很不爽。
  5. 下置风机:相比于上置,下置风机因为做了密封,噪音真的小了非常多,以前那台上置的一开,我在卧室都能听到动静,现在站在旁边都不容易发觉,还得用眼睛看热水器面板。
  6. 增压:之前想着带这个增压会不会让多个地方用水的时候水量变大,其实不会,这个因为热水管、烧水量只有那么大,同时经过的热水是恒定的,不会有非常明显的变化,复式楼层可能感知会明显很多。

最后,还要注意上门安装的费用,一般情况下安装人员上门安装是不收费用的,但是他们只会免去箱子内所有材料的费用(毕竟那是你已经花钱买了的),如果需要使用额外的材料是需要另外付费的,但是一般品牌放会明码标价。

我这次因为是替换旧机,原有管路什么都是现成的,没有用他们的任何材料,所以师傅上门安装好后就能直接使用,也没做任何推销和歪心思,没出任何费用,体验还是相当不错的。

我们家的情况师傅说如果冷热水管安排到位,其余材料用他们的费用也只会在100多一点,也不算太贵。

另附我这次整理的热水器型号清单。

长毛象新通知推送TGBot

2025年4月21日 12:35

其实蜗牛哥之前开发过一个Chrome扩展,可以在浏览器里显示一个图标和通知数量。但是我电脑上现在Chrome一打开十几个进程,我实在不想再新增扩展了。

所以这两天用Deepseek糊了一个搭配Cloudflare推送到TGBot的Worker脚本,效果如截图。设置好长毛象和TGBot的设置后,程序会每5分钟检测一次有没有新通知,有的话才进行推送操作。

准备KV

先添加一个KV,名称 KV_STORE ,备用。

准备长毛象TOken

获取长毛象Access Token,不放心的话在权限部分可以单独只设置通知获取权限

  1. 登录你的 Mastodon 实例(如 https://mastodon.social)。
  2. 进入 "Preferences(偏好设置) > Development(开发)(或直接访问 https:///settings/applications)。
  3. 点击 "New Application(新建应用):
    1. Application Name(应用名称):填写你的应用名称(如 MyBot)。
    2. Website(网站)(可选):填写你的应用网站(如果没有可留空)。
    3. Scopes(权限):选择你需要的 API 权限(如 read、write、follow 等)。
  4. 点击 "Submit(提交),系统会生成:
    1. Client Key(客户端 ID)
    2. Client Secret(客户端密钥)
    3. Access Token(访问令牌)(可直接使用)

准备Cloudflare Worker

再添加一个Worker,代码如下,并修改代码中的 config 部分的配置为你自己的设置,其中长毛象token

// 配置部分
const config = {
  // Mastodon 配置
  mastodon: {
    instance: 'https://your-instance.social', // 替换为你的 Mastodon 实例地址
    accessToken: 'ZTDJN2ZMZMZI5MTU1MZHH',  // 替换为你的 Mastodon 访问令牌
    lastNotificationIdKey: 'last_notification_id' // KV 存储中保存最后通知ID的键名
  },
  
  // Telegram 配置
  telegram: {
    botToken: 'your-bot-token', // 替换为你的 Telegram Bot Token
    chatId: 'your-tg-chart-id'               // 替换为接收消息的聊天ID
  },
  
  // 检查间隔(分钟)
  checkInterval: 5
};

// 主处理函数
export default {
  async scheduled(event, env, ctx) {
    // 执行检查通知任务
    await checkNotifications(env);
  },
  
  async fetch(request, env) {
    // 手动触发检查
    if (new URL(request.url).pathname === '/check') {
      await checkNotifications(env);
      return new Response('Notification check triggered');
    }
    
    return new Response('Not found', { status: 404 });
  }
};

// 检查未读通知
async function checkNotifications(env) {
  try {
    // 获取上次处理的通知ID
    let lastNotificationId = await env.KV_STORE.get(config.mastodon.lastNotificationIdKey);
    lastNotificationId = lastNotificationId || '0';
    
    // 获取新通知
    const notifications = await fetchMastodonNotifications(lastNotificationId);
    
    if (notifications.length > 0) {
      // 有新通知,发送到 Telegram
      await sendToTelegram(notifications, env);
      
      // 更新最后处理的通知ID
      const latestId = notifications[0].id;
      await env.KV_STORE.put(config.mastodon.lastNotificationIdKey, latestId);
      
      console.log(`Sent ${notifications.length} new notifications to Telegram. Latest ID: ${latestId}`);
    } else {
      console.log('No new notifications.');
    }
  } catch (error) {
    console.error('Error checking notifications:', error);
  }
}

// 从 Mastodon 获取通知
async function fetchMastodonNotifications(sinceId) {
  const url = new URL(`${config.mastodon.instance}/api/v1/notifications`);
  url.searchParams.append('exclude_types[]', 'follow');
  url.searchParams.append('exclude_types[]', 'follow_request');
  url.searchParams.append('since_id', sinceId);
  
  const response = await fetch(url.toString(), {
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
      'Authorization': `Bearer ${config.mastodon.accessToken}`
    }
  });
  
  if (!response.ok) {
    throw new Error(`Mastodon API error: ${response.status} ${response.statusText}`);
  }
  
  return await response.json();
}

// 发送通知到 Telegram
async function sendToTelegram(notifications, env) {
  // 按时间倒序排列通知
  notifications.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
  
  let message = `📨 你有 ${notifications.length} 条新通知:\n\n`;
  
  notifications.forEach(notification => {
    const sender = notification.account; // 通知发起者
    const senderName = sender.display_name || sender.username;
    const senderHandle = `@${sender.acct}`;
    const senderUrl = sender.url;
    
    // 根据不同通知类型构建不同消息
    switch(notification.type) {
      case 'mention':
        const mentionContent = stripHTML(notification.status.content);
        message += `💬 <b>${senderName}</b> (${senderHandle}) 提到了你:\n${mentionContent}\n\n`;
        break;
        
      case 'reply':
        const replyContent = stripHTML(notification.status.content);
        message += `↩️ <b>${senderName}</b> (${senderHandle}) 回复了你:\n${replyContent}\n\n`;
        break;
        
      case 'reblog':
        const reblogContent = notification.status 
          ? stripHTML(notification.status.content) 
          : "[内容不可用]";
        message += `🔁 <b>${senderName}</b> (${senderHandle}) 转发了你的嘟文:\n${reblogContent}\n\n`;
        break;
        
      case 'favourite':
        const favContent = notification.status 
          ? stripHTML(notification.status.content) 
          : "[内容不可用]";
        message += `⭐ <b>${senderName}</b> (${senderHandle}) 喜欢了你的嘟文:\n${favContent}\n\n`;
        break;
        
      case 'poll':
        message += `📊 <b>${senderName}</b> (${senderHandle}) 的投票已结束\n`;
        break;
        
      case 'follow':
        message += `👤 <b>${senderName}</b> (${senderHandle}) 关注了你\n`;
        break;
        
      case 'follow_request':
        message += `🫂 <b>${senderName}</b> (${senderHandle}) 请求关注你\n`;
        break;
        
      default:
        message += `ℹ️ 你有一条新通知 (${notification.type}) 来自 <b>${senderName}</b>\n`;
    }
  });
  
  // 添加来源链接
  message += `\n查看所有通知: ${config.mastodon.instance}/notifications`;
  
  // 发送到 Telegram
  const url = `https://api.telegram.org/bot${config.telegram.botToken}/sendMessage`;
  
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      chat_id: config.telegram.chatId,
      text: message,
      disable_web_page_preview: true,
      parse_mode: 'HTML'
    })
  });
  
  if (!response.ok) {
    throw new Error(`Telegram API error: ${response.status} ${response.statusText}`);
  }
}

// 去除 HTML 标签
function stripHTML(html) {
  return html.replace(/<[^>]*>?/gm, '');
}

配置KV和定时执行

去Cloudflare Worker设置页面绑定KV和设置定时执行。

除了定时执行外,你还可以用 https://wokrerurl.dev/check 手动触发

258、谷雨

2025年4月20日 09:47

null

谷雨时节,春雨润物,万物生长,宜早睡早起,顺应阳气升发。晨起可漫步庭院,吸纳清新之气,活络筋骨,畅通气血。饮食宜甘淡平和,多食芽菜、香椿、荠菜等时令春鲜,少食生冷厚味,以健脾祛湿。
此时肝气渐弱,心气将旺,当调畅情志,戒怒戒躁,保持恬淡安然。衣着需随温增减,尤护腰腹,防湿邪入侵。常饮谷雨新茶,清火明目,助排浊气。运动宜选八段锦、慢步等和缓方式,滋养阳气而不耗散。

宜宾李庄、僰王山一日游

2025年4月12日 23:46

飞雾洞

这些年的清明节几乎都是在小雨中渡过,今年依旧不例外。

好在假日后的第一个工作日天气转晴,川内大部分地区的温度几乎是直线上升,自贡气温也临近了30°,似乎春夏的界限在这几天又开始模糊起来。

起因是平时不怎么会主动想出去玩的母上大人在清明节最后一天提出想出去转转,不过清明节三天,天气都不太好,而且假期中的后两天还漂着毛毛雨。所以和她商量了一下,我们换个班,换到了节后的第一个工作日出去,既能错峰出行,也能有个好天气。

因为只有一天,所以不能走太远,还要有充足的游玩时间,所以车程得压缩到2个小时之内。

之前 内江甜城一日游 去过一次内江,体验还是非常棒的。不过内江我们已经去过了,得换个对我们来说有新鲜感一些的。

目的地

在做攻略的时候想起之前徒步群内有群友策划过去 宜宾僰王山 徒步,宜宾离自贡也就100来公里左右,不到一个小时即可抵达,是十分不错的目的地。

其实宜宾我在很多很多年前来过一次,第一印象是——酒香!

我们当时走的老路去的宜宾,开始进入宜宾地界没多久,忽地就闻到一股淡淡酒香,开窗四处眺望无果,只发现我们正在经过一条长江支流,当时心理想着:真不愧是是五粮液产地、酒都宜宾,这河里都她妈是一股子淡淡酒香味。而后复行一里地后才发现经过一家酒厂时才恍然大悟,所以之后只要一闻到就为就能知道旁边必定有酒厂无疑了。

我们当时是自驾去的蜀南竹海,盛夏的十万亩竹海在微风的吹拂下用竹叶给我奏响了大自然的舒缓乐章我至今难以忘记。但是竹海除了竹子其他能有深刻体验的项目太少了,所以这次被我放弃了,准备还是以群友们之前去过的僰王山为主来做路线规划。

  1. 这次准备先去,因为做攻略的时候发现市区有好几个景点,担心李庄古镇玩起来太单薄所以先去,其次李庄白肉享誉全国,中午饭可以在镇子上解决,而且古镇临江而建,自有一股江南水乡的韵味。
  2. 然后去这次重点目的地 僰王山 ,山里的核心景点 飞雾洞 幽暗诡秘,十分有盗墓笔记的感觉,山中连绵不断的竹林和数个瀑布相信也会有不一样的体验,而且恰逢开春说不定还能挖到竹笋。
  3. 最后晚上再赶去合江门,逛一逛冠英古街,感受一下宜宾人的夜生活。

最后行程规划如下:

  • 8点30出发
  • 10点到李庄古镇,游玩加吃饭下午1点左右出发去僰王山
  • 2点左右到僰王山,开始爬山,来回两个小时,5点左右往回走去合江门
  • 7点左右到合江门,吃晚饭看夜景。
  • 接下来看时间回家。

总结

当时想着李庄离市中心比较远,又只是一个古镇,万一踩坑了就没地儿玩了,所以安排的上午去李庄,晚上去市中心。其实可以白天去晚上也去,听说晚上还有节目表演和白天是不一样的风格。

僰王山只有核心景点飞雾洞最值得一看,其他景点都有点可有可无了。

这种一天来回的旅程真的很不错,强度不会很高,也有非常不错的体验,以后可以常安排。

图记

下了高速不久就能看见长江大桥。

长江大桥

到了李庄停在了月亮田的停车场,在车库里进入了一个古建筑,似乎是一个酒店的大唐,雕梁画柱,气派的很。

李庄建筑

江南水乡味十足的李庄古镇。

水乡

水乡

古镇内

中午吃的李庄白肉,片肉的师傅说每片肉在2mm左右,肥而不腻。

李庄白肉和小煎鸭

吃过饭休息了一会便赶往了僰王山,竹林之内的僰王山特别凉快。

1. 僰王山入口 2. 山内石径

飞雾洞入口

探洞

天坑一景

下山时还在路边偷了春笋一根,哈哈。

第二天炒了腊肉,味道好极了。

春笋

合江门很热闹,三江交汇之处,也是老百姓们晚间活动的地方。

合江门两景

好像国外哪里也有个这个玩意儿,是拉斯维加斯吗?

3D小巨蛋

一大群叔叔阿姨、大爷大妈群魔乱舞,算是感受到「酒都人民」的松弛感了。

酒都人民的夜生活

入夜后的夹镜楼更漂亮了。

夹镜楼

冠英古街内的合江园

Memos同步至Mastodon(长毛象)

2025年4月12日 18:26

Photo by Chethan / Unsplash

我一直把Memos当作微博来用,偶尔也会手动同步到长毛象,但也只是偶尔。原因是即便在用梯子的情况下长毛象打开也太慢了,毕竟大多数实例都在墙外,且长毛象挺吃服务器资源的。

目前又不太想自建实例,虽然现在弄了NAS,理论上可以搭在上面,但是Ghost似乎在6月份要推出联邦宇宙服务了,到时候可以直接迁移到那个上面去,也就一直没下手。

之前看到过蜗牛哥出过一期长毛象同步到Memos的方案,和我的需求是相反的,因为今天周末恰好有空,所以就捣鼓了一下,弄了一版。

因为Memos可以设置WebHook调用,所以我的思路是:

Memos发布 -> 触发WebHook调用 -> 数据转发给Cloudflare Worker -> Worker里用Mastodon API发布嘟文

实现

先去长毛象上申请Access token ,路径为 :

偏好设置 -> 开发 -> 创建新应用 -> 起个名字,勾选 write:statuses、write:media 权限

然后就是Cloudflare Worker的实现了,我用DeepseekR1跑了一版,稍加改动就能初步使用了。

💡
如果你的Memos服务器在国内,那可能需要给Cloudflare worker绑定一个域名,不然会无法访问。
// cloudflare-worker.js
const MASTODON_INSTANCE = ""; // 实例地址
const ACCESS_TOKEN = ""; // 访问token

async function uploadMediaFromUrl(imageUrl, mimeType) {
  try {
    // 从 URL 获取图片数据
    const imageResponse = await fetch(imageUrl);
    if (!imageResponse.ok) throw new Error(`下载图片失败: ${imageResponse.status}`);
    
    // 转换为可上传的格式
    const blob = await imageResponse.blob();
    const formData = new FormData();
    formData.append("file", blob); // 文件名按需处理
    
    // 上传到 Mastodon
    const uploadRes = await fetch(`${MASTODON_INSTANCE}/api/v2/media`, {
      method: "POST",
      headers: { Authorization: `Bearer ${ACCESS_TOKEN}` },
      body: formData
    });
    
    if (!uploadRes.ok) throw new Error(`上传失败: ${await uploadRes.text()}`);
    return uploadRes.json();
  } catch (error) {
    console.error("媒体上传错误:", error);
    throw new Error(`图片处理失败: ${error.message}`);
  }
}

async function handlePost(request) {
  try {
    const { memo } = await request.json();
    const { content, visibility, resourceList = [] } = memo;
    
    

    // 验证内容
    if (!content) return new Response(JSON.stringify({ error: "内容不能为空" }), { status: 400 });

    // 处理最多 4 张图片
    const validResources = resourceList
      .filter(res => res.type?.startsWith("image/"))
      .slice(0, 4);

    // 并行上传所有图片
    const mediaUploads = validResources.map(async res => {
      const media = await uploadMediaFromUrl(res.externalLink, res.type);
      return media.id;
    });

    const mediaIds = await Promise.all(mediaUploads);

    // 构建嘟文参数
    const params = new URLSearchParams({
      status: content,
      visibility: visibility.toLowerCase() || "public" // 默认公开
    });
    mediaIds.forEach(id => params.append("media_ids[]", id));

    // 发布嘟文
    const postRes = await fetch(`${MASTODON_INSTANCE}/api/v1/statuses`, {
      method: "POST",
      headers: {
        Authorization: `Bearer ${ACCESS_TOKEN}`,
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: params
    });

    if (!postRes.ok) throw new Error(await postRes.text());
    return new Response(JSON.stringify(await postRes.json()), { status: 200 });
    
  } catch (error) {
    console.error("处理错误:", error);
    return new Response(JSON.stringify({ error: error.message }), { status: 500 });
  }
}

// Worker 入口
export default { fetch: handlePost };

CloudFlare Worker代码

给Memos启用Webhook

设置 -> 偏好设置 -> Webhook -> 创建 -> 起个名字,填入Cloudflare Worker的地址

一些不足

这种方式同步速度应该会稍快,但是还是有一些限制,比如

  1. 图片太大超过Worker可运行时间会上传失败。
  2. Mastodon API好像最大只能传4张图片。
  3. 向Memos的TG机器人发的消息不会触发Webhook。
  4. 长毛象好像不支持 Markdown。
  5. 我使用的Memos后端版本为 v0.18.1
  6. 等等,目前只发现上面2个,应该不止。

257、清明

2025年4月4日 22:51

晚上出门散步,路边画坛的小蘑菇

清明时节,阳气渐长,宜早起散步,呼吸新鲜空气,舒展筋骨,调和气血。饮食宜清淡,多食新鲜蔬菜,少食油腻辛辣,以养肝护脾。
心境宜平和,避免情绪波动,保持乐观心态,以顺应春生之气。适时添减衣物,防寒保暖,以防春寒侵袭。多饮温水,促进新陈代谢,排毒养颜。适度运动,如太极、瑜伽,以增强体质,提升免疫力。清明养身,顺应自然,方能健康长寿,福寿安康。

今天放假,和S终于能安安心心休息一天了。

一直睡到十一点起床,发现爸还在家,便叫上S出门中午的菜,S做了一个川味的腰花,我做了一个孜然鸡腿肉,都挺成功了。

上午出门的时候下了一部短剧 《家里家外》,下午两口子便我在沙发上看完了,全四川话台词的小短剧,还挺过瘾的,演员演技也还算在线,因为是短剧,所以笑点、爽点都很足。

256、春分

2025年3月20日 11:21

null

春分时节,昼夜均分,阴阳平衡,养生之道亦需调和。
此时,万物复苏,阳气渐升,宜早睡早起,顺应自然。
饮食上,宜清淡为主,多食新鲜蔬菜,如菠菜、韭菜等,以养肝明目。

254、雨水

2025年2月18日 11:53

null

脾土润泽运水谷,慎避地湿浸腠理。
此时天地阳气初萌,地气升腾化雨,养生当以护脾胃为要。饮食宜增甘减酸,多用山药、茯苓、莲子等甘淡之品健脾渗湿,晨起可饮陈皮姜米茶温运中焦。春寒挟湿尤伤下焦,宜着护腰腹,睡前以掌心熨关元穴九转。情志贵在疏达,可临窗观雨听檐滴,使肝气如草木逢润,舒展而不亢逆。

无题

2025年2月15日 09:49

生活苟且,为碌碌无为而羞愧。

当然,并不指要挣到多少钱,而是自己问心有愧,活的不够自我和尽力,对不起自己。

253、立春

2025年2月3日 22:33
阳气上升,万物更生,新岁开启

新的一年来了,祝各位博友,巳巳如意,福启新岁。

My App Defaults 2024

2025年1月21日 10:48

Photo by Iyus sugiharto / Unsplash

看到仓颉小胡都在发,也做个整理。

记录一下过去一年的常用应用,明年此时再更新,观察是否有所改变。

📨 Mail Client: 用的企业微信自带的邮件功能。。
📮 Mail Server: 如上。
📝 Notes: 基本上抛弃其他笔记软件了,主要使用Obsidian,同时还能自动发布数字花园 「好奇心花园」。
✅ To-Do: 企业微信代办功能、Obsidian的TODO List。
📷 iPhone Android Photo Shooting: 使用 小米12s Ultra 系统自带相机。
🟦 Photo Management: OneDrive 和 Google Photos。
📆 Calendar: 企业微信日历,同时同步到手机端。
📁 Cloud File Storage: 使用Alist,搭配OneDrive、百度网盘、123盘等,Windows上的文件同步等还是主力使用OneDrive,同时使用Syncthing对手机和电脑的部分文件进行同步。
📖 RSS: Miniflux 和 follow
🙍🏻‍♂️ Contacts: 使用系统自带联系人应用。
🌐 Browser: PC 端 Chrome,手机端 Via。
💬 Chat: 微信、QQ、Telegram 。
🔖 Bookmarks: 感兴趣的网站会存在 Memos 上,并打上对应的标签。
📑 Read It Later: 感觉这个需求对我来说是垃圾篓,所以没用。
📜 Word Processing: Obsidian为主,同时搭配 Notepad4
📈 Spreadsheets: WPS的一个精简版本。
📊 Presentations: 没有这方面的需求。
🛒 Shopping Lists: 一般直接加到购物车里。
🍴 Meal Planning: 刷抖音、B站、小红书等跟着做,或者有想吃的菜去微信小程序「下厨房」找菜谱。
💰 Budgeting and Personal Finance: 一木记账,应为有自动记录功能,目前几乎所有出账都做了登记。
📰 News:  follow,TG频道。
🎵 Music: lxmusic
🎤 Podcasts: 我的听书。
🔐 Password Management: vaultwarden

以下是小胡文章中提到的 extra categories 部分:

✈️ VPN: 路由器上MihomoProxy,移动端使用 FlClash
😘 Blog Platform: Ghost+Astro+GithubAction的构建流。
⌨️ Text input: PC 端使用小狼毫搭配雾凇方案,手机端为小企鹅搭配雾凇方案,输入法方案为小鹤双拼。
📖 Translation app: ​Pot以及一些AI工具。
📚 Reading app: 微信读书。
🔧 Screenshot app: Pinx。
🌁 Image Hosting: 感谢又拍云联盟。
☁️ VPS Hosting: 腾讯轻量云。

Ending

252、大寒

2025年1月20日 11:05

null

神志深藏于内,避免急躁发怒

节气的照片终于论完一次了,这一个轮次的引用信息为百度百科节气中关于「养身」的谶语。

用峨眉山的第一缕阳光给25年开个好头【完】

2025年1月6日 12:54

null

夜爬峨眉山强度挺大的,不是那么好拿捏,不要被抖音、小红书给你洗脑了!
去之前一定要能理解爬20多公里的楼梯是个什么概念!
我应该不会再爬第二次了....!

感冒

上次写完行程规划之后,不知道是不是早上晨跑衣服穿少的缘故,我忽然得了重感冒。

那几天开始全身酸痛,同时伴有咽痛、咳嗽,而且连续两个晚上发烧 + 白天退烧,为了不影响 31 号的出发,所以请了两天假在家中休息,调养。

好在出发前的早上,感冒的大部分症状都痊愈了,但是还是能明显感觉到体力依旧还是没有恢复。但是行程、人员都已经确定好,可不能放大家的鸽子。

所以不管如何都要先把大家送过去,如果身体实在跟不上就放弃徒步上山,坐观光车上金顶去等大家。

人员

在前面的行程规划一文中提到了当时确定要去的只有我、霜、小罗三人,我到时候打算开我台上不了台面的破 7 坐面包车过去,因此最好还是再找至少 4 人同行,以最大化平摊大家的费用,同时因为人多了后,玩起来也更有意思。

所以,出发前的几天我们就陆续在自己熟悉的圈子内寻找合适同行的队友,但是我这边进展不太顺利,频频碰壁,其中一个户外微信群居然还直接把我踢出群,不过我也庆幸被踢出去了,玩户外的这么小心眼即便在玩在一起也不会有多大意思。

好在小罗那边进展顺利,一直都有拉人进来,虽然其中有些朋友因为行程问题、装备问题赶不上,但是都非常好沟通,部分表示虽然这次不能参与,但是依旧期待下次同行。

最后,在出行前一天把终于把人员都确定好了,分别为:我、霜、小罗、太阳(兵哥哥)、vivi 姐、高兴哥、成歌。

1.太阳 2. 小罗 3. 霜 4.我 5. 成歌
1. 高兴哥 2. vivi姐

集合

31 号集合日当天,晴空万里艳阳高照,因为有成员担心赶不上日出,所以们把集合的时间提早了一个小时,也就是中午十二点。

我们是第二个到集合地点的,最先到集合地点的是小罗,她依旧穿着上次的淡绿色冲锋衣,装备齐全,精神头看起来不错。她男朋友这次有事,没有和她一起同行,小伙子倒还挺胆大的,也不怕女朋友被其他单身汉给挖走了,哈哈哈。

之后是成歌,是一位 50 多岁的大哥,湖北人,性格和蔼沉稳,非常好相处,脸上时刻带着和煦、云淡风轻的微信。他因为工作缘故经常在各地出差,又喜欢户外运动,所以经常在各地出差的时候就会参与当地的户外活动。别看大哥年纪上去了,可是个十足的老鸟,爬过的山都数不清了,还去冈仁波齐转过山。

然后是 vivi 姐和高兴就好哥,他们是两口子,年纪应该 40 左右把,装备齐全,透着一股子专业劲。高兴哥是退伍军人,平时喜欢摩旅,微信头像就是他摩旅的照片,非常帅。他们其实也去过非常多的地方旅行,但是这是他们第一次进行户外徒步。

最后就是太阳了,也是一个兵哥哥,性格腼腆,后续登山的时候也不爱参与拍照,而且他过来的时候把我们给惊呆了,原因是他居然没有登山包,拿的就是一个白色的大单肩挎包,也没有登山杖,雪爪等等,补给也就带了一盒饼干和一些能量饮料,他说没什么问题,他们当兵时再难的都体验过,我们想着实在不行山上也有的买,就到时候再说
了。

登山

自贡出发到峨眉山只有 150 多公里,全程都是高速,一个多小时就能到,一路上阳光万里,倒也不觉得累,不多时就到了报国寺,还没进停车场就一大堆大爷大妈上来给我引导停车,一个劲的给我往另外一个山坡上引,估摸是当地的村民拉收入呢,我最后还是停在了报国寺的官方停车位上,贵了 5 元一天,停车场管理员还给我们送了一个红色的祈福带。

然后就是下车收整行李,因为没有住宿,其实大家带的东西都不多,唯一多的是这次在山上吃火锅需要用到的东西,一套一次性铝锅盒燃料,然后两大包食材,霜怕山上海拔高煮不熟,把牛羊肉、丸子都提前煮好了,上山后烫一烫便能开吃,我包里放了面饼,丸子、肉给经验、体力更好的成歌大哥,一次性铝锅给了高兴哥,我老婆则背上了香菜、蒜沫等配料。

然后我们便迎着 3 点的斜阳出发了。

传过停车场便来到一处广场,右侧是报国寺,我们在入口处拍了一个出发视频。

之后要步行 30 多分钟后到达雷音寺才算是正式开始爬山之行。

不过不要高兴太早,目前我们连检票处都还没到呢,接下来的十几个小时将会是无尽的楼梯与我们相伴,期间还会经过猴区、高山区。

现在有多兴奋,之后就会有多狼狈。

遇到的第一个红牛墙。

不知道是不是感冒刚好,还是因为冲锋衣没到,我穿的羽绒服散热不好的原因,体力消耗的非常快,才走了一个多小时就感觉自己被掏空了,只感觉浑身都是汗水,脚也重的抬不起来。

接近 5 点时到达圣水阁

山民搭建的原始蜂箱

到达清音阁,这边是一个分叉路口,分上行和右行两条路,上行是去往九十九道拐方向,另一侧则是去往报国寺方向。

经过猴区,峨眉山的猴子和地痞流氓差不多,会强抢你身上任何有颜色的饮料,塑料袋,零食,经过这里时最好拿衣服罩住你的包。

在这里把直接放在高兴哥背后的一次性铝锅接了过来,用的外套罩住,不然肯定要遭殃,不过因此我也没有余力带着我老婆了,中途被猴子隔开,等了她好久,着实是无奈之举,如果不护着锅,晚上可就没得吃了。

穿的老婆的羽绒背心,狼狈不堪

到达洪春坪,天色已经完全暗下来了,开始需要头灯照明,我也彻底红温了。

开始攀爬让人闻风丧胆的九十九道拐,垂直落差 300 米,迂回 2500 米,约有 1840 余石阶。

路上遇到了一只网红猫,入夜降温,估计它冷的不行,看我坐在椅子上,直接就跳到我身上来取暖。

晚上九点半,开始进入雪线。

到达财神庙门口,我的羽绒服内里已经完全打湿,我索性将衣服反穿,终于没那么闷热了。

霜的表现则完全不像是第一次爬山,一路上健步如飞,如履平地。

路上的其他登山者看到都不由纷纷侧目,不由发出大佬牛逼的惊叹,基本上都是她走到前面后等我爬上去,休息一会后再继续出发,期间为了帮我减重还和我互换了背包,我可是彻底成为了拖后腿的人了。

财神庙门口的阶梯

到财神庙这里我才发现我们的队伍已经分成了三个梯队,小罗、成歌一个梯队,已经远远跑在了前面,我、霜、太阳,我们三个则是第二梯队,后面则是 vivi 姐、高兴哥。

小罗太牛了,上次笔架山之行他们也是第一梯队,紧紧跟着向导,这次又没落下 ,和老驴成歌同步,这时我就不由感叹,年轻真好。

本来我们是打算在财神庙吃火锅的,但是因为我们第二梯队、第三梯队落后第一梯队太远,他们等了我们半个小时我们都还没到,所以他们去了下一个地方等我们。

我们在财神庙休息了半个小时,在出发后终于碰到了 vivi 姐他们,他们为了赶我们,都没在财神庙休息。

我们本来盘算着的是聚在一起后大家吃着火锅跨年,小罗、成歌他们在上面的遇仙寺等我们,我们估摸着还要个半个小时才能到。

但是此时已是夜晚 11 点 58,已经临近跨年,我们和 vivi 姐、高兴哥、太阳和路上爬山的小伙伴们都相继在拐角处停下,大家开始倒计时,等待着阳历新年的第一秒到来。

终于到达遇险寺,小罗、成歌已经等了我们半个多小时,表示这个地方太冷了,可算把我们盼来了。没有废话,直接去寺庙拿了热水,架锅,准备吃火锅。

当火锅底料放入锅内,滚烫的热水浇灌在底料上时,火锅的香味开始慢慢弥漫,寺庙门口的小广场上开始随着山风飘荡起了火锅的香味,接下来是放入牛肉、羊肉、牛肉丸、鱼豆腐、金针菇,把矿物油小炉子放在锅下,点燃后稍热便能吃了。

其他路过的小伙伴都不可思议的看着我们的锅,不少人还跑过来拍照,这一刻我们都感觉背着这么多东西爬山的辛苦都值了,哈哈哈。

最后吃完用火锅汤煮好的泡面后我们便接着出发了,目前已经爬了十多个小时了,还有七八个小时的路程在等着我们。

雪已经挺厚的了。

山上的光污染很弱,能看见不少星星

又一个难关:钻天坡

夜眺峨眉市

山上积雪覆盖的台阶,走多了都自然而然的变成了这种规律的小三角坑。

到达洗象池!这里开始精神、肉体能量已经双双见地,霜也有点顶不住了,说走路都是飘的。不少爬山客选择在洗象池的大厅里眯一会。

接着爬!碰到一个穿短裤的大佬,前面看他从山下往山上跑着登山,这会儿居然已经从金顶下来了了....从金顶....下来了,你敢信??

路过一个休息点,买了一个 10 元的苹果,12 元的八宝粥,18 元的冷量饮料。

这个休息站有火盆,本来想着顺便烘烤一下衣服,哪知道把羽绒服屁股后面的下摆烧坏了...。

眼神已经迷离、恍惚,坐下就想坐化...。

还有多久是每一个休息点老板回答的最多的问题,但是不用问都知道还有很久很久!

到!雷!洞!坪!拉!!!!

我们实在走不动了,选择坐缆车上金顶,雷洞坪到缆车那里工作人员说很近,一会儿就到,但是我们怎么就感觉始终走不到呢?

等索道的人们

在索道上能看到即将日出

大家互相祝贺新年快乐。

烧香祈福

金顶遥望雪山

看日出

专门买了个小旗子拍照

才发现我衣服还是反穿着呢。

勇闯天涯一下

最后再来点情绪照片

251、小寒

2025年1月5日 18:07

null

跨年时峨眉金顶日出和第一缕阳光
### columns1 Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia. --shortcode--
### 副标题 Markdown内容。

用峨眉山的第一缕阳光给25年开个好头【一】

2024年12月27日 12:15

峨眉山官方图片

自上次笔架山之旅后,对山的渴望就像是心底深处的地下泉水被打通了一般狂涌而出。

前几天林老师他们又在群里谋划着去峨眉山夜爬 ,不过不巧的是他们的时间和赶不上,但是又被他们把瘾给钓了起来。

所以想着:「实在不行就我们自己去吧?」

而且又恰逢新年的这个节点,干脆去感受一下新年的第一缕阳光,并且虔诚的去拜拜菩萨,希望能赶走去年的坏运气,新的一年顺顺利利。

所以,有了以下的规划。

目前人员为我,老婆,小罗,目前还在招募队员中。

夜爬峨眉行程规划

两步路助手路线图:2024-02-07 爬峨眉山(报国寺~峨眉山金顶)-GPS导航轨迹下载|行程线路图-步行轨迹-两步路

24 年 12 月 31 日 Day1

  • 下午 1 点左右出发,3 点左右到报国寺
  • 4 点左右开始上山,预计 15 个小时左右,总计 27 公里,3068 米爬升
    • 日出时间为早上 7 点 59,尽量争取在 8 点前到达。

25 年 1 月 1 日 Day2

  • 早上 7-8 点到金顶,烧香拜佛拍照 1 小时。
  • 9 点后坐索道去雷洞坪,缆车大概十来分钟到,然后再走一个小时左右的楼梯到雷洞坪坐车下山,大概 2 小时。
  • 预计 12 点左右到报国寺,大家吃中午饭。
  • 下午 3 小时自由时间,滑雪、温泉
    • 要滑雪的在雷洞坪滑,滑完在时间内到报国寺集合
    • 温泉我选的红珠山森林温泉,价格在下面有提到
  • 结束后 4 点左右出发去乐山找吃的
  • 回家

注意事项

  • 注意高反,要在两三千海拔高强度徒步,死可能死不了,但会无力继续攀爬。
  • 心脏病高血压等疾病别爬,坐车,要听劝!
  • !当天拉肚子、心悸、胸闷、低血糖、头疼...等身体不适的,请直接坐车,一点小问题在山上都会被放大!
  • 要有一定的体力基础,力量、爆发力等身体素质在这没多大用,全靠心肺和肌耐力。马拉松、越野跑、铁三等项目的选手大多没问题,请随意
  • 全程 27 公里左右,爬升约 3390m,下降约 830m,强度大概相当于平地快走 60 公里,请自行斟酌。

准备清单

装备、实物等

  • 速干 T 恤 (千万别穿纯棉,出汗后会很冷)
  • 冲锋衣 (防雨,厚点,最好是可拆卸内胆)
  • 冲锋裤 (防雨)(瑜伽裤鲨鱼裤会冷死)
  • 便携雨衣,建议买好点材料的,不容易坏。
  • 鞋 (轻便、防滑、防水)厚长袜 (不磨脚,两双换)
  • 登山杖:看个人,省力,防膝盖不好的带护膝,如果下雪带冰爪
  • 背包 (中等大小,双肩,专业的最好)
  • 塑料鞋套
  • 雪爪,必须带哈,不要那种建议的,买链式的
  • 能量胶、盐丸、士力架、香蕉、橘子等高热量食物
  • 保温杯(不结冰)、软水袋 (轻,很多地方可补水)
  • 身份证、手机
  • 电筒 (或头灯),这个最好都备个头灯,夜晚山上黑。
  • 充电宝 (路上拍摄多的话)
  • 如果要泡温泉的话要带泳衣。

门票

  • 峨眉山门票 108¥
  • 金顶索道单程票,20¥
  • 交通票,山脚至雷洞坪的往返观光车票 45¥
  • 温泉票,我买的峨眉山红珠山森林温泉,在报国寺附近,单人 136.3,双人 267,三人票 398.8,想去温泉的可以互相拼一下票,更划算。
  • 滑雪场在雷洞坪,上午场 116.5 一小时,232 两小时,含雪具。

户外保险

  • 自行上淘宝、jd 购买户外保险,保额 20w,大概 5 元一天。

24、冬至

2024年12月22日 09:55

null

一候蚯蚓结;二候麋角解;三候水泉动

四川自贡冬至的习俗为食服滋补药食。

冬季自古以来就是滋补季节,更有俗语「冬季进补,来年打虎」之说法,寒冷冬季食用大补药膳却不必担心过补上火的问题。

通过搭配不同滋补功效的药材,辅以猪脚、鸡鸭、猪肚等食材小火慢慢炖煮,晚餐十分,全家人齐聚餐桌前,一人一个小碗乘上热气腾腾的汤汁,真是好不惬意。

DIY明信片互换计划

2024年12月19日 12:38

null

前些天收到了 品味苏州 小伙伴发来的明信片,非常欣喜。

在现在网络发达、信息快餐化的时代,能有一封经过漫长里程、时间送到你手上的信件,会更能体会到时间的味道。

因为我刚好有一台彩色打印机,每次出去玩了以后会习惯性把出行的照片精选一些打印出来放到相册里。这次在打印时我就在想:「既然我有打印机,那我能不能每次出去玩了以后自己做一些明信片寄给这些好友呢?」

打印的相片

所以昨天试着找了九张此次出行的照片,并调色打印,设计了一版,附上了临时想到的标语「现在网络太快,所以跨越千山而来的信件更值得我们等待和珍惜...」。

感觉效果好像还不错?

明信片背面

从左至右,从上到下,分别为1至9

所以,我也准备开启一个明信片互换计划。

各位小伙伴可以可以直接留言你的收件信息,并说明你要的图片序号,我会在看到你的留言后给你寄出。

我的博客已经开启审核模式,你们发出的信息不会直接公开展示,不用担心自己的信息泄露,我会在删掉你们的收件信息后通过留言审核,我会认真根据我对你的了解和想法填写后面给你的留言,祝好。

我需要第6张照片。
收件信息:
- 姓名:1900
- 地址:四川自贡xxxxxxxx
- 邮编:643000

另外;

家里没有打印机,也想自己做这种明信片的朋友,可以试着在淘宝、PDD找找代打服务,价格非常便宜,有众多模板可以选择,只需要简单把照片发给商家即可。

不知道能否号召大家一起参与这个活动,把自己的快乐,所看到的风景,想说的话传达给远在千里之外的另一个人。

谢谢。

川西笔架山,冬季雪山登山实操

2024年12月19日 12:17

null

前言

因为经常有看到阿均哥在周末时间出去爬山,很是羡慕。

我其实也是非常喜欢户外运动的人,2014 年和朋友去过一次牛背山,2015 年去过一次阿合哈洛,其实这种集体户外出行有不少好处:

  • 一是每次出行都是十来号人,一车形形色色的人在一起,在旅途中互相帮助、认识、了解、解放自我,总是能擦出不一样的火花,也能将平时积累的压力在旅途过程中完全释放出去。
  • 二是因为人多,旅途中产生的各种费用都大大降低了。

所以也想着自己能不能也经常这样出去玩一玩。

2014年牛背山徒步

2015年啊合哈洛徒步

驴友群

所以向他询问了都是通过什么渠道找的出行队伍,后被告知是加入了当地的一些户外微信群,跟着群里的其他人一起出行的。

在那之后偶然在骑行群里看到其他骑友说周末要跟着户外群里的人去爬山,所以顺嘴说了一下,让对方拉我进群,然后一下就像是打开了潘多拉墨盒,东拉西拉的进了三四个户外群里,这才知道原来我们这个小地方也有这么多活跃分子,几乎每周都有组团出去玩的驴友。

这些驴友群的组员出行规则几乎都是统一的

  • 出车的司机不承担邮费、过路费
  • 提前买好户外保险,一般在 20w 保额的在 5 元一天左右
  • 其他公共费用大家 AA。
  • 各自承担自己的风险。

因为行程有长有短,蹲了一两天后才加入了标题中提到的「笔架山冬季登山」活动。

笔架山冬季登山

景点介绍

笔架山位于四川理县,木卡羌寨前行 10 来公里左右,总徒步距离来回 14.47 公里,预计花费时间 5-6 小时左右,总爬升 1343 米,最高海拔 3766 米。上山后积雪覆盖,几乎没有路,可以说是一条完全的野生线路,有一名当地向导带路。

笔架山徒步路线图

人员

本次出行原本是 10 人,后有两人临时有事放弃,最终 8 人出行,两对情侣,另外 2 男、2 女。平均年龄没超过 35 岁。

行程安排

  • 第一天:星期六中午一点左右出发,司机来接的我们,开车 4 个小时左右到达理县,下高速后走 8 公里盘山公路,到达第一晚露营地「坞瓦布露营地」,晚上就着日落吃烤鸡烤兔 + 铁板烧烤,然后围着篝火唱歌喝酒。
  • 第二天:早上 8 点起床,客栈安排了当地的手工面 + 煎鸡蛋,吃完后 9 点左右出发爬山,整个行程走完下午 6 点左右回到露营地,吃完牦牛火锅后返程回家,最后 11 点 30 到家。

费用

  • 油费 + 过路费 380
  • 住宿 + 餐饮 492 两人
  • 合计 380+492=872

装备

冬季登山危险系数不比平日 ,所以装备一定要带齐全。我这次爬山除了没带登山杖,其他装备基本上都准备没有问题。

  • 贴身穿速干衣物:上衣可以是跑步的速干衣,下面穿速干骑行裤或者瑜伽裤,因为在登山过程中会大量出汗,普通棉质保暖衣可能无法快速排汗,会导致失温。
  • 保暖内衣两套:一套穿在速干衣物上面,另外一套备用。
  • 冲锋衣三件套:没有的话穿耐磨的羽绒服之类的也行。但是一定要是防水面料,避免粘上积雪,溶化后把里衣打湿。
  • 毛线帽:主要是要护住耳朵,在穿林时最好把冲锋衣帽子带上,避免落下的积雪掉进衣领。
  • 手套:这个一定要准备一款好一点的防水手套,进雪水后的冰凉感你一定不会想体验的。
  • 袜子:厚一点的长筒羊毛袜,多备几双,方便意外替换。
  • 雪套:这个一定要备,山上积雪厚的话没有雪套你的鞋几分钟就湿透了,冰冷的脚会加速失温。
  • 冰爪:雪地必备,增加摩擦力,避免打滑,这次我是在半山出现落叶堆积腐烂打滑后开始装备上,瞬间就不打滑了,下山时也能避免脚滑跌倒,非常好用。
  • 登山鞋:高帮登山鞋最好,可以保护脚踝,更保暖,也不容易进雪水。
  • 墨镜:雪地里反光容易雪盲,必备,其实骑行那种防风镜要更好一些,不容易掉,而且保护的更周全。
  • 登山杖:最好两根,质量一定要好,折叠优先,实在没有也可以在山上砍截树枝替代,我这次没带,用的树枝,也没啥问题,下山的时候别用,容易打滑戳伤自己。
  • 防晒:山上紫外线强,做好皮肤保护。
  • 登山包:最好是有背负、透气系统的背包,耐磨系数要高。
  • 热水壶、水袋:在雪地里喝一口热水是真的舒服。
  • 零食:在登山途中补充热量,体力。
  • 保鲜袋、塑料袋:可以多带几个保鲜袋,一是装垃圾,二是万一鞋子湿了也能套脚,作用很多,我的每次出门旅行都会带上七八个这玩意儿。

旅行后记

这次的行程其实终点的风景、餐食、住宿都算不上很好。

但是雪林穿越的体验是非常棒的,总共 1300 多米的爬升,而且后半段全是雪路,因为积雪覆盖,基本上已经看不到原来的路线了,我们一路在雪林里穿梭,都是现场开辟的路线,很多地方都要手脚共用才能爬上去,非常有挑战和刺激感。

而且这次出行认识了不少谈的来的本地朋友,如我们车的司机林老师、本地大学里的一对情侣小罗和小刘,出发和返程在车上的时间大家唠嗑渡过,一点也不觉得无聊和犯困。

不过这次行程难度对于我老婆来说挺大的。

因为之前她是不准备爬山的,而且她也没有户外经验,算是个小白,不过出行前我还是把她的雪套、雪爪一起带上了,怕万一需要上山。哪知道还真用上了,出发后当时另外一个也说在营地休息的人放鸽子没来了,现在只有她一个人在营地,挺没意思,索性就跟着我们一起上山了。

不过毕竟是小白,而且以前也没搞过户外,所以装备准备的不是很充分,没有冲锋衣裤,裤子这次就穿的普通牛仔裤,爬山途中遇到那些容易滑倒的地方都害怕的要命,都是屁股划着雪地走的,后半段的时候裤子有些地方就已经湿透了。

所以最后登顶的那一刻忽然就绷不住了,哭的稀里哗啦,她说就我们两个人在后面吊车尾,前面的人都走的很快,看不到了人,害怕的很,而且身上又冷,经常滑倒会觉得万一我们一不小心就滑到山下去,没准就死在山上。

在我看来其实整条线路都是在树林里,基本上没有悬崖峭壁的情况,即便是滑倒了也能很快抓住旁边的树枝,而且坡度都不是很大,风险是有,但是在我看来并不危险。

不过她在下山后回味起来又觉得特别有成就感,感觉好像瘾一下就起来了,还问我下次准备去哪里,哈哈。

图记

途中和小伙伴们

营地和住宿

日出

营地中

烧烤小啤酒+篝火晚会

上山中

集体照

「工人们」

山腰+自拍

雪路

望雪
屁股蹲
登顶,绷不住了,hhh

缓缓后美美自拍

集体照
下山
山脚
已经筋疲力尽,头顶的雪和树枝暗暗体现了狼狈

我VPS上的Selfhost服务

2024年12月7日 11:20

Photo by Rubaitul Azad / Unsplash

以前刚玩博客的时候用的 Wordpress 作为博客系统,基本上都搭建在一些互联网的公益服务上,如今还记得就是 wpoak 这个平台,不过这些服务难抵时间漫长,大多因为成本问题关门大吉了。

所以之后开始自己买 VPS 进行博客程序部署,也开始慢慢重视起数据的重要性和自我保有。

刚开始 VPS 还是玩的非常简单,实例化完成后便用 lnmp 等程序一键装好 PHP 环境,然后下载上传 WordPress 安装程序便算完事了,后来接触的多了才知道 VPS 能做的事情元远不止于此。

后来我开始接触到 Docker,然后研究各种 Selfhost 的应用、服务。

昨天在夜未央的「浪费」一文中评论到:「对于很多普通用户来说基本上没有什么选择了,我们是喜欢折腾和了解,知道有什么渠道去找平替」。而后又在 Dayu 的「目前使用的自托管服务」一文中看到了他分享的 Selfhost 清单,所以这里索性也做一次分享,希望也能让更多的人用到这些开源、可控、好用的服务,利用起自己 VPS 上多余的算力资源。

我目前的 VPS 只有一个国内的腾讯轻量云。

配置为 2C2G4M,一年费用大概在 100 元左右,目前购买了 3 年,自托管的服务如下:

Ghost

这是我目前使用的博客后端,Ghost 在国内算是非常小众的博客程序了。

我大概在 16 年开始使用 Ghost 作为博客系统,当时服务部署在百度的 BAE 平台上,「在百度开放云BAE上部署GHOST博客并配置七牛云」,后因服务不能在继续免费白嫖几经搬家,后落到现在的 VPS 上。

可以使用 Docker 或者 Ghost 官方的 CLI 程序安装。在以前的老版本时,数据库支持 SQLite,后来几经更新,现在在正式环境中只能使用 MySQL。

Artalk-Go

在早期时 Ghost 并没有提供评论功能,虽然在后续的迭代中增加了评论功能,但是在我看来不太友好,而且因为评论需要用户登录,其他使用 Ghost 评论功能的小伙伴反应,在迁移过程中需要额外进行会员数据、评论数据处理,所以我一直没有使用。

所以我最开始使用的自部署评论程序是 Twikoo ,但是因为这个项目更新在很长一段时间内停滞,且管理面板、功能过于简陋,几经尝试后换到了 Artalk。

Artalk 是国内大学生大佬开发的一款 Disqus 的第三方评论平替程序,开源,自部署,且功能十分丰富,更新也非常勤快,个人认为是一款非常完善的评论程序。

可以用 Docker 部署。

MySQL

这个不用多说,声名远播的开源数据库,因为 Ghost 和后面其他的一些程序需要用到。

可 Docker 部署。

  • 推荐程度:🌟🌟🌟🌟
  • 部署方式:Docker
  • 是否开源:是
  • 项目地址:MySQL

Vaultwarden

密码管理器我以前使用的是 LastPass 这个免费服务,但是在使用过程中频繁出现网络问题无法使用,而且管理面板没有中文,且某一次还出现了安全漏洞的问题,自那后我就切换到了 Bitwarden,在 PC 上通过浏览器拓展可以快速进行当前网站的密码填充。

但是因为想用密码泄露检测等服务,不过这些功能在官方的 Bitwarden 上都是需要付费使用,所以我开始使用了国外大佬基于 Bitwarden API 重新实现的开源密码管理程序 Vaultwarden,Bitwarden 中一些需要付费使用的服务在 Vaultwarden 上都能免费使用,搭配第三方的安卓端 Keyguard ,可以说颜值与实力并存。

密码管理器我是非常推荐每一个没用过的人使用的。

因为一些第三方网站管理员自身水平良莠不齐,可能会因为服务漏洞导致数据库泄露,此时如果你将常用密码用在注册这些网站上,届时你的其他重要服务被撞库暴力破解的风险将大大提升。

但是如果你使用密码管理器的随机高强度密码,只要在主密码没有泄露的情况下密码的情况下,即便数据库泄露了也不用担心被破解的风险,且因为在注册时使用的随机密码,即便第三方服务的数据库被泄露也不用担心被撞库。

Alist

Alist 是一个非常好用的网盘管理程序,因为太好用、用的人太多了,导致国内一些网盘实在承受不住,甚至不顾脸面将以前承诺的一些服务重新二次收费——没错,说的就是你「阿里网盘」。

Alist 可以在一个程序内管理你的大部分网盘服务,将他们集成在一起统一管理,并且通过 Alist 的一些拓展实现诸如公开分享、WebDav 等等,但是因为用的人实在太多了,而且很多影视程序也跟着上来薅羊毛,把网盘做成资源服务开放给其他人使用,导致这些情况的发生。

但是,即便这样,Alist 也依旧是一款非常好用的网盘管理程序。

Memos

Memos 是个非常好的 Flomo 平替工具,可以方便的进行卡片笔记记录,甚至你可以拿他当作微博、微博客来用也没什么问题,而且作者更新也非常勤快。

但是开发者时常进行 Break Change,我碰到的就有不下三次,导致我实在不敢继续再升级了,在某一次回退后彻底停留在目前使用的 v0.18.1 版本,好在那时的功能已经非常完善,即便不升级也不影响软件的后续使用。

Umami

google 统计的平替服务,之前部署在 Raliway 上,但是因为平台收费政策调整,只给 5 刀的免费额度,导致有一次超出额度,多交了 30 多元的费用后转移到 VPS 上部署。

GoToSocial

一款用 Go 写的联邦宇宙实例工具,长毛象的超小型替代,但是我没有玩的太明白,使用过程中出现很多莫名奇妙的问题,暂时放弃。

miniFlux

一款开源的 RSS 阅读器,简单好用,没有多余的花哨功能。

lx-music-sync

洛雪音乐的同步服务,可以在手机、PC 端之间同步历史记录、收藏等等。

wewe-rss

国内大佬开发的一款微信公众号转 RSS 订阅工具。

Express

我用 Docker 部署了一个 Express 服务,用于博客上一些需要后端的小功能,如点赞、PC 状态同步等。

WatchTower

Docker 镜像更新服务,通过维护一个需要自动更新的 Docker 容器名称列表,实现对对应容器镜像的自动更新。

独立博客自省问卷15题

2024年10月10日 15:17

Photo by Emily Morter / Unsplash

雅余哥发起的调查,回答一波 

1、你的博客更新频率是多少?

A.每周更新

B.一周数篇:基本上每周都有把。

C.一月1-2篇

D.几个月一篇

 

2、你的博客上次更新是什么时候?

A.本周:有节气这个系列在,基本上很稳定。

B.上周

C.上个月

D.上季度

 

3、你的博客文章是原创的吗?

A.坚持原创:都是自己写的,可能有部分引用的块。

B.部分借鉴

C.AI 帮我写的

D.搬运别人的,而且不署名

 

4、你觉得自己的文章对他人有帮助吗?

A.旨在对他人有启示

B.多少有点意义:技术文章偏多一点,多少应该会有点帮助把。

C.每日每周流水账

D.自我陶醉就好,管他呢

 

5、你上次换博客主题/程序是什么时候?

A.上周

B.上个月:最近才从11ty换到Astro

C.去年

D.凭良心说,我多年都是一个主题

 

6、你上一次捣腾博客主题代码是什么时候?

A.昨天,撸代码到凌晨

B.每周必捣腾:经常会折腾,就像狂热的钓鱼佬一样。

C.每月有那么一次

D.一年有那么一次

 

7、你会对博客主题进行二次开发?

A.直接配置使用,省心不折腾

B.时不时自己改改,搞点新花样,换图片,换字体,爽:自然是这个选项。

C.删除主题作者版权信息,改改样式,然后自我感觉良好

D.改得面目全非,但保留原作者版权信息或注明

 

8、你多久打开自己博客自我陶醉一次?

A.每天数次:基本上每天都会打开,看看评论之类

B.每周一次

C.看心情

D.一般都是照镜子,不看博客

 

9、你近期对自己博客域名什么感受?

A.想搞到一个 .COM 的域名

B.如果域名能再短几个字符就更好了

C.今年才换双拼域名了,明年再看看

D.目前挺好,没想法:没啥想法。

 

10、你每天都会看网站的流量统计吗?

A.每天看几次,今天又多了100PV

B.每周回顾,看看流量趋势

C.记得就看看:偶尔看看。

D.没有搞流量统计,都是浮云

 

11、你通过博客的广告赚到钱了吗?

A.有,能覆盖建站费用

B.有,但付出大于收入

C.没考虑通过博客流量赚钱:暂时没考虑

D.拒绝广告,保证阅读体验

 

12、你去浏览别人的博客/网站主要为什么?

A.学习别人分享的知识:友链多是生活型博客,看看别人活的咋样。

B.搬运别人的内容

C.看看别人怎么装修博客,自己也抄一下,感觉都比自己的好

D.不爱看别人博客,自己爱写啥写啥

 

13、看到别人分享了一篇文章,你打开第一反应是什么?

A.哇,这域名真不错,怎么我没想到

B.哇,这网站速度真快,图片延迟加载丝滑

C.哇,这程序/主题不错,我也要抄一抄/留言问问哪里搞的

D.看看文章内容:因为打开就会看到设计,所以一般都是先看到设计再看到内容。但是我认为内容更重要。

 

14、你觉得博客哪方面更重要?

A.域名

B.服务器

C.主题

D.内容:上一条回答了。

 

15、近期通过写博客有哪些新收获?

A.知识面有拓展

B.认识了新朋友

C.写作水平提升

D.通过知识变现

基本上都有。

我的miniFlux主题

2024年10月6日 14:25

Photo by AbsolutVision / Unsplash

最近Follow大火,虽然也在使用,不过我还是更喜欢miniFlux这种简单的阅读器。

之前从 yarr 切换到 miniflux 是因为 木木 大佬推荐的 miniflux 主题 Miniflux-Theme-Reeder,不过当时用了一段时间后发现各种不适,最后还是切换会默认主题,用了一段时间发现其实默认的miniflux已经非常好用了,不过需要做一点美化,所以简单做了一下调整,这里分享一下我的miniflux主题。

项目地址:https://github.com/rebron1900/mini-miniflux

主题就叫 mini-miniflux ,复制项目中 theme.css 文件中的样式或直接复制下面的css到miniflux中的 custom css 中即可。

:root {
    --font-family: "Noto Serif SC", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
    --body-color: #efefef;
    --body-background: #222;
    --hr-border-color: #555;
    --title-color: #aaa;
    --link-color: #aaa;
    --link-focus-color: #ddd;
    --link-hover-color: #ddd;
    --link-visited-color: #f083e4;
    --header-list-border-color: #333;
    --header-link-color: #ddd;
    --header-link-focus-color: rgba(82, 168, 236, 0.85);
    --header-link-hover-color: rgba(82, 168, 236, 0.85);
    --header-active-link-color: #9b9494;
    --page-header-title-color: #aaa;
    --page-header-title-border-color: #333;
    --logo-color: #bbb;
    --logo-hover-color-span: #bbb;
    --table-border-color: #555;
    --table-th-background: #333;
    --table-th-color: #aaa;
    --table-tr-hover-background-color: #333;
    --table-tr-hover-color: #aaa;
    --button-primary-border-color: #444;
    --button-primary-background: #333;
    --button-primary-color: #efefef;
    --button-primary-focus-border-color: #888;
    --button-primary-focus-background: #555;
    --input-border: 1px solid #555;
    --input-background: #333;
    --input-color: #ccc;
    --input-placeholder-color: #666;
    --input-focus-color: #efefef;
    --input-focus-border-color: rgba(82, 168, 236, 0.8);
    --input-focus-box-shadow: 0 0 8px rgba(82, 168, 236, 0.6);
    --alert-color: #efefef;
    --alert-background-color: #333;
    --alert-border-color: #444;
    --alert-success-color: #efefef;
    --alert-success-background-color: #333;
    --alert-success-border-color: #444;
    --alert-error-color: #efefef;
    --alert-error-background-color: #333;
    --alert-error-border-color: #444;
    --alert-info-color: #efefef;
    --alert-info-background-color: #333;
    --alert-info-border-color: #444;
    --panel-background: #333;
    --panel-border-color: #555;
    --panel-color: #9b9b9b;
    --modal-background: #333;
    --modal-color: #efefef;
    --modal-box-shadow: 0 0 10px rgba(82, 168, 236, 0.6);
    --pagination-link-color: #aaa;
    --pagination-border-color: #333;
    --category-color: #efefef;
    --category-background-color: #333;
    --category-border-color: #444;
    --category-link-color: #999;
    --category-link-hover-color: #aaa;
    --item-border-color: #666;
    --item-padding: 15px;
    --item-title-link-font-weight: 900;
    --item-status-read-title-link-color: #666;
    --item-status-read-title-focus-color: rgba(82, 168, 236, 0.6);
    --item-meta-focus-color: #aaa;
    --item-meta-li-color: #ddd;
    --current-item-border-width: 2px;
    --current-item-border-color: rgba(82, 168, 236, 0.8);
    --current-item-box-shadow: 0 0 8px rgba(82, 168, 236, 0.6);
    --entry-header-border-color: #333;
    --entry-header-title-link-color: #bbb;
    --entry-content-color: #999;
    --entry-content-code-color: #fff;
    --entry-content-code-background: #555;
    --entry-content-code-border-color: #888;
    --entry-content-quote-color: #777;
    --entry-content-abbr-border-color: #777;
    --entry-enclosure-border-color: #333;
    --parsing-error-color: #eee;
    --feed-parsing-error-background-color: #3a1515;
    --feed-parsing-error-border-style: solid;
    --feed-parsing-error-border-color: #562222;
    --feed-has-unread-background-color: #1b1a1a;
    --feed-has-unread-border-style: solid;
    --feed-has-unread-border-color: rgb(33 57 76);
    --category-has-unread-background-color: #1b1a1a;
    --category-has-unread-border-style: solid;
    --category-has-unread-border-color: rgb(33 57 76);
    --keyboard-shortcuts-li-color: #9b9b9b;
    --counter-color: #bbb --entry-content-font-weight: 300;
    --entry-content-font-family: "Noto Serif SC", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
    --entry-content-quote-font-family: var(--entry-content-font-family) --gray-100: rgba(196, 196, 196, 0.1);
    --gray-200: rgba(196, 196, 196, 0.2);
    --gray-500: rgba(196, 196, 196, 0.5);
    --gray-700: rgba(196, 196, 196, 0.7);

    --color-link: #84b2ff;
    --color-visited-link: #84b2ff;

    --body-font-color: #e9ecef;
    --color-hover-link: #589ff2;

    --btn-color: red;
    --btn-bg: blue;

    --icon-filter: brightness(0) invert(1);

    --box-radius: 0.25rem;

    --hint-color-info: #6bf;
    --hint-color-warning: #fd6;
    --hint-color-danger: #f66;
}

* {
    font-family: var(--entry-content-font-family);
    text-shadow: 0 0 .75px var(--gray-500);
}


main {
    .item {
        border-radius: var(--box-radius);
    }
}

@media (max-width: 630px) {
    body {
        padding: 0 1.25rem;
    }
    
    .page-header{
        margin-top: 1rem;
    }

    .header {
        position: fixed;
        bottom: 10px;
        right: 10px;
        #header-menu {
            background-color: var(--alert-border-color);
            padding: 10px;
            border-radius: var(--box-radius);
            list-style: none;
        }
    }
}
.entry-content {
    line-height: 1.8;


    > :first-child {
        margin-top: 0;
    }

    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
        font-weight: bolder;
        line-height: 1;
        margin-top: 1.5em;
        margin-bottom: 1rem;

        a.anchor {
            opacity: 0;
            font-size: 0.75em;
            vertical-align: middle;
            text-decoration: none;
        }

        &:hover a.anchor,
        a.anchor:focus {
            opacity: initial;
        }
    }

    h4,
    h5,
    h6 {
        font-weight: bolder;
    }

    h5 {
        font-size: 0.875em;
    }

    h6 {
        font-size: 0.75em;
    }

    b,
    optgroup,
    strong {
        font-weight: bolder;
    }

    a {
        color: var(--color-link);
        text-underline-offset: 0.3em;

        &:hover {
            color: var(--color-hover-link);
            text-shadow: 0 0 0.75px var(--color-hover-link);
        }
        &:visited {
            color: var(--color-link);
        }
    }

    img {
        max-width: 100%;
        height: auto;
        border-radius: 0.25rem;
    }

    code {
        padding: 0 0.25rem;
        background: var(--gray-200);
        border-radius: 0.25rem;
        font-size: 0.875em;
    }

    pre {
        padding: 1rem;
        background: var(--gray-200);
        border-radius: 0.25rem;
        overflow-x: auto;
        position: relative;

        code {
            padding: 0;
            background: none;
            color: white;
        }
    }

    p {
        word-wrap: break-word;
        margin-bottom: 1.3rem;
    }

    /** adapter ghost callout cards **/
    blockquote,
    .kg-callout-card {
        margin: 1rem 0;
        padding: 0.5rem 1rem 0.5rem (1rem - 0.25rem);

        border-inline-start: 0.25rem solid var(--gray-200);
        border-radius: 0.25rem;

        color: var(--gray-700);
        font-style: italic;

        word-break: break-all;

        :first-child {
            margin-top: 0;
        }
        :last-child {
            margin-bottom: 0;
        }
    }

    table {
        overflow: auto;
        display: block;
        border-spacing: 0;
        border-collapse: collapse;
        margin-top: 1rem;
        margin-bottom: 1rem;

        tr th,
        tr td {
            padding: 0.5rem 1rem;
            border: $padding-1 solid var(--gray-200);
        }

        tr:nth-child(2n) {
            background: var(--gray-100);
        }
    }

    hr {
        height: 1px;
        border: none;
        background: var(--gray-200);
    }

    ul,
    ol {
        padding-inline-start: 2rem;
        word-wrap: break-word;
    }

    dl {
        dt {
            font-weight: bolder;
            margin-top: 1rem;
        }

        dd {
            margin-inline-start: 0;
            margin-bottom: 1rem;
        }
    }

    .highlight table tr {
        td:nth-child(1) pre {
            margin: 0;
            padding-inline-end: 0;
        }
        td:nth-child(2) pre {
            margin: 0;
            padding-inline-start: 0;
        }
    }

    details {
        padding: 1rem;
        border: $padding-1 solid var(--gray-200);
        border-radius: 0.25rem;

        summary {
            line-height: 1;
            padding: 1rem;
            margin: -1rem;
            cursor: pointer;
        }

        &[open] summary {
            margin-bottom: 0;
        }
    }

    figure {
        margin: 1rem 0;
        figcaption p {
            margin-top: 0;
        }
    }
}

MacType正确注册表全局热替换、渲染尝试

2024年10月6日 11:22

Photo by Bruno Martins / Unsplash

前言

因为Windows系统字体渲染太垃圾,而我又没需求换4k,所以需要用到其他工具对字体进行渲染。而MacType自然是Windows平台的不二选择,我使用的时间估计已经有10年了把?

以前在XP、Win7上都能很完美的渲染,但是Windows10开始陆续出现了一些程序渲染不上的问题,

  • 比如大部分UWP程序
  • 而Chrome也因为安全策略更改也无法正常进行渲染,虽然百分浏览器有使用GDI++的版本,但是所有Emoji会变成黑白色
  • 微信、企业微信 也因为使用了WebView也无法正常渲染

期间在MacType的仓库里发了一个求助issue 为何微信中FontSubstitutes替换雅黑后字体会直接失去所有渲染呢,有回答的人说通过注册表模式可以正常渲染,但是我进行了尝试后死活没有效果,Maple-font的作者也遇到了和我同样的问题 Segoe UI Variable 似乎无法替换

不过昨天因为 Windows11 LTSC发布了,我重新安装系统后对MacType进行了尝试,发现似乎是因为火绒的问题导致无法进行渲染 火绒 6.0 导致 MacType Version 2024.8.15 无法渲染 ,在进行了很多次尝试后发现不单纯是因为火绒的问题,即便在开了注册表模式下有些配置文件依旧无法正常渲染、替换,尝试了很久终于总结了一套对于我来说可行的全局渲染、热替换方案。

方案

MacType安装到C盘下

根据Snow大佬的解释,因为Windows11系统安全的原因在其他目录可能无法加载dll,但是C盘的 Windows 目录和 Program Files 目录除外,所以我们要将程序装在 Program Files 中。

启用火绒或开启白名单

火绒系统加固里在「自动处理」中给下面几个程序开启「关键进程规则」下所有选项,「文件规则」下的「系统任务目录」

启用注册表模式

因为Windows11安全引导的问题,新版本的MacType取消了在设置向导中开启注册表模式的选项,但是可以通过手动导入、设置注册表的形式启用。

  1. 关闭BIOS中的安全引导(Secure boot)选项。
  2. 在MacType的设置向导中设置为「不使用自动加载」
  3. 导入注册表
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="MacType64.dll"
"LoadAppInit_DLLs"=dword:00000001
"RequireSignedAppInit_DLLs"=dword:00000000


[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="MacType.dll"
"LoadAppInit_DLLs"=dword:00000001
"RequireSignedAppInit_DLLs"=dword:00000000

配置文件

我之前一直用的自己改的一个配置文件,但是这个配置文件之前我用MacType服务模式时也有一些莫名奇妙的BUG,比如微信中输入框里的字体无法渲染。

因为喜欢比较厚重的字体,这次测试我首先使用MacType服务模式对所有的配置文件进行测试,找出一个渲染风格是我喜欢的配置文件,最后选中了 XMac.LCD.Default.ini 这个配置,然后开启MacType注册表模式不断的修改配置、重启进行测试,最终找到了一个能正常渲染的配置。

在这个配置文件中我只将 Segoe UI Variable 字体热替换成了 Maple UI ,这部分可以根据使用需求进行任意热替换。

; Only for MacType (NOT SUPPORT THE OLD VERSION OF GDI++/HE)
; maxchow@qq.com

[Preview]
Font=Tahoma
Color=$990088
Text=卍 XMac.LCD 默认设置
Size=12
Align=Center

[General]
Name=XMac.LCD.Default
Icon=XMac\XMac.ico,0

;【自动挂钩子进程】
;[0:Disable]  1:Enable
HookChildProcesses=1

;【字体微调】
;0:Normal 1:NoHinting 2:AutoHinting 3:Light+AutoHinting
HintingMode=1

;【抗锯齿方式】
;-1:Disable 0:Normal 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
AntiAliasMode=2

;【常规体调整】
;-32:+32
NormalWeight=14

;【粗体字的调整】
;-16:+16
BoldWeight=2

;【斜体字的倾斜角度微调】
;-16:+16
ItalicSlant=0

;【只有在FontLoader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
;0:Disable 1:Enable
UseMapping=0

;【Gamma模式开关】
;-1:关闭;0:使用设置的Gamma值(GammaValue);1:使用sRGB的Gamma值;2:不明
GammaMode=0

;【Gamma值】
;GammaMode=0的时候此项设置才有效
;sRGB ≒ 2.2 CT-Default = 1.4
;windows的cleartype的Gamma值是1.4
GammaValue=1.4

;【对比度】
;数字越大越锐利,数字越小越发虚
Contrast=1.0

;【字体轮廓】
;数字越大字体就越粗越黑
RenderWeight=1.0

;【文字边界设置】
;数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。适当降低对比度,提高TextTuning,可以使文字周围的颜色看起来“淡一点”
;再加上RenderWeight,把这三个设置的微妙平衡调节好的话,能得到不输给Mac的效果
;0:12

;AntiAliasMode=1时,通过TextTuning分量来调节
TextTuning=0

;AntiAliasMode=2时,通过TextTuning的RGB分量来调节
TextTuningR=0
TextTuningG=0
TextTuningB=0

;【字体加粗模式】
;对NormalWeight和BoldWeight有效
;0:Weight值大时横向加粗,值小时双向加粗,主要是避免Weight值过大时,模式3中在小字号时加粗过度出现斩头的现象;
;1:总是横向加粗;
;2:总是双向加粗,也就是freetype本身的粗体渲染。
;注意:通过加大GammaValue、TextTuning的值,可以减少Weight值过大的造成的效果问题,即可以在BolderMode=2时也可以避免转接头
BolderMode=0

;【字体的载入方法】
;(注意是载入方法,不是渲染方法)
;0:用freetype载入字体
;1:用windows的绘图核心载入字体
;很多freetype的设置需要此项选0才能生效
FontLoader=0

;【字体链接】
;当FontLoader=0时
;0:什么都不做;
;1:使用注册表里的字体链接设置,通过FreeType的字符表进行查找
;2:使用注册表里的字体链接设置,使用Windows的转换函数直接查找
;当FontLoader=1时
;会保持启用的状态,但是所有字体链接的处理会交由WIN32API完成。
FontLink=2

;【字体替代】
;当FontLoader=0时
;0:什么都不做;
;1:安全替换方案(兼容性较好),根据以下FontSubstitutes的配置进行替换;
;2:完全替换方案(效果较全面,如替换后出现乱码,请尝试使用1),根据以下FontSubstitutes的配置进行替换;
;当FontLoader=1时
;会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成
FontSubstitutes=2

;【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸】
;交付 gdi++ 处理的最大尺寸(单位为像素)
;0-2147483647
MaxHeight=0

;【阴影设置】
;格式:水平偏移,垂直偏移,深色文字的阴影透明度(0-100),深色文字的阴影颜色,浅色文字的阴影透明度(0-100),浅色文字的阴影颜色
;颜色值格式:BBGGRR 
;Shadow=1,1,30,FFFFFF,20,000000

;【液晶显示器的优化配置】
;[0:None]  1:Default  2:Light  16:Legacy
LcdFilter=2

;【微调LcdFilter】
;LcdFilter>0,且AntiAliasMode>-1时,该微调才生效
;这5个值分别代表文字笔划中从左到右的笔划浓度,最小为0,最大为255
;注释掉这个参数则恢复使用
;LcdFilter=1,默认值为“16,64,112,64,16”
;LcdFilter=2,默认值为“0,85,86,85,0”
;LcdFilterWeight=20,80,120,80,20

;【字体缓存、内存的设置】
LoadOnDemand=1
CacheMaxFaces=256
CacheMaxSizes=33554432
CacheMaxBytes=67108864
EnableKerning=0

;【强制使用某一个字体】
;无视所有其他字体,全系统的字体都会被这里设置的字体代替
;ForceChangeFont=华文中宋

;【优先使用点阵】
;小于指定字号的文字将优先使用内嵌点阵
MaxBitmap=0

; DirectWrite 支持;DirectWrite support
DirectWrite=1

[DirectWrite]
;渲染模式,0=默认,1=锯齿,2=经典,3=经典自然,4=自然,5=自然对称,6=字体原型
RenderingMode=6
;Gamma值,不写则根据上面的GammaValue自动计算
GammaValue=1.5
;对比度,默认为1
Contrast=1.0
;抗锯齿程度,默认1
ClearTypeLevel=1

[Individual]
;【单独设置的字体】
;格式=Hinting, AAMode, NormalWeight, BoldWeight, ItalicSlant, Kerning
XSong=,,28,0,,
XSong SimSun=,,28,0,,
XSong NSimSun=,,28,0,,
XSong Sharp=,,28,0,,
XSong Sharp.SimSun=,,28,0,,
XSong Sharp.NSimSun=,,28,0,,
XSong Harmony=,,28,0,,
XSong Harmony.SimSun=,,28,0,,
XSong Harmony.NSimSun=,,28,0,,
XSong Classical=,,28,0,,
XSong Classical.SimSun=,,28,0,,
XSong Classical.NSimSun=,,28,0,,
XSong Tradition=,,28,0,,
XSong Tradition.SimSun=,,28,0,,
XSong Tradition.NSimSun=,,28,0,,

宋体=,,28,0,,
新宋体=,,28,0,,
SimSun-ExtB=,,28,0,,
仿宋_GB2312=,,28,0,,
仿宋=,,28,0,,
华文仿宋=,,28,0,,
华文宋体=,,28,0,,
华文中宋=,,28,0,,
Batang=,,28,0,,
MingLiU=,,28,0,,
MingLiU-ExtB=,,28,0,,
PMingLiU=,,28,0,,
PMingLiU-ExtB=,,28,0,,
PMingLiU_HKSCS=,,28,0,,
PMingLiU_HKSCS-ExtB=,,28,0,,
MS Mincho=,,28,0,,
MS PMincho=,,28,0,,

[Exclude]
;【除外的字体】

[ExcludeModule]
;【不渲染的程序,但仍会加载DLL】

[ExcludeSub]
;【排除不替换字体的程序】
;以下程序不会被进行字体热替换
;===== Office =====
;EXCEL.EXE
;POWERPNT.EXE
;WINWORD.EXE

[UnloadDll]
;【不渲染的程序,同时完全不加载DLL】
fontview.exe
MainType.exe
AxureRP.exe
FontCreator.exe
FontCreator.cn.exe
notecaselauncher.exe
notecase.exe
gnucash-bin.exe
bleachbit.exe
Fontforge_TC.exe
Fontforge_SC.exe
Fontforge_EN.exe
NexusFont.exe
dwm.exe

[FontSubstitutes@firefox.exe]
;【字体替代】
;系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体
;Fixedsys=XHei NSimSun
SimSun=XHei SimSun
@SimSun=@XHei SimSun
NSimSun=XHei NSimSun
@NSimSun=@XHei NSimSun

[FontSubstitutes]
;【字体替代】
;系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体
Segoe UI Variable=Maple UI
Segoe UI Variable Small Light=Maple UI
Segoe UI Variable Small Semilight=Maple UI
Segoe UI Variable Small=Maple UI
Segoe UI Variable Small Semibold=Maple UI
Segoe UI Variable Small Bold=Maple UI
Segoe UI Variable Text Light=Maple UI
Segoe UI Variable Text Semilight=Maple UI
Segoe UI Variable Text=Maple UI
Segoe UI Variable Text Semibold=Maple UI
Segoe UI Variable Text Bold=Maple UI
Segoe UI Variable Display Light=Maple UI
Segoe UI Variable Display Semilight=Maple UI
Segoe UI Variable Display=Maple UI
Segoe UI Variable Display Semibold=Maple UI
Segoe UI Variable Display Bold=Maple UI
Segoe UI=Maple UI
Segoe UI Semilight=Maple UI
Segoe UI Semibold=Maple UI
Segoe UI Black=Maple UI
Segoe UI Light=Maple UI

沉默的霸凌施暴者们

2024年9月18日 10:59

null

💡
本文包含部分关键剧情剧透,请谨慎阅读。
每个人都是施暴者

等了这么久,默杀终于上流媒体平台了。

恰逢假期,家里也来了客人,中午吃了饭便和家人们一起认认真真看看完了这部电影。

不似一些其他电影对内在观点输出的含蓄,默杀这部电影则是非常直给。而标题「沉默的霸凌施暴者们」是我总结的默杀这部片子导演想传达的观点。是呀,「默杀」这个名字和电影封面上每个人的状态不正是最好的阐述吗,同时电影中非常多的直给镜头都在赤裸裸展现。

施暴者

在影片的前半部分间断呈现的「霸凌」画面中,我们能看到所有相关人员的冷漠旁观,而他们都是这场悲剧的酿造者。

首先那几个施暴的女同学自是不必说,罄竹难书,说她们是未进化的动物动也不足为过,其次从校长,普通的同学,校园保安,方老师,房东,这些人在事件发生之后的选择及冷漠更是成了帮凶。

在看这部影片的时候我的姨妈恰好讲了一个这样的故事,

她在商场经营了几家服装店,这几家服装店都处于商场内,而门店旁边都是另外的老板开的娃娃机店,因为现在的娃娃机店都是自助式,没有营业员,所以平时需要有人打扫卫生,整理娃娃。我姨妈便和对方商量了,说承包下他们的这些工作,每天负责打扫的人给于50元补贴,其实我小姨的想法是看工作简单,想给员工捞些外快,她一分钱也没有赚。

因为工作其实非常简单,每天去一次,简单扫一下地,重新补充一下空掉的娃娃机就好了,其中一个门店有一个姐姐认为的确很简单,所以每天都积极的干这个工作,这也影响了同门店的其她同事,最终大家都抢着做这项工作。而另外一个门店有人则觉得工钱太少,工作很麻烦,导致没有一个人愿意去做,然后那个店的承包工作只能无奈放弃了。

这个小故事中两个门店所表现的选择不恰好贴合了默杀这部电影的故事内核吗?

如果故事中的这些人,能和第一个门店中的姐姐们那样,这些人中哪怕只有一个人能放下冷漠、事不关己的心态做出正确的选择,这个故事的结尾至少都不会这么悲剧。

因果

其次是中国儒释道三家观点中时常提到的「因果」。

在这个短短的故事中,所有人都在种下自己的因,也都纷纷吃下了由这个因得出的不同程度的「果」。

  • 施暴的女学生种下霸凌的因,得到了被在福报复杀害的「恶果」。
  • 校长、钟晓晴、李涵、警察戴国栋种下教育无方的因,得到了失去女儿、儿子变成偷拍狂的果。
  • 女房东种下事不关己的因,得到被挟持,绑架的果。
  • 方老师种下谅解、「她们还能被救赎的因」,得到被挟持、伤害的果。
  • 陈明章强奸9岁女儿、家暴老婆,得到被女杀死的「恶果」。
  • 在福杀复仇,得到付出性命的果。
另外小涵最后在监狱的画面我认为是「中国电影审核哲学」的影响下造成的,不纳入这个清单里,我更相信的是小涵已经逃离。

白鸽

电影中多次出现了白鸽,我个人认为这是影片对正义、正确的具象化。

最后在天台上,林在福完成了自己最后的使命,看着这起事件的所有相关人员围在一起,他们好似忽然将自己曾经的冷漠抛的无影无踪,背靠着无可匹敌的正义对着他口诛笔伐。

在福露出了嘲讽的微笑,转身没有丝毫犹豫的跳下了高楼,坠落的半空中,数十只白鸽飞起,好似托着林在福一般,而这在传统港片中只有在正义的英雄出场才会有白鸽飞舞的场景。

而这里,是为 英雄 来福送别。

司法体系的缺失让这一切发生,所以在福已经不相信法律,也认为自己的作为没有必要受到法律制裁,他所做一切都是发自内心,对于夺取那几个女孩子的性命心中自是也有愧疚,所有源自存从自己内心的价值观以死偿命,但是他不愿接受这已经畸形的司法体系的审判,和这些施暴者们的口诛笔伐,所以遵从自己真正的正确,自我了结。

最后

校园霸凌是全球所有学校都存在的普遍现象。

我可以肯定在所有学校,至少我的小、初、高、大的学业生涯中全都有。所有班级中都有那么一两个弱势者会或多或少的被班里的坏孩子、强势者欺凌,虽然大多数情况下并没有影片中表达的这么极端,但是对那些孩子所造成的伤害依旧是不可磨灭的。

我们作为这些旁观之人,如果都能伸出援手,这些悲剧可能就不会发生了,至少不会让一切都变得没有余地...。

想起电影「第二十条」中的一句台词:「所有正确的事情都是有代价的,但不能因为有代价就不去做。」 

愿世上处处都有白鸽飞舞...。

强心针

2024年9月16日 10:14

Photo by xiaoyu xie / Unsplash

在写完 馄饨、饺子和抄手 一文后发现回忆是真的很美好。

人们总说要向前看,向前看,未来会更加美好!所以总是回忆过去是不是说明当下过的并不好呢?

虽然这个论点并不充分,但是至少我这段时间想把自己归在这类情况中去。

人们在越是在困苦、迷茫、无助的时刻越是想下意识通过这些美好滋润干涸的心河,引导我们行进的方向,人在不断的进化过程中演化出了这种能力,虽然这种做法在有些人看来确实有些「鸵鸟效应」、「掩耳盗铃」,不过对我来说却也不全是望梅止渴的行为。

中国有句俗语「人生不如意十之八九」这个说法,好在还是有这「一、二」可以追求,因为任何事情都没有绝对的说法,他就像没开盒的「猫」,我们得给自己留一条退路,很多极端的人正是因为把这最后一条路也断了,而做出后悔一辈子的决定。

当然,我们也不能一直沉静在这些记忆里不出来。

毕竟和强心针一样,回忆所带来的美好是有时效的,在那个激励后的短暂余韵里,也是我们该重新迈步向前的时候。

然后,努力生活。

为了下一个「可能」的止步不前,生产另一支强心针。

两款CMS系统体验

2024年9月14日 12:59

Photo by Antonio Vivace / Unsplash

因为Ghost只提供文章的 HTML 代码,不提供 Markdown 的问题导致我曾经一度想更换CMS系统。但是将近800篇文章的转移工作十分麻烦,而且之前也尝试过用一些工具处理,无一都失败了,问题多是因为古早之前的很多文章存在格式问题,无法通过一些 HTML to Markdown 工具的转换规则,所以这个事也就一直没下定决定弄。

不过不影响我寻找下一位有动力让我这么做的CMS继任者。

最近发现了两款CMS工具,分别是:

  • KeyStatic: 之前有在周报 [[🤣JUSTFUN 周刊:第13期]] 中推荐过,一款基于Github的CMS系统。
  • PocketBase:一款用Go写的非常轻量、高速的CMS工具,使用简单,扩展性强。

KeyStatic

基于Github的CMS系统有很多,我所知道的就不下四五款,比如有: statamic/cmskeystonejs/keystone 等。

在周报里我也提到过,我是在Astro的CMS推荐列表中看到了KeyStatic,并在昨天花了一点时间体验了一下,整体体验还是不错的,总结如下。

  • 字段:可以进行丰富的字段配置和自定义,但是字段配置需要通过配置文件进行,而且可选项有点多,初上手会比较麻烦,好在官方提供了一些模板库,可以直接超。
  • 同步:可以基于本地也可以基于Github,基于Github模式的话每次增加文件文章后需要手动提交pull request,在页面上有个按钮,点击能跳转到Github,然后再进行后续操作,其实还是比较麻烦的。
  • 部署:官方提供了一些Astro、Next.js等集成,可以将网站、管理面板都部署在Vercel、Netlify、Clouflare上,对白嫖党来说是还是比较友好的。而且因为集成了SSG工具,网站也能同一时间进行更新发布。
  • 文件:
    • 文章:撰写的文章会在项目里生成对应的markdown文件
    • 图片:也会传到Github的内,官方目前提供了一个云服务,后续应该也是会支持S3、R2等服务的。
  • 定制化:后台的定制性非常强,你甚至可以在字段设置里使用你写的Astro组件,不过需要一定的开发知识。
  • API:很丰富,还提供了Nodejs的api库,操作非常方便。
💡
昨天在部署到Vercel后提示链接不安全,在文档里找了半天没发现有相关的说明,后来想起在初始化链接到GitHub时提示了需要设置一个发布网址,当时留空了,所以重新去Github中的App Setting里增加了Vercel链接的Rule后解决。

Poketbase

现在的CMS系统都设计都好强悍呀!昨天刷到蜗牛大佬Star了一个叫 pocketbase 的开源内容管理系统,程序是用Go写的,基于SQLite数据。

管理全在网页上进行,虽然结构简单,但是API、权限、功能拓展什么的都一应俱全,相当哇撒了。

  • 字段:官方提供的字段略少,而且Content内容目前只能保存解析好后的HTML字符串,而且没有自动生成slug。
  • 同步:因为是通过二进制程序直接运行,也有其他开发者提供了Docker版本,就是一个在线服务,所以没有数据同步问题,所以这部分会比较简单,好管理一些。
  • 部署:同上,直接起个Docker就行了,但是并没有集成前端框架,不过有完善的API、权限管理,在SSG中实现一下就好。
  • 文件: 文件可以存在本地,也支持上传到R2等服务上。
  • 定制化:这部分可能会比KeyStatic弱很多,目前文档里没怎么有这方面的介绍
  • API:很完善,接口权限划分的很细。

因为官方没有自带slug生成的功能,所以我跟着官方文档写了个转换脚本,很有意思。

onRecordBeforeUpdateRequest((e) => {
    const pinyin = require(`pinyin`);

    const title = e.record.get("title");
    const titleToSlug = (title) => {
        const pinyinTitle = pinyin(title, {
            style: pinyin.STYLE_NORMAL, // 普通风格
            heteronym: false, // 不使用多音字
        })
            .flat()
            .join("-"); // 将拼音数组转换为字符串并用短横线连接

        return pinyinTitle
            .trim() // 去除首尾空格
            .replace(/[\s]+/g, "-") // 将空格替换为短横线
            .replace(/[^\w\-]+/g, "") // 删除非字母数字和非短横线字符
            .replace(/--+/g, "-") // 替换多个短横线为一个短横线
            .replace(/^-+|-+$/g, ""); // 去除首尾的短横线
    };

    // 示例用法
    const slug = titleToSlug(title);
    e.record.set("slug", slug);
}, "posts");

官方提供的event hook也相当多,能玩出非常多的花样。

目前唯一的疑惑是为啥不提供markdown格式的fields呀?

至于换不换CMS,还是准备再蹲蹲。

如何快速解析HTML里的WikiLink?

2024年9月13日 00:59

前几天在 你好Astro! 中提到想把Obsidian的文章集成在博客中来,并实现CMS和Obsidian之间通过Wikilink的互相引用。

不过因为Ghost的API只提供了文章的HTML字符串,Remark衍生的WikiLink插件肯定都是无法使用的,而且目前Github上能找到的WikiLink相关的案例基本上都是整对于Markdown语法去解析的,对于我来说基本上没什么参考价值。

所以我只能走另外的路子了,不过方法无非就是以下几种

  • 正则过滤替换
  • 生成虚拟DOM处理

正则过滤

昨天晚上我倒是找到了 loveminimal 大佬写的一个姑且能用方案,但是这段代码有个不大不小的缺陷,就是正则会将所有标签内的 [[]] 内容都进行解析转换,所以 pre 代码块内的内容也会被解析成Wikilink,这意味着会无法控制的出现在任何你可能不想他出现的地方,所以目前这种方案暂时待选。

const wikilinks = (innerHtml) => {
    let _innerHtml = innerHtml;
    if (_innerHtml.indexOf('[[') > -1) {
        let _re = /!\[\[(([\/\-\.\*\$\&]|\w|\s|[^\x00-\xff])*\.\w+)\s*\|?\s*(\d*)\]\]/g;
        let _str = _innerHtml.replace(_re, '<img src="/$1" alt="$1" width="$3" />');


        // 2. 后匹配替换链接
        let _reLink = /\[\[(([\/\-\.\*\$\:\#]|\w|\s|[^\x00-\xff])*)\|?(([\/\-\.\*\$]|\w|\s|[^\x00-\xff])*)\]\]/g;
        // let _strLink = _str.match(_reLink);
        // let _strLink = _str.replace(_reLink, '<a href="$1">$3</a>');
        let _strLink = _str.replace(_reLink, (val) => {
            val = val.replace(/[\[\]]/g, '');
            let _arr = val.split(/\s*\|\s*/);
            let _relLink = _arr[0];
            let _desc = _arr[1] ? _arr[1] : _arr[0];

            // 检查链接描述是否包含 #锚点,形式有(我们假设当前文章名称为 test ,它有一个章节 ttt):
            // - 2.1. 孙子兵法#军争篇 - 此类可以正常识别
            // - 2.2. cpu-是如何制造出来的#18.-等级测试 - https://example.com/cpu-是如何制造出来的#18.-等级测试 ,
            //        此类锚点中包含特殊符号 `.` ,在新标签中打开,且无法正确定位到锚点
            // - 2.3 test#ttt - https://example.com/test#ttt 默认会在新标签页中打开,需要优化为在当前页面滚动
            // - 2.4  #ttt - 不能正常,会翻译为 https://example.com/#ttt ,丢失了当前页面路径
            let _idx = _desc.indexOf('#');
            if (_idx > -1) {
                // 2.4
                if (_idx == 0) {
                    _relLink = location.pathname.slice(1) + _desc;
                } else {
                    // 2.3
                    _relLink = _desc.replace('#', '/#');

                    // 2.2
                    _relLink = _relLink.replace(/[\.\、]/g, '');
                }
            }

            // console.log(_arr);
            // console.log(_desc);
            // return `<a href="${_arr[0]}">${_desc}</a>`
            return `<a href="/${_relLink.replace(/\s/g, '-').toLowerCase()}">${_desc}</a>`;
            // });
        });

        return _strLink;
    }
};

虚拟化DOM

这个方式就是在Nodejs里将HTML字符串虚拟化成DOM,再去对DOM进行操作,虽然理论上可行的,但是效率应该是极低的,这个我是不愿意使用的,所以直接排除掉了。

没有其他方案了吗?

真的没有其他方案了吗?

我今天这样想着,抱着试一试的心态换着各种关键字在Github上搜索,运气不错的让我找到了这个个库:html-parse-stringify ,他可以将html字符串快速抽象成一个AST语法树,我的想法是通过遍历这个语法树来找出文本内容,再反序列化成html字符串不就好了?

所以我试着按着我的思路写了个Demo,好像的确可行,而且还可以配置那些情况下包含的 [[]] 不进行渲染。


import HTML from 'html-parse-stringify';
var ast = HTML.parse(page?.html); // [!code highlight]
let fatherList = '';
function findTextNodes(node, text) {
    let result = [];
    fatherList += text; // 记录节点路径

    // 检查当前节点,并做wikilink的识别和路径排除,这里做排除名单应该很方便
    if (node.type === 'text' && node.content.startsWith('[[') && !fatherList.endsWith('precode'))   // [!code highlight]{
        node.content = node.content.replace('[[', '<a>test').replace(']]', '</a>');
        result.push(node);
    }

    // 如果有子节点,递归遍历
    if (node.children) {
        node.children.forEach((child) => {
            result = result.concat(findTextNodes(child, node.name));
        });
    }

    return result;
}

const result = [];

ast.forEach((node) => {
    const temp = findTextNodes(node, node.name);
    let fatherList = '';
});

const html = HTML.stringify(ast);

这是我目前能找到的最优方案了,不过这个方案应该也是偏向于解析成dom,不过这个库没有进行更多消耗资源的操作,应该是比传统的解析库性能更优秀的。

各种标签测试

WikiLink测试

[[note1]]

[[note2]]

[[note3]]

[[note4]]
  • [[note5]]

[[note6]]

[[note7]]

[[note8]]

@1900’Blog
All work and no play makes Jack a dull boy
@1900'Blog

https://cms.1900.live/ni-hao-astro/

测试一下文字包裹[[note9]]后的解析情况

[[note9]]

实际引用测试

已经初步完成联动,目前的考虑的策略顺序如下,

博客中

  1. 优先从CMS中去匹配文章 Title 一致的文章
  2. 如果博客内没有一直的则去Obsidian中匹配文件Title字段一致的文章
  3. 如果有多条数据只返回最前面一条
  4. 如果都没有则不进行转换

Obsidian中

  1. 优先匹配Obsidian中Title一致的文章
  2. 如果没有则去博客内匹配Title一致的文章
  3. 如果有多条数据只返回最前面一条
  4. 如果都没有则不进行转换

如Obsidian中的 About 这篇文章,在博客中以 [[About]] 写入,最终文章内就会解析成 [[About]] 。

因为Astro的本地路由都是基于网站根目录,所以我们只要将博客和Obsidian的文件分别进行静态生成,并在生成过程干涉 [[]] 的转换成 <a href=''><a/> 标签,然后给出正确的slug,便可以很方便的实现SPA形式的页面跳转。

完。

🤣JUSTFUN 周刊:第14期

2024年9月12日 18:20

Photo by Andrew Neel / Unsplash

一图

骑行路上

1. 种的辣椒 2. 骑行路上

流水账

  • 2024年9月2日:忽然对Astro的语法有了新的理解,也许我可以做到?
  • 2024年9月2日:如果地球是个学校,各个国家是上学的孩子,那么老鹰就是校园霸凌的恶霸。
  • 2024年9月2日:自由的含意是:我能自由的干你,你不能还手。
  • 2024年9月2日:我真是个傻逼,之前吐槽说Ghost文章丢失了,刚刚忽然发现特么是我写成Page了,压根不在Posts列表里。
  • 2024年9月4日:路永远在自己的脚下。
  • 2024年9月4日:正式靠别了Tai,改用ActivityWatch
  • 2024年9月4日:11ty-book有人点了Star,开心
  • 2024年9月4日:成年人变得更成熟时需要同时学会两件事情:第一,你想要的东西,懂得主动提出要求,不要让别人猜;第二,你提出来的要求,无论别人接受还是拒绝都要尊重别人的决定。这两者看起来不可调和的矛盾,其实是你自己对于被拒绝的恐惧,因为恐惧所以要么害怕提出要求,要么要求被拒绝后转化为厌恶情绪。
  • 2024年9月5日:开始移植11ty-book到astro上,新主题:astro-book
  • 2024年9月5日:我以后的孩子英文名可以叫 Dura ?是柔软、纯洁的意思,好像是乌克兰语?
  • 2024年9月11日:终于完成了Astro的所有功能移植。

读了、看了、听了

  • 2024年9月1日:看了 [[花束般的恋爱]] ,对两性相处有了新的看法,可以说是教科级别的两性相处案例。
  • 2024年9月2日:看了[[因果报应]] ,可惜是五分钟解说版本版本,后悔。
  • 2024年9月6日:在微信听书听王阳明——知行合一有声书
  • 2024年9月6日:开始看 [[心流]]
  • 2024年9月10日:看了 [[从21世纪安全撤离]],想起我小时候想的那些特异画面就是这部电影的风格,独一无二的味道,还是以前李献计一样的味道。

发现

一个动作改善脖子前倾

#知识 来自 x

在推上看到一个改善脖子前倾动作的视频,试了一下挺有效果,不过要长期坚持才行。

地址:x.com

极简主题参考

#设计 来自 ?

偶然发现的一个博客平台,他们默认提供的主题风格多是纯文字极简风格,简洁大气,找不到设计灵感的时候可以参考一下。

地址:Templates - Blot

足不出户看全球

#网站 来自 ?

偶然发现的一个全球范围热门景点的在线视频监控网站,不过国内的公开摄像头比较少。

网址:实况摄像头 马尔代夫-库雷杜 | SkylineWebcams

TV版Surfboard

#工具 来自 Github

优化TV操作的SurfBoard,懂的都懂。

项目地址:GitHub - getsurfboard/surfboard

GitHub - getsurfboard/surfboard

基于Bilibli音源的在线音乐播放器

#工具 来自 Github

一款基于bilibili的在线音乐播放器。

Eno Music 是一个基于 bilibili 的音乐播放器,完全改变了你在该平台上的体验。它重新构想了 bilibili 作为一个音乐平台的样子,并提供了独特而沉浸式的体验。

项目地址:GitHub - cloudflypeng/eno-music

3D打印桌面手机支架

#工具 来自 Youtube

一个可以通过3D打印制作的多功能桌面手机支架,emmm,应该说桌面时钟更贴切?

各种加载样式

#网站 来自 ?

无意间找到的一个拥有各种五花把门加载效果的CSS网站,在线预览,及拿及用。

网站地址:The Classic CSS Loaders Collection

你好Astro!

2024年9月10日 08:07

null

选型往事

在2024年3月份,我正式将Ghost博客作为无头CMS使用,并搭配SSG工具生成静态页面 。

其实在当时的技术选型时其实已经考虑过Astro,当时的Astro的版本号还是3.x,不过因为自己的技术不够成熟,编码思路还一直是Ghost时期的handlers这种模板结构,尝试多次无果后最终还是选择了11ty作为网站的生成工具,并撰文 新主题11ty-book 分享了当时的成果。

积累

不过这段时间我都有在不间断的重新查阅Astro的文档,思考该如何用Ghost搭配它,希望能用上这个热门的网站生成器。

事情的转折点是前几天发现 Astro-remote 这个插件,它提供的组件能加载HTML字符串或远程Markdown文件,渲染成网页内容,并在这个过程中还可以对HTML元素使用Astro的组件进行替换,这意味着可以不再用之前在11ty中那样,用 JSDOM 这个库通过通过虚拟DOM进行操作 eleventy/transforms/parseContent.js

之后我便根据自己的思路写了几个Demo,以前困扰的几个点似乎都能解决

  • 可以通过这个插件的容器替换功能,使用Shiki、Prism等工具的代码高亮
  • 可以自定义容器,之前 hugo-book中的Columns Expand 等功能都机会实
  • 甚至可以把之前Obsidian 数字花园整合进一个网站来。

新开始

所以没有犹豫,在9月2号就开始了移植工作。

这段时间,我边看文档边学习、实现、思考,得益于我在11ty-book上花费的时间和对Node.js逐渐了解,以前看不懂的Astro代码忽然像是顿悟般的或霍然开朗,明白了组件形式和之前11ty时传统模板形式的区别,和意义。

Astro的开发体验的确很棒,这也是我之前在选型11ty之后依旧还对Astro念念不忘的原因。

高速的迭代频率,优秀的设计语言和活跃的开发群体让这款工具一直充满着活力,得益于官方全站的中文文档,而且手册十分详尽,让我在实际开发过程中能少走了不少弯路。

终于在昨天,一共历时七天,我终于将11ty-book的功能移植了个80%作用,并提交了第一个正式版本到了Github。并在昨天晚上正式切换到了Astro版本的huog-book。

开源地址:https://github.com/rebron1900/astro-book/

不过目前以前还有一些问题还未来得及处理,现在还有一些构思等待实现:

  • 整合Obsidian
  • 实现Ghost CMS和Obsidian之间互相的WikiLink引用
  • 全站搜索
  • 影集功能
  • 文章内丰富的卡片引用,如NeoDB,CodePen,视屏,音乐等。
  • 试试用SSR实现文章的密码访问
  • ...以及其他无数种可能

结束语

发现自己这些年在折腾博客这条路上越走越远。

从以前的博客大巴只会转发文章,到后开始学习编程,开始SelfHost Wordpress,开始满世界找主题、找插件优化博客,到现在我已经能流畅使用JavaScript,Node.js、Python等工具进行代码开发,之前还自己实现了一个在博客显示博主状态服务 将博主PC上使用的应用信息实时显示到博客,体验了一把Socket和服务端的开发,那时候还狂妄的想着「自己是不是已经可以前后端一把梭了?」,哈哈。

虽然13年前毕业后我没有从事IT工作。

但是我热爱编程,我喜欢编程,我喜欢互联网蓬勃的生命力。并且不同于需要拿找饭吃,我更多是处于喜欢、兴趣使然,基于这个初心去学自己感兴趣的技术,并在折腾的路上学以致用。

我很满足,也很开心,希望我20年后依旧初心不改。

Thks。

All the Styles

2024年9月9日 17:30
What will your content look like? See the styles below! Headings Start a section with one of these beauties. Use ## to quickly create a second-level heading (h2). h1 is reserved for the title. Heading 2 Heading 3 Heading 4 Heading 5 Heading 6 Text Here's a sample paragraph from The War of the Worlds by H. G. Wells. Read the book. Smart uses Work Sans for body text and Archivo for headings, all loaded locally. No one would have believed in the last years of the nineteenth century th

Obsidian 和 Windows 我都用什么插件和工具

2024年9月3日 21:40
刚刚看到雅余哥发布了一篇 Obsidian 和 WordPress 我都用什么插件 的文章,遂也想分享一下我的Obsidian所用的插件,而我没用WordPress,所以就分享一下Windows上的一些工具把。 Obsidian 先聊聊Obsidian,其实笔记软件我用过很多了,从Trilium到Logseq再到Obsidian,我换软件并不因为那款软件不优秀,相反,他们都非常有自己的特点,只单纯是因为我的笔记习惯发生了改变,Trilium和Logseq的优缺点我之前的文章中也有细碎的提起过,不过和本篇文章主题不搭就放待下次再说把。 主题 先说说主题把。 最开始使用的Obsidian主题是Minimal,一款非常简洁的主题,热度一直也都是名列前茅,不过在 JUSTFUN 周刊:第四期 时我分享了我在B站发现的新主题 Border ,Border同样也是一款简约风格的主题。 但是不同于Minimal的极简,Border的配色要略微活泼一点,且同样拥有丰富的自定义选项,并对一些插件做作了适配,而且我非常喜欢卡片样式的布局,在调整好后会让我有一种协调的舒适感,记笔记也更有动力

VPS备份脚本修复

2024年9月3日 11:15
之前在 服务器重装设置指南 一文中分享了关于初装VPS后的一些列的优化操作,其中分享了一个数据的备份脚本,通过丰富的配置项即可实现文件、mysql数据的多版本备份策略,备份策略参见下放列表: * 保留一年前的1个备份 * 保留150天前的1个备份 * 保留90天前的一个备份 * 保留30天前的1个备份 * 保留最近7天的每天备份 用尽量少的空间备份足够容错的数据备份,并通过rclone等工具同步到其他网盘或储存空间之上。 但是最近忽然发现这个脚本似乎没有正常工作,当时是通过ChatGPT生成的备份脚本,可能存在某些问题,在排查日志时发现是因为路径问题导致脚本中断。 所以今天又用AI重新对脚本做了修复和优化,目前能正常工作了,如果有需要的朋友可以拿去体验。 💡配置中需要用到.my.cnf文件,这个是mysql的登录凭证,格式如下 [mysqldump] user = root password = gdsagag1217B #!/bin/bash set -e # 遇到错误停止执行 set -x # 打开调试模式 # 自定义变量 CUSTOM_HOME="

🤣JUSTFUN 周刊:第13期

2024年9月2日 14:39
一图 流水账 * 2024 年 8 月 27 日:我们小两口吵了一架,各自发泄了积累的情绪,第二又和好了。 * 2024 年 8 月 27 日:将博客全页面内的emoji 替换成了动态Emoji。 * 2024 年 8 月 27 日:优化了一下 Github Workflow,做了缓存。 * 2024 年 8 月 27 日:Ghost 写了一篇关于如何替换页面 Emoji 的文章发布时丢失了,用了这么久 Ghost 第一次遇到。 * 2024 年 8 月 28 日:梗图。 * 2024 年 8 月 30 日:用 DuckDuckGo 的 GPT4o mini 重新优化了一下发哥的地图代码,居然意外解决了卡顿的问题。 * 2024 年 9 月 1 日:利用 Google Maps 实现了足迹页面的文章关联功能,之后打算搭配博客搜索功能,自动根据地点关联文章。 * 2024 年 9 月 2 日:又在动切换到 Astro 的歪心思,之前没切是因为代码看不太懂,最近又重新看了一些主题,似乎又了新的理解,现在更有把握了。 读了、看了、听了 * 读

让文章内的Emoji也动起来。

2024年8月29日 15:31
💡不过这种方式似乎有被注入的风险,现在换成在SSG工具中进行替换,代码是同样的。 ❤️❤️❤️ 在前文 使用动态 Emoji 一文中提到了我是如何添加动态Emoji表情到Artalk中的。 但是,最近发现有一些朋友可能会直接通过输入法输入Emoji,而我的文章中也经常会使用Emoji,这导致了很多可以动的Emoji没有动起来。 所以又在这个上面拓展了一下,这次把文章内、Artalk评论用户自己输入的Emoji也全都做了替换。 构想的实现步骤如下 * 通过js的正则获取页面内文章主体、Artalk评论元素中的Emoji字符 * 使用这些字符去我的Emoji.json内匹配 * 匹配到数据就替换成img标签 根据以上构思结合Kimi,得到了以下代码,代码功能和使用方式直接通过注释写在下方代码块中。 //定义一个替换函数,接受一个需要替换的Node数组 function replceEmoji(list){ // 定义获取Emoji的正则 const emojiRegex = /([\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF

🤣JUSTFUN 周刊:第十二期

2024年8月26日 12:33
一图 流水账 * 2024 年 8 月 16 日 临时处理了一下 main.js 文件过大的问题,速度应该恢复正常了。 * 2024 年 8 月 17 日 刚刚刮了一阵狂风,忽然又开始下雨了,雨点激起的尘土味真好闻。 * 2024 年 8 月 20 日 黑悟空正式发布了,看了一上午直播,画面太漂亮了。 * 2024 年 8 月 23 日 读完了《山茶文具店》 * 2024 年 8 月 23 日 官方公布全平台销量已经超过 1000 万套 * 2024 年 8 月 25 日 感慨,持之以恒是一个人成功的最大基石。 发现 Sparkle 一款 Mac 上的 AI 桌面整理工具 #工具 来自 x 在刷 x 时发现的一款基于 Ai 的桌面分类整理工具,效果看起来还挺不错的,Windows 实现起来应该并不困难。 官方网站:Sparkle Rime 部署管理工具 #工具 来自 Github 一款基于 Ruby 开发的脚本工具,可以用来管理 Rime,实现自动部署,无痛升级配置等等,全平台支持。 项目地址:GitHub - Mark24Code/rime-

馄饨、饺子和抄手

2024年8月25日 13:55
最近被好友推荐了一本肖复兴老师的散文集「正是橙黄橘绿时」,肖老师在自序中介绍到标题引自苏轼的「一年好景君须记,正是橙黄橘绿时」,所以书内皆是关于肖老师近些年来的美好回忆,整本书充满着温馨、温暖的味道。 我虽与他有些年龄差距,他所书中所提之事皆是他壮年时期所发生的,与我而言却是幼年时期,但是也能产生共鸣,唤起我那些温暖的记忆。其中开篇的「绉纱馄饨」更是让我联想起了很多儿时至今的一些关于面食的记忆。 所以借此机会,也说说我关于「馄饨、饺子和抄手」的「橙黄橘绿时」吧。 我虽是南方人,但是我父亲确尤为喜欢面食,这可能和他以前的职业:长途司机有关,为了准确送达货物,节省时间,车上经常会备些馒头、包子,且因跑过一段时间兰州,所以尤其喜爱兰州拉面。我耳濡目染之下也开始喜欢面食,其中手工面条和薄面皮包的饺子、馄饨和抄手更是最爱。 所以我也以个人理解,不考究这三种食物专业背景,仅以自己体验、回忆为基础的前提下分享一下它们和我的故事把。 馄饨 关于馄饨,我的第一印象其实是「奇怪的三轮车」、「铝皮架」以及「叫卖声」这几个毫无关联的词汇,至于为什么呢? 我刚出生那几年是住在农村的,那时候结婚就

Python中将GCJ02转换为WGS84坐标系

2024年8月18日 15:09
前文 用workflow转换Google地图kmz数据为geojson数据 中提到了我是如何获取Google Map里MyMap的数据,并自动转换为GeoJSON数据应用在博客上的。 但是最近在查看我更新的地点时,发现有部分数据实际应用在Mapbox中会存在偏差,导致很多定位在陆地上的地点漂移到了江河之上。比如这个 重庆来福士广场 就漂移到了长江上。 其实这个问题我发现已经满久的了,之前也咨询了一下 昱行 和 大发哥,不过他们的给的方案我没太弄明白,当时碍于技术问题一直处于搁置状态,最近因为重新更新了地点,又把这个问题给勾了起来。 不过这次这个问题让我联想起之前在将华为的数据导入到Strava时好像也遇到过,同样也是坐标偏移的问题,当时同步软件里有个「使用XX坐标系」的选项,启用之后重新同步的数据就可以在Strava正常显示了。 所以我尝试找了个坐标系在线转换工具 EasyMap ,这个工具可以很方便的进行多种坐标系的互相转换,我试着将转换好的GeoJSON数据复制进去,并转换成WGS84坐标系后在贴到 Mapbox 的在线 GeoJSON 工具 https://geojson

腼腆的我们

2024年8月17日 16:03
上午在翻阅订阅器更新,在 月夜Moonlihgt 的博文 希望有朝一日,能笑着谈论今天 一文中看到了一本他推荐的书 《山茶文具店》 。 根据他的介绍,这本书大抵讲的是「代笔人鸠子代人撰写书信的故事」,想来作为代笔人的主人公自是会在撰写的过程中了解到各种人或平凡、或曲折、或生离死别的故事,当时便有了兴趣,便将这本书纳入了待读清单,并在 https://z-library.rs/ 中下载了电子版书籍等一有空闲时间便开始阅读。 而提起写信,我之前也在 你写过信吗? 分享了我儿时因为家庭变故和家人分居多地,通过书信交流近况的故事。 那天也是恰好在找证件的时候发现我妈留存的这些夹带珍贵记忆的信件,这么多年后重新来细细阅读,我已经不似儿时那般懵懂无知,能从姐姐的青涩的字里行间感受到那一份孤单、无助和迷茫,即便过去这么久也依旧让我红了眼眶。 不似欧美人那般,我们亚洲人对于情感是相对克制、含蓄和腼腆的,往往在日常的大多数时候不会很强烈的表达出自己的情绪,而且很多人可能一辈子没有和自己的父母、亲人说过「我爱你们」,而我觉得书信是有别于电话、视频电话、当面沟通,更适合人吐露情感的手段之一,从我姐姐

🤣JUSTFUN周刊:第十一期

2024年8月15日 22:59
一图 近期 重庆特种兵大作战两日游:1 、 重庆特种兵大作战两日游:2 两文中已经大量贴图,就不再单独展示图片内容了。 流水账 * 最近公司需要招人,在使用 58 同城的时候发现如今企业想要招人已经必须使用付费服务了,去年还是能免费发布招聘和进行付费手动刷新,但是如今连发布都要收费了,这脖子是越掐越紧。 * 最近因为出去玩需要和老婆互相交换相片,我们两个备份工具都使用的阿里云,但是在实操的时候发现这个交换过程十分复杂麻烦,因为阿里把备份相册独立于云盘之外,弄成了一个单独模块,和原有的文件体系不搭边,所以即便分享过去也无法直接合并进云端相册里,太脑残了。果然云盘的尽头就是 NAS 吗? * Notion 终于上中文了,距离他们说要适配中文已经四年之久了,这是全员重新开头学的中文吗?应该不是,社区里那么多志愿者可以免费服务呀? * 咸鱼准备收费了,拟向卖方收取基础软件服务费(预计将在 2024 年 9 月 1 日起,按单笔订单实际成交额 x 0.6% 收取,60 元封顶) 发现 Video file compressor 视频压缩 #工具箱 来自 木木 木木大佬分

重庆特种兵大作战两日游:2

2024年8月14日 11:21
接上篇 重庆特种兵大作战两日游:1 本来以为会是接连两天的大阴天,可惜第二日的气温就开始直线升高,虽然没到40°那么夸张,但是也切身感受了一下重庆的潮热天气,出游的路上热的都没怎么吃小吃,光喝水了...。 我将一间给的行程规划和我自己整理的行程图贴一下,以供有需要的朋友取用: * 我的行程规划 Canvas:重庆 GAI 演唱会两日游 * 我的 Google 行程地图:8 月 10 日重庆游 - Google 我的地图 * 一间的行程规划: * 线路一:🌸 重庆路线 * 线路二:重庆游玩计划 * 线路三:2024 年 4 月 凤梨 重庆路线 💡我的行程规划是在 Obsidian 中用 Canvas 制作,并用 Dayu 推荐的一个导出插件obsidian-webpage-export导出,部署在 Netlify 上,在旅行前也可以分享给同行的人一起查阅行程。💡所有图片统一放在文末,对图片感兴趣也可以直接点击 图集 跳转查阅 线路安排 Day2高温徒步日 * AM8.30 重庆市人民大礼堂(早饭出发、打车)(停留20min) * AM9

重庆特种兵大作战两日游:1

2024年8月13日 23:54
下篇 重庆特种兵大作战两日游:2 门票 抱歉取了个这么逗逼的名字,因为这次重庆之行的旅程确实强度拉满了。 事情是这样的,上次在 成都仙人掌🌵音乐节 后还想再体验一下比较燥的现场,而回来后恰好又看到当时 GAI 他们在长沙的 YOLO 音乐节现场,简直不要太炸裂,不过当时川内已经没有其他音乐节了,而且他们也没有巡回演唱会的计划,当时就暂时搁置了。 但是 7 月份忽然收到大麦 APP 的通知,说 8 月 10 号 GAI 会在重庆开启本年的首场巡回演唱会,不过可惜的是首轮放票我们已经错过,加之两个外甥过来,所以无奈之下只能又暂时放弃了这个计划,去了 邛崃天台山。 不过不知道是不是生日 Buff 加成,天台山回来后偶然间打开携程,并鬼使神差的点了一下 GAI 的演唱会词条,居然发现有一张 599 的票,当时没有犹豫立马拍下,但是票源只有一张,不过 8 月 2 号会再发一次回流票,我为了抢票还去找了一个 Atuo.js 的大麦网抢票脚本,不过依旧没有抢到 599 的票。 无奈之下只能求助咸鱼黄牛了,问了一下说是可以我们提供账号他们代抢,费用 50、100、200 都有,这种风险

🤣JUSTFUN周刊:第十期

2024年8月7日 00:08
上周因为年龄的焦虑推迟了更新,之后的一个周末又因为生日的到来选择了出去散心,所以接连拖了两周,今天终于把之前落下的所有的事情处理了个大概,能静下心来整理本周的周刊。 之后将恢复正常更新, 另外,下一期开始将同时发布到 Quial 上,谢谢。 一图 最近 33岁的旅行 一文中分享了不少照片,这边就暂时不做分享了。 流水账 * 忽然发现自己博客的主 js 文件在压缩过后依旧差不多有 3M,虽然我进行了一些优化,但是依旧还有 1.7M,十分拖慢加载速度,是该考虑做一下重构了。也许可以试着换成 Astro? 发现 开源按键可视化工具:Keyviz #工具 来自 bilibili 一些做 UP 主的朋友在录制视频时可能会需要在进行操作时同时在屏幕上显示按了什么按键,这款开源工具就是解决这个问题,而且它还很漂亮,拥有丰富的自定义设置。 项目地址:GitHub - mulaRahul/keyviz: Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and 🖱️ mouse act

33岁的旅行

2024年8月1日 18:50
在山上遇到一位看起来年纪很大的老爷子翘着二郎腿吃饭,一大碗白米饭上铺着四五块烧白,还有一些空心菜。旁边的石台上摆着一些特产,一问才知他已是98岁高龄。我大为触动,看来在这深山里快乐、长寿的秘籍就是简单纯粹,过好每一天足矣,那我在城市里能做到吗? 前几天搬砖时看了眼日历,忽然发现自己怎么就已经要过 33 岁的生日了呢?这个时候回想刚毕业的记忆仿佛就像是昨天一般,我很好奇,为什么这种时候却不会觉得记忆模糊了呢? 不过生日总得过,自己也想趁着这个时候放松一下,释放一些心理的压力。 我们那儿基本上都是过农历生日,换算成阳历差不多是每年的七至八月生日。而我以前的生日基本上都是在家里渡过。 不过在年纪大了之后已经不太想和父母过生日了,这应该是我的一种逃避心理,和他们在一起过生日时氛围总觉得不太对,话题聊着聊着就经常会往生小孩、未来工作、要成熟担家这类严肃的话题展开。 所以我前年开始,生日不在家里搞聚餐了,那个时候打算每年生日的时候和家人找个地方玩一玩放松一下。 我前年去的是莹华山,在山上住了一次帐篷酒店,还去山上的大峡谷玩了漂流,之后下山去看了三星堆博物馆,可以说玩的很尽兴了,还写了一

如何对抗自己?

2024年7月24日 22:26
最近状态很不好,延迟了几天才发的周刊其实是最好的证明。 我如今三十出头,正是而立之年,本当积极向上,激流勇进,但是同时会面临以前懵懂时不曾有过的多种压力,而压力会滋生各种负面情绪。 我们这个年纪多数人如果不出意外,也许已经结婚,甚至有些朋友已经有了小孩,而如何和睦的与另一半、另一半的家庭相处,如何养育小孩,如何多多挣钱给这个家庭带去优渥的生活条件,这会持续不断的产生内部压力。 其次是在朋友圈内、在闲聊中发现的同龄人更出色的表现,或者那些之前可能默默无闻淡出你的生活,却在这个时候忽然知道他新境况的朋友。我们愕然的发现他们忽然开始有了欣欣向荣的生意、优质的工作岗位、和睦的家庭,也许不少人甚至已经孩子都大到可以打酱油叫叔叔了,这是外在压力。 我们,不,也许只是我。 在这个时候的低落情绪伴随着自我怀疑就像逐渐涨潮的海水,你能眼见着它们没过你的口鼻,感受着逐渐涌来的窒息,并在窒息中独自一人承受痛苦。 正如古人所言「三十而立」,虽然这个时候的我们只能独自承受,但真正的自我救赎之路也存在与痛苦之中。 其实最好的救赎之路就是从任何一件你有能力改变的事情做起,并坚持下去,在初有成果后再进行

🤣JUSTFUN周刊:第九期

2024年7月21日 10:49
新增视频板块,分享我刷到的一些有意思的 B 站视屏 一图 流水账 * 这周周刊依旧推迟了 2 天,惭愧 * 一是带我两个外甥 * 二是这种工作有点忙 * 三懒了 * 川普被枪击,少数派一位作者写了一篇「逃生指南」引起了大家的讨论,我的个人观点:当时躲起来,逃跑的行为是没什么问题的,因为这是人性本能,不过拉人垫背这种做法比较有悖人伦。在这种特殊情况中,除非受过非常专业的训练,不然普通人的第一反应都是是呆住或者躲在别人身后。 * 之后的第二反应会根据每个人的思维发生变化 * 胆小者想着第一时间逃离现场 * 好事者会想着去了解发生了什么 * 网红可能会自拍跳一段社会摇?(捂脸 * 这周微软发生了很多事情,其中一项甚至影响了全球 * 365 服务故障,OneDrive 无法使用 * 因安全组件 CrowdStrike 引起的 BUG,全球很多公司都大量出现蓝屏故障。 发现 Freemind:有意思的白噪音定制网页 #工具 Freemind 是 V 站一位大佬制作的白噪音生成网页,在这个网页中你可以叠加

🤣JUSTFUN周刊:第八期

2024年7月14日 00:13
这期的周报又晚了一天,因为最近外甥和外甥女过来玩了,能安静写字的时间变少了。 抱歉,刚落笔时就发布,导致很多错别字,睡醒再来改🙃 一图 流水账 * 外甥和外甥女过来玩了,这几天白天上班,下午下班后还要送他们去学游泳,晚上则再陪他们看电视、玩小游戏,算是提前体验带娃生活了。 最近几周和几个月,随着欧盟宣布计划对进口中国电动汽车加征高达 37.4% 的临时关税,这些碎片化趋势凸显出来。在此之前,美国于 5 月对中国电动汽车征收 100% 的关税。 在欧盟对中国制造的电动汽车加征关税前,中国对欧电动汽车出口在过去几年猛增。一项研究显示,中国电动车出口额从 2020 年的 16 亿美元跃升至去年的 115 亿美元,占欧盟电动汽车进口总额的 37%。 * WTO总干事警告全球贸易面临崩溃 “希望不要重蹈1930年代的保护主义覆辙” * 昨天牙疼了一晚上,我也一晚上没睡。早上第一件事就是去牙科,目前上了药,终于不疼了,但是完全提不起吃饭的兴趣。 * 用云闪付 + 企业微信日历提醒和管理信用卡还款,基本上很少出现逾期的情况了。 * #Switch Switch

来自被进化所抛弃产物的重击

2024年7月12日 20:38
不知道是不是因为昨晚上那一顿烧烤犯的罪,还是水了 晚风、夜色和腼腆的我 这篇文章的缘故,入夜后嘴里仅剩的两颗智齿中的其中一刻忽然开始不安分起来,像是陷入终局的拳击手般重拳出击,殴打了我整整一夜,疼的我死去活来。 我的右半脸几乎在整夜都持续保持这一种刺痛,这种疼痛来自牙根深处,刺痛频率在2-3秒之间,我甚至一度觉得就像摩斯电码那样,或者说就像紫薇被容嬷嬷强迫着做针灸一般,边扎还边靠在我背上问我「崽种,爽不爽?」,我只能像个小娘们一样哭着喊着「不要,不要,啊!容嬷嬷,我错了」。 一两点的时候疼的实在有点熬不住了,人都有些恍惚了,便起床去找药。 哪知道我家似乎没人有牙痛这个毛病,根本没有准备任何牙痛相关的药物,无奈之下只能拿了几粒花椒咬在病牙处,虽然有所环缓解,但依旧一晚上都没办法入睡。 其实我这两年来刷牙的习惯保持的挺好的,每天早晚都会刷牙,而且晚上刷牙后就不会再吃东西。而且除了电动牙刷外还给我这一口宝贝们配了冲澡器(冲牙器), 不过人类的进化后被抛弃的产物就是这么的不安分,总会在不经意间给你个惊喜。 其实发作的这颗智齿在之前就有发作的征兆,当时还专门腾了一上午去医院做检查,医生

晚风、夜色和腼腆的我

2024年7月12日 00:37
这几周一直都在坚持更新「JUSTFUN周刊」,截止目前也有7期了,而且此间「节气」的图片也没有落下,但是也有段日子没有写正儿八经的博文了。 倒不是我没有东西想写,反而心中积酝着很多东西。 而是不太想将这些东西吐露出来,即便是在博客这个面向少数网友的「文字载体」里,因为这里毕竟还算是个公共区域,而我平常也算是以半实名状态活动在博客圈内,抒发这些敏感情绪总是有点不太好意思。 不过为什么又在这个点写下这篇酸溜溜的文章呢? 因为总有憋不住的时候把...。 想着那就擦着边,就着夜色和晚风写点不着边际的废话权当抒发了。 写完再删了 ... 以下写了不少,写完后于我而言倒也算痛快。 为了不让大家看笑话,完笔时全删掉了。 大家看个乐呵。

🤣JUSTFUN周刊:第七期

2024年7月7日 11:58
一图 流水账 * #知识 不吃早点是非常容易得胆结石的,原因是不按时吃饭,胆没有规律性工作,胆汁停留时间过长。 * #知识 乌龙球一词源于英语的“Own goal”,直译成中文为“自进本方球门的球”。由于粤语“乌龙”有“搞错、乌里巴涂”之意,所以香港记者便在报道中以“乌龙”或“乌龙球”来翻译“own goal”。中国大陆记者也借用了香港的这种译法。而中国成语的“自摆乌龙”、“乌龙大礼”也成为乌龙球的另一种戏称。 * #资讯 在TG上看到 OpenSSH出现高危远程代码执行漏洞 一文,遂用 ssh -v 检查了一下自己的SSH版本,似乎在受影响范围,赶紧升级一下,整理了一下升级流程 升级SSH版本到openssh-9.8p1 * #流水 今天有人帮朋友在博客群里征婚,是位大概30岁左右的男士,深圳户籍。看他的征婚简历,个人条件其实还算不错的。 * #流水 浏览器又从 Chromium 换回了 百分浏览器 ,换了后Instagram死活打不开,不知道是我梯子的问题还是换浏览器导致的。 * #技巧 企业邮箱其实可以设置客户端专用密码让第三方客户端登录且是长时间有效,避免密码

OpenSSH高危漏洞和升级教程

2024年7月2日 12:32
在TG上看到 OpenSSH出现高危远程代码执行漏洞-影响超过1400万台暴露在公网上的服务器 一文,遂用 ssh -v 检查了一下自己的SSH版本,似乎在受影响范围,遂打算赶紧升级一下。 已知受影响的版本有: * 低于 4.4p1 版 (不含此版本):受影响 * 高于 4.4p1 但低于 8.5p1 (不含此版本):不受影响 * 8.5p1 及后续版本到 9.8p1 (不含此版本):受影响 问了一下GPT,给的方案是 sudo apt update ,但是不管用,后找了一篇教程 ssh爆漏洞了,手动更新OpenSSH教程,整理了一下相关资讯,教程和注意事项如下。 💡提示 升级后你的 sshd_config 设置会被覆盖,再重启服务器前请重新设置配置文件。 Ubuntu 的软件源更新了 https://ubuntu.com/security/notices/USN-6859-1 Debian 11 12 已经修复了 https://security-tracker.debian.org/tracker/CVE-2024-6387 尽量使用包管理更新openssh

🤣JUSTFUN周刊:第六期

2024年6月30日 14:40
一图 流水账 * 这种没有建设性的评论我已经习惯选择性不看了。 毕竟说废话,发表幸灾乐祸情绪并没有成本,而且这种人在地球很常见。 * 💡Ghost 5.86.2 更新了新功能,现在可以在文章内通过输入 @ 符号快速插入站内链接,在撰写文章时通过 @ 符号唤起查询窗口,如果在行内的话是插入链接 🤣JUSTFUN周刊:第五期 。如果不在行内,如另外起一行则是插入bookmark * 执业药师考试可以开始报名了,总共4科,之前每年都报名,但是都没有认真备考,今年怎么也要过个两科把!加油加油! * 发现Ghost的API中有一个可以获取文章修改历史的接口,也许可以用他在文章底部加上一个修改记录? * 在x上看到dayu分享了一杯凉虾图片,但是发现他们那儿叫槐花粉,经查资料还是有略微不同的,虽然都是大米粉制作,但是广西的这个东西里面加了槐花研磨而成的粉末 * 发现Octarine的OG图挺好看的,也许可以试着抄抄。 发现 Git命令速查图:稻米鼠整理的Git命令 #Git 来自 稻米鼠 我其实觉得Git的命令不太好学,因为普通用户没有系统性的使用过Git参与项

🤣JUSTFUN周刊:第五期

2024年6月23日 04:01
一图 流水账 * 💡 给博客新增了 莫比乌斯 的主题配色,可以在左侧配色部分点击启用,希望大家喜欢。如果有看到什么样式BUG希望能及时告诉我。 * 这周真累呀,还好气温怡人,心情不至于又跌落谷底。 * fly.io 也要开始收费了,有些免费的午餐的确不长久。 * 在B站刷到了上次遇难兄弟的相关视频,总算了解到事故原因了:货车刹车失灵撞到他了,路过的骑友说没看到他有外伤,哎。 发现 cobalt:简单好用的流媒体下载器 #工具 来自 cobalt is a media downloader that doesn't piss you off. it's fast, friendly, and doesn't have any bullshit that modern web is filled with: no ads, trackers, or invasive analytics. Cobalt 是一个不会惹你生气的媒体下载器。 它快速、友好,而且没有任何现代网络充斥着的废话:没有广告、跟踪器或侵入性分析。 试用了一下,基本上稍微大一些的流媒体网站都

🤣JUSTFUN周刊:第四期

2024年6月16日 14:37
一图 流水账 #流水 dockerhub最近好像又被制裁了,不过我记得似乎一直都不能访问的把?实在不行就用镜像服务,有手有脚饿不死。 #流水 今天发现可以查成都马拉松的报名结果了,不出意外的没有中签,只能看看能不能候补上了。 发现 Coolify:Netlify等平台的自部署替代工具 #工具 Coolify是一个开源的Heroku、Netlify、Vercel替代自部署方案,他可以在你的服务器上完整实现上述平台的大部分功能,官方推荐的VPS配置是2c2g30g,另外官方也提供托管服务,差不多4刀一个月。 一键安装脚本: curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash 我之前也想过部署一个CI工具,不过最后还是放弃了,一是这类工具对系统占用都挺高的,我小鸡负担不起,二是其实我的用量是比较少的,性价比不高,所以最后还是用了Github Action。 项目地址:GitHub - coollabsio/coolify: An open-source & self-hostable Heroku

🤣JUSTFUN周刊:第三期

2024年6月10日 10:17
恰逢节假日,昨天回家已经很晚,所以这期的更新晚了一天。 一图 流水账 #观点 以前我有个朋友跟我说过一句特牛逼的话:爱情就像两个拉着同一根橡皮筋,只有先松手的人才不会受伤。 #观点 今天一大早就收到一个不好的消息。之前一位经常一起骑行的骑友在骑行318途中,刚出昌都不远出了车祸过世了,据闻是被大货车碾压了。他是5月中旬出发重骑318,我还时不时给他留言询问进度,想不到世事无常,人已离世,现在心子很不舒服...。 #观点 这世界没有什么东西是一成不变的,也正是因为这样,这世界才多姿多彩。心有郁结的人该走出去,不该停留在不好的回忆里,不好的思绪里,该看看这世界的美好,这是活着的意义,而他们走偏了。 #观点 最近高考,和大家聊了聊关于是否一定要读一个好大学一事。我的个人观点是:灵活的思维模式比读书更重要。很多以前读书时期的混子能挣着钱,而一些读死书的高材生最后可能连工作都不好找,这就是比较好的例子。另外就是执行力,有了思维如何实践出真知就是另外一个重要环节了。最后就是运气了,不过称之为运气,我总觉得有点不妥,因为都是别人在做出某些选择之后成功了才被称为运气。总的来说读书是一个

🤣JUSTFUN周刊:第二期

2024年6月2日 09:59
这是第二期,希望我能50周如1周般的更新。 * 「发现」部分新增了当前信息的获取来源。 * 目前你还可以通过 TG 频道订阅本周刊: https://t.me/justfuning1900 * 一图 流水账 #讨论: 因为肥猫的影响,最近重庆一些大桥效仿桥的人多了很多,地方政府无奈之下增加了很多守桥人员,已经是十步一岗的状态了。 是人们的心理承受能力变弱了还是这个社会确实让人寸步难行,这种现象是值得我们反思的。 #讨论: 华为手机销量时经 13 个季度,重回排行第一名。 #讨论: 群里今天讨论baidu搜索。 我发现自从有了ChatGPT等ACGI工具后,我已经很少通过搜索引擎获取内容了,至少代码这块已经很少。有疑问都是直接问AI获取答案,以前还有牛头对不上马嘴的时候,随着模型的不断完善,这个问题已经越来越少了。 下一个时代搜索引擎是不是要被淘汰了? #讨论: 今天在x上和看到球大佬在指责「中文互联网正在加速崩塌」一文制造焦虑,他的原推 x.com 。 其实我的观点和他是差不多的,我不否认可能有大部分文字确实消失了。但是,首先互联网是碎片化的,

用workflow转换Google地图kmz数据为geojson数据

2024年5月30日 13:26
前言 最近终于把大发哥的地图功能算是移植过来了,可以在 https://1900.live/map/ 页面中查看初步效果,不过在后续如何方便的维护这些数据的方式上产生了一些思考。 想直接看代码可以通过右侧TOC跳转到最后。 方案 数据持久化无非是写在文件里或者数据库,所以我想了一下几种方案: * 直接手动维护一个json文件,坐标数据等信息去google地图里复制。 * 之前做了API服务,也可以考虑写进lokijs的数据库里。 * 直接用一些第三方的API服务。 第一个方案 不过一种方案有些麻烦,大概只在我脑子里停留了2.5秒后就被我踢出局了。 第二个方案 第二个方案我倒是认真想了很久,甚至做了一下原型,验证结果是做虽然可以做,但是很麻烦。 因为相当于我得重新写一套包含前后端的,基于mapbox的交互,如添加标点,删除标点、更新标点,如果要全部弄完很是挺麻烦的,我也没这个信心做好,所以在第二天放弃了。 第三个方案 emmm,好像没有现成的API服务。 我查了一下相关的自制地图服务,好像基本上都没有提供这个功能。 倒是我之前用的google地图

🤣JUSTFUN周刊:第一期

2024年5月26日 10:40
开刊语 受各位大佬的影响,也想开个分享类的周刊,看看自己能坚持多久。 至于刊物名字把之前的博客名字拿来用了,「JUSTFUN」 初步打算将本刊分为三个方面: * 一图:每周保底发一张自己拍的照片 * 流水账:本周的思考、工作记录等等琐碎的事 * 发现:本周遇到的所有有意思的东西,可以是项目、观点、见闻等等。 一图 1. 上个星期的燕子还肉嘟嘟的, 2. 公司后面的洗车房,工人们忙了了一天终于能下班了 3. 这个星期已经翅膀硬了,开始自己飞了。 4. 昨天刮了一阵妖风,伴随着风下了一夜的雷雨,今天又放晴了。 流水账 * #工作:开始使用 Done List 记录工作 * #战争:在 b 站看了这个视频,感慨战争真的很残酷,最近伊朗又在出问题,这个世界越来越混乱了。 【一直压着没说的话,拍摄于 4 月 20,(人比战争更残酷),你可以说战争就是生命收割机,正常战斗他们或许不会牺牲,官僚的利益游戏)),-哔哩哔哩】 https://b23.tv/IS7tRJ9 * #知识:刚刚无意间做了个尝试,发现在Windows11中,选中多个文件后按 F2

服务器重装设置指南

2024年5月25日 17:38
前言 其实也不算指南把,因为最近要帮 her.blue 的服务器重新装系统和全线使用 docker 安装应用,在操作过程做顺便做了个记录,希望能帮到你。 数据备份 * 在操作之前最好做各个服务器快照,以防万一 * 如果没有快照就对所有程序、数据库等单独自己做数据备份 本次操作过程就装完系统后就立马触发这个问题需要重新装系统,还好数据都有备份。 服务安全加固 添加非root用户 * sudo adduser username 添加用户 添加用户到 sudo 用户组 * sudo usermod -aG sudo username * id username 这个命令可以查看用户有什么权限 生成安全密钥 切换到新增加的用户,生成该用户的安全密钥 * ssh-keygen -t rsa -b 4096 * cat id_rsa.pub >> authorized_keys 设置ssh,启用密钥登录 编辑 /etc/ssh/sshd_config 文件,进行如下设置: RSAAuthentication yes PubkeyAuthent

文章点赞和浏览数统计实现

2024年5月19日 11:08
前段时间大发哥TG频道说要发一个用CFWorker实现文章点赞和浏览数统计的功能,很快啊,星期二教程就出来了: Hugo Cloudflare Worker 。 整体方案是使用CfWorker 实现api请求,再用D1做数据持久化,效果还是很赞的。 本来我是想照着教程完全一步步来的,但是想到我前文 将博主 PC 上使用的应用信息实时显示到博客 在折腾时搭了一个API服务,就不想再去用CFWorker了,打算直接在自己服务器上实现这个功能,顺便再实践一下用Express搭配数据库工具。 所以打算稍改一下,结构如下: * 前端照搬 * API结构实现部分照搬 * 数据库方面结构、读写操作照搬 * 数据库持久化用 LokiJS 前端 前端我这里用的Alpinejs做驱动,前文 用 Alpinejs 完成主题切换功能 介绍过这个库,在不使用Vue等工具下普通HTML的一个替代方案,好用。 * 在模板中渲染的时候设置文章 ID (这里我因为用的Ghost做数据源,所以自带一个MD5的ID,用一个固定唯一值就好) * 设置 x-data 为后面js中初始化的 post_

我也出一版纯CSS+JS热力图

2024年5月17日 19:23
前言 之前根据蜗牛哥的教程弄了一版使用Cal-heatmap库生成的热力图 博客更新热力图,不过这个方式需要加载四五个js文件还有一些css文件,比较拖慢整个网页的加载速度,所以蜗牛哥后来又出了一个CSS 和 JS 实现博客热力图 方案,不过当时我闲麻烦一直没跟着做。 不过我也一直在思考该怎么用纯CSS和JS更为简便的实现这个功能,今天灵光一闪,有了些思路,所以趁着这股热乎劲把这个功能实现了,撰文分享一下我的思路。 思路 我的思路其实很简单,因为博客上显示的热力图其实就是一个很多小方块组成的方阵,所以其实不用管什么年份、月份之类的,我们只需生成固定个数的小方块,再将匹配的数据填充进去不就好了吗? 我的构思如下: * 生成一个 7 * 9 列的格子方阵,一共是是63个 * 每个格子要匹配往后63天中对应一天的文章 * 如果开始当天不是星期天,则需要找到这个星期的星期天作为开始时间 * 在生成格子的时候将文章数据附加进小格子内。 * 完成 实现 💡有了ChatGPT后折腾博客真的好方便呀,你只需要有一些基础编程知识和思维就能通过它构建出自己想要的代码。

将博主PC上使用的应用信息实时显示到博客

2024年5月13日 23:00
起因 这个功能是在大佬 Innei 的博客上看到的,效果就是在网站logo处实时的显示博主在PC上使用的应用程序信息,虽然是个不太显眼的功能,但是效果还是挺好的,让我感觉整个网站因为这个变的不再死板,不断变动的程序图标让这个网站像博主的一个身外化身。 真的很想要呀! 遂翻阅了一下大佬的博客源码和一些相关的配套文件,自己大概有了一些思路,后来也将这些想法整理了一下后请教了 一个球 大佬,大佬说这个思路是没什么问题。 所以,喜欢就干! 遂根据自己的思路搭配Kimi和ChatGPT终于在昨天将这个效果实现了一个大概,今天大概修复了一下BUG,撰文总结一下这次折腾和分享实现过程。 结构思路 对于这个功能的整个流程总结如下: 1. 电脑上有一个监控程序,定时或在切换程序时向服务器发送当前激活的程序信息 2. 服务器对发送来的信息进行鉴权、验证、过滤等处理后转发给所有客户端(既打开了我博客网站的浏览器) 3. 网页接收到信息后根据需求进行展示。 根据这个结构我们需要一个可以上报数据的监控程序和一个架设API的VPS或可以架设API功能的云函数等,技术架构如下。 1.

使用动态Emoji😘

2024年5月8日 20:44
昨夜忙完工作临了准备关电脑时看了一条留言,并做了一些回访,在回访的过程中发现了 为博客启用动态表情 一文。 为博客启用动态表情 | Fluent Emoji 3D表情包这东西挺难挑还,各式各样的我最近翻了个遍,只能说Microsoft推的Fluent Emoji最合我意,动态3D,简约和谐。但它一个表情几个变体,总量直逼2000+,我个小博客用属实牛鼎烹鸡,高攀了昂。只得挑些常用的整理汇总,现已适配Twikoo、Artalk、Waline、Valine 介绍 引用站外链接放养平凡btwoa 主体内容就是使用微软的Fluent Emoji动态表情作为评论系统的表情包,遂花了一点时间根据文章介绍弄好,发现效果相当不错,大家可以留言的时候体验一下。 (微软做的这些小东西其实都还挺不错的,就是太容易弃坑) 上传Emoji包 btwoa对emoji做了中文alt整理,并提供了Gif的下载链接,我们只需要将下载下来的文件解压缩后上传到自己的S3、七牛、又拍等云盘上面即可。 我们可以在桶根目录里新建一个文件夹,如 /fluent-emoji ,并将所有表情传到这个文件夹下,如果你的云储

小狼毫Win11配色分享

2024年5月7日 16:47
之前在 小狼毫算法服务设置自启动 + 微信配色主题分享 中分享过一个微信配色的主题,十分好看。 但是我个人也比较喜欢Windows的默认输入法的皮肤,之前用掌心输入法的时候还专门去找过相对应的主题 【手心输入法皮肤】Win11Style。 最近偶然间发现在小狼毫的issue区 #1205 中有人提到了小狼毫Win11风格的主题,尝试了一下发现效果还原的还是比较到位的,体验后不敢独享,遂撰文分享。 配置文件内容添加到 weasel.custom.yaml 中,没有这个文件就新建一个,这个 style 部分的设置搭配我之前分享的微信的主题也非常好看。 style/+: font_face: 'Maple UI' label_format: "%s" inline_preedit: true font_point: 15 label_font_point: 15 comment_font_point: 15 horizontal: true color_scheme: win11dark color_sche

五一我也成都游一趟把!

2024年5月3日 18:12
前言 本来五一是不准备出去玩的,因为4月下半旬事情多的很,我们几乎每个周末都在加班,平时的工作日晚上也基本上都是七、八点才能回去,这半个月下来我和霜两个人真是累的够呛,只想等着五一在家躺尸。 但是口罩摘掉以后也没正儿八经走稍微远一些的地方玩一趟,虽然前些日子趁着周末去了临近的城市内江玩了一趟:内江甜城一日游,一天的行程下来体验着实不错,但是还是有点不尽兴的感觉,这段时间积累的压力已经膨胀到了临界点,也在出去和不出去之间摇摆。 行程及费用规划 费用 * 音乐节门票:520元*2 = 1040元 * 油费+过路费:开的面包车,来回应该200左右油钱把+假期免过路费 = 200 * 第一晚酒店:190元 * 第二天SPA+住宿:120元*2 = 240,送留宿 * 吃饭:这个没记录,看个人要求了。 行程 * day1:音乐节 * 早上10点出发 * 中午12点多到,在周边吃点东西 * 2点左右进场 * 晚上九点看完后宵夜 * 入住酒店 * day2: 骑行 * 我9点出发去骑行 * 霜12点起,去吃饭东西,然后下午自

OpenGraph图自动生成

2024年4月28日 23:36
什么是OpenGraph 💡以下介绍由Kimi生成。 大白话就是:这些数据专门告诉社交平台,我们这个网页的基础信息等数据。 OpenGraph 是一种由 Facebook 开发的元标签(meta tags),用于网页上的社交分享。当一个网页链接被分享到社交媒体平台时,这些标签可以提供额外的信息,比如网页的标题、描述、图片等,从而在分享时创建一个更丰富、更吸引人的预览。 OpenGraph 标签通常放在 HTML 页面的 部分,它们允许社交媒体平台了解页面内容,以便在用户分享链接时生成一个预览。一个典型的 OpenGraph 标签集可能包括:

博客更新热力图

2024年4月27日 23:42
这个功能最早是看到椒盐豆豉 如何给 Hugo 博客添加热力图 做的分享,不过当时还没下定心思来弄。后来陆续在蜗牛、空白大佬们的博客上看到,还是比较想加到自己博客上的,不过在这个月十几号的时候研究过一下,当时没太研究明白,放弃了。 但是今天在长毛象上看到空白大佬在 称赞蜗牛大佬的新热力图 ,所以跑过去看了一下,发现好像的确和第一版确实不一样,遂通过蜗牛大佬的 Github仓库源码 折腾了一下午,终于弄好了,分享一下折腾经过。 Cal-heatmap 大佬新的热力图是基于 Cal-heatmap 这个工具,这是一个专门制作热力图表的JS工具包,我们只需要通过简单的配置即可生成漂亮的可定制热点图。 Cal-Heatmap | Cal-HeatmapCal-Heatmap is a javascript charting library to create a time-series calendar heatmapCal-Heatmap 基本初始化 首先是引入Cal-heatmap的js库和css库,当然你可以用使用CDN也可以直接下载源码到项目内。 另外大佬没有将这部分代

联通话费降费指南

2024年4月23日 23:29
费用 我是应该也算是联通的老客户了。 十多年前刚来四川的时候因为漫游费贵,需要换掉以前在柳州办的电话卡,所以我当时从淘宝上买了一张号码为我出生日期的电话卡,当时还没有什么月租包,每个月都是买流量包度日。 后来腾讯出了大王卡套餐,开始流行日租卡。我当时跑去营业厅换套餐,居然还不给我办,后来看到网上说打投诉电话可以解决后才换成了腾讯大王卡套餐,自那以后基本上每个月的话费就固定在了八九十块左右。 前年和我老婆结婚后还给我老婆也搞了个同样数字,只是生日日期不一样的电话号码,组成了情侣号码,但是她觉得每个月八九十元的套餐费有些肉疼。 之后偶然在v2ex上看到有讨论手机卡资费的帖子,在帖子的评论区里面学到了一些降费技巧,在时间过程中我结合帖子里说的东西和自己阴差阳错的操作下最后把费用降到了: 👊月租40元,有40g全国流量120g以上的省内流量+600分钟的通话时间。 其中流量可以转节下月,我现在每个月大概两三百G的流量把,根本用不完。 本来还没想过要说这个事,不过今天在刷订阅的时候看到 obaby 提到自己流量费不够的情况,我一看,居然也是联通的,索性就把我的经验整理一下分享出来

keyguard:一个好用的Bitwarden第三方安卓客户端

2024年4月23日 22:35
Bitwarden是一个优秀的开源全平台密码管理软件。 安装好它后,你可以在电脑、浏览器、手机、甚至是手表上记录、管理你的密码,并可以根据你使用的APP进行可选择的自动填充,省去手动输入的烦恼。 同时它还附带了强大的账号、密码生成工具,可以自动、随机的帮你生成高强度密码和账号,极大程度的解决现代互联网发达之后平台多、账号多、密码多导致记不住的情况。 此前我还写过几篇关于安装、配置、使用的文章,如果感兴趣可以跳转阅读: * docker 自建 bitwarden 服务. * Bitwarden 搭配 DuckDuckGo 生成匿名邮箱 * Bitwarden 启用 Websocket 及加固指南 * AuthenticatorPro 开源的本地两步验证工具使用教程 但是Bitwarden的客户端难用是大家公认的,尤其是电脑客户端....。 软件在使用过程存在各种如:操作割裂、卡顿、不方便的情况。 虽然前些日子看到官方似乎已经开始 重做手机客户端 了,但是感觉等到落地可能还需要很长的时间。 不过,好消息是...。 keyguard 最近我在Github上发现了

喜大普奔:百分浏览器终于更新了!

2024年4月21日 12:25
今天早上蹲坑的时候忽然看到一个公众号推送了百分浏览器更新了的消息,遂水文一篇,奔走相告! 百分浏览器 - 更新日志更新日志 v5.1.1130.82 [2024-04-16]| 内核升级至118.0.5993.159 继续支持Win7和Win8 支持指定小号标签打开书签和链接 添加选项"强制在当前标签中打开链接" 热门网站支持本地图片作为图标 合并部分安全补丁 [BUG修复] Win11下多列书签显示异常 [BUG修复] 部分环境下下载窗口花屏 [BUG修复] 小号标签中无法显示桌面通知 [BUG修复] 浏览器启动时加载下载列表会引起卡顿 [BUG修复] 选中复制和超级拖拽无法复制HTML内容 [BUG修复] 部分环境下安装包崩溃 [BUG修复] 在多列书签中进行拖拽之后容易触发崩溃 [BUG修复] JS书签被强制使用默认图标 [BUG修复] "自动清理内存"可能导致标签被卸载 [BUG修复] "新标签打开位置"为右侧时"打开全部书签"时顺序颠倒

静湖计划

2024年4月18日 22:39
这应该是个很有逼格的计划名,不过希望这个计划不会让我自己出丑。 起因依旧是我越来越严重的摸鱼习惯。 从开始玩博客起,折腾博客这个行为就已经穿插进我的生活,往往为了实现一个功能会不由自主进入心流状态,忘记时间流逝。其次是网上冲浪,逛Github、V2ex、博友互访等等,都会浪费我大量的时间。 通过 Tai 统计,我2023年的、2024年的软件使用情况如下: 其中浏览器、vscode的占用时间已经肉眼可见的远远超标。 这不仅表明他们已经浪费了我十分多的时间,还让那些原本在工作时间内该按计划完成的工作因为摸鱼而推迟、累积,最后往往会在准备不充分的情况下仓促完成或直接没完成。 这些事情同时会引发蝴蝶效应,牵连更多的其他事情。 而且,我已不再是时间充裕,光有兴趣爱好就可以的少年,我已三十而立、经成家立业。 我的事业、家庭、未来都容不得我在不该沉溺的时间沉溺其中,所以我不得不重新想办法让自己从那条细窄的河道流出去。 另外我发现,去年早起锻炼过一个多星期(早起的方法),以及前些日子因为报名了马拉松,执行了差不多一个月的跑步训练,这一个月我几乎每天都在坚持六点半左右起来晨跑。 这

用Alpinejs完成主题切换功能

2024年4月17日 13:48
终于把网站的主题切换功能做好了,这次的实现相当满意。 并且我联动了几个主题颜色比较特别的博友,他们分别有:雅余(黄色)、昱行(粉色)、风清(蓝色),大家可以在本站左侧菜单栏选择自己喜欢的配色浏览本站,欢迎给出意见和分享感受。 之前虽然也写过主题切换功能,但是思路没有这次完整,所以索性写一篇博文介绍一下整体实现思路和流程。 这次11ty-book我采用了Alpinejs作为网页的主js框架(真的挺好用的...),这个框架有中文文档 ,官方地址为:https://alpinejs.dev/。 * Alpine.js 通过很低的成本提供了与 Vue 或 React 这类大型框架相近的响应式和声明式特性。 * 你可以继续操作 DOM,并在需要的时候使用 Alpine.js。 * 可以理解为 JavaScript 版本的 Tailwind。 js部分 在主js文件中使用import的方式引入alpinejs文件,并将主题要用到的json数据对象放入Alpine.data对象中(data是alpinejs的数据主要传输方式)。 具体代码作用见下方代码片断。 import A

Ghost使用11ty时生成无插件生成TOC目录

2024年4月16日 23:10
分享一段之前和ChatGPT沟通得到的代码。 作用为传入一段HTML代码,并获取页面内的H2、H3、H4标签,组装成固定格式的html字符串返回。 const cheerio = require('cheerio'); module.exports = (html) => { if (!html) return; const $ = cheerio.load(html); let toc = "
    "; let currentH2 = null; let currentH3 = null; let els = $("h2, h3, h4"); if(els.length == 0) { return; } $("h2, h3, h4").each((i, el) => { const tagName = $(el).prop("tagName"); const id = $(el).attr("id"); const title =

关于友情链接和SSG在博客中展示Flux订阅

2024年4月15日 22:43
友情链接 此前我一直以文章内容的形式手动展示和维护博客的友链,并在文中附上了友情链接添加的条件,此间也收到过不少好友的链接申请。 不过在 2023年11月05日 ,我对该页面的介绍做了更新,并在文中写到: 今天忽然发现我好像重新理解的「友邻」的意义,这个邻居应该是我喜欢、欣赏的,对我有「正面影响」的,而不是冰冷页面上的一个超链接而已。 所以我决定只在这个页面展示我喜欢的博客,我也并不需要他们也给我做上「友情链接」,单纯只是因为我喜欢、欣赏他们。 另外那些没有出现在这个页面上的朋友也不要心有芥蒂,并不是你的博客不优秀,毕竟「喜欢」这个词非常主观不是吗? 自那之后我就再没有对友情链接页面中的链接做过维护。 并且在之后不久基于23年11月5日的见解 博客并不是页面上的一个超链接 ,我希望能 通过他们的博客获取一些正向激励 ,而且是 持续 性的获得这种激励。 所以我开始认真 使用 订阅工具,此间还分享了 打破信息茧房及一款 RSS 阅读器推荐 和 如何订阅 Q 外的 RSS?方法来了 两文。 更换工具 不过文中介绍到的订阅工具 yarr 因为是开发者自己做的一个工具,虽然

雾,是地球的迷梦

2024年4月11日 22:26
今天罕见起了个大早。 刚出门的时候天还灰蒙蒙的, 没多久就看见高楼的上面开始蒙眬, 没过一会, 整个雾团就像滴入清水里的黑墨一般蕴开, 无法阻挡的贴合在地面之上。 一切就像梦境一般, 人和穿行在浓雾里, 车辆的灯光也开始变的模模糊糊。 就像... 就像穿行在地球的梦里般....。 路旁公园的植物上残墙着春雨的痕迹, 在这个灰蒙蒙的世界晨里, 毫无保留的体现着自己的生命力。

我也跑个半程马拉松:完赛

2024年4月9日 00:46
了解后才知道「牛逼」 以前看体育节目的时候听解说们说「不可思议,某某某马拉松运动员跑出了全马20x的成绩」,当时的反应只是「哦...,20x呀,好像很厉害的样子啊?」。 现在自己真的开始跑步后才发现,「全马20x」这个时间简直就是飞人,要以这种速度跑完42.195公里,这种速度已经是突破了人体极限。 先说补说一句「牛逼」后回到正题。 其实这次半马比赛我只有一个目标——完赛。 是的,我从来没有跑过这么长的路程,报名之后我拿我之前的跑步记录给我一个喜欢跑马拉松比赛的姐姐(后称麦姐)看,并做了一番咨询,但是她在看了我的跑步记录后直言我那个速度简直是在散步,甚至建议我不要去跑了...。 训练 所以,为了能更好的完成这次半马比赛,我从3月4号给自己指定了训练计划,27号之前每天至少5公里,并在20号左右做一次半马全程训练。 训练记录如下。 日期 公里 配速 时常 状态 strava 2024年3月4日 4.51 8'03 36分34秒 🙁 无 2024年3月11日 5 6'51 33分27秒 😊 无 2024年3月12日 4.81 7'02 33

纯CSS解决网页因滚动条抖动问题

2024年4月6日 20:22
最近在做11ty-book的移植工作时发现,网站页面在从短内容页面跳转至长内容页面时,会因为从无滚动条切换到有滚动条状态而发生抖动,而这个滚动条在页面中是有自己的占位的,这个时候就会出现因为忽然出现滚动条而网页内容布局抖动的问题。 找了一些相关的资料,有不同的前辈都处理过这个问题,因为我也没有一个个去测试,专业只是也不是很够,所以这里单纯分享一下所有方案,并指出我用的哪一种方案。 方式一 直接让滚动条一直显示,这会在右边占据一块内容,自然体验不好 html { overflow-y: scroll; } 方式二 兼容性一般 html { overflow-y: overlay; } 方式三 html { margin-right: calc(100% - 100vw); } 或者 html { padding-left: calc(100vw - 100%); } 这个方案是我见过最多博主分享的,逻辑为: * 首先,html指的是居中定宽主体的父级,如果没有,创建一个(使用主体也是可以实现类似效果,不过本着宽度分离原则,不推荐)

内江甜城一日游

2024年4月6日 14:42
前言 不久前在牧羊人老哥的博客中看到他分享去内江圣水寺、大千博物馆游玩的博文,当时顿感心动不已,便留言说之后也想去看看。 主要原因有三。 一是内江是自贡的邻居,从自贡出发去内江只需要四十多公里,快的话三四十分钟就能到。前些年有些同学在内江做生意,那时候时常会过去玩玩,不过我这些朋友不是喜欢喝酒打牌就是网瘾少年,对于内江这些景点却是只字未提过,所以一直错过。 二是自贡本地文化生活说实在话可能比内江还要窘迫,市内的景点能排的上号的就是灯会、盐业历史博物馆、恐龙博物馆了。其中灯会和恐龙博物馆价格分别在118、25和40元(最新的美团价格),第一和第三个体验勉强来说可以值个回票价,盐业历史博物馆就不尽如人意了,场馆小、内容乏味,是我所有逛展体验中比较差的一个了。而内江这两个景点就比较实在,都是免费的,而且据牧羊人老哥的照片来看也挺对我的胃口。 三是自疫情爆发后因为种种担心所以都几乎不出门了,不是害怕落地后隔离没法玩,要不就是害怕被感染,我都不知道这几年我是怎么过的。 所以,这次就着清明节小长假,索性就先去最近的内江玩一玩。 内江,我来了。 计划 每年的清明几乎都是小雨下个

我也跑个半程马拉松:领物资

2024年4月2日 22:38
接着上一篇说吧。 29号恰好是周六,因为看到公众号在发一些领取物资跑者的照片,所以很臭美的洗漱穿戴了一下才出的门,而且出门的时候发现已经快9点了,便着急忙慌的直接往比赛场地跑...,哪知道到了比赛场地才发现领东西是在四五公里处的恐龙博物馆旁边。 不过也提前看到了没有人的比赛出发场地: 领物资的地方在恐龙博物馆和恐龙游乐园的交界处的一个广场上,另外你可能会好奇为啥都是恐龙,因为自贡恐龙博物馆也是相当出名的,旁边新打造的恐龙游乐园就是想发展这一IP。 自贡恐龙博物馆位于四川省自贡市的东北部,距市中心9公里,在世界著名的“大山铺恐龙化石群遗址”上就地兴建的我国第一座专业恐龙博物馆,世界三大恐龙遗址博物馆之一,博物馆占地面积7万多平方米,主展馆建筑面积为6600平方米,陈列展示面积4600平方米,馆藏化石标本几乎囊括了距今2.01-1.45亿年前侏罗纪时期所有已知恐龙种类,是目前世界上收藏和展示侏罗纪恐龙化石最多的地方 不过即便我们走了弯路,到领取物资点后才发现领取居然还没开始,被工作人员告知是10点才开始...。 看了下才9点半不到,可能还要等一会儿索性就开始看起了周边关于本

MPA网站使用Chrome原生过渡动画

2024年4月2日 21:34
之前 页面的过渡动画其实有很多种实现方式,之前在制作主题rebron1900/11ty-theme-notability 时参考的主题 ByMattLee 11ty Starter 中就使用了 GSAP 这个库实现页面过渡动画。 我当时也研究了一下,不过这些动画库的各种参数都太过复杂,并且我也不需要那么多花哨的动画效果,研究了一段时间后就放弃了。 后来在JAMSTACK技术选型的时候关注到Astro这个工具,当时发布的3.0版本Astro 3.0 就原生集成了很漂亮的页面过度动画,甚至可以实现一些类似原生应用动画的效果,比如: * Hot Fuss by The Killers - Astro Records * X 上的 Astro:“coming soon: zero-javascript page transitions https://t.co/K4TIlAn2N6” / X 当时看Astro的介绍还以为只能在Astro中并且是SPA模式下使用,直到今天群里有人在讨论Astro的页面过渡动画,当时我想分享上面提到的这两个页面给他,无意间发现X中关于3.0版本发布的

网友自制 Windows11 LTSC

2024年4月2日 16:50
💡本来标题是Windows11 LTSC 终于来了!发完文章后才发现时自制版。。。 去年23年的3月份就听到有消息说要放Windows11的LTSC版本,等了一年多,这两天终于放出来了,我第一时间通过Windows11 LTSC关键字还没有找到相关资源,而后在远景论坛找到大佬放出的优化包。 难怪我没找到资源,下面这个是网友自制版的,看来还得再等等了。 💡[分享] 【twm000】Windows 11 LTSC 22H2 简体中文封装母盘 母盘基于UUP资源组装合成 ISO 镜像编改 初始版本系统:Win11 NI-22H2-22621.1 已集成功能:.Net framework 3.5 版本特色: 魔改 LTSC,纯净母本,未集成任何补丁,未做优化调整,自动机活 无 Store 应用商店,常用内置应用仅留:截图-计算器-照片-相机 Windows Defender 病毒防护为未启用状态 (如需要可用三方工具开启) 正常支持累积安全更新及通过启动包升级至当前最高 23H2-22635 版本 ISO 镜像已修改适用于不符合Win11硬件要求的老机器启动安装 内置 ins

我也跑个半程马拉松:赛前体检

2024年3月29日 20:27
💡本来没想过写博文,只是当作一篇笔记记录进Obsidian的,但是写着写着发现还挺有意思,索性就写了这篇流水账。 之后再把之前的训练故事和后续发生的故事分几篇一并记录一下。 距离31号自贡半程马拉松开跑只有几天时间了,本想着要不要这两天看看相关资料做做准备,哪知道川体赛事公众号就给我发来了确认号码牌和领取包裹的短信通知: 【川体赛事】温馨提醒您:亲爱的跑友,明日将开启领物了!领物时间为 2024年3月29日10:00-18:00;3月30日10:00-20:00;领物地点:自贡大安区时空·龙门镇中心广场(自贡市大安区自贡恐龙博物馆西侧),领物时请携带本人有效身份证原件,半程马拉松选手还需提供半年内体检报告(含心电图)或提供两年以内半程马拉松(或全程)完赛证书。领取参赛包不可代领。领物前请线上签署参赛声明,最后一日为领物高峰期,为避免排队请错峰领取。感谢您对赛事的支持与理解,预祝您顺利完赛 我第一时间兴冲冲的去公众号查看了自己的参赛号码: 不过,另外令我在意的是短信中提到领取物料时需要持有 「半年内的体检报告」 ???之前报名的时候还没注意有这项要求,不过转念一想,网上时常都能
❌
❌