老mac设置php版本

2015的老mac,brew安装的php版本只能是7了,不能再升级,自行安装了php8.2,在.zshrc中通过设置path没有问题,但是vscode却总是提示composer所检查的版本不够。

直到在vscode中找到

Laravel: PHP Environment(此处设置为local),可忽略

Atisan:PHP:Location

设置为:/usr/local/opt/php@8.2/bin/php

以此来解决vscode默认调用/usr/bin/php的问题

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

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

据医嘱,吸氧需要达到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的文档中说的并不清楚。

用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镜像安装。切记。

三星watch5开通esim(2024)

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

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

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

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

(2)本人到场刷脸验证

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

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

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

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

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

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