常用笔记索引

TASK TO DO LIST

我在工作中存在的问题

Linux

Linux软件管理 常用命令

Linux编译安装

Linux进程管理 常用命令和工具

Linux网络调试 常用命令和分析工具

Linux日志管理 常用命令和工具

Linux网络文件传输 常用命令工具

常用防火墙指南

生产环境部署配置

jemalloc内存分配工具

Web服务器

Nginx系服务器

Apache服务器

负载均衡指南

LVS

Keepalived

Keepalived 原理介绍和配置实践

Nginx upstream

语言知识体系

PHP知识框架

Go开发生态 常用笔记

前端开发生态 常用笔记本

Shell学习笔记

Lua脚本学习笔记

正则表达式

数据库和中间件

关系型数据库(RDBMS)

关系型数据库设计知识

Mysql常用

分库分表指南

Redis常用

Memcached常用

全文索引指南

Elasticsearch常用

MongoDB常用(ES可替代)

消息队列中间件(Message Quene)指南

RabbitMQ常用

Kafka常用

RocketMQ常用

开发工具软件

Git常用命令

navicat-premium 延期试用和激活

Jmeter工具使用指南

VSCode使用总结笔记

开发规范和约定

语义化版本

数据迁移使用规范

网络编程

网络基础知识及概念

服务端网络编程知识框架

数据结构和算法

学习笔记

软件设计

软件架构知识索引

软件开发定律和心得

如何编写高质量代码

在框架中如何封装业务和功能代码

如何设计SDK和类库

API设计

Api设计经验总结

架构总结

其它

安全指南

IP查询工具

网络搜集的编程相关电子书

鸟哥Linux私房菜

电子书

AI工具笔记

虚拟账号短信注册

https://sms-activate.org/

chatgpt

https://chat.openai.com/

基于chatgpt的编辑器

https://www.cursor.so/

https://github.com/Helixform/CodeCursor vscode插件

浏览器插件

https://github.com/josStorer/chatGPTBox

客户端

mac github.com/vincelwt/chatgpt-mac

app.pandagpt.io
另外一个利用AI来解读pdf文件的网站。和之前介绍的chatgpt不同的是可以对照pdf原文阅。不过实测速度较慢,而且点查找按钮会停止响应

https://github.com/chidiwilliams/buzz

可以在本地计算机上离线将音频转成文本,或者对视频生成字幕,基于OpenAI的Whisper模型。

主要功能包括:
* 从麦克风实时转录和翻译成文本
* 从音频和视频文件生成 TXT、SRT 和 VTT
* 支持 Whisper 、 Whisper.cpp 、与 Whisper 兼容的 Hugging Face 模型和 OpenAI Whisper API
* 适用于 Mac、Windows 和 Linux

怎么把一个超长内容喂给 ChatGPT,以 PDF 为例,以下都是纯 JS 开源工具推荐:

1. github.com/mozilla/pdf.js 能够比较好地解析 pdf 文件,但是解析出来可能是图片?看 2

2. github.com/naptha/tesseract.js 能够识别包括汉语等 100 种语言,拿到所有的文本,但内容分批可能出现错误截断?看 3

3. github.com/yanyiwu/nodejieba 结巴分词,避免将长内容分段的时候,错误截断短语或单词,完成了内容的分批之后看 4

4. github.com/openai/openai-node OpenAI 的 API 工具包,利用它将内容分批喂投给 ChatGPT

在将问题提交给 ChatGPT 之前,可以使用 embeddings 将问题与文档中的各个片段进行比较。基于余弦相似度或其他相似度度量,选择与问题最相关的片段进行处理。这样可以减少无关文本的干扰,提高 ChatGPT 回答问题的准确性。

:可以试试 chatdoc.com ,可以溯源,可以在PDF里选表格和文本针对性的提问

有人借助GPT-4,在没有JavaScript和3D游戏编程经验的情况下,一点点做除了一个 3D 太空赛跑游戏。最终效果看视频

twitter.com/ammaar/status/1637592014446551040

推荐视频:如何使用AI画图工具Midjourney生成Logo,很详细,尤其是如何借助prompt来生成想要的Logo

🔗 www.youtube.com/watch?v=HXh7b_ZND_M

https://www.ebaqdesign.com/blog/midjourney-logo-design?continueFlag=a9adaf9fc01778e2eb9d31292c8b63c9

https://gpt.level06.com/?continueFlag=a9adaf9fc01778e2eb9d31292c8b63c9

分享一个用GPT4查文献的方法。
之前大家都吐槽Chatgpt会给生成假文献,我也遇到过这个问题,就不用他查了。但是今天邻座韩国同学跟我说他最近一直用gpt查文献,他避免上述问题的方式就是加一个简单的限制:can be found on google scholar, with more than xxx citations
试了一下,挺管用的 ​​​

推荐 GitHub 上一个开源项目:Shell GPT。

该工具直接在命令行中集成了 ChatGPT,通过它,可以帮助你快速编写 shell 命令、代码片段编写、Git 提交信息、文档、注释等内容。

用法主要有以下几种:

– 获取某个任务的执行指令;
– 直接转换时间、距离、重量、温度等单位;
– 在命令行终端搜索 shell 用法;
– 自动生成代码并存储;
– 在命令行跟 ChatGPT 对话,并迭代优化。

GitHub:github.com/TheR1D/shell_gpt

与其它 ChatGPT 应用一样,Shell GPT 在使用前,你需要先自行配置好 OpenAI API Key

人工智能提示课

https://learnprompting.org/zh-Hans/docs/intro

编译安装PHP

本文以centos stream 9和php8.1为例,描述编译思路

Unix 系统下的安装 核心配置选项列表

安装编译需要的工具和依赖

如何确定需要的依赖,看一下你要用的php扩展,需要那些系统组件和组件对应的系统库

可以查看扩展库归类 ,找到安装/配置说明可以查看详细说明,举例说明 GD库 配置参数详细说明

使用dnf或yum install xxx安装

#编译器相关工具
deltarpm gcc gcc-c++ make cmake autoconf bison re2c 
#基础库
glibc glibc-devel glib2 glib2-devel
#网络和数据库相关
curl curl-devel libcurl libcurl-devel sqlite-devel sqlite-devel libsqlite3x-devel
#文本字符数据格式
oniguruma oniguruma-devel libxml2 libxml2-devel libxslt libxslt-devel libtidy-devel libtidy libicu-devel 
#图片格式 字体
gd-devel
freetype freetype-devel libjpeg libjpeg-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel libtiff-dev libgif-dev libwebp-devel
#文件解压缩
 zlib zlib-devel libzip-devel  bzip2 bzip2-devel
#数学和加密
openssl openssl-devel libmcrypt libmcrypt-devel mhash mhash-devel mcrypt libargon2 libsodium

手动编译安装

有些库没有系统二进制包,不能直接使用命令安装需要下载来,或者版本太低达不到php的要求,需要手动编译安装

libiconv libargon2 libsodium

依赖说明

deltarpm 一种rpm包,优化了体积

bison 是一种通用目的的分析器生成器

re2c 一个将正则表达式转化成基于C语言标识的预处理器

oniguruma 正则表达式库,使用–enable-mbstring需要安装

freetype 可移植的字体引擎,它提供统一的接口来访问多种字体格式文件 –with-freetype

libicu  Unicode 支持、软件国际化编码 –enable-intl 开启intl扩展

libxml2 xml操作库 –enable-xml 开启

libxslt 是一种样式转换标记语言,可以将XML资料档转换为另外的XML或其它格式 –with-xsl

libtidy 处理html的一种扩展 –with-tidy 很少用

libiconv 字符编码转换库 启用–with-iconv

查看编译选项

./configure --help

创建用户和组

id -g www >/dev/null 2>&1
[ $? -ne 0 ] && groupadd www
id -u www >/dev/null 2>&1
[ $? -ne 0 ] && useradd -g www -M -s /sbin/nologin www

常用的编译参数选项,来自oneinstack脚本,php8.1.sh安装源码

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
    --with-config-file-scan-dir=/usr/local/php/etc/php.d \
    --with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo \
    --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
    --with-iconv --with-freetype --with-jpeg --with-zlib \
    --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif \
    --enable-sysvsem --with-curl --enable-mbregex \
    --enable-mbstring --with-password-argon2 --with-sodium=/usr/local --enable-gd --with-openssl \
    --with-mhash --enable-pcntl --enable-sockets --enable-ftp --enable-intl --with-xsl \
    --with-gettext --with-zip=/usr/local --enable-soap --disable-debug
#防止libiconv导致的报错
make ZEND_EXTRA_LIBS="-L/usr/local/libiconv/lib/ -liconv"
make install

如上启用了fpm,mysqli,mysqland,iconv,gd,xml,bcmath,shmop,exif,sysvsem,curl,mbstring,Password hashing,mhash,openssl,pcntl,sockets,ftp,intl,xsl,gettext,zip,soap

根据项目实际需求来启用需要的参数,比如,项目用cli框架swoole或者workman之类的可以不启用fpm

Nginx反向代理和负载均衡

基本概念

负载均衡

负载均衡(Load Balance)是由多台服务器以对称的方式组成一个服务器集群,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。经过某种负载分管技术,将外部发送来的中央请求均匀分配到对称结构中的某一台服务器

代理

代理(英语:Proxy)也称网络代理,是一种特殊的网络服务,允许一个终端(一般为客户端)通过这个服务与另一个终端(一般为服务器)进行非直接的连接。通常指的事代理服务器。现实中的例子, 从A地到B地,由于某些原因无法直接到达,需要经过C中转。C就是代理,可以理解为中转站。

维基百科 百度百科

正向代理

正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。

正向代理,其实是”代理服务器”代理了”客户端”,去和”目标服务器”进行交互。科学上网的代理就是正向代理。

正向代理一般是客户端架设的,比如在自己的机器上安装一个代理软件。

作用

突破访问限制

通过代理服务器,可以突破自身IP访问限制,访问国外网站,教育网等。

提高访问速度

通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。

隐藏客户端真实IP

上网者也可以通过这种方法隐藏自己的IP,免受攻击。

反向代理

反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理,其实是”代理服务器”代理了”目标服务器”,去和”客户端”进行交互。

反向代理一般是服务器架设的比如在自己的机器集群中部署一个反向代理服务器

作用

隐藏服务器真实IP

使用反向代理,可以对客户端隐藏服务器的IP地址。

负载均衡

反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上。

提高访问速度

反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度。

提高访问速度

反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度。

配置

反向代理

官方文档 ngx_http_proxy_module 此处为nginx 的http proxy代理模块

http代理完整的例子

server {
    listen 80;
    server_name proxy.stu;

    location / {
        proxy_http_version 1.1; //http版本
        proxy_set_header Host $http_host; // host主机
        proxy_set_header Scheme $scheme; //协议
        proxy_set_header SERVER_PORT $server_port; //端口
        proxy_set_header REMOTE_ADDR $remote_addr; //远程地址
        proxy_set_header Connection "keep-alive"; //链接类型keep-alive
        proxy_set_header X-Real-IP $remote_addr; // 获取真实ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;//通过该变量获取ip
        proxy_pass http://127.0.0.1:8080; //后端http服务地址
    }
}

websocket代理完整的例子

官方文档

//http模块
http {
  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
  }

//server模块
server{
    location /ws
      {
         proxy_pass http://127.0.0.1:8282;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "Upgrade";
         proxy_set_header X-Real-IP $remote_addr;
      }
  } 
}

参数解释

proxy_http_version

proxy_http_version 代理的http版本,官方文档写了只支持1.0,1.1 。 编译时添加http2,配置加入proxy_http_version 2,可以支持http2 。强烈不推荐使用。

http2解决的浏览器(客户端)和服务器之间链接问题,提高了性能。不适用于代理服务器和后端服务之间的通讯, 事情可能会因为HTTP2在后端的应用(单个TCP代替了多个TCP连接)变得更加糟糕.

来自知乎Twosee​ Swoole & PHP 开发组成员的答案

stack overflow 的答案

X-Real-IP $remote_addr与X-Forwarded-For $proxy_add_x_forwarded_for

Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For,参数详细解释

proxy_pass

proxy_pass 代理的服务地址 支持unix socket 这种写法:

proxy_pass http://unix:/tmp/backend.socket:/uri/;

ngx_stream_proxy_module 支持代理 tcp udp data stream

负载均衡

相关参考

极客时间-nginx核心知识100讲-陶辉

一篇文章搞定 Nginx 反向代理与负载均衡

终于有人把正向代理和反向代理解释的明明白白了!

nginx系服务器笔记

nginx

官方文档

tengine

官方文档

nginx 一个fork,针对高性能负载网站做了优化,但是更新维护比较慢,跟不上nginx版本

openrestry

官方文档 官方博客 组件

是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。可以操作数据库。

OpenResty 用在 API 网关的开发上。如Orange、Kong、APISIX,他们都是实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

 LuaJIT VM 嵌入到 Nginx 中,实现了 OpenResty 这个高性能服务端解决方案

区别

Nginx|OpenResty|Tengine–到底该爱谁

实用总结

如果不用lua模块,首先nginx官方版本.

nginx泛域名案例

nginx优化大文件下载

nginx安全指南

nginx常用功能配置

nginx反向代理负载均衡

Electron错误记录

storePicPath:D:\pics
renderer.js:26 e--> Error: EPERM: operation not permitted, stat 'D:\pics\hv4TWmiw77JF10e7E2plB3LGrz2qv5HfosFMwkjh.mp3'
    at statSync (fs.js:1086)
    at Object.e.statSync (electron/js2c/asar_bundle.js:5)
    at renderer.js:26
    at Array.forEach (<anonymous>)
    at a.emptyDir (renderer.js:26)
    at a.clearDir (renderer.js:26)
    at a.<anonymous> (renderer.js:26)
    at r (renderer.js:26)
    at Generator._invoke (renderer.js:26)

Installer integrity check has failed Common causes include  incomplete download and damaged media Contact the installer's author to obtain a new copy more infomation at http://nsis.sf.net/NSIS_Error

原因安装包不完整

PHP debug 笔记

简单方式

修改php错误级别,var_dump(),print_r(),die(),exit() 人工断点。

Pecl扩展方式

yasd

出现了coredump

[24-Jul-2022 08:55:01] WARNING: [pool yangliuan] child 14755 said into stdout: “[yasd] Connect IDE failed (Connection refused), please check that the IDE is in a listening state”

child 14756 exited on signal 11 (SIGSEGV – core dumped) after 991.060461 seconds from start

zend xdebug

框架debug工具包

Laravel Telescope

laravel-debugbar

maximebf/php-debugbar

gdb 调试 coredump

什么是coredump

相关文章

coredump调试记录 – PHP篇

使用GDB调试PHP core dump

Generate PHP core dumps on segfaults in PHP-FPM

一个低概率的PHP Core dump

coredump配置、产生、分析以及分析示例 

什么是Core Dump?

Webman/Workman使用笔记

数据库迁移文件Phinx

如何刷新所有回滚

不能直接刷新所有回滚,创建完第一个迁移之后,使用断点命令打上断点,方便后边刷新所有回滚,这样只会滚两次就可以了。

phinx breakpoint -e development -t 20120103083322(第一个迁移的时间版本)

数据模拟的库

改用 https://fakerphp.github.io/#installation,原先的过时了。

ubuntu内核相关配置

Ubuntu 18.04 LTS以上版本 修改Limit(打开文件数)

文件 /etc/security/limits.conf
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 1024000
* hard nproc 1024000
root soft nofile 1024000
root hard nofile 1024000
root soft nproc 1024000
root hard nproc 1024000

文件 /etc/systemd/user.conf
DefaultLimitNOFILE=1024000

文件 /etc/systemd/system.conf
DefaultLimitNOFILE=1024000