Thumbnail image

GO 远程 DELVE 调试缓慢问题

在双方机器安装调试工具 go install github.com/go-delve/delve/cmd/dlv@latest 配置环境变量: export PATH=$PATH:$GOPATH/bin 在远程机器启动对应服务: dlv --listen :33333 --api-version=2 --headless --accept-multiclient --allow-non-terminal-interactive exec {program-to-run} -- {program-args} 在 vscode 中进行类似配置进行远程调试: { "version": "0.2.0", "configurations": [ { "name": "remote-debug", "type": "go", "request": "attach", "mode": "remote", "host": "{address-to-remote-server}", "port": 33333, "debugAdapter": "dlv-dap", // 适配器 "substitutePath": [ // 源代码路径映射 { "from":"${workspaceFolder}", "to":"{remote-source-folder}, } ] } ] } 注意:适配器配置可能导致调试极其缓慢的问题,参考: https://github.com/golang/vscode-go/releases/tag/v0.41.3 "debugAdapter": "dlv-dap"

Thumbnail image

FLATPAK 安装 FCITX5 输入漏字母问题

安装 flatpak 对应包 fcitx5 及相关 optional addon 如 fcitx5-rime 后,按教程配置对应环境变量: 可以考虑配置在 /etc/environment 中: # /etc/environment LANG="zh_CN.UTF-8" QT_IM_MODULE=fcitx GTK_IM_MODULE=fcitx XMODIFERS="@im=fcitx" 上述过程后还出了无法在 Chrome/Vscode 中输入或漏字母问题;后几经查证,由于输入发对应应用需要加载 fcitx5-frontend-* 相关插件才能正确完成输入;但对应组件需要与对应应用处于同环境,而无法通过 flatpak 安装(隔离的运行环境)故: apt install fcitx5-frontend-* 解决了问题; 参考: github.com/fcitx/fcitx5

Thumbnail image

OPENSSL 字签证书(域名、IP)

生成 ROOT/CA 根证书 openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout root_ca.key -out root_ca.pem -subj "/C=CN/O=Orgnization/OU=OrgizationUnit/CN=CommonName" openssl x509 -outform pem -in root_ca.pem -out root_ca.crt 签发证书 配置文件 注意: 缺失 nonRepudiation 在新版本 Chrome 中导致 SSL_ERR_IMCOMPATIBLE 错误无法继续访问;(更新:2023-12-22) 该配置文件实际在 签发申请 和 签发证书 时都需要使用; # filename="server.conf" [req] distinguished_name = req_dn req_extensions = req_ext x509_extensions = x509_ext prompt = no [req_dn] C = CN ST = Beijing L = Beijing O = Orgnization OU = OrgnizationUnit CN = CommonName [req_ext] keyUsage = nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth [x509_ext] keyUsage = nonRepudiation, keyEncipherment, dataEncipherment subjectKeyIdentifier = hash extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = *.domainname.com IP.2 = 10.0.0.1 签发申请 openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr -config server.conf 签发证书 openssl x509 -req -sha256 -days 1024 -in server.csr -CA root_ca.pem -CAkey root_ca.key -CAcreateserial -extfile server.conf -extensions x509_ext -out server.crt

C++ 表达式求值顺序

这两天突然碰到的一个问题,在开发和正式环境由于切换编译器导致了一些问题;下面的示例代码演示: #include <iostream> int test_evaluate_order(int a, int b, int c) { return a + b + c; } int fa() { std::cout << "1" << std::endl; return 1; } int fb() { std::cout << "2" << std::endl; return 2; } int fc() { std::cout << "3" << std::endl; return 3; } int main() { test_evaluate_order(fa(), fb(), fc()); return 0; } 上述代码在编译执行时: 在 clang v9.0.0 版本下,运行输出: 1 2 3 在 gcc v9.1 版本下,运行输出: 3 2 1 参见:CompilerExplorer

PHP 静态链接 OPENSSL/NGHTTP2 及外部扩展

{{page.title}} 注意: 以下过程是为 使用链接 openssl 静态库, 方便部署规划的编译配置; 使用动态连接的情况很多流程可以简化(无需对 config.m4 进行修改); openssl 1.1.1b CC=gcc CXX=g++ ./Configure no-shared --prefix=/data/vendor/openssl-1.1.1 linux-x86_64 nghttp2 1.38.0 PKG_CONFIG_PATH=/data/vendor/openssl-1.1.1/lib/pkgconfig CC=gcc CXX=g++ CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure --prefix=/data/vendor/nghttp2-1.38.0 --enable-shared=no --enable-lib-only # --with-boost=/data/vendor/boost-1.70.0 --enable-asio-lib curl 7.64.1 CC=gcc CXX=g++ CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix=/data/vendor/curl-7.64.1 --with-nghttp2=/data/vendor/nghttp2-1.38.0 --with-ssl=/data/vendor/openssl-1.1.1 --with-pic=pic --enable-ipv6 --enable-shared=no --without-libidn2 --disable-ldap --without-libpsl --without-lber --enable-ares php 7.2.18 CC=gcc CXX=g++ ./configure --prefix=/data/vendor/php-7.2.18 --with-config-file-path=/data/vendor/php-7.2.18/etc --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --with-readline --enable-mbstring --without-pear --with-zlib --build=x86_64-linux-gnu ldd 扩展 cd ext/***** /data/vendor/php-7.2.17/bin/phpize mv config0.m4 config.m4 扩展 openssl.so CC=gcc CXX=g++ LDFLAGS="-pthread -ldl" ./configure --with-php-config=/data/vendor/php-7.2.17/bin/php-config --with-openssl=/data/vendor/openssl-1.1.1 --build=x86_64-linux-gnu 扩展 curl.so 调整 config.m4 以忽略内部检查(检查本身会引起链接问题)

SERVER INITIALIZATION

更新:2024-03-26 BASIC apt update apt upgrade apt install aria2 build-essential cmake libpcre3-dev libssl-dev zlib1g-dev mkdir -p /data/server/v2ray BBR # 验证 lsmod | grep bbr # 挂载 modprobe tcp_bbr echo "tcp_bbr" >> /etc/modules-load.d/modules.conf # 启用 echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf # 生效 sysctl -p NGINX cd ~ wget http://nginx.org/download/nginx-1.25.4.tar.gz tar xf nginx-1.25.4.tar.gz cd nginx-1.25.4 ./configure --with-http_ssl_module --without-select_module --with-http_v2_module --with-http_gzip_static_module --prefix=/data/server/nginx make -j2 make install Certificate mkdir -p /etc/letsencrypt/live/ scp -r root@source_host:/etc/letsencrypt/live/terrywh.net /etc/letsencrypt/live/ certbot certonly -d "*.terrywh.net" --manual --preferred-challenges dns certbot renew START /data/server/nginx/sbin/nginx aria2c --conf-path=/data/htdocs/downloads.terrywh.net/etc/aria2.conf /data/server/v2ray/v2ray --config /data/server/v2ray/config.json &>/dev/null & GCC 安装新版本 GCC/LLVM 请参考 [新版本 GCC/LLVM 安装]({% link _notes/compiler-setup.md %})

修复 LINUX/GRUB 启动配置

尝试在 Linux 下工作了一段时间,安装了 N 多个种类发行版本,最终本着“不折腾”原则停留在了 Deepin,比较一下安装的几个版本感觉: Ubuntu 安装过程很流畅,完成后简单换了下安装源,Gnome 尝试了几个开发工具写了些代码,大概持续了 4 天,实在搞不定 QQ / TIM (使用 Wine 能启动,要么无法输入,要么一堆框框,要么字体太丑);很几个工具出现输入法相关的问题,换 fcitx 后有缓解,但还有无法输出的应用。 Archlinux 从头安装一般人搞不了:安装过程查了各种“教程”,由衷的感觉自己对 Linux 底层了解还是太少,很多操作根本不知到干什么;当然,结果 OK 还是装上了,安装桌面环境尝试了 KDE 和 XFCE,最终觉得安装走的太糊涂,而且实在需要配置太多东西,遂放弃。 Antegros 基于 Archlinux 的发行版本,官网感觉比下面这个漂亮点,结果这个最搞笑;重启、重试安装了 N 多回,每次在所有配置完毕开始安装的时候提示“请稍候…”,然后就,没有然后了… Manjaro 对这个抱着希望最大,安装、初期使用都很不错,碰到的诡异问题在网上搜索到的结果都是1年前:网卡断开后无法重连;我需要配置 802.1 安全协议,做配置就要断开,断开就连不回来;后来以为网卡驱动问题,尝试良久未果,一度导致完全无法联网,放弃。 Deepin 本来选择 Arch 系列就是奔着移植的 Deepin 版本的 QQ/TIM 去的,所以想着干脆回到本家试试;尝试感受不错,各种东西都稳定,碰到一点点小问题,使用自带的驱动管理器安装闭源版本驱动失败(重启提示无法启动 Display 然后恢复开源驱动),但是关闭桌面,从纯命令行安装后一切正常;目前装了 Linux 版本 Steam 的 Dota2 来国服合同事来了两把没碰到问题。 在安装过程中经常碰到 Grub 无法正确引导的情况,大部分使用下面命令解决: # 确认启动 boot 分区位置 ls ls (hd1,gpt4) # 设置启动目标参数 set root=(hd1,gpt4) set prefix=(hd1,gpt4)/boot/grub # 启动 insmod normal normal 实际在进入 Linux 后需要重新安装或配置 GRUB 这里一般是:

PHP-FLAME

https://github.com/terrywh/php-flame Flame 是一个基于协程的异步网络开发框架(PHP扩展)类似 Swoole 但相对更简单一些: <?php // 框架初始化 flame\init("http_server_demo"); // 第一个(主)协程 flame\go(function() { // 创建 HTTP 服务器(监听) $server = new flame\http\server(":::56101"); $server ->before(function($req, $res) { // 前置处理器(HOOK) $req->data["before"] = flame\time\now(); // 记录请求开始时间 }) ->get("/hello", function($req, $res) { // 路径处理器 // 简单响应方式 $res->status = 200; $res->body = "world"; }) ->post("/hello/world", function($req, $res) { // 路径处理器 // Transfer-Encoding: Chunked $res->write_header(200); $res->write("CHUNKED RESPONSE:") $res->write($res->body); $res->end(); }) ->after(function($req, $res, $r) { // 后置处理器(HOOK) flame\log\trace($req->method, $req->path // 请求时长日志记录 , "in", (flame\time\now() - $req->data["before"]), "ms"); if(!$r) { $res->status = 404; $res->file(__DIR__."/404.html"); // 响应文件 } }); $server->run(); }); // 启动(调度) flame\run();

ATOM 插件 GO-PLUS 配置 GOROOT

由于需要在同一台机器部署两种 GO 环境(WSL + Win),这里对 go-plus 代码进行一点点修改,加入 goroot 配置参数来解决这个问题: // ~/.atom/packages/go-plus/lib/config/environment.js // ... // const getenvironment = (): {[string]: ?string} => { // ... if (!e.GOROOT) { let r = atom.config.get("go-plus.config.goroot") if (r && r.trim() !== '') { e.GOROOT = r } } // e.GINKGO_EDITOR_INTEGRATION = 'true' // return e // } 即通过配置参数 go-plus.config.goroot 模拟环境变量。

Thumbnail image

注册表常用设置

各处收集到的各种调整 Windows 配置相关的注册表项,记录以备不时之需~ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DisabledHotkeys (REG_EXPAND_SZ) “SA” - 禁用 Win + S/A 快捷键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\7516b95f-f776-4464-8c53-06167f40cc99\8EC4B3A5-6868-48c2-BE75-4F3044BE88A7 (REG_DWORD) 0x00000002 - 开启额外的电源设置 “控制台锁定后显示关闭超时” HKEY_CURRENT_USER\Software\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\System.IsPinnedToNameSpaceTree (REG_DWORD) 0x00000000 - 隐藏 OneDrive 在 Explorer 左侧列表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation (REG_DWORD) 0x00000001 - 标识 Bios 时间为 UTC 标准时间(配合 LINUX 双系统)