2024 年计划清单
找份好工作 家具家电购置 等大美丽毕业,拍婚纱照 结 fen~ 软考继续 我倒要看看这个证我还得考几年
Mac m1 编译安装 Aseprite
!!!需要用到 brew 和 xcode,如果没安装要先装好。 克隆源码1git clone --recursive https://github.com/aseprite/aseprite.git 下载 skia1https://github.com/aseprite/skia/releases 选择对应平台的文件下载,解压后重命名文件夹为 skia。 安装 cmake && ninja12brew install cmakebrew install ninja 编译1234567891011121314151617cd asepritenkdir buildcd buildcmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_OSX_ARCHITECTURES=arm64 \ -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \ ...
Mac 用 Brew 安装旧版本 PHP
最近又用到 php7.4,奈何本地早就已经升到了 8,想搞回来,发现一个简单好用爽歪歪的三方库,需要的可以试一下,5.6 - 8.4 都有。[ homebrew-php ] 添加地址库1brew tap shivammathur/php 安装指定版本1brew install shivammathur/php/php@7.4 切换版本12345brew services stop php@7.4brew unlink php@xxbrew link php@7.4brew services start php@7.4 搞定收工。
水篇流水账,记下最近的情况
最近不知道是感冒还是过敏,每天一睡醒就开始流鼻子打喷嚏,要了命了,神烦。 在番茄发了一本 10 万字的灵异小说,共收益 16.7 元,要了命了,神烦。 每天都想早睡早起,奈何晚上睡不着,白天睡不醒,要了命了,神烦。 temu几个产品送过去俩月了也不开单,要了命了,神烦。 接了个小单子,钱少事儿多不够花,要了命了,神烦。 四顾茫然不见天,春风催我又一年。 生活平凡表情淡,神烦一天又一天。
职业生涯知识回顾-关于抽象类和接口的思考
抽象类和接口是两个很容易产生疑惑的概念,分不清它们的使用场景,其实只要记住两点就比较好理解: 接口是对行为的抽象 抽象类是对子类有哪些属性和行为的抽象 当你需要对一个类有哪些行为进行约束时,使用接口;需要为其他类提供一个模板以及一些通用的属性和行为,使用抽象类。 在理解什么是抽象类和接口的前提下,延伸出一些思考:在一定程度上,接口似乎是比抽象类更底层的存在,是否可以理解为先有行为,对行为进行组合才能有类? 那么下面代码中,抽象类对接口的实现有没有实际意义? 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061<?phpinterface IAnimal{ public function move(): void; public function sleep(): void; public function eat(): void;}interface...
职业生涯知识回顾-基础篇之网络传输协议
协议的本质也就是彼此之间的约定和规则。 HTTPHTTP 是一个承载于 TCP 协议上的超文本传输协议,明文,无状态。由客户端发起请求,服务器返回响应。 无状态是指协议对于事务处理没有记忆,不会保留之前请求的任何信息,也不会对后续请求进行关联。 为了弥补无状态带来的不便,产生了 Cookie 和 Session 技术。 CookieCookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向服务器请求资源时携带并发送到服务器上,通常用于告知服务端两个请求是否来自同一浏览器,比如用户的登录状态。 Cookie 一般用于以下方面: 会话状态管理(用户登录状态等) 个性化设置(主题、自定义设置等) 浏览器行为跟踪(跟踪分析用户行为等) SessionSession 是基于 Cookie 实现的,在服务器进行存储,也是一种会话跟踪技术。 一个 Session 独占一个浏览器,在浏览器关闭前,Session 一直存在。 Session 的使用场景: 用户身份验证 购物车功能 长表单或多步骤操作缓存 HTTP 的三次握手和四次挥手三次挥手是指建立一个 TCP...
Laravel Octane 和 Swoole 协程的使用分析二
又仔细研究了下 Octane 源码和 Swoole 的文档,关于前几天 Laravel Octane 和 Swoole 协程的使用分析中的猜想,得到进一步验证: Swoole 的 HTTP Server 启动后会创建一个 master 进程和一个 manager 进程;master 进程又会创建多个 reactor 线程,负责将请求转发到 work,并从 work 接收结果发送给客户端,相当于 nginx;manager 会创建多个 work 和 task 子进程,work 进程相当于 php-fpm,task 专门处理一些耗时任务,最后将结果交给 work; 而 LaravelOctane 的 concurrently 方法,其实是以 task 为基础,也就解释了为什么脱离 HTTP server 会无法使用。 Swoole
Laravel Octane 和 Swoole 协程的使用分析
之前在工作中使用 Laravel Octane 的 concurrently 处理并发时,发现在队列和定时任务中不会触发并发效果。经过分析,作了如下猜测:队列定时任务都属于一个独立的进程,与 Octane 服务无关,而 Octane conturrently 恰恰需要在 Octane 环境下才能运行。 后来通过代码进行环境检测和查看 php 的进程,证明猜想成立。 1234info('check env', [ 'served by octane' => isset($_SERVER['LARAVEL_OCTANE']) && ((int)$_SERVER['LARAVEL_OCTANE'] === 1), 'on swoole server' => (extension_loaded('swoole') || extension_loaded('openswoole')) &&...
为你的 Laravel 应用添加一个基于 Swoole 的 WebSocket 服务
做了一个基于 Swoole 的 WebSocket 扩展包,可以用来做实时状态推送,或者自定义消息处理实现 im,有需要的可以看看: [giorgio-socket] 使用方法安装安装扩展包 1composer require wu/giorgio-socket 发布配置文件 1php artisan vendor:publish --provider="GiorgioSocket\Providers\SocketServiceProvider" 运行 Socket 服务 1php artisan socket:start 注意事项 可以通过实现 GiorgioSocket\Services\Handlers\Interfaces 下的接口类来自定义自己的业务逻辑。 如果要从服务端发送消息,这里有两种方式: 第一种,借助 Laravel HTTP 客户端 123456Route::get('/socket', function () { ...