MB vs Mbit/s

希望这一篇文章之后,不要再问这么白痴的问题啦。

MB 和 Mbit/s 是计算机和网络领域中常用的两个单位,但它们代表的含义和衡量的对象完全不同。理解它们的区别非常重要。


MB (兆字节)

  • 含义: MB 代表 Megabyte (兆字节),是计算机存储容量的单位。它衡量的是文件大小、存储设备(如硬盘、U盘、内存)的容量,以及数据量的多少。
  • 构成:
    • 1 Byte (字节) = 8 bits (位)
    • 1 MB = 1024 KB (千字节) = 1024 * 1024 Bytes (字节) = 1,048,576 Bytes (在计算机领域,通常采用 210 的进制)
    • 在硬盘制造商等商业宣传中,有时会采用 1 MB = 1000 KB = 1,000,000 Bytes 的十进制标准。
  • 用途: 用于表示文件大小(例如,一张照片 2MB,一个文档 5MB)、硬盘容量(例如,256GB 硬盘,其中 1GB = 1024MB)、内存大小等。

Mbit/s (兆比特每秒)

  • 含义: Mbit/s 代表 Megabit per second (兆比特每秒),也常写作 Mbps。它是衡量数据传输速度的单位,表示每秒传输的比特(位)数量。
  • 构成:
    • 1 Mbit/s = 1,000,000 bits/second (位每秒)
  • 用途: 主要用于衡量网络带宽、下载和上传速度。例如,你的宽带网速是 100 Mbit/s,这意味着你的网络每秒可以传输 100 兆比特的数据。

主要区别总结

特征MB (兆字节)Mbit/s (兆比特每秒)
单位Megabyte (兆字节)Megabit per second (兆比特每秒)
衡量数据量、存储容量、文件大小数据传输速度、网络带宽
大小关系1 Byte = 8 bits1 Mbit/s = 1,000,000 bits/s
缩写大写 ‘B’ 表示 Byte (字节)小写 ‘b’ 表示 bit (位)
换算无直接换算,是不同维度的单位1 MB/s = 8 Mbit/s (或 1 Mbit/s = 0.125 MB/s)
常见场景文件下载进度(例如,下载速度 10MB/s)网络速度测试结果(例如,网速 100Mbps)

一个重要的换算关系

由于 1 Byte = 8 bits,所以在进行数据传输速度的估算时,有一个非常重要的换算关系:

1 MB/s (兆字节每秒) = 8 Mbit/s (兆比特每秒)

这意味着,如果你有一个 100 Mbit/s 的网络连接,你的理论最大下载速度是:

100 Mbit/s÷8=12.5 MB/s

所以,当你看到网络服务提供商宣传 100Mbps 的网速时,实际上的下载速度理论上最高只能达到 12.5MB/s 左右(实际速度还会受到网络损耗、服务器性能等因素影响)。

简而言之,MB 是衡量“量”的单位,而 Mbit/s 是衡量“速度”的单位。

修改Linux默認的DNS

文件/etc/resolv.conf 中更改dns會被覆蓋,想要更改這一部分的dns,需要處理systemd-resolve處理,因為Linux的dns服務會自動更新覆蓋。

總結:


检查状态: resolvectl status

编辑配置: sudo nano /etc/systemd/resolved.conf

设置DNS: 在 [Resolve] 下添加或修改 DNS= 和 FallbackDNS=。

重启服务: sudo systemctl restart systemd-resolved

验证生效: 再次使用 resolvectl status 确认。

Linux同步時間

在 Linux 系统中,同步时间是一个非常重要的任务,它确保了日志记录的准确性、程序的正常运行(尤其是分布式系统和依赖时间戳的服务),以及文件系统的一致性。Linux 同步时间通常通过 NTP (Network Time Protocol) 来实现,这是用于在网络上同步计算机时钟的协议。


Linux 同步时间的几种方法

根据你的 Linux 发行版和具体需求,有几种常用的方法来同步时间:

1. 使用 systemd-timesyncd (现代 Linux 发行版默认推荐)

檢查狀態:

timedatectl

輸出結果:

              Local time: Wed 2025-06-18 06:10:31 UTC
           Universal time: Wed 2025-06-18 06:10:31 UTC
                 RTC time: Wed 2025-06-18 06:10:31
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
  • 检查状态: System clock synchronized: yesNTP service: active
  • 如果 NTP serviceinactive,你需要启用它。啟動命令: timedatectl set-ntp true ; 關閉命令: timedatectl set-ntp false
  • 配置 NTP 服务器 (可选):systemd-timesyncd 默认会使用 pool.ntp.org 或发行版预设的 NTP 服务器。如果你想指定自己的服务器,可以编辑 /etc/systemd/timesyncd.conf 文件: sudo vim /etc/systemd/timesyncd.conf 找到并取消注释或添加 NTP= 行,然后列出你的 NTP 服务器(用空格分隔):
    [Time] NTP=ntp.aliyun.com ntp.tencent.com
    或者:
    [Time] NTP=time.google.com time.android.com
  • 保存文件后,重启服务: sudo systemctl restart systemd-timesyncd

2. 使用 chrony (推荐,对于服务器和虚拟机更精确)

chrony 是一个更现代、更精确的 NTP 实现,相比传统的 ntpd,它在时钟漂移、间歇性网络连接以及虚拟机环境下的性能更好。许多发行版(如 Red Hat Enterprise Linux / CentOS 8+,以及较新版本的 Ubuntu)已将其作为默认或推荐的 NTP 客户端。

  • 安装 chrony
    • Debian/Ubuntu/OpenWrt: sudo apt update sudo apt install chrony
  • 配置 chrony
    sudo vim /etc/chrony.conf 查找 poolserver 行,
  • 例如: pool 2.pool.ntp.org iburst
    # 或者指定具体服务器
    # server ntp.aliyun.com iburst
    # server time.nist.gov iburst iburst
    选项会在启动时发送一系列快速查询,以加快初始同步。
  • 启动和启用 chrony 服务:
    sudo systemctl start chronyd
    sudo systemctl enable chronyd
    注意:在某些系统上,服务名称可能是 chrony 而不是 chronyd
  • 检查 chrony 状态:
    chronyc tracking chronyc sources -v tracking 命令显示当前的同步状态,
    sources -v 显示连接的 NTP 服务器及其同步详情。
  • 强制立即同步 (如果时钟偏差过大):
    如果你的系统时钟偏差非常大(例如几分钟甚至几小时),chrony 默认会“步进”时钟(立即跳到正确时间)。
    如果偏差不大,它会慢慢调整时钟(“倾斜”)。你可以强制立即步进: sudo chronyc makestep

3. 使用 ntpd (传统 NTP 守护进程)

ntpd 是最传统的 NTP 守护进程,功能非常全面,可以作为客户端也可以作为服务器。在一些较旧的系统或需要搭建 NTP 服务器的场景下仍会用到。

  • 安装 ntpd
    • Debian/Ubuntu/OpenWrt: sudo apt update sudo apt install ntp
  • 配置 ntpd:
    sudo vim /etc/ntp.conf 查找 poolserver 行,并根据需要添加或修改 NTP 服务器。
    # 默认通常有 pool.ntp.org 的配置
    pool 0.pool.ntp.org iburst
    pool 1.pool.ntp.org iburst
    pool 2.pool.ntp.org iburst
    pool 3.pool.ntp.org iburst
    # 你也可以添加具体的服务器
    # server time.nist.gov iburst
    # server time.google.com iburst
    # server time.android.com ibrust
  • 启动和启用 ntpd 服务:
    sudo systemctl start ntp
    sudo systemctl enable ntp
  • 检查 ntpd 状态:
    ntpq -p 此命令会显示 NTP 对等体的状态。
    * 星号表示当前正在同步的服务器。可能需要等待几分钟才能看到星号。

4. 手动同步一次 (不推荐用于长期同步)

ntpdate 命令曾被用于一次性地同步时间,但现在已被弃用,因为它不会考虑时钟漂移,并且可能导致时间跳变过大,对某些应用程序产生负面影响。现代系统建议使用 timedatectlchronyc -q 代替。


重要的时间同步概念

  • 硬件时钟 (RTC/CMOS Clock): 你的计算机主板上的一个独立时钟,即使关机也继续运行。
  • 系统时钟 (System Clock): Linux 内核维护的时钟,这是应用程序使用的主要时钟。
  • UTC (Coordinated Universal Time): 协调世界时,是全球统一的时间标准。
  • 本地时间 (Local Time): 基于时区设置的时间。

最佳实践:

  • 建议始终将硬件时钟设置为 UTC。 Linux 系统会根据时区设置,将 UTC 时间转换为本地时间显示给你。
  • 定期同步: 建议使用 chronysystemd-timesyncd 这类守护进程进行持续同步,它们会平滑地调整时间,避免大的时间跳变。

如何在Openwrt 安裝語言包以及設置語言

簡介: 在Openwrt的路由器操作系統中,經常會出現需要更改語言的時候,比如:對英文不熟練,在查詢 文檔的時候是英文文檔要對著英文操作,或者想驗證一些配置選項;或者想要去設置成別的語言包:簡體中文,台灣繁體字,香港繁體字等。個人比較喜歡用Terminal ,所以,以下基本都是用命令行的方式。

Openwrt  setting of system .

通過ssh登陸 terminal .

先執行更新:

opkg update

列出目标的语言包:(不要搜索opkg list |grep -i luci-i18,会出现很多软件的语言包)

 opkg list  |grep -i luci-i18n-base
luci-i18n-base-ar - 25.165.68821~fe30872 - Translation for luci-base - العربية (Arabic)
luci-i18n-base-bg - 25.165.68821~fe30872 - Translation for luci-base - български (Bulgarian)
luci-i18n-base-bn - 25.165.68821~fe30872 - Translation for luci-base - বাংলা (Bengali)
luci-i18n-base-ca - 25.165.68821~fe30872 - Translation for luci-base - Català (Catalan)
luci-i18n-base-cs - 25.165.68821~fe30872 - Translation for luci-base - Čeština (Czech)
luci-i18n-base-da - 25.165.68821~fe30872 - Translation for luci-base - Dansk (Danish)
luci-i18n-base-de - 25.165.68821~fe30872 - Translation for luci-base - Deutsch (German)
luci-i18n-base-el - 25.165.68821~fe30872 - Translation for luci-base - Ελληνικά (Greek)
luci-i18n-base-es - 25.165.68821~fe30872 - Translation for luci-base - Español (Spanish)
luci-i18n-base-fa - 25.165.68821~fe30872 - Translation for luci-base - Farsi (Persian)
luci-i18n-base-fi - 25.165.68821~fe30872 - Translation for luci-base - Suomi (Finnish)
luci-i18n-base-fil - 25.165.68821~fe30872 - Translation for luci-base - Filipino (Philippinic)
luci-i18n-base-fr - 25.165.68821~fe30872 - Translation for luci-base - Français (French)
luci-i18n-base-he - 25.165.68821~fe30872 - Translation for luci-base - עִבְרִית (Hebrew)
luci-i18n-base-hi - 25.165.68821~fe30872 - Translation for luci-base - हिंदी (Hindi)
luci-i18n-base-hu - 25.165.68821~fe30872 - Translation for luci-base - Magyar (Hungarian)
luci-i18n-base-it - 25.165.68821~fe30872 - Translation for luci-base - Italiano (Italian)
luci-i18n-base-ja - 25.165.68821~fe30872 - Translation for luci-base - 日本語 (Japanese)
luci-i18n-base-ko - 25.165.68821~fe30872 - Translation for luci-base - 한국어 (Korean)
luci-i18n-base-lt - 25.165.68821~fe30872 - Translation for luci-base - Lietuvių (Lithuanian)
luci-i18n-base-mr - 25.165.68821~fe30872 - Translation for luci-base - Marāṭhī (Marathi)
luci-i18n-base-ms - 25.165.68821~fe30872 - Translation for luci-base - Bahasa Melayu (Malay)
luci-i18n-base-nl - 25.165.68821~fe30872 - Translation for luci-base - Nederlands (Dutch)
luci-i18n-base-no - 25.165.68821~fe30872 - Translation for luci-base - Norsk (Norwegian)
luci-i18n-base-pl - 25.165.68821~fe30872 - Translation for luci-base - Polski (Polish)
luci-i18n-base-pt - 25.165.68821~fe30872 - Translation for luci-base - Português (Portuguese)
luci-i18n-base-pt-br - 25.165.68821~fe30872 - Translation for luci-base - Português do Brasil (Brazilian Portuguese)
luci-i18n-base-ro - 25.165.68821~fe30872 - Translation for luci-base - Română (Romanian)
luci-i18n-base-ru - 25.165.68821~fe30872 - Translation for luci-base - Русский (Russian)
luci-i18n-base-sk - 25.165.68821~fe30872 - Translation for luci-base - Slovenčina (Slovak)
luci-i18n-base-sv - 25.165.68821~fe30872 - Translation for luci-base - Svenska (Swedish)
luci-i18n-base-tr - 25.165.68821~fe30872 - Translation for luci-base - Türkçe (Turkish)
luci-i18n-base-uk - 25.165.68821~fe30872 - Translation for luci-base - Українська (Ukrainian)
luci-i18n-base-vi - 25.165.68821~fe30872 - Translation for luci-base - Tiếng Việt (Vietnamese)
luci-i18n-base-yua - 25.165.68821~fe30872 - Translation for luci-base - Yucateco (Yucatec Maya)
luci-i18n-base-zh-cn - 25.165.68821~fe30872 - Translation for luci-base - 简体中文 (Chinese Simplified)
luci-i18n-base-zh-tw - 25.165.68821~fe30872 - Translation for luci-base - 繁體中文 (Chinese Traditional)

安装需要的安装包,以日本语為例。

 opkg install luci-i18n-base-ja
Multiple packages (libgcc1 and libgcc1) providing same name marked HOLD or PREFER. Using latest.
Installing luci-i18n-base-ja (25.165.68821~fe30872) to root...
Downloading https://mirrors.tencent.com/lede/releases/24.10.0/packages/x86_64/luci/luci-i18n-base-ja_25.165.68821~fe30872_all.ipk
Configuring luci-i18n-base-ja.

系統【system】-> 語言與樣式【language and styles】

選中【日本語】後【保存】,然後刷新,就看到語言更改。

英語是openwrt默認的語言,所以你無法安裝英語的語言包,但是你在語言列表中看不到,如何解決?

通過openwrt uci 命令:

uci set luci.main.lang='en'
uci commit luci
/etc/init.d/uhttpd restart

刷新後解決該問題。

go.mod file not found in current directory or any parent directory; see ‘go help modules’

entire error message :

no required module provides package github.com/go-martini/martini: go.mod file not found in current directory or any parent directory; see 'go help modules'

The error message “no required module provides package github.com/go-martini/martini: go.mod file not found in current directory or any parent directory; see ‘go help modules'” indicates that your Go project is not properly set up as a Go module, or that the go.mod file is missing or in the wrong place.

Here’s a breakdown of the problem and how to solve it, especially in the context of using a package like github.com/go-martini/martini:

Understanding Go Modules

Go Modules are the official dependency management system in Go, introduced in Go 1.11 and becoming the default in Go 1.16. They manage the exact versions of all dependencies (packages) your project needs.

A Go module is defined by a go.mod file, which lives at the root of your project’s directory. This file declares the module’s path and lists its dependencies.

Why You’re Seeing This Error

  1. Missing go.mod: Your project directory (or any parent directory) doesn’t contain a go.mod file. Without it, Go doesn’t know it’s a module and where to find its dependencies.
  2. Not in the module root: You might be running go run or go build from a subdirectory within your module, but the go.mod file is in a parent directory. While Go should typically find it, sometimes specific commands or environments might miss it.
  3. Go version < 1.11: If you’re using a very old Go version, modules might not be supported or enabled by default. (Less likely now, as most users are on newer versions).
  4. Incorrect GOPATH setup (less common with modules): In the pre-module era, code had to be inside $GOPATH/src. With modules, your code can live anywhere, but if you’re trying to mix old and new practices, it can cause confusion.

How to Solve It ?

Follow these steps to correctly set up your Go module and resolve the error:

Step 1: Navigate to Your Project Root

Make sure you are in the directory where your Go project’s main code (.go files) resides, or where you intend for the go.mod file to live. This is usually the top-level directory of your application.

For example, if your project structure looks like this:

my-martini-app/
├── main.go
└── (other files)

You should be in the my-martini-app/ directory.

Step 2: Initialize Your Go Module

If you don’t have a go.mod file, you need to initialize your module. In your project root, run:

go mod init your_module_name

Replace your_module_name with the desired import path for your module. This usually follows a pattern like github.com/your_username/your_project_name or example.com/your_project.

Example:

If your project is my-martini-app and you plan to host it on GitHub:

go mod init github.com/your_username/my-martini-app

This command will create a go.mod file in your current directory.

Step 3: Add the Martini Dependency

Now that you have a go.mod file, you can tell Go to add go-martini/martini as a dependency.

Bash

go get github.com/go-martini/martini

This command will:

  • Download the martini package and its dependencies.
  • Add an entry for github.com/go-martini/martini to your go.mod file.
  • Create a go.sum file, which stores cryptographic checksums of your module’s dependencies to ensure integrity.

Step 4: Run Your Application

After completing the above steps, you should be able to run your application:

go run main.go

(Or go build followed by running the executable).


Example Walkthrough:

Let’s say you have a simple main.go file:

// main.go
package main

import (
	"github.com/go-martini/martini"
)

func main() {
	m := martini.Classic()
	m.Get("/", func() string {
		return "Hello world!"
	})
	m.Run()
}
  1. Create a new directory: Bashmkdir my-martini-app cd my-martini-app
  2. Create main.go inside my-martini-app/ and paste the code above.
  3. Initialize the module: Bashgo mod init github.com/your_username/my-martini-app You’ll see: go: creating new go.mod: module github.com/your_username/my-martini-app
  4. Get the dependency: Bashgo get github.com/go-martini/martini You’ll see output like: go: downloading github.com/go-martini/martini v1.0.0 go: added github.com/go-martini/martini v1.0.0 (The version might differ). Now, if you ls, you’ll see go.mod and go.sum files. cat go.mod will show something like: module github.com/your_username/my-martini-app go 1.22 require github.com/go-martini/martini v1.0.0 // indirect (The go 1.22 indicates your Go version. indirect means it’s a transitive dependency, or a direct dependency that doesn’t have a direct import in a file yet, but will be resolved).
  5. Run your app: Bashgo run main.go You should see output indicating Martini is running (e.g., [martini] listening on :3000).

This process ensures your Go project correctly uses Go Modules to manage its dependencies.

永远不要浪费一场危机

引言

危机的“危”与“机”——重新认识我们生命中的挑战

在人生的旅途中,个体时常会遭遇预料之外的风浪,内心在某些时刻可能充满迷茫与不安。面对这些挑战,一种古老而深刻的智慧为人们提供了独特的视角。中文里“危机”一词,由“危”(wēi)与“机”(jī)二字构成,前者意指危险,后者则蕴含机遇 1。这种二元性的解读,提示人们在困境中不仅要看到风险,更要洞察潜在的转机与成长的可能。这种观念并非孤立存在,而是与西方“永远不要浪费一场好危机”(Never waste the opportunity offered by a good crisis)的说法异曲同工,此语或归于马基雅维利,或源于丘吉尔。

这种对危机双重属性的认识具有普遍性。它并非仅仅是一种语言现象,更反映了人类在应对逆境过程中的共同经验与一项基本事实。不同文化背景下的哲思与心理学理论,都以不同方式呼应着这一观点。从意大利文艺复兴时期的思想家马基雅维利,到二战时期领导英国的温斯顿·丘吉尔,再到近代的白宫幕僚长拉姆·伊曼纽尔,他们都曾表达过类似“不应浪费危机所提供的机会”的理念 2。伊曼纽尔曾明确指出,危机的价值在于它提供了一个“去做那些你以前认为做不到的事情的机会” 2。历史经验亦表明,危机往往是推动必要变革的催化剂。例如,罗斯福总统利用经济大萧条推行“新政”,丘吉尔则在二战的废墟上推动联合国的建立 2。这些宏观层面的变革逻辑,同样适用于个体生活。个人危机可能迫使个体审视固有的生活模式,重新评估人生选择,或是在压力之下发掘出未曾意识到的内在力量——这些都是在安逸时期可能被忽略或回避的改变。

承认危机固有的艰难与痛苦至关重要。探讨危机的建设性意义,并非轻描淡写其带来的创伤,而是在最幽暗的时刻,尝试寻觅一丝光亮,一条通往成长的路径。关键在于,个体如何在风暴中辨明方向,将挑战转化为契机,甚至实现生命的深刻蜕变。

一、风雨洗礼后的成长:

危机如何塑造更强大的我们?

逆境孕育积极发展的观念,虽看似有悖常理,却蕴含深刻哲理。海伦·凯勒曾言:“性格不能在安逸宁静中铸就。唯有通过磨炼与苦难的经历,灵魂才能得以强化,雄心得以激发,成功得以实现。2。这句话为理解危机如何促进个人成长奠定了基调。

心理学领域对此现象亦有深入研究,其中“创伤后成长”(Post-Traumatic Growth, PTG)理论为人们提供了重要启示。PTG并非简单地指从创伤中恢复(即韧性),而是指个体在经历极具挑战性的生活事件并与之抗争后,所体验到的积极心理变化 3。经历创伤后,个体可能会对自己、对世界、对人际关系、对未来以及对生活方式产生新的理解 3。PTG的发生,往往是个体在原有信念体系受到冲击后,经历一番心理挣扎,最终寻获个人成长的过程 3

值得注意的是,创伤后成长并非创伤的必然或被动结果,而是一个主动的意义建构和世界观重塑的过程。它需要投入大量的时间、精力,并经历一番挣扎 3。当生活事件挑战了个体核心信念时,便促使其对这些信念进行重新评估或构建 4。有时,这意味着旧有身份的消解和更具适应性的新身份的形成 4。因此,个体的积极参与和努力在这一转化过程中扮演着关键角色,而非仅仅等待时间治愈一切。

心理学家理查德·特德斯奇(Richard Tedeschi)与劳伦斯·卡尔霍恩(Lawrence Calhoun)提出的创伤后成长模型,归纳出个体在经历创伤后可能在五个主要方面实现积极转变 3

  1. 更懂得欣赏生命 (Appreciation of Life): 个体可能对生活产生全新的、更深刻的感悟,更加珍视日常生活中的点滴美好。
  2. 人际关系更紧密 (Relationships with Others): 与家人、朋友的关系可能变得更为亲近,更能体会到人与人之间的温情与支持。
  3. 发现新的可能性 (New Possibilities in Life): 危机有时会意外地开启新的大门,使个体看到人生中未曾设想过的方向与选择。
  4. 发掘内在力量 (Personal Strength): 个体可能意识到自己比原先想象的更为强大和坚韧,产生“原来我也可以如此勇敢”的认知。
  5. 精神层面的提升 (Spiritual Change): 对人生意义、个人信仰或价值观产生更为深刻的思考与体悟。

这些成长领域共同指向一种对生命本质更深层次的理解。危机犹如一个过滤器,往往会剥离生活中的表层顾虑,迫使个体直面关于生命、价值和关系等根本性问题。当日常生活的轨道和选择受到限制时,人们不得不去寻找或重新审视其他意义和存在的来源 2。这种被迫的聚焦,使得核心价值凸显,进而成为成长和开辟新道路的基石。从这个角度看,危机提供了一个深刻自我发现的机会。

研究还表明,某些人格特质,如对经验的开放性(更倾向于反思自身信念体系)和外向性(更倾向于积极应对创伤并寻求社交联结),可能使个体更容易经历创伤后成长 3。这提示人们,培养开放的心态和积极寻求支持,可能有助于在逆境中实现积极的转变。

二、 他们的故事,我们的光

从逆境中汲取力量的真实瞬间

理论的阐述固然重要,但无数真实的人物经历更能生动地展现从危机中汲取力量的可能性。每一个在逆境中闪耀的人性光辉,都能为后来者照亮前行的道路。分享和聆听这些克服逆境的故事,不仅仅是获取鼓舞,更是一个帮助个体将自身危机叙事从“受害者”模式重塑为“幸存者”乃至“成长者”模式的过程。这种叙事的转变本身就是创伤后成长的一部分,它帮助人们理解经历、赋予意义,并从中找到力量。

J.K.罗琳:从人生谷底到魔法世界的缔造者

J.K.罗琳在创作《哈利·波特》系列之前,曾经历过一段极度艰难的时期。她不仅面临失业和贫困,独自抚养女儿,还曾与抑郁症抗争 6。在将手稿投递给出版商时,她屡遭拒绝,收到了多达12封的退稿信 7。然而,正是这段“触底”的经历,成为了她创作的坚实基础。正如她所言:“人生谷底成为了我重建生活的坚固基石。” 6。她的故事彰显了在绝望中,创造力与坚持不懈的精神如何能够开辟出一条全新的道路。深重的个人痛苦,最终转化为给全球亿万读者带来欢乐的源泉。这启示人们,即便是最黑暗的“人生谷底”,也可能转化为未来成功的起点。

哈兰·山德士上校:65岁开启的炸鸡传奇

肯德基(KFC)的创始人哈兰·山德士上校的一生充满了挫折。他从事过多种职业,经历了多次个人与事业的失败。他用心经营的餐厅曾因公路改建而被迫关闭,一度濒临破产 9。然而,命运的转折点在他65岁时意外降临。山德士上校决定将自己秘制的炸鸡配方(包含11种草药和香料)授权给其他餐厅。他亲自拜访各家餐馆,演示烹饪方法,其独特的风味迅速受到欢迎,最终发展成为全球性的快餐连锁帝国 9。山德士上校的故事证明了年龄并非追求梦想和抓住机遇的障碍,而每一次失败都可以是通往成功的垫脚石。他曾说:“人们必须记住,每一次失败都可能成为通往更好事物的踏脚石。” 9。

普通人的不凡转型

除了这些广为人知的故事,许多普通人也在危机中展现了非凡的适应力和创造力。例如,在特殊时期,不少人利用居家时间学习新课程、掌握新技能,如摄影、在线健身等,拓展了原有的生活边界 2。一位曾经的软件工程师,在职业生涯遭遇迷茫后,勇敢转行探索其他领域,通过学习“人生设计”的方法,不仅帮助自己走出了困境,开启了自我探索之路,还开始帮助他人梳理现状,规划人生 10。这些例子都表明,将危机转化为机遇的原则,普遍适用于每个人的生活。

这些故事的主人公,都曾是社会中的普通一员。他们的经历传递出一个共同的讯息:危机本身并不可怕,真正阻碍人们前进的,往往是失去拥抱改变、发掘自身潜能的勇气和意愿。

三、 危机中的自我“修炼”手册

把挑战变为成长的阶梯

当危机降临时,个体感受到无助、焦虑甚至绝望,都是人之常情。然而,正如鲍勃·马利所言:“直到坚强成为你唯一的选择,你才会知道自己有多坚强。” 6。这意味着,个体内在的力量往往远超自身的想象。以下是一些在危机中进行自我调适与提升的方法,它们并非孤立的策略,而是相互关联、协同作用的整体:

  1. 建立连接,寻求支持 (Build Connections, Seek Support):在困境中,与亲人、朋友建立并维持牢固健康的亲密关系至关重要。这些关系能在顺境和逆境中都提供必要的情感支持与实际帮助 11。通过志愿服务或参与社群团体,也能拓展支持网络。良好的人际支持不仅能缓解孤独感,还能增强应对困难的勇气和希望。
  2. 赋予日常意义,设定小目标 (Make Each Day Meaningful, Set Small Goals):即使在艰难时期,也应努力让每一天都具有意义。可以尝试每天做一些能带来成就感和目标感的事情,无论多么微小。同时,制定清晰且可实现的小目标,有助于个体对未来保持积极展望 11。这些小小的成就能累积自信,为走出困境提供动力。
  3. 从过往经验中学习 (Learn from Past Experiences):回顾并反思过去是如何应对困难的,思考哪些方法和资源曾帮助自己度过难关 11。奥普拉·温弗瑞曾说:“把你的伤痛转化为智慧。” 6。将过去的经历记录下来,有助于识别行为模式,并为未来的应对策略提供借鉴。这种学习能力是韧性的重要组成部分。
  4. 保持希望,拥抱变化 (Maintain Hope, Embrace Change):虽然无法改变过去,但可以积极展望未来。对变化持开放态度,能使个体更容易适应新环境,并在面对新挑战时减少焦虑 11。希望是暗夜中的星光,指引方向;而拥抱变化,则可能发现意想不到的新机遇。
  5. 好好照顾自己 (Take Good Care of Yourself):关注自身的需求和感受,积极从事自己喜欢的活动和爱好。将体育锻炼纳入日常生活,保证充足的睡眠,养成健康的饮食习惯,并练习压力管理和放松技巧,如瑜伽、冥想或深呼吸等 11。爱护自己,是积蓄应对一切挑战能量的基础。
  6. 主动出击,解决问题 (Take Action, Address Problems):面对问题时不应选择逃避。首先要明确需要做什么,然后制定计划,并付诸行动 11。从重大的挫折、创伤或损失中恢复需要时间,但只要坚持努力,情况就会逐步改善。

这些策略的实践,也与一种积极的自我引导能力紧密相关。通过向内提问,例如“我如何才能加速我的进展?”而非“那个人为何比我进展更快?”,个体能将注意力聚焦于自身可控的因素上 12。这种以“我”为主体的思考方式,强调了个体在困境中的主动性和责任感。同时,学会在内心“安抚批评的声音”,用支持性的、如同挚友般的口吻与自己对话,有助于在危机放大了自我怀疑时,重建自信和勇气 12。这些内在的调适技巧,赋予个体在危机中积极塑造自身反应和认知的能力,从而真正地“不浪费”危机所带来的自我发现与强化的机会。

每一次的自我修炼,都是在为塑造一个更强大的自己积蓄能量。个体手中始终握有改变现状、描绘未来的画笔。

四、 结语:

不浪费每一次心跳,不辜负每一场危机

生命是一场充满未知的旅程,既有风和日丽的坦途,也难免会遭遇狂风骤雨的挑战。然而,若能透过“危机”中“危”与“机”并存的视角来审视,每一次困境都可能孕育着深刻学习与生命转化的潜能。

个体如何回应逆境,而非逆境本身,往往决定了其人生故事的走向 6。这强调了个人选择与能动性的重要性。面对危机,是选择沉沦不振,还是选择积极探索其中蕴含的成长契机,其结果将截然不同。

因此,不应浪费每一次心跳带来的感悟,更不应辜负每一场危机赋予的成长。这意味着不仅要努力挺过难关,更要主动从中汲取教训,发掘新的可能性,锤炼内在的力量。

愿每个人都能在风雨的洗礼中炼就从容的心态,在危机的磨砺中点亮希望的灯火,最终活出更加丰盛、更加强大的自己。因为,那些未能将个体击垮的挑战,终将使其变得更加强大。

WordPress wp-cli 安装

wp-cli 是wordpress的命令行接口,你可以通过该命令实现更新组件、配置多网站安装和更多功能,而不需要一个web浏览器,比较适合开发者或者喜欢命令行的用户使用。

Mac 平台

brew install wp-cli

Linux 平台

通過下載phar 文件是官方比較推薦的安裝方式。在安裝wp-cli之前,請確認一下本地的安裝環境:

  1. Unix-like enviroment (OS X, Linux ,FreeBSD, Crygwin );
  2. PHP5.6 or later
  3. WordPress 3.7 or later .

滿足了以上的安裝環境,下載phar文檔:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

本地會有一個wp-cli.phar文檔,檢查文檔信息:

php wp-cli.phar --info

輸出結果:

为了保证整个wp-cli在全局中使用或者别名为wp命令,先要赋予wp-cli.pharx的权限:

chmod +x wp-cli.phar

通过mv命令执行重命名:

sudo mv wp-cli.phar /usr/local/bin/wp

執行wp --info命令,會得到當前wp安裝環境的更詳細的信息:

OS:	Linux 4.18.0-25-generic #26-Ubuntu SMP Mon Jun 24 09:32:08 UTC 2019 x86_64
Shell:	/bin/bash
PHP binary:	/usr/bin/php7.2
PHP version:	7.2.24-0ubuntu0.18.04.17
php.ini used:	/etc/php/7.2/cli/php.ini
MySQL binary:	/usr/bin/mysql
MySQL version:	mysql  Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using  EditLine wrapper
SQL modes:
WP-CLI root dir:	phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:	phar://wp-cli.phar/vendor
WP_CLI phar path:	/home/chengyue.wang
WP-CLI packages dir:
WP-CLI cache dir:	/home/wong/.wp-cli/cache
WP-CLI global config:
WP-CLI project config:
WP-CLI version:	2.11.0

OK,wp的安装就完成了。

Related link

  1. https://developer.wordpress.org
  2. https://developer.wordpress.org/plugins/
  3. https://github.com/WordPress/WordPress

如果你需要wordpress的主题或者插件开发,请联系我。

手动升级 OpenWrt 的PassWall軟件

背景

最近使用的舊版軟件PassWall(以下簡稱:PW)一直在出現自動關掉的問題,看軟件版本有點太低了,於是就考慮嘗試升級相關的軟件,使用Openwrt的內部升級系統,發現提示升級不了,只能手動更新,為了方便使用開發環境需要的美國網絡,在不更換Openwrt系統的情況下,升級該軟件。

介紹

PW的軟件在github上有專門的倉庫進行維護,所以只需要自己的Openwrt版本下載響應的軟件版本即可。

PW 最新版本的支持的內容比較豐富,如果不是PW軟件出現異常,最好不要動,只需要更新部分組件即可。

操作步驟:

注意⚠️:在進行升級的時候,做好配置的備份或者快照備份,防止出現異常導致無法回滾正常狀態。


  1. 登陸Openwrt查看軟路由的CPU架構,在OpenWrt的TTYD終端或者電腦客戶端SSH登陸到路由器通過執行:
uname -m

返回的結果如下:

x86_64

其中關鍵字x86_64 就是該軟路由的CPU架構。

2. 在Github的PW倉庫中的releases界面查找符合CPU架構的軟件版本:

PW的軟件發佈頁面: https://github.com/xiaorouji/openwrt-passwall/releases

找到x86_64的關鍵字的軟件包,如下圖:

使用wget或者直接瀏覽器中下載zip壓縮包。

wget https://github.com/xiaorouji/openwrt-passwall/releases/download/25.4.20-1/passwall_packages_ipk_x86_64.zip

解壓該安裝包:

 unzip passwall_packages_ipk_x86_64.zip

輸出結果:

Archive:  passwall_packages_ipk_x86_64.zip
  inflating: chinadns-ng_2025.03.27-r1_x86_64.ipk
 extracting: dns2socks_2.1-r2_x86_64.ipk
  inflating: geoview_0.1.6-r1_x86_64.ipk
  inflating: hysteria_2.6.1-r1_x86_64.ipk
 extracting: ipt2socks_1.1.4-r3_x86_64.ipk
 extracting: microsocks_1.0.5-r1_x86_64.ipk
  inflating: naiveproxy_135.0.7049.38-r1_x86_64.ipk
  inflating: shadowsocks-rust-sslocal_1.23.0-r1_x86_64.ipk
  inflating: shadowsocks-rust-ssserver_1.23.0-r1_x86_64.ipk
  inflating: shadowsocksr-libev-ssr-local_2.5.6-r11_x86_64.ipk
  inflating: shadowsocksr-libev-ssr-redir_2.5.6-r11_x86_64.ipk
  inflating: shadowsocksr-libev-ssr-server_2.5.6-r11_x86_64.ipk
 extracting: simple-obfs_0.0.5-r1_x86_64.ipk
  inflating: sing-box_1.11.8-r1_x86_64.ipk
 extracting: tcping_0.3-r1_x86_64.ipk
  inflating: trojan-plus_10.0.3-r2_x86_64.ipk
  inflating: tuic-client_1.0.0-r1_x86_64.ipk
  inflating: v2ray-geoip_202504050136.1_all.ipk
  inflating: v2ray-geosite_20250407044718.1_all.ipk
  inflating: v2ray-plugin_5.25.0-r1_x86_64.ipk
  inflating: xray-core_25.3.31-r1_x86_64.ipk
  inflating: xray-plugin_1.8.24-r1_x86_64.ipk

會出現很多的*.ipk文件,安裝這些文件,執行:

opkg install *.ipk

PW的组件升級就完成了。如果其中遇到什麼問題,可以在評論區留言的喔。

如果想要升级PW的本身軟件而非組件,則下載PW的的ipk.

在上圖的releases界面中,選擇PW的ipk下載,(選擇適合你的Openwrt版本),我的OpenWrt版本是24.10,通過 cat /etc/openwrt_release 命令查看Openwrt的版本:

cat /etc/openwrt_release

輸出的結果:

DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='24.10.0'
DISTRIB_TARGET='x86/64'
DISTRIB_ARCH='x86_64'
DISTRIB_TAINTS='no-all'
DISTRIB_REVISION='R25.2.5'
DISTRIB_DESCRIPTION='bleachwrt plus 20250213 @ '

其中,DISTRIB_RELEASE 常量就是當前Openwrt的版本。

所以我選擇了帶有“luci-24.10“關鍵字的進行下載:

wget https://github.com/xiaorouji/openwrt-passwall/releases/download/25.4.20-1/luci-24.10_luci-app-passwall_25.4.20-r1_all.ipk

然後執行:

opkg install luci-24.10_luci-app-passwall_25.4.20-r1_all.ipk

PW的主程序就更新完成啦。

总结:

本文通过手动下载 PW 相关组件包,通过命令的方式升级,实现无需重装 OpenWrt 升级插件版本,举一反三,如果要升级其他组件,只要知道相关依赖的组件包也同样可以使用手动下载安装上传达到升级的目的。