作者: 孟繁永

  • Jetpack对性能要求相对较高,删掉了

    最近博客老是挂掉,开了性能无约束也不行,查了下php的慢记录,发现是Jetpack插件造成的。索性把它删掉。

    本博客所用服务器为1u2G.

  • 我发现了我的数字遗迹:博客中国竟然还活着

    http://beloving.bokee.com/

    为了防止再次遗失,我把里面的几十篇内容挪到了本博客中。

    之前在各个平台上开了好多博客,新浪,搜狐,网易,教育,都黄了,还是要靠自己。

  • 个人博客服务器从Ubuntu16升级到了Ubuntu22

    因为阿里云的ECS开了性能限制,博客有几个访问就挂掉,索性整体迁移一下系统,于是把dnmp整个文件夹备份到本地,然后停机,换镜像,启动,再scp把文件放回去(这里其实应该打包下载和上传,会快很多)。然后用dnmp里面的一键启动命令恢复环境,最后docker compose up -d启动网站。

    不过这中间因为周末玩耍耽误了几天,幸好这个博客也没有多少人。

  • 岳父的慢阻肺

    岳父大人的慢阻肺一直是一个高危因素,自过年加重一次之后一直没有恢复,走走路就掉氧浓度,不到90%,吃了衡水中医院的中药也不见起色,于是约了中日友好医院的床位,等着来个全面检查。期间,到了广安门中医院开了中药,大夫看到他的现状对其是否需要用制氧机和呼吸机做氧疗有所怀疑,似乎没有那么重。等到在中日友好医院住了几天,做了肺功能和其他各项检查,终于给岳父确诊了糖尿病,并调整了心脏的药,把他的血糖和心律控制下来了,于是血氧也很神奇的转好了,这着实让岳父感到意外,我们也是。

    于是,我又一次对地方医院和北京重点医院的诊疗水平差距有了进一步的认识。看上去似乎没有特别的手段,但是北京的大夫规范细致的诊治确实有效,而衡水的大夫虽然救了急,却对具体的康复方法没有任何指导。

    有一个典型的例子,用于治疗慢阻肺的吸入药用到最好的,衡水也是这么开的,但是吸入方法却没有告知,也没有观察用的对不对,在北京问了之后,才发现之前几乎是无效吸入。而血压对血氧的影响之大,也不在之前的感知之内。

    在我想象中,这些都是照手册就能学会的东西,医生应该完全可以自学掌握。

  • 慢阻肺如何选择医用制氧机来进行长期氧疗

    本文仅以个人非医学专业了解到的产品和医疗信息分享,不能替代医学治疗方案。

    据医嘱,吸氧需要达到4L/min的流量才有效,但这个指标的前提是制氧机或者气瓶出氧的浓度要在90%以上,虽然国标要求医用制氧机必须达到90%,而目前市场上的制氧机普遍宣称符合这个标准,但从评论以及个人非严格检测来看,这个标准似乎没有那么容易实现。

    这里列出制氧机的几个关键指标,请逐一核实:

    1. 可连续工作时间,这个涉及制氧机的可用性和耐用性,有的声称达到72小时或96小时,关键要看说明书上是否有明文说明,不能只看商品标题或视频,有的宣称7*24小时,目前来看,多半是虚假宣传,因为目前几千元的制氧机显然达不到7天连续工作。
    2. 出氧浓度,国家标准要求90%以上,有的机器标>=90%,有的标93%(+-3%),但有的机器会有附加说明,比如开机15分钟才能达到这个浓度(因内部有储气罐,可能需要排空一段时间),我买了一台欧姆龙(安徽迈睿思代工),前几次开机数分钟后出氧浓度基本上只在85%左右,最高89,但机器自身的氧气浓度一直显示为95%,我在12315上做了投诉,不知道接下来多久会有回复。还有的机器并不是在任何流量下都是90%以上,比如有的机器在详细描述中会补充说只在某个低流量区间能达到这个浓度,再大了相当于就是多吹点空气了,也难怪有的制氧机宣称不做空气的搬运机。我前些年买的那个鱼跃的流量控制显示是1L~5L,现在仔细查才知道其实是3L的机器,调到5L也没有多大意义,而现在实测出氧只有50%,所以买个新的。欧姆龙这个因为是周末提交的投诉,12315无反馈,退货申请暂时没有通过,但后来开机测试能达到93%(机身还是显示95%),就先用着了。
    3. 机器工作噪音,这个也挺关键的,在欧姆龙那台出氧浓度不达标的情况下,我又下单了一台鱼跃的6L机器,但下单后仔细再看评论,很多视频评论反馈机器噪音大,看了下他的说明书,是小于60分贝,这个确实高了,从视频里看,也确实比手上这台欧姆龙大得多。看网上的商品资料,有的说在29分贝,有的说在36分贝,能接受哪一种,还是要慎重考虑。
    4. 能否退货,从欧姆龙和鱼跃的评论区看,普遍退货困难,有的是因为噪音大,有的因为出氧浓度不达标,但都是因为开机过,不能退货,但这东西不开机怎么知道怎么样呢?所以有的评论总结不如在线下买,可以当场试机,不知道厂家是否针对线上有特殊政策。这类产品质量不稳定的现实应该是可以确认的,这种特殊商品如何退货还需要更清晰的政策和规则,有的商品明确说明只要一次性使用的附件没有拆封就可以退货,比如吸氧管之类的,这算比较合理的。
    5. 分子筛是否进口,尽管这玩意近些年国产化做的很到位,但从产品定价来看,一两千的产品都用国产的,四五干就出现用进口的了,显然,国产的还是达不到进口产品的水平。

    测试成本很高,自己搞不定,网购的氧气检测仪也不一定精度就很高,但如果氧气浓度检测仪和制氧机自身的氧气浓度值都不可靠,那还有什么可靠的产品呢?

  • Vue3+VueUse 极简实现可拖拽侧边栏

    <script setup lang="ts">
    import { computed, onMounted, ref } from 'vue'
    import { useMousePressed, useMouseInElement } from '@vueuse/core'
    
    const containerRef = shallowRef()
    const dividerRef = shallowRef()
    
    const { pressed } = useMousePressed({ target: dividerRef, touch: false })
    const { elementX } = useMouseInElement(containerRef)
    
    const asideWidth = ref('300px')
    
    watch(elementX, (newVal) => {
      console.log(newVal, pressed.value)
      if (!pressed.value) return
      if (newVal < 300) {
        asideWidth.value = '300px'
        return
      }
      asideWidth.value = `${Math.floor(newVal)}px`
    })
    
    </script>
    
    <template>
    <ElContainer v-show="panel === 'tree'" ref="containerRef" class="container">
          <ElAside class="aside"
            ></ElAside>
          <div ref="dividerRef" class="divider"></div>
          <ElMain class="main">
          </ElMain>
     </ElContainer>
    <ElContainer v-show="panel === 'card'"> <BookCard :book="currentBook" /></ElContainer>
    </template>
    <style scoped lang="less">
    .aside {
      width: v-bind('asideWidth');
    }
    .divider {
      flex: 0 0 4px;
      &:hover {
        background-color: var(--el-border-color);
        cursor: col-resize;
      }
      &:active {
        background-color: var(--el-border-color);
        cursor: col-resize;
      }
    }
    </style>

    在flex容器(container)中横向排布侧边栏(aside)、分隔线(divider)和主要区域(main)通过useMousePressed获取分隔线上的鼠标按压状态,通过useMouseInElement获取容器内的鼠标移动状态,这些状态是响应式的侦听鼠标横向移动距离,仅当鼠标在分隔线按下(即拖拽)时,同步修改侧边栏宽度。

    参考:流烨(链接:https://juejin.cn/post/7384242126429405225),相比调整了一下动态设置宽度的方式,改为width: v-bind(‘asideWidth’),同时,优化.divider的样式,增加hover,让它平时隐藏,鼠标滑过时显示更容易寻找。

  • l5-swagger如何设置服务端路径

    正如tests/storage/annotations/OpenApi/L5SwaggerAnnotationsExampleServer.php所示:

    <?php
    
    namespace Tests\storage\annotations\OpenApi;
    
    /**
     *  @OA\Server(
     *      url=L5_SWAGGER_CONST_HOST,
     *      description="L5 Swagger OpenApi dynamic host server"
     *  )
     *
     *  @OA\Server(
     *      url="https://projects.dev/api/v1",
     *      description="L5 Swagger OpenApi Server"
     * )
     */
    class L5SwaggerAnnotationsExampleServer
    {
    }

    L5_SWAGGER_CONST_HOST是作为一个变量直接引用的,这个变量在.env中设置,在实际项目中,尤其是多实例部署的产品,优先考虑用这种方法,而其中第二个是直接写死的地址,这种更适合相对固定的内部测试或者官方接口站点作为对照。实际上,api/doc还会依据L5_SWAGGER_BASE_PATH自动加载一个相对的接口地址,这个更适合用在调试环境,启动端口有可能会变,而且多个开发者的配置也不一定一致。L5_SWAGGER_CONST_HOST和L5_SWAGGER_BASE_PATH之间是相对独立的,可以搜索一下l5-swagger源代码看看逻辑,可惜这一点在l5-swagger的文档中说的并不清楚。

  • 出版行业如何选择大模型

    过年期间deepseek吵得很热闹,不过就我看到的信息,更像是一次冲喜,毕竟要过除夕了。我不太相信惊喜,二十年前在武汉的某博士沙龙上我突发灵感得到的结论,一切惊喜都可视作异常。回京后,做了下简单的测试,拿一个简单地问题去问这几个模型,这个问题还不算很苛刻,只是想看看训练时的语料审查有多么严重。

    按结果的省略程度排序依次是:

    1. deepseek
    2. qwen
    3. mistral

    拿出版行业来说,尽管审查也是一个很重的任务,但这个任务是由编辑来承担的,大模型没有权力直接来操刀,否则很容易造成失真,编辑就没法干活了。即使有deepseek无审查版也不行,因为那个无审查只是推理时无审查,并不能解决训练阶段的语料审查。

    所以,这个可以当作出版行业大模型的一个选择条件,如果是2C我没有什么意见,安全第一,但是从编辑专业角度而言,必须选择一个中立的大模型来作为基础模型。这几个里面,没有哪个合适的,勉强选择的话只有mistral可以考虑,但这家伙中立的过分了,其实作为专业模型,我们不需要大模型给出态度和立场。

    所以,行业模型还要从更基础的模型来做。

  • 用Caddy部署wordpress

    年前把公司网站的服务器换到了caddy上,今天想写一篇博客,发现证书过期了,之前用了certbot但是配置自动任务还是比较麻烦的,尤其是用了docker。索性一起换掉。

    docker-compose.yml中的配置如下:

      caddy:
        image: registry.cn-beijing.aliyuncs.com/futuremeng/caddy:1.1
        container_name: caddy
        restart: unless-stopped
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - ./services/caddy/config:/config
          - ${DATA_DIR}/caddy:/data
          - ${SOURCE_DIR}:/www/:rw
          - ${LOGS_DIR}/caddy:/var/log/caddy
        ports:
          - "80:80"
          - "443:443"
        networks:
          - default

    其中的env变量请自行脑补。

    caddyfile:

    https://WordPress.com {
            root * /www/WordPress
            php_fastcgi php80:9000 {
                    trusted_proxies private_ranges
            }
            file_server
            encode gzip
            @disallowed {
                    path /xmlrpc.php
                    path *.sql
                    path /wp-content/uploads/*.php
            }
            rewrite @disallowed '/index.php'
    }

    详情可见:

    https://github.com/futuremeng/dnmp

  • 把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/