Wake Me Up When September Ends.

A wanderer capable of grasping the beauty of the grass, with a heart full of ancient charm, and a fondness for playful wit. Those who understand my words are knowledgeable individuals; those who decipher my code truly comprehend the essence. I am a wandering code swordsman, carrying my skills and riding freely through the digital world.

在PHP8.1未发布fiber之前,你可能会听到一些前辈说”PHP的yield就是协程”,但是官方文档对于yield是如下解释:

yield(生成器)提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。
生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。

官方的解释自然是正确和科学的,可是你的疑问是这个和协程有什么直接关系呢?

所以我将从生成器概念讲起到yield关键字使用,再到协程概念。或许你会从我的讲解得到一些解惑,当然如有不正之处,欢迎指点!

生成器的概念

在计算机科学中,生成器是一种特殊的函数,它可以按需生成一系列值,而不需要一次性生成整个序列。比较直观的例子就是汽车厂家是按照订单生产汽车,来一个订单生产一辆。而不是先大批量生产之后再分发销售。这样的好处是厂家节省资源,避免浪费。

生成器还有一个重要特性是它能够暂停和恢复执行!还是以汽车厂家生产汽车为例子,假设厂家接受了两个汽车订单,一单生产轿车一单生产suv,但是生产suv进行一半流程中发现部分零件需要等待采购。厂家自然会暂停生产suv流程,转而去生产轿车避免生产线停产等待从而浪费资源。待零件采购回来再恢复suv生产流程。

这种暂停和恢复执行的能力在处理大量数据、遍历复杂的数据结构、实现惰性计算等场景下可以节省大量内存和提高性能。原因它只在需要时才生成值,而不是一次性生成整个序列!

阅读全文 »

家里一台软路由安装了jellyfin,想把媒体目录挂载到另一台大容量的主机上。所以要将这台大容量的主机上通过Samba共享给软路由主机上,因此需将软路由主机本地文件夹映射到远程大容量的主机Samba共享目录下。

前提Samba安装配置已经在两台主机上配好,这里不再复述!

安装软件包

目前可以通过cifs-utils工具包实现。cifs-utils 是一个用于在 Linux 系统上实现与 Windows 共享文件夹交互的软件包。它提供了一组工具和库,允许 Linux 系统通过 CIFS(Common Internet File System)协议连接和访问远程 Windows 共享。

阅读全文 »

本篇文章记录git一些常见问题解决,不定时更新!

1.You asked to pull from the remote ‘gitea’, but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line

这个错误提示说明在从远程仓库拉取代码时没有指定分支。由于当前分支不是默认配置的远程分支,所以需要在命令行中指定分支。

要解决这个问题,可以使用以下命令来拉取指定分支的代码:

git pull <remote> <branch>

2.error: RPC 失败。HTTP 413 curl 22 The requested URL returned error: 413 send-pack: unexpected disconnect while reading sideband packet

这个错误提示说明推送包(push package)太大了,超过了服务器所允许的大小限制。

要解决这个问题,有如下操作:

1.增加 Git 中缓存的默认限制:

git config --global http.postBuffer 10240000000

2.服务端是用nginx反向代理的,修改nginx配置:

server {
    // 其他配置省略
    client_max_body_size 500m;
}

3.fatal: 拒绝合并无关的历史

这个错误通常发生在尝试合并两个没有共同历史的分支时。解决这个问题的一种方法是使用–allow-unrelated-histories选项来强制合并。命令如下:

git merge --allow-unrelated-histories <branch_name>

这个命令将允许你合并两个没有共同历史的分支。如果有冲突发生,需要解决冲突并手动提交合并结果。

4.查看某个文件提交记录

要查看文件在Git中的提交记录,可以使用以下命令:

git log -- <file_path>

其中是您想要查看提交记录的文件路径。这个命令将显示指定文件的提交历史,包括提交者、提交信息、提交时间等信息。

如果您只想查看最近的提交记录,您可以使用-n选项来指定要显示的提交记录数量,例如:

git log -n 5 -- <file_path>

这将显示最近的5次提交记录。

另外,如果您想查看某个特定文件在每次提交中的变更,您可以使用以下命令:

git log -p -- <file_path>

这个命令将显示每次提交对指定文件所做的具体变更。

5.从远程checkout分支并关联

git  checkout -b <branch_name> <remote>/<branch_name>

or

git  checkout --track <remote>/<branch_name>

本篇文章记录php的composer组件包一些用法!

引用本地未发布的包

要引用本地未发布的包,只需要在composer.json中repositories仓库为为本地项目地址即可,如下所示:

{
    "repositories": [
        {
            "type": "path",
            "url": "/path/to/local/package"
        }
    ],
    "require": {
        "your-package": "dev-master"
    }
}
阅读全文 »