分类: 全部文章

  • 把mac相册中的图片批量导入到immich

    在mac上打开终端:

    cd /Users/mengfanyong/Pictures/照片图库.photoslibrary

    接下来参照https://immich.app/docs/features/command-line-interface/

    首先需要安装immich客户端,如果没有node或者版本太低,请跳转到:https://nodejs.org/en/download

    npm i -g @immich/cli

    首先向 Immich 服务器进行身份验证。

    immich login-key [instanceUrl] [apiKey]

    开始批量上传

    immich upload --recursive directory/

  • 用Caddy部署vue3和laravel

    二级目录部署vue3的Caddyfile

    https://domain.com {
        redir /portal /portal/ 308
        handle /portal/* {
            uri strip_prefix /portal
            root * /www/domain.com/portal   #打包后的静态文件
            try_files {path} /index.html
            file_server
            encode    zstd   gzip  #开启zip
        }
    }

    在根目录部署laravel的Caddyfile

    https://api.domain.com {
        root /www/api.domain.com/my-laravel/public
        encode gzip
        # PHP-FPM Configuration for Caddy use docker php80
        php_fastcgi php80:9000 
        file_server
    }
    

    如果laravel的接口需要开启跨域访问,则可以参考以下的Caddyfile,此外laravel也要根据版本,选择相应的开启cors的方法,此处不展开。

    (cors) {
            @cors_preflight{args.0} method OPTIONS
            @cors{args.0} header Origin {args.0}
    
            handle @cors_preflight{args.0} {
                    header {
                            Access-Control-Allow-Origin "{args.0}"
                            Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
                            Access-Control-Allow-Headers *
                            Vary Origin
                            Access-Control-Max-Age "3600"
                            defer
                    }
                    respond "" 204
            }
    
            handle @cors{args.0} {
                    header {
                            Access-Control-Allow-Origin "{args.0}"
                            Access-Control-Expose-Headers *
                            defer
                    }
            }
    }
    
    https://api.domain.com {
        import cors {header.origin}  # 允许任意来源的跨域访问
        root /www/api.domain.com/my-laravel/public
        encode gzip
        # PHP-FPM Configuration for Caddy use docker php80
        php_fastcgi php80:9000 
        file_server
    }
  • 最彻底的关闭Windows10 的更新!

    写在最前面,前阵子收了一台笔记本电脑,sony的,固态盘还是触摸屏,小惊喜了一把,结果这个电脑的系统是win,每天自动更新,但是更新失败回退。搜了一些方法,但都不解决问题,终于找到下面这篇最全的。

    文章附图

    前言:

    Windows10的自动更新给工作带来很多不便,想关闭更新很难,我们经过多次尝试,基本找全了与更新有关的条目。

          1、与更新有关的Windows服务,大致就这三个服务。

          Windows update

          Update Orchestrator UsoSvc(更新Orchestrator 服务)

          Windows update medic service(更新医生服务)

          2、组策略

           计算机配置 – 管理模板 -Windows组件 -Windows更新

          3、计划任务

           Microsoft -Windows -WindowsUpdate

    以下内容(一、二、三)

    一、禁用三大服务(三种方法)

      1、手工操作停止禁用服务。

          进入服务的方式很多,从此电脑右键属性-管理-可以找到。也可以从控制面板进入。

          可以运行services.msc直接进入。

          (1)、先停止Windows Update,后禁用。如图

    Windows update.png

    找到【恢复】页,改为无操作

    Windows update1.png

    (2)、关闭 禁止 Update Orchestrator UsoSvc服务   更新适配Orchestrator服务

    ORCHESTRATOR.png
    ORCHESTRATOR1.png

    (3)、停止 禁用 Windows update medic service 更新医生服务

    medic.png
    medic1.png

    这个服务有时会拒绝访问或改不了。你就要参考下面注册表修改了。

    2、注册表修改。(如果上面的修改的很顺利,就不必要再做这项的内容,手工修改和注册表修改是异曲同工,互相验证的关系)

       打开注册表,开始 运行   regedit

        (1)、禁用 Windows update(第一个图是禁用更新,第二个图修改恢复里面的“无操作”)

           HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv

    Windows update2.png
    Windows update3.png

    (2)、关闭 禁止 Update Orchestrator UsoSvc服务   更新适配Orchestrator服务

                HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc

                这项的改的地方同(1)。只是注册表位置不一样。【UsoSvc】

    (3)、停止 禁用 Windows update medic service 更新医生服务

                HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc

                这项的改的地方同(1)。只是注册表位置不一样。【WaaSMedicSvc】

        3、运行命令修改。(这个要求稍微专业点的知识,高手可采用。但要先检查三个FailureActions的值你有没有特殊设置再用。)

    net stop wuauserv

    net stop UsoSvc

    net stop WaaSMedicSvc

    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv” /v “Start” /t REG_DWORD /d 4 /f

    rem ********   停止 禁用 Windows update

    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv” /v “FailureActions” /t REG_BINARY /d 80510100000000000000000003000000140000000000000060ea000000000000000000000000000000000000 /f

    rem ********“改服务里面恢复,00-无操作,01-重新启动服务   03-运行一个程序   02 -重新启动计算机   14后面00 00 00 XX”

    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc” /v “Start” /t REG_DWORD /d 4 /f

    rem *******停止 禁用 Update Orchestrator UsoSvc服务   更新适配Orchestrator服务

    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc” /v “FailureActions” /t REG_BINARY /d 805101000000000000000000030000001400000000000000c0d4010000000000e09304000000000000000000 /f

    rem *******“改服务里面恢复,00-无操作,01-重新启动服务   03-运行一个程序   02 -重新启动计算机   14后面00 00 00 XX”

    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc” /v “Start” /t REG_DWORD /d 4 /f

    rem *******停止 禁用 Windows update medic service 更新医生服务

    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc” /v “FailureActions” /t REG_BINARY /d

    840300000000000000000000030000001400000000000000c0d4010000000000e09304000000000000000000 /f

    rem ******“改服务里面恢复,00-无操作,01-重新启动服务   03-运行一个程序   02 -重新启动计算机   14后面00 00 00 XX”

    复制做成BAT文件,以管理员身份运行。

    二、配置组策略:gpedit.msc

    Windows10家庭版没有gpedit.msc,需要配置一下。首先要新建一个txt文件,打开,在里面输入以下内容并保存:

    @echo off

    pushd “%~dp0”

    dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt

    dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt

    for /f %%i in (‘findstr /i . List.txt 2^>nul’) do dism /online /norestart /add-package:”C:\Windows\servicing\Packages\%%i”

    pause

    将文件后缀改bat,随后右键点击以管理员身份运行,等待加载完成,就可以启用组策略了。

    gpedit0.png

    成功打开组策略编辑器后,在组策略编辑器中,按顺序点开:计算机配置 – 管理模板 -Windows组件 -Windows更新 ,在右侧配置自动更新设置中,将其设置为已禁用并点击下方的确定保存即可

    gpedit1.png
    gpedit2.png
    gpedit3.png
    gpedit4.png
    gpedit5.png
    gpedit6.png

    三、计划任务关闭windows更新:taskschd.msc

    tasks0.png

    在打开的计划任务的界面中,按顺序点击 任务计划程序库 – Microsoft -Windows -WindowsUpdate,把里面的项目都设置为禁用,能删除也可以删除。

    tasks.png

    注【高手可操作】:计划任务删除命令是:schtasks /delete /tn “任务名称”   

    终于写完了,测试通过。作者:众嘉软件

  • 老毛桃PE工具可以用,别用它装系统

    很久没有重装系统了,手上有一个Dell的笔记本,系统恢复分区占了好几个,还不挨着,win11装docker还跑不起来,索性重装,用老毛桃PE进去格了盘,然后加载win11重装,结果装完发现系统被注入很多程序和广告,试着装了一下wsl也有问题。还得用原装win11镜像安装。切记。

  • Monorepo+federation+defineAsyncComponent构建一栈式主分前端架构

    构建一栈式主分前端架构,结合 Monorepo、Federation 和 defineAsyncComponent 是一种现代且高效的开发模式,特别适用于大型项目或微前端架构。

    以下是如何将这些技术结合起来实现这一架构的详细步骤:

    1. Monorepo(单仓库多包管理)

    定义: Monorepo 是一种将多个相关的代码库存储在一个单一的版本控制系统中的方法。它允许你更方便地管理和协调多个项目的依赖关系和版本更新。

    工具选择:
    •Lerna:用于管理多个 npm 包。
    •Yarn Workspaces 或 npm workspaces:用于处理多个包之间的依赖关系。(我选的是pnpm,虽然我觉得pnpm这个词打起来最费劲,但我在.zshrc里面给它设置成了p)
    •Nx:不仅支持包管理,还提供了丰富的工具链来优化构建和测试流程。
    优点:
    •统一的代码风格和配置。
    •更容易进行跨项目依赖管理。
    •提高了团队协作效率,减少了重复工作。

    用Monorepo关键的地方有两个:

    1)配置package.json里面的”scripts”,根据调试和打包的组合配置参数。

    2)配置dependencies,将共用的部分放到项目根,不过这一点没有上面那条那么重要,属于优化。

    1. Federation(模块联邦)

    定义: 模块联邦允许多个独立的应用程序或微前端共享模块,而不需要通过传统的打包方式。实现步骤:
    •设置主机应用(Host App):
    •使用 Webpack 5 的 ModuleFederationPlugin 配置远程模块。
    •示例配置: new ModuleFederationPlugin({
    name: ‘hostApp’,
    filename: ‘remoteEntry.js’,
    remotes: {
    remoteApp: ‘remoteApp@http://localhost:3001/remoteEntry.js’,
    },
    shared: [‘react’, ‘react-dom’],
    });

    •设置远程应用(Remote App):
    •同样使用 ModuleFederationPlugin 暴露模块。
    •示例配置: new ModuleFederationPlugin({
    name: ‘remoteApp’,
    filename: ‘remoteEntry.js’,
    exposes: {
    ‘./Button’: ‘./src/Button’,
    },
    shared: [‘react’, ‘react-dom’],
    });

    优点:
    •独立部署和开发。
    •模块级别的共享,减少冗余代码。
    •动态加载远程模块,提升性能。

    当然,我用的是vue,上面是钉钉ai助理给的代码,没有仔细看。后面我会整理代码发布到github上供参考。

    1. defineAsyncComponent(异步组件)

    定义:defineAsyncComponent 是 Vue 3 提供的一个 API,用于定义异步组件。它可以按需加载组件,从而优化初始加载时间和性能。实现步骤:
    •在 Vue 项目中使用 defineAsyncComponent 加载远程组件。 import { defineAsyncComponent } from ‘vue’;

    const RemoteButton = defineAsyncComponent(() =>
    import(‘remoteApp/Button’)
    );

    export default {
    components: {
    RemoteButton,
    },
    };

    优点:
    •按需加载,减少初始加载时间。
    •提升用户体验,特别是在网络条件不佳的情况下。
    综合应用项目结构示例:monorepo/
    ├── packages/
    │ ├── host-app/
    │ │ ├── src/
    │ │ └── webpack.config.js
    │ ├── remote-app/
    │ │ ├── src/
    │ │ └── webpack.config.js
    │ └── shared-components/
    │ ├── src/
    │ └── webpack.config.js
    └── package.json
    构建与部署
    •构建:使用 Lerna 或 Nx 进行统一构建。
    •部署:可以分别部署主机应用和远程应用,确保每个应用可以独立更新和维护。
    总结通过结合 Monorepo、Federation 和 defineAsyncComponent,你可以创建一个高效、可扩展的一栈式主分前端架构。这种方式不仅提高了开发效率,还能有效管理和优化大型项目的复杂度。如果你有更多具体的技术问题或需要进一步的帮助,请随时告诉我!(部分内容由AI生成)

    实际上,我没有采用ssr的架构,而是采用普通的vite。

    实际的目录结构如下:

    /apps/one-main
      package.json
    /packages/one-basic
      package.json
    package.json
    pnpm-workspace.yaml

    one-main作为我的主应用,one-basic作为的分应用之一,后续还会有one-beau之类的,主应用是作为门户提供最终用户访问的门面的,分应用有两个作用,提供remote-component组件以及对remote-component的单独演示,同时也方便调试。

    总体上one-main和one-basic也是同构的,都是采用了https://starchart.cc/xiangshu233/vue3-vant4-mobile这个脚手架,我计划将其中的UI替换为naive-ui,我更喜欢这个简洁的风格。

    简单来说,Monorepo是为了这一组代码库方便联调,Federation提供应用间(远程)组件共享,defineAsyncComponent实现动态加载(远程)组件,将远程组件参数化。最终实现的是一个有限灵活度的模板可配置电子书系统。

    本方案的代码库:https://github.com/futuremeng/one-momorepo

  • 增加一个新的Title:武汉大学出版研究院兼职研究员

    武汉大学出版研究院 https://iop.whu.edu.cn/info/1401/3101.htm

    姓名:孟繁永

    职务:兼职研究员

    研究领域:数字出版,人工智能,数字人文

    研究兴趣:利用开源技术搭建低成本轻量化数字出版平台,探索以知识服务为核心目标的数据结构设计、知识加工技术和人工智能应用。

    研究成果:

    1. 许洁;袁小群;朱瑞;孟繁永. 基于大模型的轻量级智能出版知识服务:理论基础与实现路径[J]. 中国数字出版, 2024 ,v.2;No.2 (01) :25-35.

    项目经验:

    [主导]语文出版社一书一码融媒体出版平台,2020-2024

    [主导]《党建》杂志期刊发行数字化平台,2020-2021

    [主导]中国铁建地产集团数据中台与运营可视化,2019-2020

    [主导]工商出版社工商法律法规大数据平台,2019-2020

    [主导]法律出版社“微版云”数字资源管理云平台,2018-2019

    [主导]中国新闻出版研究院希普思会议会展数字化运营平台,2018-2019

    [主导]学习出版社《全民经典朗读范本》融媒体出版平台,2017

    [主导]中国新闻出版研究院“编辑邦”出版人知识社群,2016-2017

    [参与]中国少年儿童新闻出版总社中少快乐阅读平台,2012-2015

    [参与]长江出版集团ERP试点,2009-2010

  • pnpm敲起来麻烦,简写为p吧

    打开.zshrc,如果用bash,则是.bashrc

    alias p="pnpm"

  • 三星watch5开通esim(2024)

    上次怎么开通有点记不准了,应该是通过手机上的联通app中的esim卡专区,下载数据即可,而且能点这里跳转到三星智能穿戴app,无缝衔接,结果今天操作不行了。

    因为手表绑定换了手机号,需要先退订原来的业务,这个直接在联通app上操作即可。

    可是开通就麻烦了,因为要开一号双终端,需要:

    (1)抄一大堆反电信诈骗的承诺

    (2)本人到场刷脸验证

    (3)向柜台提供手表的EID和IMEI

    当然,每个月要交10块钱是必须的。

    办理完以后,柜台给了一个ESIM卡的二维码。

    回来以后,点开联通app想下载数据,显示三星智能穿戴已安装但显示为“未安装”,其中温馨提示说是因为三星esim卡管理器没有安装,我搜了半天,说这个app只有三星手机才有,有人在网上寻求安装包,我没找到。但上次激活过,这次不应该不行。

    于是,我直接打开三星智能穿戴,点击手表设置,移动套餐,选择我的手机号之后,貌似自动加载了一个当前手机的套餐,也同步到了手表上,可惜,这个不对,手表无法连到联通网络。继续寻找。

    在三星智能穿戴app的移动套餐界面右上角三个点中,点击添加套餐,选择扫码,就是联通柜台给的那个二维码,扫完就有传输到手表的过程,等完成,手表就激活esim了。

  • 即日起本站域名由futuremeng.com变更为futuremeng.sincebirth.space

    不打算续费了,com域名有涨价了,太贵了,有这个钱还是给孩子多吃几次汉堡吧。

    索性继续用上次买了十年的space域名,作为一个中年老男人,能有自己的博客空间已属不易,就不要太讲究域名的事情了。

  • docker安装dolphinscheduler添加数据源连接失败

    2024-09-27 11:14:16 [ERROR] 2024-09-27 11:14:16.055 +0800 o.a.d.p.d.a.d.AbstractDataSourceProcessor:[130] - Check datasource connectivity for: MYSQL error
    2024-09-27 11:14:16 java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

    看下docker-dolphinscheduler-api-1容器的日志中发现以上失败,通过检索发现,可以把驱动包放在lib/plugin/task/sql目录下,但是,这个目录在哪里却是个问题,后来查看源代码(https://github.com/apache/dolphinscheduler/blob/3.1.0/dolphinscheduler-api/src/main/docker/Dockerfile),确定ENV DOLPHINSCHEDULER_HOME /opt/dolphinscheduler,那么进入容器的/opt/dolphinscheduler这个目录确实能看到libs子目录,其中已经有一些连接器了,只不过那些就是官方所说的符合开源协议的已经内置的,像mysql的就不符合apache的开源协议,所以只能自己往里放,可是为什么官方文档里没有提到呢?

    我是搜到了https://www.bookstack.cn/read/dolphinscheduler-3.1.0-zh/7667e5f48166e75f.md,这个来自官方的早期镜像版:

    我们以 MySQL 为例,如果你想要使用 MySQL 数据源,你需要先在 mysql maven 仓库 中下载对应版本的 JDBC 驱动,将其移入 api-server/libs 以及 worker-server/libs 文件夹中,最后重启 api-server 和 worker-server 服务,即可使用 MySQL 数据源。如果你使用容器启动 DolphinScheduler,同样也是将 JDBC 驱动挂载放到以上两个服务的对应路径下后,重启驱动即可。

    查看对应版本的官方文档却找不到对应的章节。

    目前,以3.2.2版本来说,需要放连接器的容器包括:

    docker-dolphinscheduler-api-1

    docker-dolphinscheduler-worker-1

    docker-dolphinscheduler-alert-1

    以docker desktop操作说明,找到这两个容器,点击容器名进入容器,切换到Files,/opt/dolphinscheduler/libs,右键import,选择mysql-connector-j-8.2.0.jar,然后重启以上三个容器就可以了。