杜郎俊赏 - dujun.io

第一次体验 AI 自然语言编程

我是一个上了年纪的守旧的程序员。现在也开始依赖 AI 工具,主要是翻译、做图、查一些代码语法和示例。但我从未尝试直接用 AI 写代码,或许这是在自己专业领域被挑战的防御心理,一种莫名的排斥。不过今晚破例了,因为我要写一个 shell 代码,而我不熟练,所以抱着试试看的心态,用自然语言向 AI 提了需求。我的提问内容是: 用shell 代码实现下列功能: 接收一个输入值作为用户名,记为 name。 生成一个 10000 到 65535 之间的随机数作为端口号,记为 port,如果当前目录下有子目录名末尾含这个 port,则重新生成一次。 最终的目录名为 www_slim_web_ + name + _ + port。 创建这个目录,进入这个目录并创建一个 docker-compose.yml,模版为: version: '2.4' services: web: image: du...

2024-06-27

frp 服务守护脚本

为了方便开发,我将工控机从公司拿回了家里。在未做任何修改的情况下,原先在公司很稳定的内网穿透,到了家里不定期地就会断开连接——frp 进程未死,但是穿透代理全部关闭。研究了几天也没解决,现在只能推测是家庭宽带不如企业宽带稳定。(家宽故意干扰长连接?限制内网穿透?) 我用守护脚本临时解决这个问题。思路是每分钟检查内网穿透出的 web 服务可用性(http 状态码 为 200),不可用则杀死进程,然后再由 Supervisor 自动拉起服务。另外写入标记文件,避免重复杀进程。脚本如下: #!/bin/bash URL="https://dujun.bf" TIME=`date "+%Y-%m-%d %H:%M:%S"` FAIL_LOG_FILE="/var/log/frp/failed_$(date '+%Y%m%d').log" FLAG_FILE="/var/log/frp/flag_$...

2024-04-11

开源实例之Gunicorn

前言 本篇介绍《开源实例之FlaskBB》中提到的 Gunicorn。 Gunicorn介绍 Gunicorn is a Python WSGI HTTP Server for UNIX. It's a pre-fork worker model ported from Ruby's Unicorn project. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy. Gunicorn(Green Unicorn)是一个 Python WSGI(Web Server Gateway Interface)HTTP 服务器。因为 Nginx 不能直接支持 WSGI 协议,所以...

2023-03-27

开源实例之页面劫持

前言 本篇介绍用 Nginx sub_filter 实现拦截页面替换内容。 问题描述 本系列的实例为了使用方便,登录页默认填充了用户名和密码。一般是通过修改相关 HTML 或 JS 文件实现,但也有的实例做成了二进制包,要用页面劫持的方式注入,比如护卫神主机大师这个实例。 护卫神·主机大师 V3.0.0 实例的登录页面使用了 VUE 框架,需要劫持/static/js/chunk-common.062e7d64.js这个文件,填充username和password: data() { return {form: {username: "", password: ""}} } 解决办法 本例用 Nginx sub_filter 方法实现。 sub_filter 执行nginx -V如果包含--with-http_sub_module表明已安装 sub_filter 对应的模块。Deb...

2023-03-14

php 双问号可以链式使用

刚才改网站代码,偶然发现 php 双问号是可以链式使用的: $ret = $a ?? $b ?? $c ?? 4; 原本我是应该加括号的: $ret = $a ?? ($b ?? ($c ?? 4)); 无心之失忘了加括号,竟然可以执行,才发现双问号可以链式使用。 之所以有这样的乌龙,是因为我这个从 php5 时代入行的古典程序员,对新的语法糖是想当然的,没有去仔细看过文档。双问号的使用习惯也是从三元式演变过来的,自然没想过还能链式使用。 用三元式表达上面的语句是这样的: $ret = isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : 4)); php 不愧是世界上最好的语言。令人开心。

2022-11-11

CleanCSS - 移除未使用的 CSS 代码

cleancss-remove-unused-css封面
应用:CleanCSS 地址:http://dujun.eu.org/cleancss 功能:分析页面中引用的 CSS 文件,打包成单一的干净文件用于替换所有引用 适用:独立页面 一、缘起 我导航站用了开源项目WebStackPage,首次静态资源加载有 1.5M,一部分原因是它使用了第三方库,比如 Bootstrap。当然,第三方库只有少量代码实际被用到,所以我就想找个办法,把未使用的 CSS 代码移除,使得静态文件更小。 二、方案 很快就找到了这个网站https://unused-css.com/。它可以很好地实现我的需求,不过有一个小问题,它是收费的,最低 25 美元一个月。 Only paying users can download clean CSS files. 那怎么办呢?那就自己开发一个工具吧。 三、分析 清理 CSS 代码需要这么几步: 抓取页面 HTML 内容 找到页...

2022-10-31

我还在用 jQuery

一、前言 我是后端开发出身,前端还停留在用原生 js 和 jQuery 写代码的水平。这次重构副站dujun.eu.org考虑过前端要不要用现代框架来写。三大框架里面,Angular 和 React 不打算碰,去看了最容易入门的 Vue。在 B 站看了两天的教程,喜欢不起来。 二、Vue Vue 当然很好,有优雅的设计思路,是真正意义上的框架。双向绑定,只需处理数据,不用亲自操作 DOM。但是对我而言,有两方面原因让我放弃 Vue。 (一)Vue 语法 Vue 的编写方式就像一门新的语言,需要记很多的语法糖。如果不打算深入前端工作,对这个学习积累没有很高的兴致。更真实的是,当只是完成简单的交互效果,用 Vue 写代码不会比原生更轻松。 (二)Vue 虚拟 DOM Vue 使用虚拟 DOM 来优化渲染逻辑,实际执行过程成了黑盒,我不确定具体发生了什么。虽然本不该关心,但我不喜欢失去掌控感。而...

2022-10-28

JavaScript 强混淆

我的网站是纯内存缓存读 + js 渲染 spa,现在的瓶颈就是硬件配置低、带宽小,程序架构上可以说追求到极致了。其中,js 渲染是全站性能优化的关键一坏,服务器只负责吐出原始数据,而把路由解析、数据处理、布局渲染的计算压力都转嫁给了浏览器。 如此重要的前端部分我当然花了很大的心思。js 是明文的,只能做混淆。但是如果混淆得足够好,逆向成本过高,也是可以达到很好的代码保护。网上有很多 js 代码混淆的方法可以参考,但有些会让文件大小增加好几倍。这里我分享一下自己 js 强混淆的思路。 我实现 js 强混淆的关键一点就是字面量表达式。 原生写法: str.trim(); 字面量表达式: str['trim'](); 有了这个基础,混淆要做的就是进一步隐藏字符串了。我用了 ASCII 转码和 base64,使得字符基础变量简化为 64 个 base64 编码字符,以及特殊的空格和换行符。 以“我...

2022-10-19

友情链接模块发布

the-friends-page-is-released封面
新增友情链接页面,入口在电脑端的侧边栏或手机端的搜索页的“友链”。 1. 前言 建站七年了,一直没有做友情链接的模块。诚然,博客这种古典互联网产品,友链是最典型的应用,缺失有点遗憾。期间也反复想过要做,但是有两方面问题没有找到满意的方案。 1.1 没有满意的友链样式 网上常见的友链有这些样式: 网站名称文字链接 头像加网址、网站描述 网站链接加最新 feed 头像、网站描述都是静态的,我觉得无趣。于是我尝试过抓取 feed,然后就有两个问题: rss 地址发现,需要匹配各种未知规则,除非手动填写地址; 有些网站没有 rss,如果直接爬取页面,匹配内容又很麻烦。 所有长期以来,友情链接的表现样式就把我卡住了。 1.2 没有满意的友链规则 相比样式,友链的规则逻辑是让我更想不好的。典型的交换友链方式是,博友之间直接联系,互相提供文字、链接、头像、截图等。我很不喜欢这样的流程,因为有恼人的几个因...

2022-10-06

波浪下划线

本站对文字的重点标记,经过了几次改版。 一、着重号 最初使用着重号。它的问题是会造成段落间距变大,同时大圆点标记过于醒目,抢夺阅读视线。 text-emphasis: filled circle; text-emphasis-position: under; 效果如:对照文字、着重号标记的文字 二、虚线下划线 着重号用了没多久,就改成虚线下划线了。 border-bottom: 2px dotted; 效果如:对照文字、虚线下划线标记的文字 三、波浪下划线 虚线下划线没什么问题,但是今天突然觉得平庸了,决定改成波浪线。 代码参考了 CSS实现文字下面波浪线动画效果。具体实现如下: padding: 5px 0.2em; background: radial-gradient(circle at 10px -7px, transparent 8px, currentColor 8px, cu...

2022-08-02

分页: 1 2 3