普通视图

罢免小区业委会

2025年1月8日 14:05
罢免小区业委会

自己小区业委会成立时间是 2020 年,到今年 2025 年 9 月份这届到期。过往几年大家似乎也不关注这些,整体把小区品质搞上去就行。但从周六开始,业主就开始集结起来,要求罢免业委会,警察来了一次又一次,以防发生不愉快事件。

事件的导火索,从小区几个大门口装了两道车辆道闸说起。也就是进入小区需要通过两道道闸,业主质疑为什么要装两道道闸,本身平常就堵了,你这么一搞不是更堵了,而且只是一个小区而已,为什么搞得跟什么机关重地一样,放眼全国应该也没什么小区这么搞。物业开始的答复是:

“按照道闸改造设计的方案明细:增加一道前置道闸是为了服务于车满禁入的功能。当地面车位有空位的时候,前后两道道闸是同时开启的,不需要车子两次停车等待道闸开启;当地面车位已满,则想要停地面的车子在前置道闸就会被识别提醒,然后在门岗前面掉头出去,无法通过第二道道闸进入小区。如果只有一道道闸,车辆无法掉头,还会影响有地下车位的业主车无法进入。”

这答复,似乎解决了什么,但稍微动点脑子,就是扯淡。里面车位满了,一个道闸不放行就行,你做得好点再放个提示版。车子该怎么调头就怎么调头。跟你设置几道道闸有啥关系。如果真想搞事情的车辆,你设置十道道闸也没用呀,人家车子往那一停,人走掉,其他车子无法进入还是无法进入呀。

到这里,业主也只是有意见,但也没怎么样,只是私下大家吐吐槽。事情的转变,是业委会开会的时候,有几个业主去旁听,然后提出意见,被其中一个业委会的人,拍桌子把这个女业主说哭了,这个视频传到各个业主群。这下大家不干了,周六开始业主们开始集结起来,把业委会的问题一条一条罗列出来:

  1. 2024年1月-11月,开支650万,其中冲账资金431.9万。
  2. 小区道闸系统升级,花费88万,出现了大门口双道闸的笑话。
  3. 2022年外墙维修88.7万,2023年外墙维修28.7万,为什么不从维修基金里出?招投标了吗?明细在哪?
  4. 几十万的泊位费提成支出,原因什么?
  5. 各种酒水开支原因是什么?
  6. 监控改造,花费75万。
  7. 原计划2024年给业主分红90.14万,莫名其妙被挪用。
  8. 2024年10月份,进行消防主机整改项目维修工程招标,涉及资金400 万元。因为这届业委会9月份到期,是要在这届到任之前用干净的意思。

我们业主要求,立马启动罢免程序,冻结账户,之后该重新审计的再重新审计。周六周日就跟街道社区谈,一直持续到周日晚凌晨 2 点多,目前已经达成:停止付款,所有银行付款都需要经过街道审核;所有之前的账目资料已由业主封存,统一放到街道,方便以后审计。社区周一开始针对大家的签字电话核实,超 20% 业主同意,就启动临时召开业主大会。之后重新计票,超 50% 的业务同意,就可罢免业委会。似乎要达成这一要求,前面的路困难重重。

不作死就不死呀,其实你这搞点钱那搞点钱,正常,大家也不会去查,你把服务做好就行。但吃相太难看,就过了。账这个东西是经不起查,特别又是一群业余的人在搞。最后说不定还得送进去几个。大家在维权的时候,业委会的人也不出面,第一天来了一个主任,第二天来了一个副主任,这个人还带来了十几个保安(不是本小区的)来,还想把事先业主封存的账目抢走。其中还混入说是供应商的人来要账的。估计也是假供应商,故意来搞事情。这时候业主集结起来的人更多了。

作为这次事件参与其中吃瓜的一份子,最大的感受就是各个 BuMen 的不作为。辛苦奋战在最前头的业主们。

至于说这届业委会成员是怎么选出来的,我记得当时要成立的时候,物业就拿几个人的名字让你选,但这人是谁,都不认识,所以自己是谁也没选,弃票。据有的业主说,也没选,但后面查结果的时候,有她的票,至于为什么,各自想象。

  •  

从 iOS 更换到 Android 会有不适吗?

2024年9月19日 21:15
从 iOS 更换到 Android 会有不适吗?

还有几个小时就是 iPhone 16 系列正式发售的日子,看评测说提升最大的是拍摄视频又拉开 Android 机一个台阶。既然自己不买,那就来聊聊自己从 iOS 更换到 Android 的体验。以自己日常使用场景,先说结论:98% 没什么不适的,剩余的 1% 在于通知的延迟、1% 裸机下容易边缘误触。

从 iPhone 6 开始加入 iOS 阵营,随着每年的迭代跟随更新,一直到 iPhone 11 系列。为什么 11 之后没跟随脚步,一是硬件所带来的惊喜感在降低,二是 iOS 早已过了新鲜劲,每年都感觉没变化。最重要的一点就是——没钱了。于是在 11 Pro Max 使用到今年第五个年头,7 月底更换了小米 14 Ultra,到此刻为止,体验 Android 一个多月时间了。

早听说国内 Android 魔改版本,系统广告及内置第三方软件非常多,还好旗舰机都可以关掉或卸载,只是需要你花点时间搜索下都存在哪些角落,然后关闭。不像 iOS 干净清爽。

交互层面,两个系统现在越来越趋同。常用的软件,不管是界面还是交互,更是没区别,所以上手没难度,无缝衔接。由于之前 11 是 60 赫兹刷新率,换到 120 赫兹的 14,这顺滑度,用了就回不去了,尽管 iOS 的动效再怎么丝滑,但硬件上的瓶颈,没办法。 中秋 小米魔改的 Android 用的爽的几个地方:

  1. 骚扰电话小爱自动接听,这功能实在太爽了。就在今天下午,小爱跟一个推销的有来有回聊了 5 分多钟,看记录实在是好玩。再也不用操心每天那么多的骚扰电话了,iOS 就是一傻逼。
  2. 开屏广告无障碍跳过,通过安装第三方软件( GKD)实现。再也不用忍受不小心扭动了一下手机就自动打开广告了,哪个傻逼产品经理想出来的,垃圾。
  3. 应用双开,没办法,工作上的需要。
  4. 其他爽的点,如通话录音、快递推送、行程推送等等,这些都是本地化的特点,爽。

用的不爽的点,主要就是一开头写的两点:

  1. 由于自己现在做电商业务,所以对于电商平台的管理软件,实时推送是刚需,不然可能会错过一些重要推送而损失订单或回复不及时而扣分罚款之类的。不知道是自己设置问题还是本身 Android 的问题,老是出现推送延迟。搞得我现在必须带着手环才行(手环推送相对实时很多)。
    既然说到做电商业务,看到这的朋友,可以去逛逛,有需求就支持一波: 骑时这样
  2. 我是一个坚定的裸机党,这次买的摄影套装的壳用了几天也不用了。更别说手机买回来第一件事就是把屏幕膜撕掉。但没有壳之后,很容易误触边缘,譬如你看视频看得好好的,手稍微动一下,页面就给我跳转掉了。。。头疼。

至于其他的,个人使用场景,iOS / Android 使用起来没啥区别,两个系统交互也越来越融合。不过如果从生态的角度上看,那就看自己绑定有多深了,之前会认为自己绑定得非常深,更换很麻烦。因为电脑、平板、手表、耳机、手表都是苹果的。但发现换了 Android 之后,也没觉得怎么样。如文字手机中复制,电脑黏贴。微信输入法也可以做到。图片视频隔空投送,装第三方软件 LocalSend也能实现,虽然稍微麻烦点,毕竟需要打开它,但速度快。云服务,自己有家庭 NAS。手表/耳机,这就没办法了,想更好的体验,只能替换。总的来说,对自己影响不大。

使用了万年不变的 iOS 内置拍照滤镜,小米 14 Ultra 有了徕卡加持,拍照效果很满意~~

  •  

五一假期之登高望远

2024年5月2日 19:21
五一假期之登高望远

上次爬山还是 2021 年初,即使家门口就有个临平山公园,开发得也非常好,但一直也没想着要去再爬一次。也许跟小时候就是在山沟沟里长大有关,砍柴要上山、放牛要上山、干一些农活也要上山,所以对山已经免疫了,提不起什么兴趣。如果是说去看海,那分分钟钟立马得去。

为什么今天想着要去爬一次?五一外面人太多,不适合外出太远;找个地方骑行,闺女不想骑;最近脑子里不知道为什么,老是冒着说要去爬次山,于是就决定今天。虽然老婆还是不大愿意,因为她每天上班期间都要走不少路,不想再走了,但还是买上了在山顶我们要野炊的 KFC 。一家人出发~~

到了山顶,发现比记忆中路途更短,手表显示高度 170 米。也许前几次爬的时候,闺女还很小,走得慢,时不时还得背背,现在走得比我俩都快。想想时间是真快,一晃都十周岁了。

20240502_5 20240502_6

户外吃东西就是爽,比在家吃感觉更香。不过过程发生一个插曲,有个小孩过来一直盯着我们看,家长过来拉都拉不走,说我也要吃,拉走了又过来。怎么说呢,如果是弱势群体,没什么说的,我们也会分享,但感觉更多的是没礼貌,影响心情。

吃饱准备下山,闺女说,上洗手间的时候,听到人家说坐一次游览车十块钱,这明显的暗示。算了,反正她妈膝盖也不是很好,就让娘两去坐车吧,自己一个人继续悠哉的步行下山~

这次爬山有什么不同?只有感叹孩子成长太快了,另外满足了爬山的想法,至于其他的,嗯。。。只要一家人在一起,干什么事情都可以。

20240502_2 20240502_4

  •  

以后如果小米做汽车了,也可以买小米汽车

2024年3月30日 17:15
以后如果小米做汽车了,也可以买小米汽车

28 号晚,本来计划在屏幕前看看小米汽车发布会,但忘记了,想起来的时候已经是 20:30 分左右,算了,不如继续骑车来得爽。几小时后,刷微博见铺天盖地的小米汽车新闻跟售价,想起来 2019 年说的一句话:“以后如果小米做汽车了,也可以买小米汽车”。

当时说这句话的情景是,老婆带我看完车位,走在路上,聊起:
我说:本来我想先换车的,理想 NEO 不错。
老婆说:先买车位,车子是消耗品,什么时候换都可以,以后有更新更好的。有了车位,装充电桩也方便。
我沉默片刻说:行,我们家的智能设备都是小米系的,以后如果小米做汽车了,也可以买小米汽车。

几年过去,小米汽车真的上市了,我买吗或者说现在有能力买吗?先从 2022 年又摇中一个汽车指标开始,指标 1 年有效期,到了临近期限放弃了指标。车位当时买来 16 万,本打算今年初卖掉缓解下经济压力,但目前也只能卖 10 万左右,有可能更低,而且还没人要。所以,答案显而易见,目前没能力买。看不看发布会似乎也显得无所谓。

现在开的是 2015 年 1 月份买的起亚 k3,虽然连中控屏幕都没有(当时想去汽车城换一个,但 ui 界面实在是太难看),但这些年兢兢业业一直陪伴左右,没给掉链子,希望今后的日子继续兢兢业业的。当时买车的原因是,一直想拥有一辆车。但手上没啥钱,还是老婆决定说,想要就去买。她跟同事借了信用卡,再加上一点自己的钱,我们付了首付开回家。

自从国内新能源开始逐步崛起,自己又是喜欢捣鼓智能,所以想着换辆智能汽,但 2019 年之后,自己的工作问题,事与愿违。从自己使用角度看,按照现在汽车迭代的速度,只能安慰说等等党永远是胜利的。但从行业出发,对于自己来说,错过了这波汽车智能的发展。

题外话:发现自己买任何东西都是在最高点的时候,只要当下有能力,在自己的承受范围内,想要就立马必须得到手,宁愿多花钱,也不想多等一刻,所以从不去比较或者看其他渠道是不是可以更便宜。买完之后,再来研究。

  •  

自行车给自己带来了什么情绪价值爽点

2024年3月17日 17:18
自行车给自己带来了什么情绪价值爽点

自行车的记忆还是停留在大学里的那辆折叠自行车,没记错的话,应该还是深蓝色的。毕业之后还把它从学校一起带到了杭州,每天上下班骑着。某天锁在出租房楼下,被人剪开锁偷走了。从那之后一直到去年 10 月份就再也没拥有过自行车。

这次的契机借口是平常陪闺女一起骑行,但没想到的是,时间已过去 5 个多月,居然还热忠于折腾与骑行,今天想改装个啥,明天想骑什么路线。似乎自行车给自己带来了不一样的情绪。

改装升级

骑行的公路数不多,但逐渐发现,换个把带颜色、升级对轮组、改个车把、换个坐垫、改个线管线芯、调个前拨后拨等等非常有意思。不是因为换完的结果,而是自己跟着视频先学习,然后电商平台下单回家,再自己动手。随着自己会更换内外胎、会以八字法缠把带、会拆中轴、会更换轮组等等,这过程太有乐趣及满足感了。当然过程会不小心把手搞破皮、也会因为搞不好而苦恼,但最终看到自己动手后的成品,这精神的满足感,恨不得立马去户外骑上一圈。

而这一切自己动手的开端是因为刚买车那会去店里调试,发现当时的技师并不专业,调个前拨都不会。居然还碰到一次因为不熟练,而把我车调坏的(之后给我换了一辆)。想着碰到专业的技师这么难,还不如自己跟着视频学自己来,硬生生的让自己往技师方向一步一步的迈进。得感谢这不靠谱的技师,让自己享受了折腾的乐趣,填补了空虚。

骑行

去哪骑

之前在 二零二三有什么不一样的博文中就提到:“只要天气及时间适合,一家人就骑出家门。感受着外面不一样风景或路边不一样的美食”。确实,现在随着自己把自行车改装成自己更满意的样子,骑行的乐趣越来越浓。要么一个人推出去感受两只菜腿的力量,要么一家三口,骑哪是哪,走走停停,非常惬意舒服的休闲。

会为今天出门骑行发现新路线新风景而高兴,想着下次一定要带娘俩来。也会因为今天菜腿的力量似乎又强一点而满足。每次出门,想着今天应该走什么路线?

当然杭州的骑行路线有很多,最热门的叫什么龙井坡。自己暂时还没什么兴趣,先在家附近晃悠下再说。附近有个骑行佬也比较多的路线,时不时就会碰到一群,有天骑着正爬坡的时候,忽然有个人说:“耶,你跟我一样的把带”,我应该回应:你也是个有品味的人。

结尾

都说中年油腻男人要么成为钓鱼佬,要么折腾键盘、路由器、充电头、NAS、自行车。似乎折腾什么不重要,重要的是折腾这个东西,给自己带来了什么满足。当下有个寄托,喜欢才是最重要。

就跟自己玩博客一样,重要的不是发了几篇博文,而是折腾成自己满意样子的过程所带来的满足感。

正敲这篇博文的时候,中间出门把闲置的轮组卖掉,没想到碰到的买家是自己 B 站频道的一粉丝,正要给女朋友组一辆自行车,世界如此大又如此小。这也是自行车所带来的一种情绪满足。

  •  

HUGO 折腾随记之热力图 / 段落导航

2024年2月24日 16:49
HUGO 折腾随记之热力图 / 段落导航

在闲逛各博客的时候,发现有些功能蛮有意思的,于是趁现在还没忙碌起来,跟着抄了下作业,同时通过 AI 的帮忙,优化了下以适应自己页面的风格。

博文热力图

热力图

最开始看到好像是因为 木木老师发了个memos,当时想着自己平常也不怎么更新博文,所以意义不大。这两天又在 椒盐豆豉中看到完整的教程,心想这次页面布局改成很窄的单栏之后,似乎很契合小而美的特性。一顿操作,跟原版的区别在于:

  1. 增加了支持暗黑模式。
  2. 删除了字数统计,及根据字数多少显示色块的深浅。
  3. 简化星期及月份的显示。
  4. 一周的开始,从周日改成周一。
  5. 在 Echarts 官网重新定制了 JS 功能,不然原版的有 1M 多。
<div id="heatmap" style="max-width: 700px;height: 110px;margin-bottom: 40px;"></div>
<script src="https://img.koobai.com/echarts.min.js"></script>
<script type="text/javascript">
  var chartDom = document.getElementById('heatmap');
  var myChart = echarts.init(chartDom);
  window.onresize = function() {
      myChart.resize();
  };
  var option;
  var dataMap = new Map();
  {{ range ((where .Site.RegularPages "Type" "posts")) }}
    var key = {{ .Date.Format "2006-01-02" }};
    var value = dataMap.get(key);
    var link = {{ .RelPermalink}};
    var title = {{ .Title }};
    
    // multiple posts in same day
    if (value == null) {
      dataMap.set(key, [{link, title}]);
    } else {
      value.push({link, title});
    }
  {{- end -}}

  var data = [];
  for (const [key, value] of dataMap.entries()) {
    data.push([key, value.length]);
  }

  var startDate = new Date();
  var year_Mill = startDate.setFullYear((startDate.getFullYear() - 1));
  var startDate = +new Date(year_Mill);
  var endDate = +new Date();

  startDate = echarts.format.formatTime('yyyy-MM-dd', startDate);
  endDate = echarts.format.formatTime('yyyy-MM-dd', endDate);
  
  // 检测浏览器主题模式并选择颜色方案
  var prefersDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;

  // 定义明亮模式下的颜色方案
  var lightTheme = {
      backgroundColor: '#FFFFFF',
      fangkuaicolor:'#F4F4F4',
      gaoliangcolor: ['#ffd0b6'],
      riqiColor: '#999',
      textbrcolor: '#FFF',
      xiankuangcolor:'rgba(0, 0, 0, 0.0)',
  };

  // 定义暗黑模式下的颜色方案
  var darkTheme = {
      backgroundColor: '#1A1718',
      fangkuaicolor:'#282325',
      gaoliangcolor: ['#b25f2f'],
      riqiColor: '#666',
      textbrcolor: '#332D2F',
      xiankuangcolor:'rgba(0, 0, 0, 0.0)',
  };

  // 根据浏览器主题模式选择当前主题
  var currentTheme = prefersDarkMode ? darkTheme : lightTheme;

  option = {
    tooltip: {
    hideDelay: 1000,
    enterable: true,
    backgroundColor: currentTheme.textbrcolor,
    borderWidth: 0, // 边框宽度为0
    formatter: function (p) {
        const date = p.data[0];
        const posts = dataMap.get(date);
        var content = `<span style="font-size: 0.75rem;font-family: var(--font-family-code);">${date}</span>`;
        for (const [i, post] of posts.entries()) {
            content += "<br>";          
            var link = post.link;
            var title = post.title;
            content += `<a href="${link}" target="_blank">${title}</a>` + '<br>';
        }
        return content;
        }
    },
    visualMap: {
        show: false,
        inRange: {   
          color: currentTheme.gaoliangcolor
        },
    },
    calendar: {
        left: 20,
        top:20,
        bottom:0,
        right: 0,
        cellSize: ['auto', 13],
        range: [startDate, endDate],
        itemStyle: {
            color: currentTheme.fangkuaicolor,
            borderWidth: 3.5,
            borderColor: currentTheme.backgroundColor, 
        },
        yearLabel: { show: false },
        monthLabel: { 
        nameMap: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
        textStyle: {
            color: currentTheme.riqiColor,
        }
    },
        dayLabel: {
            firstDay: 1,
            nameMap: ['日', '一', '', '三', '', '五', ''],
            textStyle: {
                color: currentTheme.riqiColor
            }
        },
        splitLine: {
            lineStyle: {
                color: currentTheme.xiankuangcolor,
            }
        }
    },
    series: {
        type: 'heatmap',
        coordinateSystem: 'calendar',
        data: data,
    }
  };
  
  myChart.setOption(option);
  myChart.on('click', function(params) {
    if (params.componentType === 'series') {
      // open the first post on the day
      const post = dataMap.get(params.data[0])[0];
      const link = window.location.origin + post.link;
      window.open(link, '_blank').focus();
    }
});
</script>

详情页段落目录导航

段落导航

这个功能早在去年重新折腾博客的时候就想增加,但当时因为不大会,搞得都不完美,所以也就不了了之。这几天在 atpX中,看到文章目录滚动高亮教程,于是又试着折腾了下。经过跟 AI 的配合,完美显示,不过过程还是碰到问题:

1. 显示位置

如果直接使用 position: fixed; 特性,目录位置只会根据浏览器窗口的大小来改变。这就会导致,浏览器窗口很大,主内容跟目录就会分得很开;浏览器窗口小,主内容跟目录有可能就会重叠。尝试了各种解决方法之后,决定在最上层的父元素中使用display: flex;。然后在目录的上一级再加入一个父元素div,完美解决。

<div class="single-nrong">
<div class="single-zw">主内容</div>
<div>
    <div class="paragraph-dh">文章段落目录导航</div>
</div>
</div>
<style>
.single-nrong {display: flex;}
.single-zw {width: 100%;}
.paragraph-dh {position: fixed;}
</style>

2. 无目录导航

 文章页如果没有目录导航,也会显示内容标题,这就看着很奇怪了。解决方法:  

  {{ $toc := .TableOfContents }}
  <!--判断<li>标签中有没有内容,如果有内容就显示,无内容就隐藏-->
  {{ if findRE "<li>" $toc 1 }} 
    <div class="paragraph-dh">
      <div class="sidebar-biaot">文章段落导航</div>
      {{ $toc }}
    </div>
  {{ end }}

3. 完整方案

特性:1. 默认隐藏,滑动到一定距离显示。2. 滑动到页面上方 1/4 处高亮显示当前目录。3. 点击目录导航平滑滚动到对应的标题。4. 无目录导航的文章页不显示。

  1. 新建 js 文件,如 single.js。
document.addEventListener("DOMContentLoaded", () => {
    const postTOC = document.querySelector('.paragraph-dh');

    const headingObserver = new IntersectionObserver(headings => {
        headings.forEach(({ target, isIntersecting }) => {
            const link = postTOC.querySelector(`a[href="#${target.id}"]`);
            if (isIntersecting && link) {
                postTOC.querySelectorAll('a').forEach(a => a.classList.remove('active'));
                link.classList.add('active');
            }
        });
    }, { rootMargin: '0px 0px -75%' });

    document.querySelectorAll('.content h2[id], .content h3[id]').forEach(heading => headingObserver.observe(heading));

    window.addEventListener('scroll', () => postTOC.style.opacity = (window.pageYOffset > 400) ? 1 : 0);

    postTOC.addEventListener('click', (e) => {
        e.preventDefault();
        const targetElement = document.getElementById(e.target.getAttribute('href').substring(1));
        if (targetElement) targetElement.scrollIntoView({ behavior: 'smooth' });
    });
});
  1. 在 single.html 文件合适的位置中添加:
<div class="single-nrong">
<div class="single-zw">
   文章内容
</div>
<div>
  {{ $toc := .TableOfContents }}
  {{ if findRE "<li>" $toc 1 }}
    <div class="paragraph-dh">
      <div class="sidebar-biaot">文章段落导航</div>
      {{ $toc }}
    </div>
  {{ end }}
</div>
</div>
<script src="/js/single.js"></script>
  1. 在 css 文件中添加:
.single-nrong{
  display: flex;
}
.single-zw{
  width: 100%;
}
.paragraph-dh {
   display: none;
  @include breakpoint('large') {
    display: block;
    position: fixed;
    opacity: 0;
    top: 70px;
    margin-left: 40px;
    transition: opacity 0.5s ease; 
    border-left: 4px solid #f0f0f0;
    padding: 0 15px;
    max-width: 300px;
  }
}
.paragraph-dh a{
  line-height: 1.4;
  color: #666;
}
.paragraph-dh ul{
  gap: 15px;
  display: grid;
}
.paragraph-dh ul ul {
  padding-inline-start: 1rem;
  margin-top: 10px;
}
.paragraph-dh a.active {
  color: var(--text-highlight-color);
  transition: all .25s ease-in-out;
}

结语

现在折腾博客是完全离不开各类 AI 协助了,让一个不懂技术的人也能瞎折腾。这几次折腾的时候发现 coze 非常好用,基本上一次就能给出正确答案。看来 ChatGPT 4.0 就是牛逼。

  •  

这个春节有什么不一样

2024年2月17日 16:22
这个春节有什么不一样

提早回家

大年二十六回家,这应该是十几年来第一次这么早回去过春节。往年如果回去,一般都到年二十八二十九了。一是因为姐姐今年也回家过年,自从 2018 年因为奶奶过世见过一面,之后都没见着面,一晃 6 年多时间没见了,甚是想念。二是因为天气,如果晚两天要么天气不好,怕下雪开车不安全,要么就只能等到大年二十九了。三是因为哥哥这两年都说,早点回家,在家多呆呆。由于家族特殊原因,其实每年都不大愿意回去,这可能就是因为妈妈不在的原因,少了一股绳,把大家拴在一起。虽然老爸可以作为这股绳,但情感的细腻肯定比妈妈会弱很多。

拍照片

翻相册,我们三兄姐弟上次在一起合影还是 2015 年的 2 月份,一晃 10 年过去。现在各自的娃都已很大,姐姐的大孩子都已经高三马上参加高考,哥哥的大孩子也都高一了。这次三个家庭再次同框,虽然大人脸上各自又多了些岁月的痕迹,我都光头了,但能聚一块就是幸福。

印象中,从小到大都没跟父亲一起合影过,更别说我们三兄姐弟一起跟父亲合影了,这次算弥补了这个缺失。看父亲脸上的笑容,蛮好。平常我们不在身边,希望他身体健健康康,少喝酒。说今年开始戒烟,希望如他所愿。不过最大的遗憾就是,身边居然没一张妈妈的照片,连当年走的时候的遗像,都已开始模糊不清,这么多年过去了,我都忘记妈妈的样子。刚走那几年,心说妈妈知道我胆小,所以不来我梦里,现在好像也梦不到她了。

汽车发动机故障灯亮起

大年二十九去姑姑家吃饭,回来路上发动机故障灯亮起。之后表现的症状就是:转速表有时候无反应;容易熄火,再启动就困难,需要停几分钟才行;车子有时会抖动。初二找了个店看了下,电脑显示故障为曲轴传感器损坏。想着如果这样子到时候回杭州在高速上忽然间熄火实在太危险了。于是初三又去县城检查了下,同样显示为这个故障,但没配件没办法。说是只要不熄火就没事。期间,刹车又坏了,开起来非常大的刺耳声,没办法花了 350 块钱换了副前刹车片,真是祸不单行。

不过也正因为去了趟县城,我们一家三口跟哥哥一家人在县城好好逛了逛,难得这样,蛮好。县城本身也没去过几次,这么多年来也没去过,现在就是各种旅游景点。

婺源县城

姐姐来我家

杭州的家,除了叔叔跟表弟来吃过一次饭,其他人都没来过。这次跟姐姐商量好,回工作地的时候,一起先到我家呆呆。初四出发,一路上车子算争气,除了出发时,路上抖动,主动熄火停了几分钟之后,高速一路上没给我撂桃子,连堵车的时候都没撂桃子,平安到家,感谢。

姐姐在杭州呆了一天,跟我们一家三口一起看了场电影,吃了顿火锅,姐弟两搀着手逛了下商场。想想都很魔幻,太难得了。虽然我们两个城市隔得不远,但要见面,各自有各自的生活,其实很难。我离老家的距离也就 300 公里左右,也近,但除了清明节回去看我妈,跟过年的时候有时回去一趟,平常也很难回去。大概这就是成年的各自奔波吧。

拇指割破

初六早上送姐姐到汽车站回工作地,回家中午做饭时,胡萝卜没拿稳,掉落过程中,下意识用手去接,忘记右手拿着菜刀(切菜前,刚把刀磨了下),导致左手拇指遭殃,眼瞅着鲜血直流,看伤口也很深。慌乱中打电话问工作中的老婆,家里的纱布在哪,简单的缠了下,骑着车就往社区医院跑。社区医院说你这伤口必须得缝合,让去大医院。感谢下社区医院当时的急诊医生,也没让挂号,帮忙伤口重新处理了下,也没让去付钱,说赶紧去大医院。在大医院,医生说看看有没有伤到神经,有可能要住院,我脑子都蒙了,没想到有可能那么严重,检查完,医生说神经还好,但有可能有后遗症,以后会时不时的麻一下。先缝了四针,看看后面恢复的情况。感谢娘俩一直陪着,缝的时候我非常怕,从小到大都没经历过,看着是一个大胖子,但紧张得浑身都是汗,还好老婆一直抱紧我。

麻药过后,会一阵一阵的酥麻或疼,等初十(周一)复查换药的时候,看看怎么样了,希望有好转。就当是新年的开门红了,今年一定是个好兆年,红红火火的。

结尾

每年春节,在老家最多也就呆三四天,一般初二或初三就回杭了。今年如果算上回来的两天,一共呆了九天时间,好快,一晃就过去了。在家里,孩子们玩得很欢快,晚上越晚睡越兴奋,作业也不写。感觉蛮好,辛苦哥嫂的照顾,以后如果有可能,也希望能多呆呆多聚聚。

收收心,开始新一年的奋斗,霉运都已用完,剩下的都是好运了,努力加油~~

  •  

HUGO 外链跳转到中间页

2024年2月1日 22:28
HUGO 外链跳转到中间页

前天在老麦博客中看到" 给Twikoo添加链接跳转中间页“博文,因为外部链接你无法确定未来某一天可能就会变成不安全链接,从而影响到自己博客。同时又见到 大大的小蜗牛也是因为安全的原因,把博客评论换成了GitHub Discussions。网上也有不少的案例,因为某个链接的原因,而被请喝茶或电话让自己排查。今天在 不亦乐乎那见链接也是跳转到中间页,于是请教了下怎么实现的,感谢。之后经过与 AI 的博弈,搞定。这次使用 ChatGPT 跟 Claude 都不行,说了一堆,完全不懂,最后使用 coze 搞定基本框架,然后再来回沟通逐步完善功能。估计跟它使用的 ChatGPT 4.0 接口有关。想充值 ChatGPT,奈何月费太贵了。

新建 js 文件,如:tiaozhuan.js。里面的网址为排除跳转中间页。

function checkParent(element, classNames) {
while (element) {
if (element.classList && classNames.some(cn => element.classList.contains(cn))) {
return true;
}
element = element.parentElement;
}
return false;
}
var excludedClasses = ['talks_comments','tiaozhuan-button']; // 添加需要排除的a标签类名class
window.addEventListener('load', (event) => {
document.body.addEventListener('click', function(e) {
let target = e.target;
while (target && target.nodeName !== 'A') {
target = target.parentNode;
}
if (target && target.nodeName === 'A' &&
!checkParent(target, excludedClasses) &&
!target.href.includes('koobai.com') &&
!target.href.includes('douban.com') &&
!target.href.includes('bilibili.com') &&
!target.href.includes('github.com') &&
target.hostname !== window.location.hostname) {
e.preventDefault();
let encodedUrl = btoa(target.href); // Base64 encode the URL
let url = '/tiaozhuan?target=' + encodedUrl;
window.open(url, '_blank');
}
});
});

在模板_default目录下,新建一个 html,如tiaozhuan.html。

{{ define "body_classes" }}page-tiaozhuan{{ end }}
{{ define "main" }}
<div class="tiaozhuan-all">
  <div class="tiaozhuan-nrong">
    <div class="tiaozhuan-title">即将离开 {{ .Site.Title }},跳转到以下外部链接</div>
    <div id="tiaozhuan-link"></div> 
    <div class="tiaozhuan-info">请自行识别该链接是否安全,并保管好个人信息。</div>
      <div class="tiaozhuan-button"><a href='' id='direct-link'>继续访问</a></div>
  </div>
</div>
<script>
  const params = new URLSearchParams(window.location.search);
  const encodedTarget = params.get('target');
  const target = atob(encodedTarget); // 使用 atob 进行 Base64 解码
  
  if (target) {
    document.getElementById('direct-link').href = target;
    document.getElementById('tiaozhuan-link').textContent = '' + target; // 直接显示目标地址    
  } else {
    console.error('未指定重定向目标。');
  }
</script>
{{ end }}

相关 css,根据主题风格调整。其中 background 为明暗模式下不同的背景图。

.tiaozhuan-all{
  position: relative;
  box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
  border-radius: 10px;
  background: #fff url(/tiaozhuanico.webp) no-repeat center center / cover;
  color: #666;
  word-break: break-all;
  max-width: 700px;
  height: 350px;
  text-align: center;
  font-size: 0.85rem;
  overflow: hidden;
  margin: 100px auto 0; 
  @include breakpoint('small') {
    aspect-ratio: 2 / 1;
    height: auto;
  }
}
.tiaozhuan-nrong{
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 20px 20px 30px 20px;
}
.tiaozhuan-title{
  font-size: 1.3rem;
  font-family: var(--font-family-title);
  color: #222;
  line-height: 1.4;
  margin-bottom: 4px;
}
.tiaozhuan-info{
  margin-top: 6px;
}
.tiaozhuan-button{
  margin-top: 20px;
}

.tiaozhuan-button a{
  color: var(--text-highlight-color);
  border-radius: 4px;
  padding: 10px 30px;
  font-family: var(--font-family-title);
  font-size: 0.85rem;
  border: 0.5px solid var(--text-highlight-color);
  display: inline-block;
}

@media (prefers-color-scheme: dark) {
  .tiaozhuan-all{
    background: var(--background-dark-color) url(/tiaozhuandark.webp) no-repeat center center / cover;
    color: #acacac;
  }
  .tiaozhuan-title{
    color: #ddd;
  }
}

最后在页尾引用js文件即可,如

<script src="/js/tiaozhuan.js"></script>

搞定,整体思路是:js文件识别链接的a标签,并把链接用 base64 编码,同时排除一些不需要跳转中间页的class或网站。然后跳转到tiaozhuan.html文件中(链接格式为/tiaozhuan?target=base64编码),html文件承担了中间页具体信息,及跳转动作。如使用base64解码跳转的链接。

以上为全局引用JS方法,判断 a 标签。下面利用 Hugo 内置的 render-link.html 实现。在模板_default/_makup目录下新建 render-link.html文件。思路是直接给链接添加 “/tiaozhuan?target=base64编码”。下面代码中的 “/” 为排除内链;网址为排除特定地址。感谢 大大的小蜗牛提示的 render-link 方法。

{{ $url := .Destination }}
<a 
    {{ if or (in $url "koobai.com") (strings.HasPrefix $url "/") }}
        href="{{ $url }}"
    {{ else }}
        href="/tiaozhuan?target={{ $url | base64Encode }}"
    {{ end }}
    {{ if strings.HasPrefix .Destination "http" }} target="_blank"{{ end }}
>
{{ .Text | safeHTML }}</a>

针对无法给链接添加 “/tiaozhuan?target=base64编码” 的,譬如 Artalk 评论,可以特定使用 js 判断。里面的.atk-comment-wrap a 就是 Artalk 评论的 a 标签;网址为排除特定地址。

document.body.addEventListener('click', function(e) {
  let target = e.target.closest('.atk-comment-wrap a, .datacont a');
  if (target && !target.href.includes('koobai.com')) {
      e.preventDefault();
      let encodedUrl = btoa(target.href);
      let url = '/tiaozhuan?target=' + encodedUrl;
      window.open(url, '_blank');
  }
});

对于浏览体验来说,多了一步跳转,总归是不好,但为了愉快的玩耍博客,稳妥一点更佳。现在把各个页面的评论都去掉了,只留下了唠叨跟博文评论,并且把博文的评论默认设为隐藏。倒也不是因为所谓的安全,主要是觉得评论的样式有待提高。

如果觉得跳转中间页很烦人,浏览器可以装个 Skip Redirect插件,告别所有网站的中间页跳转,直接抵达目标地址。

  •  

折腾博客更像是自己的精神鸦片

2024年1月30日 15:40
折腾博客更像是自己的精神鸦片

前两天看到说折腾博客实质上是新型电子游戏,博客服务器从 1 月初转入阿里云以后,自己就一直陆陆续续的在折腾页面布局。状态来说,自己折腾博客更像是精神鸦片,过程很嗨,一旦停下来就空虚无所事事。需找寻另外的事情来填补这逃避而空虚的心灵。

追寻最开始玩博客的目的,到现在折腾博客,似乎都是在打发时间中,或者说逃避更重要的事情中,找到了一个让你兴奋而沉浸其中的投入。当你懂得怎么调整布局,一个按钮的大小一个图标的变化一个文本颜色的选择都是折腾过程的乐趣。特别是当你折腾过程中解决了一个难题,那种兴奋感无以言表。反观对于输出内容,兴趣不大,因为无法给你带来兴奋而满足,也有可能读书太少,从小作文分数都很低。有内容输出,更多的是记录,方便未来找寻现在的记忆。

一件事情只要在自己的能力范围内,一旦愿意沉浸进去,就想好好折腾,享受其中的过程乐趣所带来的兴奋感。前两年无意中接触到机械键盘,就动手改轴下垫、换各种轴体、卫星轴加垫片等等,你说是为了有更合适的手感?可能这只是一个说服自己的理由,主要还是享受这折腾过程的兴奋感。就跟现在喜欢骑行,换链条、内外胎、脚踏、坐垫、车把等等一样,换了能带来怎么样的变化?对于只是休闲骑来说,并没有什么改变,但就是享受这过程的乐趣,居然自己会换胎了、会缠把带了。

填补当下的心灵空荡,需要有鸦片,折腾博客是属于金钱成本相对最低的鸦片。不像玩自行车、键盘你需要持续的金钱投入。不过这个劲一旦过了,空虚之后,可能又会回到另外的寄托,如玩自行车、玩键盘,或者重新拾起来博客,继续折腾,看看这个药效是不是还在。

现实工作一旦忙碌起来,就无需精神鸦片,工作会把你的空虚所填满。这时,博客只是一个存在互联网的一个脚印,静悄悄的躺在那里,哪天你空间、域名不续费了,足迹就开始消失。但或许哪天又需要这个鸦片来刺激你的快感,周而复始。

叨叨这么多到底要表达什么呢?嗯。。。对,我遇到了所谓的中年危机。所有事物都不关心,不关心朋友不关心外界任何事情不关心自己的负责越累越多,只想沉浸在自己的精神内耗中。知道这肯定是不行,但就想来点所谓的精神鸦片,所带来的当下一时快感。

所以如果博客哪一天不折腾或不更新了,说明要么有了其他精神鸦片替代,要么开始忙碌起来了~~

  •  

二零二三有什么不一样

2024年1月3日 12:41
二零二三有什么不一样

闺女,正式踏入人生的第一个十年,身高已经到我鼻子以上。有时候仰面走过来,感叹姑娘真长大了。感觉昨天还在医院里学习怎么抱刚刚出生的她,一晃十年过去了。希望下一个十年来得慢点。。。

已经在读四年级,但这个不爱学习的态度,像谁呢?写作业过程中,偷偷的玩 iPad,说了也没用,只能物理隔绝才行。除了看电视两眼发光,平常也不知道干嘛,让看会书或多写一个作业,回答说不可能的。学不学的利害关系道理,也不止一次跟她讲,但目前没见任何效果。又不想采取强制手段,教育孩子学问太大了。她妈妈小时候学习成绩非常好一直都是班长,我学习成绩虽然渣,但印象中还是想学的。

老婆,十年之后,重新踏入职场。因为承担起了照顾小孩责任,把自己身体累垮之外,还耽误了自身事业十年。现在重新回到职场,太多的不容易。承担着工作的同时,还得照顾家庭及孩子的教育。

在Jeffer.Z博客中看到,他们两夫妻是初中同学,算是青梅竹马。想到自己跟老婆是大学同学,一路走过来也不容易,跟着我受了太多的委屈。本以为日子在一天天的变得更好,但哪知道这两年一年比一年更差。导致我的脾气及耐心也变得极其不稳定,时不时的抱怨。按说男人照顾女人才对,反而她一直充当着照顾家庭照顾我的角色,事事以我为主,实在是太惭愧。

自己,年初的十年弹指一挥间博文中写到:“十年后,事业好像回到原点,又到了以前的状态。希望 2023 年借由新的博客开始,也是新事业的起点。。。。加油”。一年下来,情况更差了,外债不停的滚雪球,已经大到自己从没预料的阶段,还没有解决的方法,似乎进入到了一个死胡同。或者说怀疑自己之后,开始摆烂。变得越来越孤僻,从不主动联系朋友,从不参加聚会,连微信朋友圈也从不打开。朋友说,你这不行,要主动出击主动走出去,才有可能带来不一样的变化,道理当然知道,这样肯定不行,但有时候就是不想面对现实,就是想逃脱。马上奔四十岁,从没想过自己的中年危机是这么难,从小就幻想着,这会早出人头地。

父女

一家人,跟闺女独处的时间变得更多,特别是暑期时。虽然状态是:“一个成语概括各不相扰。最多的交流,爸爸我饿了、好热、休息下。有时候我也不知道应该怎么交流,教写作业?一没耐心二也不会;陪一起玩?好像也不知道玩什么,或者说我还是没耐心。父女俩做得最多的就是一起看电视”。但不管怎么说也是属于父女俩的单独时刻。

十月份入坑自行车之后,只要天气及时间适合,一家人就骑出家门。妈妈制定路线,准备后勤工作,父女俩只管蹬就行,感受着外面不一样风景或路边不一样的美食。过程太舒爽太惬意了,还能顺便锻炼锻炼身体。一改以往一家人要么在商场里逛要么在家里蹲的不健康生活。有了自行车之后,一句话总结:“明天我们去哪骑”。

线上,博客在十年之后,重新搭建上线,折腾的乐趣好像又回到了最初。不一样的是,随着科技的进步,通过ChatGPT 帮忙,能折腾出不一样的布局及功能。唯有感叹,科技太快。多年以前赶上了互联网浪潮,分享了互联网所带来的红利,不知道这次的变革,自己还能不能跟得上。

2020 年就想着说开始学发视频分享,但认为太难迟迟没做,直到 2023 开始在哔哩哔哩发出第一条视频,虽然质量一般,但发了也就发了,其实也就那么回事,想那么多不如先做第一步。

2024,核心两个字:搞钱。

  •  

每年一游之上海 (迪士尼/天文馆/朵云书院)

2023年8月25日 22:22
每年一游之上海 (迪士尼/天文馆/朵云书院)

忘记从哪年开始,两个人决定说趁闺女还小,每年尽量带她去个地方游玩下。这些年到现在不完全统计应该游了厦门、三亚、扬州、台湾、千岛湖、广州、珠海、北京等地。上海其实去了很多次,每次差不多都要到迪士尼,不过疫情之后这三年就没再去迪士尼了。有天对着自己的狗狗玩具说:“狗狗,都没带你去迪士尼玩”。这。。。明摆着的暗示,一合计,走吧。。。

22 号晚上开车出发,途径嘉兴服务区,发现现在服务区是真豪华,整得跟商场一样,上下好几层。差不多 21 点多到酒店,计划第二天几点醒就几点吃完早餐出发。小姑娘 6 点半就醒着睡不着了,太兴奋。那就起床刷牙洗脸吃饭出发。。。 上海迪士尼 玩到迪士尼乐园关门,回到车里已经是夜里 11 点,一天下来走了近 26000 步,脚都不是自己的了。小姑娘还是很厉害,比我走得更多,只是临近结束及回到车子这段路程说脚疼。但值得,开心最重要。这一天的天气也不错,没太阳,极大缓解了穿梭在路途中的暴晒。

之前每次来迪士尼都穿着艾莎的衣服,看着艾莎的剧场表演,有时还连续看两场。但这次不喜欢了,连艾莎的剧场不要看,看来长大了,喜好发生了变化。上午问要不要买盖章的护照,说不要,但当在商店里看到护照本子了,又想要了。买了之后,就热衷于各个地方找机器盖章,这个精神劲是真饱满。至于游乐项目,想玩的基本上都玩了一遍,除了一个想玩漂流、一个想玩过山车没玩到,主要排队时间太长,2 小时起步。只买了一个飞跃地平线的尊享卡,因为排队 3 个小时起步,连尊享卡从进去到出来也都花了 40 分钟。

如果说这次与前几次来迪士尼有什么不同的话,最大的感受就是小姑娘长大了。玩累了我说背下,但背不大动了,只背了一点点点路,就没力气,背不住。 上海天文馆 晚上小姑娘睡觉已是凌晨 1 点多,也太累,第二天早上 8 点多才醒,洗漱吃完早餐出发天文馆。到地方刚好赶上环幕影院买的《时间旅行》。看完都要睡着了,视觉效果很一般。还是好好的逛逛展区,效果做得是真好,可能会对小孩产生长远的爱好影响,立志于今后从事相关行业。至于我们,老婆说接受闺女是一个普娃吧,一点好奇心都没有,走马观花。哎,我不接受我不接受,但。。长大之后能养活自己就行。

到了 13 点多,本打算在场馆某餐厅点东西吃,服务员的态度,一言难尽。而且套餐都是预制的,微波炉里加热几分钟,评价也说非常一般。这样反而促成老婆趁这个机会搜了下其他地方,发现附近几公里有个评价不错的饭店。而且吃完还能带我们爷俩去另外一个地方晃晃。虽然展馆还没看完,但看闺女也没有太大兴趣的样子,一合计走起。。。 上海天文馆 一家广东餐馆,老婆推荐了黯然销魂饭,真心好吃。比场馆里便宜还好吃,爽。吃完之后,就来到了计划外的朵云书店(滴水湖店)。一进门,那三层楼高的整面墙书柜,看着太震撼了,而且窗外就是滴水湖,这风景,着实不错。

17 点左右,两天两晚的旅程愉快的结束,开始回杭。由于是在上海,也没计划多呆,想来,可以很方便的走起。

在上海郊区很难发现有沪 A 的油车,两天下来在路上就见过一辆,新能源的到发现不少,很有意思。沪 C 是全国唯一全时段不能进上海市区的车牌,冷知识。有可能这次驾照要被扣分,因为快到路口要转弯的时候开到了公交专用道等红绿灯,没想到转弯道在旁边。另外这次驾车,感觉心有点急,有几次差点出事情,心平气和心平气和心平气和~~

  •  

图片通过 uPic 上传到 Github,然后自动同步到腾讯 COS / 又拍云 / B2

2023年7月28日 16:18
图片通过 uPic 上传到 Github,然后自动同步到腾讯 COS / 又拍云 / B2

起因,自从把博客图片转移到又拍云之后,就通过 PicGo 直接上传,顺手也会再传一份到原先的多吉云,当是备份。本身这个流程没什么问题,但当看到斌仔说,他的方案是上传到 Github,再自动同步到各大存储桶。瞬间眼前一亮,我干嘛不这样呢,一次上传就行。目前博客样式或内容更新也是直接推送到Github,然后通过 Actions 自动构建及同步到各服务商,真是换了个场景就不知道了。折腾之路开始,记录留作备忘~

找了一圈多吉云的 Actions 工作流,发现没有。 大大的小蜗牛推荐了一个,试用了下,可能由于太久没更新或者自己不会使用,无效,找到原作者,沟通相对困难。决定放弃多吉云,转向腾讯云的 COS ,之前博文记录过 Github自动构建Hugo, 并同步到腾讯COS, 同时刷新CDN缓存,只需简单的修改下yml就行,其他具体设置参照之前的博文。

name: Sync Tencent

on:
  workflow_dispatch:
  push:
    branches:
      - master
    paths:
      - 'koobaiblog/**'  # 目录内容有变化执行工作流

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
          fetch-depth: 0

      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.9

      - name: Setup coscmd and sdk
        run: sudo pip install coscmd

      - name: Configure coscmd
        env:
          SECRET_ID: ${{ secrets.SecretId }}
          SECRET_KEY: ${{ secrets.SecretKey }}
          BUCKET: ${{ secrets.Bucket }}
          REGION: ${{ secrets.Region }}
        run: coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION

      - name: Upload to COS
        run: coscmd upload -rfs --delete koobaiblog/ /    # 需同步的本地目录及COS目录

搞定腾讯云之后,开始寻找又拍云的 Actions 工作流, 斌仔博文里有详细的教程,但试用之后觉得不够完美,一是文件无法增量更新,另外一个是无法保持文件一致性,譬如删除了 Gtihub 下的文件,远端无法同步删除。经过一番搜索,发现 她和她的猫博文中有说到增量更新及一致性问题,但没给出具体的脚本,抱着试试看的态度跟作者联系了下,把我的强迫症给完美解决,非常感谢作者。以下是yml,其中 UPYUN_BUCKETOPERATOROPERATOR_PASSWORD 分别是又拍云的服务名称、操作员、操作员密码。详细使用可参考作者的 Github

name: Sync Upyun

on:
  workflow_dispatch:
  push:
    branches:
      - master
    paths:
      - 'koobaiblog/**'  # 目录内容有变化执行工作流

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository master branch
        uses: actions/checkout@master

      - name: Deploy
        uses: her-cat/upyun-deployer@v1
        with:
          bucket: ${{ secrets.UPYUN_BUCKET }}
          operator: ${{ secrets.OPERATOR }}
          password: ${{ secrets.OPERATOR_PASSWORD }}
          dir: koobaiblog  # 需同步的本地目录

Backblaze B2 同步,B2_APPKEY_ID B2_APPKEY Application Keys菜单下生成就行。要特别注意的是B2_BUCKET写法,完整的写法是b2://xxx,其中xxx为存储桶名称。

name: Sync B2

on:
  workflow_dispatch:
  push:
    branches:
      - master
    paths:
      - 'koobaiblog/**'  # 目录内容有变化执行工作流

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - uses: jakejarvis/backblaze-b2-action@master
      env:
        SOURCE_DIR: './koobaiblog'  # 需同步的本地目录
        B2_BUCKET: ${{ secrets.B2_BUCKET }}
        B2_APPKEY_ID: ${{ secrets.B2_APPKEY_ID }}
        B2_APPKEY: ${{ secrets.B2_APPKEY }}

找寻各个解决方案的过程中,试用了下 归臧的方案Lsky图床,发现只能同步到一个存储策略,更适合作为图片管理使用。还搜索到ZFile存储程序,支持多吉云,试用了下,每次也只能同步到一个存储策略,在 Github 中向作者提了Issues建议,能不能增加一次上传,同步到多平台存储选项,明确答复未来不支持。还发现Picsee,图片管理工具,支持同步到各大平台存储桶,但自己已经有Eagle了。

为什么选择uPic收费软件而不用开源免费的PicGo?主要就是界面跟图标好看😂,另外一个是基于 Mac 原生开发。试用下来也非常好用,喜欢它通过设置快捷键快速上传。具体使用可参考各自的文档 uPic PicGO

为什么要同步到多平台?数据多重备份总归是好的,另外就是一旦有这个想法之后,你不搞定这个 Actions,心里很难受。腾讯 COS会不会很贵?本来一共也就十几兆,一个 G 的量也就几块钱,可忽略不计。又拍云可申请联盟,每月免费 10G 存储及 15G 的 CDN。Backblaze B2每月免费 10G 存储及每天 1G 的流量,如果套壳 Cloudflare,流量个人使用等于不要钱。折腾的乐趣,就在于不停的折腾~

  •  

信息获取推荐及价值

2023年6月25日 20:33
信息获取推荐及价值

进入移动互联网时代之后,每天被动或主动获取的各类信息非常多而杂。并且各大平台为了流量,绝大部分都是标题党,而且毫无价值可言,垃圾信息。为了让你沉浸其中,在平台多逗留一分钟,每家都是大数据算法,最终把你圈住。自己是一个自制力非常差的人,所以会把设备从系统层面完全隔绝各类推送,屏蔽非必要 APP 通知、不装短视频、新闻相关的 APP。

自己主要还是以主动的方式去获取信息,当然虽说是主动,但其实当你去关注某个 UP 主或者说大 V 的时候,其实有一部分也是平台根据你的喜好来推荐。不过目前获取信息渠道主要控制在微博、Youtube、Reeder。微博用的第三方 VVebo,Youtube 使用印度区会员,Reeder 阅读器买断。主要的目的是尽可能的减少广告、不必要的算法推荐,来更纯粹及集中的获取信息。

日常关注的一些 UP 主或专题:

  1. 大聪看电影,影视解说,声音跟解说风格都非常喜欢。 刘老师说电影,解说风格偏幽默。 发条张的野馄饨摊儿,偏长视频解说。现在看完影视,不看下解说,很多彩蛋及幕后故事是真发现不了。 硬核说,影视播客,有趣的两个主持人。
  2. 先看评测,硬件产品评测,严谨专业。 钟文泽,数码产品评测,说话风格偏有趣。 韩路,汽车相关,喜欢他的韩路游记节目。 电丸科技AK,科技话题,专业。 影视飓风,画质很专业,及喜欢他的一些行业幕后。
  3. 睡前消息,社会新闻评论。 小岛大浪吹,历史或新闻评论。 王骁Albert,海外国家讲解。
  4. 虎嗅早报 派早报 iFanr 早报,每早rss推送,快速了解下时下互联网、科技、社会新闻。

自己经历过找工作还是通过报纸打电话的时代,到如今每个人都可以成为信息发布、传播者。如果不加以筛选、过滤,就会浸泡在各个算法推荐中,等你回过神来,时间已到半夜。说好的陪陪孩子、推进下工作进度、看看书、看部影视,又得说,明天再说。一复一日的这样消耗着。

当你忙完一天回到家里,打开微博,看着时间线还停留在早上起床时间,赶紧刷新下一天中你都错过了什么。发现哪个明星塌房了、哪里出现安全隐患、地铁出现偷拍……。好像你错过了很多,但对你的影响是?少了聊天话题还是……?

我爱世界,希望世界和平,努力想办法有“砖搬”,让亲人不会因为你的能力问题导致生活水平下降,加油~

  •  

博客折腾随记及 CSS Grid 属性

2023年6月12日 15:43
博客折腾随记及 CSS Grid 属性

最近一直在不断的折腾博客,就跟唠叨里说的一样:对博客的折腾真是越折腾越来劲,一旦停下来,瞬间心里觉得空落落的。几乎把各个页面都重新梳理优化了下,特别是首页,各模块的信息流都给聚合起来了。因为更新博文的频率实在是不高,也许降低博文信息展示权重,让其首页更丰富起来,可读性更高点。

折腾过程中,ChatGPT 给出了 CSS display: grid; 属性,想起之前 风记星辰 也分享过,真是不了解不知道,一试用,发现用于并列容器的布局实在是太好用了,一直困扰我的自适应、等高等宽问题迎刃而解。索性把现有的页面全部基于 Grid 属性更改掉。其中 grid-gap 也很牛逼,不像以前用 margin-right 导致最右边的容器也会空出一定的距离。

display: grid;
grid-gap: 10px; /* 中间空10px间距 */
/* grid-template-columns 各个使用方法 */
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));/* 根据浏览器窗口自适应布局,最小容器宽度340 */
grid-template-columns: auto 1fr; /* 第一列宽度根据元素宽度自适应,第二列使用剩余容器空间 */
grid-template-columns: 1fr 1fr; /* 两列等宽 */
grid-template-columns: repeat(4, 1fr); /* 多列等宽,4为平均分为四列 */

现在折腾博客是完全离不开 ChatGPT 了,数据分离、交互动画、随机调用、布局样式,都通过它来实现,只要你多问几次或者完善对话语句,基本上都能给到你想要的答案。真是做到每个页面的最终呈现,都有它的贡献。自己一个完全看不懂 JS 的人,页面居然也用了不少 JS 效果。

当然有时候问着问着也烦,不想再问,始终给不到自己想要的效果。这个时候要么作罢,要么隔段时间新建窗口重新问,也许想要的答案就来了。目前使用的是免费 3.5 版本,如果 4.0 版本,估计更简单易用,特别是能访问互联网之后,期待未来~

有时候在想,这样折腾博客的意义是什么,日志没写多少,每天净搞些有的没的,内容才是重要的才对,再说折腾来折腾去,也没几个人看,图啥?嗯。。。。,开心最重要。意义就在于不停的折腾,就跟开头说的一样:一旦停下来,瞬间心里觉得空落落的。

感谢折腾过程中, 林木木 风记星辰 老师帮忙。同时折腾过程中,又认识了一些新朋友 小饿 linlinxing 小熊 wananaiko 老麦 大大的小蜗牛 忆往事 归臧 叶子笔记 少岱山 等等,博客真好。

  •  

信息流整合到 RSS 阅读软件 REEDER

2023年5月12日 23:42
信息流整合到 RSS 阅读软件 REEDER

重新搭建博客以来,就喜欢没事的时候去博友的站点逛逛,看看各自的生活百态。成为习惯之后,发现访问路径比较麻烦,要么从互访的评论中进入,要么就从博客集合平台进入,每次访问的时候点来点去的,其实常逛的也就那么些站点。于是想着搭建个友链页面,集中在一个地方,样式也写好了,但总觉得还是不够方便。包括日常获取当下信息的方式也是通过浏览器书签或各类 App 点来点去的。有天忽然间就想起了 RSS 服务,一劳永逸的都集中起来,方便又快捷。

搜索一圈,决定使用开源的 FreshRSS 搭建服务用于数据同步、曾经的最爱 Reeder 作为电脑端阅读器、开源的 NetNewsWire 作为 iOS 端阅读器。

搭建过程中还发现 RSSHub,开始没明白到底是干啥的,官网的介绍是:“RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。” 在目前大多站点不提供 RSS 输出或者无法做到精细化输出(譬如只需要某个信息流站点的某标签/板块内容),RSSHub 确实起到了非常大的作用,根据文档直接配置 RSS 链接就行。不过如果它也没提供,那就需要自己通过它编写订阅源,看了下文档,嗨,这就不是我要考虑的问题了。

一切准备就绪,试用了几天,发现几个问题:1. 无法通过阅读器直接刷新订阅源。2. NAS 没设置科学上网,Youtube 等订阅源无法添加到 FreshRSS。3. 通过 FreshRSS 订阅的 Youtube 频道在阅读器中无法直接播放。前面两点都解决了,第三点在 Reeder 牛逼的交互中,虽然影响不大,但这个强迫症呀。。。不爽。

看着 Reeder 目前提供了 iCloud 数据同步服务,同时它对 Youtube 也有优化,心想要么直接购买 Mac、iOS 两端好了,去掉中间商 FreshRSS,省得麻烦,一顿纠结,收入囊中。虽然开源的 NetNewsWire 也提供 iCloud,但交互、及界面设计 Reeder 太爱了。譬如在文章页中,左滑就是源站打开,右滑关闭。一款愉悦的 App,会让生活增添一份色彩,博客重建之初,特意搭建了个 Apps 分享页面。

也趁着这次折腾,把自己站点 RSS 通过网上的主题模版重新梳理了下,全文可按格式段落输出了。现在不管是访问博友的站点,还是日常的信息流获取,都可以优雅且方便的随时随地享用,舒坦~

  •  

体验了一次群晖 NAS 的重要性

2023年5月5日 20:53
体验了一次群晖 NAS 的重要性

早上正准备打开昨天的项目文件继续完善,目录里找了一圈发现没有,完了,难不成自己误删了?睁大眼睛又找了几圈,呃。。。猝。转念一想,这个工作目录是实时单向同步到群晖 NAS 的,而且套件也设置了控制版本数量,心情平复很多。打开 Synology Drive,心态崩了,没发现历史版本,因为没启用回收站功能,版本控制需基于文件来,但没文件呀。。。

虽然项目大部分已交付给甲方,但防不住有修改意见,那会没源文件,想想就抓狂。Google 了下,群晖官方文档中提示 :Synology Drive 管理控制台中的“版本资源管理器”可以勾选“显示删除的文件”找回。文件是有了,但这里面的删除文件是最初新建的文件,也就是说文件是空白的。。。

没办法,开始默默计算重新做一遍需要花多长时间,同时再研究下 Synology Drive 管理控制套件,在日志中发现昨晚18点多的时候删除的文件,本打算双击查看下详情,但这一双击,卧槽!此文件的历史版本都在,下载最近的版本,啊!!!叫了一声,文件完好无缺,意外惊喜,当时就连说群晖买得值了值了。。。

这心情起起落落的,省下至少一天的重做时间。过后还是得总结下,为了让重要的文件更安全或者说实时的重要文件更安全:

  1. Synology Drive 的版本数量设置得多点。
  2. 重要目录启用回收站、回收站。可以到任务计划中设置一定周期自动删除回收站里的文件。
  3. 重要文件多块硬盘备份,如组 Raid 或 计划备份。当然有条件的还可以多地备份。

再说一句,群晖牛逼、NAS 牛逼~。更多群晖的介绍可参考之前的日志 Synology 群晖 DS920+ 使用之旅

  •  

旧 Macbook 装双系统 Windows 11

2023年4月27日 22:21
旧 Macbook 装双系统 Windows 11

这些年来一直使用 Mac 电脑,从 iMac 到 2014 款 15 寸 Macbook Pro 再到 2019 款 16 寸 Macbook Pro。不记得从什么时候开始不再使用 Windows 电脑,只记得那会使用 xp、win 7 系统。不过现实中总有那么些事情需要用到 Windows,如:企业网银、某些硬件更新。之前装个 Win 7 虚拟机临时使用下,但从微软发布 Win 11 以后,看到更现代的界面,一直想尝试看看。

本打算继续采用虚拟机方式装 Win 11,但没成功。于是想着 14 款的 Mac 放着也是放着,直接装个双系统。实践的时候发现把事情想简单的了,由于硬件比较老旧,安装过程中遇到不少麻烦,想着再搜不到方法就放弃了,好在最终都解决。以问答形式记录下关键问题,留作备忘。

1. 使用什么工具安装?

Mac 自带的“启动转换助理”软件。M系列处理器暂不支持;16 款之前还是哪年之前的 Mac 需要另外准备外置硬盘作为 Win 安装的启动盘,我的 14 款需要。

2. 安装时提示“该电脑无法运行 Win 11”怎么办?

在这个界面下,按 Shift+F10 键 ,弹出命令窗口输入“regedit”打开注册表,依次定位到:

HKEY_LOCAL_MACHINE\SYSTEM\Setup
创建一个名为 "LabConfig" 的项,在此项下创建两个 DWORD 值:
键名“BypassTPMCheck”,赋值“00000001”
键名“BypassSecureBootCheck”,赋值“00000001”
保存退出

3. 安装 22H2 之后版本,遇到需要连接到网络才能点击下一步怎么办?

当时因为这个差点就放弃了。在这个界面下,按 Shift+F10 键 ,弹出命令窗口输入“oobe\bypassnro”回车,系统自动重启。再到这个界面的时候,点击“下一步”左边的文字按钮“我没有网络”。

4. 安装完,发现没有驱动怎么办?

找到安装盘的 bootcamp 文件夹,整个拷贝到安装好的 Win 系统下,点击文件夹中的 setup.exe 安装 bootcamp 软件,安装完在线更新下 bootcamp 软件。

5. 怎么激活系统?原生纯净的系统从哪获取?

自动激活: Official Site。系统包iso: ITELLYOU TechBench

装之前准备一个有线鼠标,不然过程中很不方便。装完体验下来,界面跟之前的对比漂亮非常多,至于其他的,由于是老硬件,还要啥自行车。自己平常不玩游戏,所以这些年用 Mac 习惯了,而且其他对应的设备也都是 Apple,生态的互通互动方便很多。

  •  

搭建个人锻炼轨迹页面

2023年4月10日 16:47
搭建个人锻炼轨迹页面

聊聊肥胖说说状态”的日志已过去十几天,基本上做到了动起来:1.每天早起跑步。2.学习游泳。3.晚上空腹。

慢跑,以半个小时为基准,跑了几天之后发现除了腿酸疼之外,脚腕也不舒服。通过 conge 经验分享:初跑者的目的,一是养成习惯,二是控制野心不受伤。现在每天以15-20分钟为基准,跑不是目的,先培养习惯,让身体逐步适应锻炼。不过这几天脚腕疼得好像更厉害点,写这篇日志时脚腕在胀疼,可能跟最近走的路太多有关系,再适应适应。

游泳,之前没想着游泳,Eileen 说游泳是全身运动,更容易减肥,于是在家附近找了个游泳馆,尝试看看。说起游泳还是停留在小时候放牛时学的狗刨式游法,现在真正要游,其实完全不会。于是从看教学视频开始学,目前基本上每周去2-3次,现在要说有没有学会,嗯……还没有,继续坚持努力。

空腹,减肥最快的方式其实是不吃或者少吃,但咱也做不到也不健康。但零食、饮料、夜宵已完全戒掉,当然之前也不怎么吃。目前基本上保持晚上不吃晚餐,一天吃早中两餐,也算是遵循了816减肥方法。上周有几天没坚持住,继续坚持努力。

当然更快更科学的减肥方式是,力量训练,一天摄入的热量少于消耗的热量自然而然就瘦了。还没打算这样做,一个是如果每次吃个东西还得查这个热量多少或者运动消耗了多少热量,生活太累了。另外力量训练,如果不请教练,自己瞎折腾器材,行不行?会不会容易受伤?教练太贵。还是先让身体动起来再说,看看能不能坚持,如果不能坚持一切都是白搭。 地图轨迹

在看 conge 日志过程中,发现有个跑步记录的页面很不错,通过他的分享知道了 running_page开源项目,之后又发现 ben-29基于 running_page项目,增加了更多的运动类型。于是搭建了个“ 锻炼轨迹”页面,算是从另外一个维度来督促自己坚持。

搭建过程中折腾了很久,把一些注意点记录下,留作备忘。

1. 绑定独立域名,修改gatsby-config文件:
pathPrefix: process.env.PATH_PREFIX || '/',  
改为:pathPrefix: '',否则会导致地图显示不出来。

2. 隐藏地图街道名称,修改src/utils/const.js文件:
const ROAD_LABEL_DISPLAY = true;
改为:const ROAD_LABEL_DISPLAY = false;
修改地图高度:const MAP_HEIGHT = 600;
修改轨迹透明度:const LINE_OPACITY = 1;

3. 静态文件同步到宝塔目录,修改.github/workflows/gh-pages.yml文件
- name: GitHub Pages
uses: crazy-max/ghaction-github-pages@v2.2.0
with:
target_branch: gh-pages
keep_history: true
build_dir: public
jekyll: false
改为:
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: koobai/workouts_page
publish_dir: ./public
之后参考:[Github 自动构建 Hugo, 并通过 Webhook 同步到宝塔指定目录.](/hugo_action_webhooks)日志

4. 自定义的样式代码,合并到了 src/styles/index.scss。
5. src/components/header/index.jsx 布局修改。
6. src/components/pages/index.jsx 布局修改。
7. src/components/RunTable/index.jsx 英文翻译
8. src/utils/const.js 自定义了地图 (Mapbox) token,同时修改了页面展示说明。

由于有时候过敏,几年前买回来的 Watch 已基本上不带了,如今为了锻炼的时候记录,重新佩戴起来,看着每天锻炼圆环合并,挺满足。现在又多了一个佩戴理由:个人页面展示。如果问这十几天动起来之后,身体有没有什么变化,嗯……好像还没有,继续坚持加油,总会带来自己想要的结果。

上面说的最多的词是坚持,为什么?因为自己做什么事情都是三分钟热度。坚持,不代表痛苦,而是对自己的一种肯定。过程中有没有痛苦,当然有,晚上不吃,看着娘俩吃香的,那个馋呀….。但每天坚持早起动起来,发现还蛮喜欢,因为一天的时间早上是最能自己把握的。当然起床前的那一刻赖床是无法避免,但生活不就是这样~~坚持加油~~

  •  

聊聊肥胖说说状态

2023年3月28日 08:00
聊聊肥胖说说状态

自己的体重导致双脚变得沉重越来越扛不住它,曾经的那个追风少年早已不在,紧随而来的是中年肥胖油腻大叔。这几年的身体体检数据也一年比一年难看,脂肪肝、甘油三酯都不用说,连血糖数据都在高位徘徊。再加上自己本身有原发性高血压,身体早已把早年间所打下的基础透支完。

都说一胖毁所有,看见中意的衣服,一试这啥玩意;跑两步就气踹得不行;稍微蹲下双腿就发软;就连上完厕所擦屁股都变得不利索。知道胖不好,也不是没想着去减重。跑步、饿肚子,一段时间内坚持,减下去一点,但扛不住坚持,周而复始反而变得越来越胖。就跟搞博客一样,人换了一批又一批,都在于是否坚持得住。一个人能把坚持两个字做好,99% 的事情都能有成果。而自己属于什么事情都是三分钟热度,这个劲一过,抛在脑后失去动力。 菜 之前日志 十年弹指一挥间里写到事业回到原点,随之而来的压力,导致最近自己的状态非常差,什么事情都提不起兴趣也没耐心、胡思乱想、坐在电脑前发呆、无所适从。可能近段时间捣鼓博客是唯一一件让自己抽离现实或者说逃离现实的途径。 但这样肯定不是办法,是该做出改变,突出目前的困境。先从身体状态开始,让精神保持饱满,这样才有可能换来变化。

03 月 16 号唠叨的时候说:“身体是越来越胖,迈不开腿,嘴又管不太住,只能从调整饮食结构开始”。从当天到现在,每天晚上的坚持,发现身体还没什么变化。看来只想通过这种捷径方式不大行,身体还得动起来:计划每天早上 7 点之前起床跑步,先动起来。看看这次能不能坚持、能不能看到身体的变化、事情能不能突出困境。 菜 不到一米七的身高,双腿总共扛了一百七十多斤的重量。之前看到一篇博文说:让自己体重超过一百五的人是怎么想的,怎么受得了。是的,我也不知道自己是怎么就不知不觉悄无声息的就超过了。而且最近身体坐一会,左腿就发麻,不知道怎么回事。控制自己体重,是为数不多能掌握在自己手中的事情,所有的变量都在于自己。

图片为调整饮食结构之后,每晚所吃:鸡排、牛肉、吓、花菜、黄瓜、生菜、玉米、鸡蛋等,把碳水先控制住,辛苦Elieen每晚花心思做。这两晚停了下,空腹试试~

  •  

使用 ChatGPT 优雅的折腾博客

2023年3月22日 08:00
使用 ChatGPT 优雅的折腾博客

ChatGPT 现在铺天盖地的报道及使用,好像你不参与讨论或使用就跟不上时代一样,科技发展是真快。自己第一次使用 ChatGPT 还是去年刚推出,花了几块钱买了个虚拟手机号注册体验的,当时最大的感受就是它能结合上下文的意思来回答你,感觉很牛逼,之后就没怎么体验。今年在国内大面积出圈,也一直只是看看报道,自身并没有真正去体验使用。

由于自己并不懂技术,所以在折腾博客的时候,都是一边 Google 一边瞎搞。最近有个想实现的样式怎么组合关键词 Google 就是搜不出来,想起来 ChatGPT,用大白话一问,搞定解决。之前只是看看报道,但这一下子让我身临其境的重新认知,哇,原来是真的这么好用。 ChatGPT

之后只要遇到问题就先尝试下 ChatGPT,基本上都能得到满意的回答,最主要的是它给出回答之后,会解释其中的原理及作用,大大提高效率的同时还能知道今后运用的方法。 ChatGPT

当然 ChatGPT 的牛逼能力,网上说了一大堆,随着 GPT-4 发布,更是不得了。但当下能不能用到自己的工作生活中,这才是最主要的。随着 AI 的工具越来越多(如昨天晚上 Google 开始开放申请 Bard 试用),及进化程度越来越成熟,各种场景逐步的被替代,自己能做的就是拥抱变化,让自己变得更有竞争力的同时也需要懂得怎么借助越来越牛逼的 AI 为自己服务。今后可能有个职业叫“AI 训练师”。

Adobe 刚发布了 Firefly 宣传视频,除了帮你生成所需图片之外,还能在图片上以聊天的方式编辑图片,相当于 AI 帮你 P 图,这今后设计师 P 图工作完全可以交给它了~只能说牛逼。

  •  
❌