Mac OS开发者常用笔记

macOS Recovery mode

如何进入回复模式?

Intel 芯片架构 重启,在Mac启动或听到启动铃声后立即按住Command + R键

MI/M2芯片架构 关机,按住触控 ID(电源按钮)几秒钟,直到看到“加载启动选项”

Disable System Integrity Protection Temporarily

禁用系统完整性保护,用来解决开发时候操作系统文件提示operation not permitted问题

1.按上文操作进入macOS Recovery mode

2.进入系统后,下拉顶部栏工具,打开终端,输入csrutil disable (禁用),按照提示输入用户名和密码,重启系统。

3.为了安全,敏感操作之后,建议csrutil enable (启用) 保护模式。否则可能导致app store上的某些ios应用(非dmg)无法使用

ubuntu音乐播放器

QQ音乐

下载页面:https://y.qq.com/download/download.html

shell安装脚本 https://github.com/yangliuan/ubuntu-start/blob/main/include/linuxqq.sh

网易云音乐

下载页面 https://music.163.com/#/download (页面上没有了ubuntu的下载项)

下载地址 https://d1.music.126.net/dmusic/netease-cloud-music_1.2.1_amd64_ubuntu_20190428.deb

shell安装脚本https://github.com/yangliuan/ubuntu-start/blob/main/include/neteasy_cloud_music.sh

Lollypop

有漂亮的界面和直观的用户体验。支持音频标签编辑、歌词显示和艺术家图片显示等功能

安装(可以从商店安装)

sudo apt-get install lollypop

Rhythmbox

ubuntu默认音乐播放器

https://wiki.gnome.org/Apps/Rhythmbox

安装 (可以从商店安装)

sudo apt install rhythmbox

如何修改mp3文件的元数据,如专辑名称,歌手名称

使用命令行工具 “id3v2″(需要安装):

a. 打开终端。
b. 安装 id3v2 工具:sudo apt-get install id3v2
c. 进入包含要编辑的 MP3 文件的目录:cd /path/to/mp3/files
d. 使用以下命令来修改元数据:

修改专辑名称:id3v2 –album “新专辑名称” 文件名.mp3
修改歌手名称:id3v2 –artist “新歌手名称” 文件名.mp3
e. 替换 “新专辑名称” 和 “新歌手名称” 为你想要的实际名称,将 “文件名.mp3” 替换为要编辑的 MP3 文件的实际文件名。

使用图形界面工具 “EasyTAG”(需要安装):

a. 打开终端。
b. 安装 EasyTAG 工具:sudo apt-get install easytag
c. 运行 EasyTAG:easytag
d. 在 EasyTAG 窗口中,打开要编辑的 MP3 文件。
e. 找到并编辑专辑名称和歌手名称字段。
f. 保存修改后的文件。

Kid3: Kid3 是一个跨平台的开源音乐标签编辑器,支持多种音频文件格式(包括 MP3、FLAC、AAC、WMA 等)。官方网站(https://kid3.kde.org/)

跨平台客户端技术

浏览器Web前端

QT

Qt 1991年,当时是由挪威的程序员Eirik Chambe-Eng和Haavard Nord创建的。他们最初为了解决开发GUI应用程序的问题而创建了Qt,当时Qt是一个用于开发Unix操作系统上的GUI应用程序的工具库。开发语言是C++,也提供了Python、JavaScript和QML等其他编程语言的支持。

官网文档: https://doc.qt.io/qt-5/gettingstarted.html

支持的平台:https://doc.qt.io/qt-5/supported-platforms.html

知名的软件:VirtualBox,Autodesk Maya,VLC Media Player,Skype,Autodesk Mudbox,Google Earth

Flutter

Flutter 是一个由 Google 开发的移动应用程序开发框架。它使用 Dart 编程语言,并支持 iOS、Android 和 Web ,PC 等多个平台。

官网 https://flutter.dev/development

中文社区 https://flutterchina.club

API https://api.flutter.dev/

Electron.js

Electron 是一个使用 Web 技术(HTML、CSS 和 JavaScript)构建桌面应用程序的框架。它可以在 Windows、macOS 和 Linux 等多个操作系统上运行

官网 https://www.electronjs.org/

文档 https://www.electronjs.org/docs/latest/

社区:https://www.electronjs.org/community

Nw.js

基于Chromium和Node.js的开源跨平台桌面应用程序开发框架,可以使用HTML、CSS和JavaScript创建原生的桌面应用程序,支持Windows、macOS和Linux等操作系统。以下是nw.js的官网、文档和社区网站:

官网:https://nwjs.io/

文档:https://nwjs.readthedocs.io/en/latest/ nw.js的文档提供了详细的开发指南、API文档和教程等信息,帮助开发者了解框架的各种特性和用法,快速上手并开发出高质量的桌面应用程序。

社区:https://github.com/nwjs/nw.js/wiki

Tauri

Tauri是一个开源的桌面应用程序开发工具,它使用Rust语言和现代Web技术(如HTML、CSS和JavaScript)构建跨平台桌面应用程序。Tauri提供了一个安全、高效、可扩展的框架,支持Windows、macOS和Linux等操作系统

官网:https://tauri.studio/

文档:https://tauri.studio/docs/getting-started/intro

React Navite

React Native是Facebook开发的一个基于React框架的开源框架,可以用来构建跨平台移动应用程序。React Native的主要目标是使用JavaScript和React的语法,开发高效且流畅的原生应用

官网:https://reactnative.dev/

文档:https://reactnative.dev/docs/getting-started

技术栈优点缺点适用场景
Qt跨平台、高效、稳定学习成本较高GUI应用、嵌入式系统
Flutter跨平台、高性能、易学仅适用于移动应用开发移动应用、跨平台UI开发
NW.js跨平台、Web技术栈运行效率较低跨平台GUI应用、Web应用
Electron跨平台、Web技术栈运行效率较低跨平台GUI应用、Web应用
Tauri跨平台、高效、安全学习成本较高跨平台GUI应用、Web应用
React Native跨平台、易学、高性能仅适用于移动应用开发移动应用、跨平台UI开发

上表列举了常见的跨平台开发技术栈Qt、Flutter、NW.js、Electron、Tauri和React Native的优点、缺点和适用场景。

Qt是一款稳定、高效的GUI框架,可以用于GUI应用和嵌入式系统开发。但是,学习成本相对较高。

Flutter是一款易学、高性能的跨平台移动应用开发框架,但仅适用于移动应用开发。

NW.js和Electron都是基于Web技术栈的框架,可以用于开发跨平台GUI应用和Web应用。但是,运行效率较低,可能不适合要求高性能的应用。

Tauri是一款跨平台GUI应用和Web应用开发框架,具有高效、安全等特点,但是相对其他框架,学习成本相对较高。

React Native是一款易学、高性能的跨平台移动应用开发框架,但仅适用于移动应用开发。

参考:chatgpt

AI工具笔记

chatgpt

https://chat.openai.com/

https://platform.openai.com/account/api-keys

chatgpt mirror

https://chatgptmirror.com/

通义千问

https://tongyi.aliyun.com/

文心一言

https://yiyan.baidu.com/welcome

Bard

https://bard.google.com/?hl=en

虚拟账号短信注册

https://sms-activate.org/

购买ChatgptPlus

https://5best1s.com/%E5%BC%80%E9%80%9A%E8%AE%A2%E9%98%85%E8%B4%AD%E4%B9%B0chatgpt-plus/

基于chatgpt的编辑器

https://www.cursor.so/

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

浏览器插件

https://github.com/josStorer/chatGPTBox

解决GPT报错,反复刷新页面,油猴脚本

https://gitee.com/ZnMaYun/happy-free-chat-gpt/

客户端

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

ChatGPT 中文调教指南

https://github.com/PlexPt/awesome-chatgpt-prompts-zh

机器幻觉

什么是机器幻觉?

ChatGPT:机器幻觉是指由计算机程序或机器学习算法产生的虚假感知或错误结果。这些幻觉可能是由于算法中的缺陷、数据偏差或错误,或者是由于算法未能正确理解复杂的语境或情境。机器幻觉可能会导致错误的决策或预测,因此需要对算法进行不断的优化和调整以减少这种幻觉的出现。机器幻觉的研究也是人工智能领域中一个重要的课题,研究人员通过深入分析机器幻觉的原因和特征,努力提高机器学习算法的鲁棒性和智能性。

有什么方法可以帮我确认,你给我的答案不是机器幻觉?

ChatGPT:作为一名 AI 语言模型,我的回答是由预先训练好的算法生成的。虽然我的回答是基于已有的知识和经验,但是也无法保证完全没有机器幻觉的情况。为了确认我的回答,你可以采取以下方法:

  1. 对我的回答进行反复的阅读,确保它符合常识和逻辑。如果我的回答包含一些不合理的内容或矛盾之处,可能是机器幻觉的结果。
  2. 搜寻其他来源的信息,以便进行比较和验证。如果我的回答与其他来源的信息不一致,可能需要进一步研究和验证。
  3. 向其他人寻求建议或意见。如果你认为我的回答可能存在机器幻觉,可以寻求其他人的意见和建议,以便进行确认和验证。

请注意,我的回答是基于我所知道的信息和技能,可能存在不完善或错误的情况。因此,你需要对我的回答进行适当的评估和判断。

https://www.bilibili.com/video/BV16c41157iK/?spm_id_from=333.999.0.0&vd_source=161c4503364159edc690958e99016a1d

编译安装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?