分类目录归档:技术

推荐两款 WordPress 插件

推荐两款 WordPress 插件

我的博客写了很久,但是一直以来,有两个问题是我没有处理太好的,也正是因为没有处理好,过去的我的博客往往比较朴素。但是最近我发现了两个插件,可以完美解决我的问题,也分享给你。

对象存储对接: USS Upyun

USS Upyun 是来自于沈唁开发的又拍云存储插件,安装使用后,你的附件会在通过 WordPress 插件中上传后,自动上传至又拍云。

由于我一直以来都是使用又拍云作为图床,并配合我电脑上的 iPic 来使用,所以,配合他的插件可以让我免于使用 iPic 来上传文件,直接通过 WordPress 上传即可,大大提升了我的写作舒适度。

此外,如果你使用的其他家的云存储,也没有问题,这个作者也开发了其他几家常见云存储的插件,你可以直接使用他开发的插件来完成功能,因为是同一个人开发的,所以功能方面不会有太大的差距。

插图获取:Instant Images

Instant Image 是用来找插图的,当你在写文章的时候需要一张插图,就可以在选择图片的时候,直接从 Pixabay 或 Unsplash 上搜索并选择合适的图片,选中后,就会自动将图片下载到你本地让你使用(配合上面的又拍云插件,可以直接将图片存在对象存储上)。

Surface laptop on a round straw foot rest in an office with Christmas decorations in the background
随手选择了一张图

插入的界面也是融合在媒体库当中的,非常符合 WordPress 的使用体验。

总结

有了这两个插件,我以后大概会在写文章的时候大量配图,因为插图不再是我的痛点,那就可以多插一些符合场景的图片,来降低读者阅读文章的压力。

2021 年还在写 PHP 的人

2021 年还在写 PHP 的人

PHP 是世界上最好的语言

这是技术圈的一个梗。只要你希望一个社区吵起来,只要抛出 XX 是最好的语言,就可以吵起来。而在这个鄙视链里,最底层的就是 PHP。

为什么会是 PHP?

应运而生的 PHP

PHP 其实是一门非常辉煌的语言,关于他有多辉煌。从 WordPress 的荣耀就可以看出来。 WordPress 这样一个被广泛应用的 CMS 系统便是 PHP 写就的。就连这个博客,也同样是基于 PHP 写成的。

在 PHP 盛行的时代,我们看到了大量的个人站长出现,他们使用一些开源 or 免费提供的 PHP 项目,开发出了一个个网站。我们所熟悉的 Discuz、WordPress、Drupal 、PHPBB等一系列 CMS,都是使用 PHP 开发者的。

这些 PHP 应用程序的诞生,使得 PHP 得以长盛不衰。可以说,只要 WordPress、Discuz、Drupal、PHPBB 这一类程序还在持续迭代,PHP 本身就不会消逝。

Web 友好的 PHP

PHP 之所以被众多开源项目选择,得益于其语言设计。

在其官网的标题中,明确指出,“PHP 是一个 Hypertext Preprocessor”。

更是在官网的显著位置,标注了如下的内容。

PHP is a popular general-purpose scripting language that is especially suited to web development.

Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.

来源: php.net 

PHP  从设计之初,便是一门用于 Web 研发的编程语言,在 Web 2.0 时代,Web 网站大爆发的时代,PHP 自然也因此而大红大火。

PHP 作为一个面向模板输出的语言,在过去的二十多年里,造就了大量的 Web 应用。

LAMP 的助攻

PHP 能流行开来,和他的易于部署也不无关系。LAMP(Linux + Apache + MySQL + PHP)的流行,使得 PHP 的部署十分的简单,一个不太懂 Linux 的人,也可以参考一些简单的教程或使用一些现成的脚本,完成项目的部署。

而更进一步催生 PHP 发扬光大的,则是 cPanel、DirectAdmin、Plesk 等一系列虚拟主机管理系统,他们将 PHP 的易用性进一步提升。用户无需管理服务器,就可以直接部署 PHP 程序,让更多的人开始使用 PHP 所编写的程序。

培训班的热潮

PHP 被广泛应用,自然也被培训班看到,随之而来的,是培训班的介入,大量的非计算机专业的人涌入,通过 PHP,开始了他们的编程之旅。

一方面,客观的增加了 PHP 的开发者,使得 PHP 的市场份额进一步扩大。

另一方面,也降低了整体水平,使得 PHP 的开发者有一部分人真的就只是搬砖。

培训班的涌入所带来的后果,就是其他语言开始鄙视 PHP,觉得 PHP 是一门垃圾语言。然鹅,没有垃圾语言,只有垃圾的用语言的人。

为什么不是 PHP

上述的众多原因,让 PHP 成为一个时代的潮流,也成为鄙视链的底层。

但真正意义上让 PHP 失去生命活力的,是单页应用、MEAN Stack 和云原生的到来。

单页应用

单页应用的到来,使得 PHP 这种以服务端渲染为主流的应用开始慢慢从人们的视野中消失。

大家开始习惯了前后端分离,由前端在浏览器层面进行渲染。

PHP 自带的模板系统就失去了其先天的优势。

MEAN Stack

MEAN(MongoDB、Express、Angular、Node.js)这种架构,彻底让人们看到了 Node.js 的可能性。

前后端统一语言的诱惑自然很难让人拒绝,大家开始选择使用 Node.js 来构建服务端。或使用 Node.js 来完成 BFF 层,这让 PHP 进一步失去其价值。

云原生

云原生的出现,让 Golang 彻底成为一门热门语言,大家开始发现 Golang 这门语言的优势。

相比于 PHP,golang 同样容易上手。此外,作为一门编译型语言,与脚本语言的 PHP 有着无法比拟的性能优势。

Golang,成为培训班的新宠。

为什么 2021 年,还在用 PHP?

我可以同时写 JS、Golang、PHP,所以对于我来说,其实语言并不是问题。

但为什么还是选择 PHP 呢?

原因很明确

  1. 我还在用 WordPress:在 WP 没有完全被替代之前,我大概率会保留一定的 PHP 维护技能(毕竟挂了要自己修)
  2. 生态还算活跃,历史的 package 能用:我一直不是很喜欢 Rails 的原因就是他的生态并不算完善(我是指和中文相关的),这意味着我们做同样的事,需要花费更多的精力。同样,这也是我为什么喜欢 Node.js 的原因。
  3. 方便快捷:PHP 生态发展的足够久,拥有大量各种不同类型的脚手架,你可以快速完成一个项目的开发,这个目前在 Node 和 Golang 之中,还是有一定差距的。

总体来说,我还会继续使用 PHP 的原因很简单,它可以帮助我快速落地项目,让我的想法变为现实。

空投的卖出策略

空投的卖出策略

ENS 可以说几乎是我加入币圈的一个催化剂,过去虽然我也研究区块链技术,但很少碰币。几乎只会少量购买一些 ETH ,用作开发相关的用途。

但,这次 ENS 空投让我尝到了甜头,也一定会投入一些精力在其中。

刚好写写我的卖出策略。

其实最简单的来看的话,卖出策略有两种:

  1. 极端看涨:这种是拿到的空投会一直放在手里,直到有一天不再认可对应的项目,则全部售出。
  2. 极端看跌:这种是拿到手的空投会马上放掉,落袋为安。

这两种策略比较极端,虽然可能会有一些人用,但在总体中的比重应该不大。前者是区块链/比特币的信徒,而后者则是极端的炒币分子。

大部分的人的卖出策略应该都是混合的,但根据个人对于风险的关注度不同,则会区分两类策略。

  1. 普通看涨:根据价格,每次出货 25%,剩下 75% 等待达到下一次的价值点。
  2. 普通看跌:根据价格,每次出货 75%,剩下 25% 等待达到下一次价值点。

我在本次 ENS 空投中前期采取了 普通看跌 策略。后期则采用了普通看涨策略。

对于我自己来说,需要通过 ENS 来见证自己的不足,认知自己的问题,从而获得进化。

感觉最近要多看一些和投资相关的书。

ENS 、ETH、Ethereum Name Service 之间的关系

ENS 、ETH、Ethereum Name Service 之间的关系

白捡钱了当中,我提到,我因为之前使用了 ENS 的服务,所以得到了空投的 ENS。不过,可能很多人对于其中的两个 ENS 有点混淆,所以,再单独写一篇文章聊聊其中的逻辑。

ENS 有两个,一个是指 $ENS, 是由 Ethereum Name Service 团队发放的 Token。而另一个,就是 Ethereum Name Service 本身。

$ENS 作为一个 Token,其实承载了 Ethereum Name Service 整个团队的发展情况,你可以理解为,这就是 Ethereum Name Service 团队提供给我们的股票。只要我们认为 Ethereum Name Service 提供的服务是可以持续增长的,就意味着我们认为 $ENS 持续上涨。

这部分的逻辑和我们在传统股票中的投资是一样的,选中好的标的,然后以合适的价格买入(区块链当中有空投,所以这个合适的价格可能是 0),等待起涨到认可的价位,进行出售。

至于说,为什么会认为 Ethereum Name Service 本身服务有价值,可以对比参考传统互联网中的 DNS 服务(Domain Name System),我们目前使用的都是 DNS,而在 Ethereum 世界,ENS 就提供类似的能力。你不需要记你的地址,只要记住你自己的 ENS 域名即可完成转账。从使用体验上来看, ENS 大有可为。

Vite 添加 alias

Vite 添加 alias

如果你希望简化你的 import 引用,可以通过在 Vite 中配置 alias ,来简化你的 import 引用。

只需要定义 reslove.alias 属性即可配置。

import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [vue()],
    resolve: {
        alias: {
            '@': path.resolve(__dirname, './src'),
            '@c': path.resolve(__dirname, './src/components'),
        },
    }
})

参考地址:https://cn.vitejs.dev/config/#resolve-alias

TailwindCSS 如何控制打印效果?

TailwindCSS 如何控制打印效果?

在我们实际开发的时候,我们可能会希望打印展示的效果和浏览器看到的效果不同。这个时候我们如何实现控制?你可以借助于 tailwind 的自定义 screen 类的方式来实现。

配置 tailwind.config.js

在 tailwind 中添加 theme 配置,设定一个拓展的screen 为print。

module.exports = {
  purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
  darkMode: false, // or 'media' or 'class'
  theme: {
    extend:{
      screens:{
         'print': {'raw': 'print'},
      }
    }
  },
  variants: {
    extend: {},
  },
  plugins: [],
}

使用 print:invisible 控制显示

配置了 screen 以后,你就可以在编写样式的时候,使用 print:classname的方式,来控制在打印状态下展示的内容。

Material UI 如何引入自定义主题

Material UI 如何引入自定义主题

在 Next.js 中,如果你希望为 Material UI 引入自定义主题,可以如下实现

1. 设计自定义主题

参考 Theming 主题 – MUI 来定制自己的主题,所有的属性可以在 默认主题 – MUI 找到。修改你需要修改的对应项目即可。剩下的可以使用默认。

2. 修改代码,引入主题

修改你的 pages/_app.js,在其中添加如下代码,来应用你的主题。

import { ThemeProvider, createTheme } from '@material-ui/core/styles';
const themeOptions = createTheme({
  palette: {
    type: 'dark',
    primary: {
      main: '#ff9900',
    }
  },
});
function MyApp({ Component, pageProps }) {
  return (
      <ThemeProvider theme={themeOptions}> <Component {...pageProps} /></ThemeProvider>
  )
}
如何 Debug WordPress 的 Pingback 功能

如何 Debug WordPress 的 Pingback 功能

前两天,朱峰老师在写博客的时候,引用了我的文章,发现我的博客并没有开通 Pingback。提醒我开通以后,发现依然没有效果。

于是进入了 Debug 模式。

Pingback 如何 Debug

PingBack 是基于 XML 构建的协议,因此,如果你需要调试的话,需要自己发送 XML 请求,以通知 WordPress 进行 Pingback 记录。

你需要构建一个 XML 文件,其中的内容如下

<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
 <param>
  <value>
   <!-- source,发起请求的文章,即要引用别人文章的文章 -->
   <string>https://blog.andie.im/blog-is-back/</string>
  </value>
 </param>
 <param>
  <value>
   <!-- target,被引用的文章,即他人的文章 -->
   <string>https://www.ixiqin.com/2021/10/more-and-more-good-a-lightweight-application-server/</string>
  </value>
 </param>
</params>
</methodCall>

将上述的 URL 修改为你自己的以后,就可以在命令行中对 WordPress 发起请求,以实现 PingBack 功能。

curl -X POST -d @pingback.xml https://domain/xmlrpc.php #将 Domain 替换为你自己的博客地址

发送成功后,你会看到这样的一个提示,就说明你的 Pingback 发起成功了,接下来要做的,就是在 WordPress 的评论页面去给 Pingback 进行放行了。

朱峰老师的文章

Reference

https://wordpress.org/support/topic/inbound-pingbacks-not-working/

越来越好的轻量应用服务器

越来越好的轻量应用服务器

这几天规整我手头的 VPS、云主机,意外发现腾讯云推出了 LightHouse DB,激起了我的兴趣,刚好也对比一下其他几家的产品。

You don’t NEED scaling 中,我提到,对于绝大多数的企业来说,根本用不到云计算厂商提供的产品,他们需要的仅仅是一个简单的 VPS即可。

各家云厂商也意识到了这个问题,纷纷推出了低配版的云主机(VPS),亚马逊的叫 Lightsail,阿里云的叫轻量应用服务器,腾讯云的叫轻量应用服务器 LightHouse

名字接近,定价也相差无几,起步定价均在 24 元/月附近,直逼 Digitalocean 的 $5/月的定价,和 Vultr 的 $2.5/月的定价也没贵多少。可以看出,这类产品的对标,便是 Do、Vultr、Linode 之类的 VPS 厂商。

而过去,国内的轻量应用产品都是处在不能用的场景下,因为

  1. 没有独立的数据盘:这导致无法实现系统和数据的分离,在数据安全性方面,有所问题。
  2. 内网与其他云产品不互通:这导致无法使用云数据库类型的产品,数据安全方面得不到保障。

这两点让使用这类产品的时候,都会面临需要自己做更加细致的运维的工作。

不过,我现在发现,各家的产品都在变好了。如,阿里云针对数据盘问题,提供了独立的数据盘的能力(但之前购买的轻量云服务器无法添加数据盘)。

腾讯云则针对内网不互通的问题进行了优化,提供了内网互联和LightHouse DB 的能力,让用户可以自行配置所使用的云资源。

经过这么一优化,我觉得,这两者基本都达到了可用的层次。

阿里云用户可以通过数据盘来规避数据安全的问题,为数据提供更高的保护等级;腾讯云用户则可以通过内网互联,将用户上传的文件,托管到 COS 对象存储中;将用户数据放在 LightHouse DB 中;将缓存放在云 Redis 中。

相比之下,我更倾向于使用腾讯云的 LightHouse(希望能早日支持数据盘),要不是我的博客服务器续费了一年,我现在就打算切换到腾讯云了。

2022.03.11 更新

You don’t NEED scaling

You don’t NEED scaling

云计算成为当下时代的主流,云计算的“弹性伸缩”,把创业者搞的五迷三道。似乎云计算成为了当下的唯一选择,没有使用云计算,你就是 Low B ,你的公司就会在出现问题以后,一夜崩塌。

但,事实真的是如此的么?

世界上做云最早的,是 AWS,亚马逊的 AWS 是云计算行业的先驱和老大哥。国内做云最早和最专业的事,是阿里云,阿里巴巴旗下的阿里云成为国内初创企业的云计算必选项。

但,你有没有想过为什么会是他们?

这是因为作为一个电商企业,云计算是他们所必须的。每逢黑色星期五/双十一/六一八,电商企业就需要采购大量的基础设施,以应对节日的流量洪峰。但除了电商企业以外,很少有企业需要面对那么极致的弹性伸缩。

对于电商企业来说,节日的流量可能是日常的 100 倍、1000 倍。而对于绝大多数的业务,即使出现了流量爆炸,往往也是在 10 倍、20倍的变化。正常情况下,流量的变化也是一个可以预期的事情。

对于这些没有那么强弹性诉求的企业来说,云计算提供的弹性伸缩能力很好,但确实没有什么应用场景。倒是让企业为此付出了不少的代价。

对于绝大多数的企业来说,他们需要的仅仅是一个 VPS,甚至,仅仅需要一个虚拟主机,但云计算的洗脑,让你感觉你”好像需要弹性伸缩能力“,让你感觉,你”好像拥有了和 AWS 同等级别的弹性伸缩能力“。

但是,别忘了,弹性伸缩不仅仅是云计算的事情,还需要你的业务架构能支持、你的运维人员能搞定,你的钱包能 Cover 住。

你真的需要云计算么?你真的需要弹性伸缩么?

从 1Password 到 Bitwarden

从 1Password 到 Bitwarden

近日,1Password 从原生开发变为了 Electron 开发,而我购买 1Password 家庭版也两年有余。虽然成本不高,但考虑到希望节省开支,便在考虑将一部分支出精简。可以自行托管的 Bitwarden 就成为了 1Password 的替代品。

借着国庆假期,将密码管理软件从 1Password 转换到了自建的 Bitwarden 上。

备份 1Password 的数据

既然要迁移,自然要先备份现有的数据,比如 1Password 中的数据。

在迁移方面,Bitwarden 官方提供了教程,你可以直接参考。

Import Data from 1Password | Bitwarden Help & Support

部署 Bitwarden

Bitwarden 官方的开源版本使用的是 C# 编写的,对于资源的消耗较大。而我是希望在 NAS 中运行,因此,就选择了一个对于资源消耗更少的版本 —— VaultWarden(之前的 bitwarden_rs 项目),一个基于 Rust 编写的 Bitwarden 服务端。

部署的过程也不复杂,使用 Docker 将镜像拉到本地,并复制官方的执行命令,稍做修改即可部署。

# /vw-data/ 修改为你自己服务器上的数据存储位置。
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 80:80 vaultwarden/server:latest

不过,我并没有使用 Docker 部署,而是使用 Docker 的替代品 Podman 进行部署(主要是想试试新技术)。

整个的使用过程也很简单

# 拉取镜像
podman pull docker.io/vaultwarden/server
# 启动容器
podman run -d --name vaultwarden -v /vw-data/:/data/:Z -e ROCKET_PORT=8080 -p 8080:8080 vaultwarden/server:latest
# 进入 systemd 目录
cd /etc/systemd/system/
# 生成 service 文件
podman generate systemd --name vaultwarden --files
# 设置自启动,并启动服务
systemctl enable /etc/systemd/system/container-vaultwarden.service
systemctl start container-vaultwarden.service

通过几行代码,就完成了 Bitwarden 的部署。

使用 Nginx 对 Vaultwarden 进行反向代理(非必需)

默认情况下,你配置的 Bitwarden 服务器会运行在 8080 端口下,如果你希望将其使用 Https 保护起来,或使用HTTP的 80/443 端口,一个比较简单易行的方式就是使用 Nginx 来进行反向代理。

Vaultwarden 官方提供了 Nginx 的配置文件可供参考,其他的代理服务器也可以找到类似的说明,具体的配置你可以自行访问前面的连接进行查看。

注册账号,并导入数据

配置完成后,访问你的 Vaultwarden 地址,并注册一个新的账号,就可以在 Bitwarden Web 端的“工具”页面,进行数据导入了。

导入界面

需要注意的是,如果你选择的是文件上传导入,则会使用 WebSocket 进行导入。这里如果你没有配置 WebSocket ,就无法通过文件进行导入,需要使用文本编辑器打开备份文件,复制到下方的输入框中进行恢复。

安装各个平台客户端

在完成了各项配置后,最后就是安装各平台的客户端,并配置服务器、账号密码等,登陆客户端,并同步账号密码了。

配置说明

总结

其实 Bitwarden 的部署不算复杂,不过,Bitwarden 的使用体验目前还是不够好的,在一些网页上,1Password 可以完成自动填充,但 Bitwarden 就需要自行复制粘贴,在用户体验方面还有待提升。

使用 Space Sniffer 分析 Windows磁盘占用

使用 Space Sniffer 分析 Windows磁盘占用

cleanMyMac 提供的空间透镜功能

在 macOS 中,我可以使用 cleanMyMac 中提供的“空间透镜“功能, 对我的电脑中的磁盘进行分析。如果你使用的是 Windows ,希望实现类似的效果,则可以考虑使用 Space Sniffer 进行分析

Space Sniffer 分析界面

和 cleanMyMac 的空间透镜一样, Space Sniffer 功能也是对磁盘中文件进行分析,因此,只需要下载软件并启动软件,选择需要分析的磁盘,就会自动生成如上图一般的占比图。

接下来要做的,就是根据占比,对大文件进行清理啦。

主页:http://www.uderzo.it/main_products/space_sniffer/index.html

下载地址:https://www.fosshub.com/SpaceSniffer.html