2023-03-17

心田上的百合花开


via 观止

作者:林清玄

在一个偏僻遥远的山谷里,有一个高达数千尺的断崖。不知道什么时候,断崖边上长出了一株小小的百合。

百合刚刚诞生的时候,长得和杂草一模一样。但是,它心里知道自己不是一株野草。

它的内心深处,有一个内在的纯洁的念头:"我是一株百合,不是一株野草。惟一能证明我是百合的方法,就是开出美丽的花朵。"

有了这个念头,百合努力地吸收水分和阳光,深深地扎根,直直地挺着胸膛。

终于在一个春天的清晨,百合的顶部结出了第一个花苞。

百合的心里很高兴,附近的杂草却很不屑,它们在私底下嘲笑着百合:"这家伙明明是一株草,偏偏说自己是一株花,还真以为自己是一株花,我看它顶上结的不是花苞,而是头脑长瘤了。"

公开场合,它们则讥讽百合:"你不要做梦了,即使你真的会开花,在这荒郊野外,你的价值还不是跟我们一样。"

偶尔也有飞过的蜂蝶鸟雀,它们也会劝百合不用那么努力开花:"在这断崖边上,纵然开出世界上最美的花,也不会有人来欣赏呀!"

百合说:"我要开花,是因为我知道自己有美丽的花;我要开花,是为了完成作为一株花的庄严使命;我要开花,是由于自己喜欢以花来证明自己的存在。不管有没有人欣赏,不管你们怎么看我,我都要开花!"

在野草和蜂蝶的鄙夷下,野百合努力地释放内心的能量。有一天,它终于开花了,它那灵性的白和秀挺的风姿,成为断崖上最美丽的颜色。

这时候,野草与蜂蝶再也不敢嘲笑它了。

百合花一朵一朵地盛开着,花朵上每天都有晶莹的水珠,野草们以为那是昨夜的露水,只有百合自己知道,那是极深沉的欢喜所结的泪滴。

年年春天,野百合努力地开花,结籽。它的种子随着风,落在山谷、草原和悬崖边上,到处都开满洁白的野百合。

几十年后,远在百里外的人,从城市,从乡村,千里迢迢赶来欣赏百合开花。许多孩童跪下来,闻嗅百合花的芬芳;许多情侣互相拥抱,许下了"百年好合"的誓言;无数的人看到这从未见过的美,感动得落泪,触动内心那纯净温柔的一角。

那里,被人称为"百合谷地"

不管别人怎么欣赏,满山的百合花都谨记着第一株百合的教导:"我们要全心全意默默地开花,以花来证明自己的存在。"


2023-03-16

除了博客,当你有一台云服务器时还可以自部署哪些免费、开源的项目? - 少数派

我以为我会像大多数人一样,开始拥有一台服务器时就会搭建一个属于自己的博客站点。但当我自己尝试部署了一次 GitHub 上的开源项目时,我发现除了搭建博客之外,用云服务器来搭建一些自用的服务也是一个不错的选择。

可能这些自部署的(self-hosted)开源服务或项目不一定比付费产品好用,拥有的特性也没那么丰富,但这些年得益于像 Docker 这样的容器化技术普及,短短几行代码就能快速完成项目或服务部署、进而开始使用也早已不是什么高成本的事。自部署让我们享有绝对的数据掌控权的同时还能节省不少订阅费用,让闲置的云服务器得以充分利用。

本文所介绍的可自部署项目或服务主要使用 Dockerdocker-compose 来完成快速部署,所以如果你打算尝试,除了拥有购买一台云服务器外,可能还需要额外学习一下 Docker 的基本用法。

另外现在有的 NAS 设备也支持 Docker,因此如果没有服务器但有 NAS 设备,也可以尝试部署在你的 NAS 上——前提是你有一个独立的公网 IP 或知道如何通过内网穿透来实现远程访问。

消息推送服务

除了系统自带的消息通知渠道之外,我们也可以自己拥有一个消息推送服务。基于自部署的消息推送服务,我们可以配合其他自动化工具来监控通知或是短信,实现消息转发等功能。

可选服务包括:

  • Gotify(Web / Android)
  • Bark(iOS)
  • ntfy(Web / Android / iOS)

上述不同的消息推送服务其后端均使用 Go 语言进行编写,因此在部署上并没有太多难度,按部就班地照着官方文档给出的操作步骤部署在你的服务器之后就可以开始使用;并且它们均提供了相应的 API,在部署之后可自行根据需要使用 API 来将消息推送至相应的设备。

因为我个人使用的是 Gotify,所以这里我就以 Gotify 为例直接运行 Docker 命令即可完成部署:

docker run -d \    -e TZ="Asia/Shanghai" \    -e GOTIFY_SERVER_PORT=8004 \    -p 8004:8004 \    -v /var/gotify/data:/app/data \    gotify/server

Gotify 本身提供了 Web 界面,部署完成后我们需要到 Web 界面中创建推送消息或通知的 App,获取到 App 所对应的 Token,最后在移动端上进行连接配置即可。

在 Web 界面上我们仅能接收并看到来自于其他端(比如移动端)推送的消息。

如果我们需要向移动端推送消息通知,那么我们就需要通过 API 来完成消息推送,就像官方所给出的示例一样:

curl "https://gotify.myserver.com/message?token=<apptoken>" \       -F "title=来自服务器的一则消息" \       -F "message=Hello,Mobile!" \       -F "priority=10"

之后就能在移动端上收到来自于服务器的通知:

因此使用 Gotify 这类消息推送服务最好的方式就是与自动化操作相结合,从而达到消息通知的目的。

在线阅读服务

相信会有不少人跟我一样喜欢在大屏幕设备上进行阅读或浏览内容,既然我们拥有了云服务器,那也说明我们拥有了可对外公开且被访问的公网 IP。因此我们在服务器上也可以搭建起自己专属的在线电子图书馆,在不同设备上只需要借助浏览器就能进行随时随地开始阅读。

Calibre-Web

Calibre-Web 是基于知名的电子书籍管理软件 Calibre 元数据进行实现的 Web 版本,相较于 Calibre 桌面端而言界面变动较大,但基本上支持主流的电子书格式,也提供了对应的阅读器直接在线阅读。

图源 Calibre-Web 项目仓库

需要注意的是,Calibre-Web 官方并未提供对应的 Docker 部署文件,所以我们需要基于 LinuxServer.io 这一组织所提供的 Docker 文件来进行配置和部署:

docker run -d \    --name=calibre-web \    -e PUID=1000 \    -e PGID=1000 \    -e TZ=Asia/Shanghai \    -p 8083:8083 \    -v /path/to/data:/config \    -v /path/to/calibre/library:/books \    --restart unless-stopped \    lscr.io/linuxserver/calibre-web:latest

因为 Calibre-Web 是基于 Python 编写,所以在使用的过程中会出现内存资源占用较大的情况(目测下来有 500 MB 左右的内存占用)。如果你服务器资源配置吃紧请谨慎选择,又或者是在使用过程中到管理面板中手动重启(你没听错,就是这么朴实无华)。

Kavita

Kavita 和 Calibre-Web 类似,是一款功能丰富且运行迅速、支持跨平台的阅读服务器。

图源 Kavita 官方

部署 Kavita 同样很简单:

docker run -d \    --name kavita \    -p 5000:5000 \    -v /your/manga/directory:/manga \    -v /kavita/data/directory:/kavita/config \    --restart unless-stopped \    kizaing/kavita:latest

Kavita 相比于 Calibre-Web 来说对于漫画系列的电子内容支持度会更好一些,而对于电子书格式的支持目前仅有 EPUB 和 PDF 格式,所以实际上的阅读体验反而是 Calibre-Web 会更好;但服务器资源占用会比 Calibre-Web 更低。

笔记、记录类服务

除了搭建个人博客之外,打算利用服务器来构建个人知识管理系统或存储想法记录等需求的用户可能也不在少数。

自部署可以让数据掌握在自己手中,无须担心平台跑路或是数据安全问题。

Memos

Memos 是一款开源、可自部署的 Flomo 仿制项目,它大致还原了 Flomo 基本功能,并且也提供多用户注册;当然如果你像我一样只是自用,那么完全可以将其用作一个无话不说的「树洞」来使用。

图源 Memos 官方

Memos 默认只支持 Web 端,并提供了中文语言支持、以及亮色和暗色两种主题自动切换等功能,当然也少不了像 Flomo 一样提供了 API 支持,以便接入其他自动化工具实现内容的快速记录。

部署 Memos 的 Docker 命令很简单,这里是官方给出的一个例子:

docker run -d \    --name memos \    -p 5230:5230 \    -v ~/.memos/:/var/opt/memos \    neosmemo/memos:latest

部署成功之后只需要自行注册一个账户就可以开始使用。

如果你想在手机上使用 Memos,那么在搭建好 Memos 之后可以使用 Memos 官方推荐的第三方的 Moe Memos 填写服务器地址和用户认证信息,登录之后即可正常使用。

图源 Moe Memos 官方

思源笔记

正如官方所说的那样,思源笔记是一款「本地优先的个人知识管理系统」,支持完全离线使用和端到端加密同步,同时也提供了数据导出功能。并且思源笔记也拥有新世代笔记软件们所具有的功能,如融合块、大纲和双向链接等。

图源思源笔记官方站点截图

思源笔记完全开源,并且提供了全平台支持,除了云端功能需要付费之外你完全可以免费使用。但既然我们是在服务器上部署,当然就还是选择 Docker 版本。部署的过程十分简单,这里给出操作步骤:

首先,我们需要在服务器上创建一个用于存放数据的文件夹路径,并为其添加对应权限。比如我个人就是放在了 /data/self-hosted/data/siyuan/workspace/ 中,那么就需要通过 Linux 命令建立对应的文件夹,并且为该文件夹添加对应用户权限:

mkdir -p /data/self-hosted/data/siyuan/workspace/  chown -R 1000:1000 /data/self-hosted/data/siyuan/workspace/

之后我们只需要通过容器部署即可,对应的 Docker 命令 和 docker-compose.yml 参考如下:

Docker 命令:

docker run -d -it \      --name siyuan \      -v /self-hosted/data/siyuan/workspace/:/siyuan/workspace \      -u 1000:1000      -p 6806:6806 \      --restart=always \      b3log/siyuan:latest

docker-compose.yml

version: '3'    services:    siyuan:      image: b3log/siyuan:latest      container_name: siyuan      environment:        - TZ=Asia/Shanghai      user: '1000:1000'      restart: always      ports:        - 6806:6806      volumes:        - /data/self-hosted/data/siyuan/workspace/:/siyuan/workspace

部署成功之后我们只需要访问 <服务器IP>:6806 就能进入到 Web 端的思源笔记界面:

需要注意的是,默认情况下我们所在服务器上所部署的思源笔记是不具备数据同步功能的。思源笔记提供了三种选项,一种是订阅思源笔记官方的云端同步付费,另外两种则是自行配置兼容 Amazon S3 协议的云存储服务和 WebDAV。我们可以点击左上角的工作间区域,然后找到「设置 - 云端」中进行配置。

如果你不打算选择思源官方的付费订阅又或是第三方的云存储服务,而是想继续折腾并自己部署的服务来同步数据,那么也有对应的方案可以选择:

  • 使用 Minio 来作为兼容 Amazon S3 协议的云存储服务;
  • 使用 SFTPGo 来提供 WebDav 服务。

Joplin Server

如果你正在寻求一款能替代印象笔记的应用,或许可以试试 Joplin。

图源 Joplin 官方站点

Joplin 是一款开源的笔记应用,它和思源笔记一样提供了全平台支持,并且具备和印象笔记类似的网页剪藏功能、拥有丰富的插件社区、支持端到端加密(E2EE)等功能。不过,Joplin 和思源笔记一样,默认都是不提供云端数据的同步服务(即需要付费才可使用)。

但是!Joplin 可以允许你自己在服务器上架设、部署自己数据同步服务,即 Joplin Server

借助 docker-compose,我们可以在短短几秒之内就可以快速搭建起 Joplin 数据同步服务。注意,默认情况下 Joplin 的数据都是存储在数据库中;但是,如果在使用过程中存储类似于附件、图片等体积较大的文件,可能需要设置额外的对象存储服务。所以这里我仅给出能跑起 Joplin Server 最基本的 docker-compose.yml 文件示例:

version: '3'    services:      postgres:          image: postgres:latest          container_name: postgres          volumes:              - ./data/postgres:/var/lib/postgresql/data          ports:              - "5432:5432"          restart: unless-stopped          environment:              - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}              - POSTGRES_USER=${POSTGRES_USER}              - POSTGRES_DB=joplin        joplin:          image: joplin/server:latest          container_name: joplin          depends_on:              - postgres          ports:              - "22300:22300"          restart: unless-stopped          environment:              - APP_PORT=22300              - APP_BASE_URL=${APP_BASE_URL}                          - DB_CLIENT=pg              - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}              - POSTGRES_DATABASE=joplin              - POSTGRES_USER=${POSTGRES_USER}              - POSTGRES_PORT=5432              - POSTGRES_HOST=postgres

搭建成功之后需要根据 Joplin 官方的说明文档登录对应的管理员账户并修改默认密码;之后我们只需要在 Joplin 应用端的设置界面中找到「同步」选项,选择使用「Joplin Server」,并填写对应部署了 Joplin Server 的服务器地址以及管理员账户密码即可完成同步设置:

Anki-Sync-Server

Anki 是一款辅助学习与记忆的卡片工具,对在校的学习党来说并不陌生。并且 Anki 也免费提供了数据同步服务,我们只需要在官网上自己注册账号之后便能开始使用。

可对于大多数 Anki 使用者来说最为苦恼的就是 Anki 官方所提供的数据同步服务延迟较大,所以在国内使用时,不同设备之间同步卡片或学习进度时总要干等一段时间。

好在 Anki 社区中有第三方开发者开发了适配 Anki API 的同步服务项目 anki-sync-server,该项目虽然使用的是 Python 编写,但也提供了一键容器化部署的脚本。不久后又有人使用 Rust 语言来重写了 anki-sync-server,即 anki-sync-server-rs,相比于前一版而言不仅部署更为便捷、响应性能有所提升,甚至还有效降低了服务器资源的占用。

如果你打算自己部署 Anki 同步服务,那么我建议你优先选择 anki-sync-server-rs。具体的 Docker 命令如下:

docker run -d -it \      --name=ankisyncd \      -e ANKISYNCD_USERNAME=<your-username> \      -e ANKISYNCD_PASSWORD=<your-password> \      -v /path/to/ankisyncd:/app      ankicommunity/anki-sync-server-rs:latest

上述命令中我参考了官方的 Dockerfile 内容并在文档的 Docker 命令基础上加入了 -v 参数以便将数据内容挂载在服务器上,以方便数据持久化、避免数据丢失,也利于后续备份,在运行时除了用户名和密码之外,可以指定任意你喜欢的路径。

部署完成之后,不论是桌面端还是移动端使用 Anki,均要进行设置后才能进行同步;但在设置同步之前,请确保对已有的 Anki 数据进行备份。之后的具体步骤官方也给出了详细的操作说明,我们只需要按部就班即可完成操作,这里就不再多加赘述。

在线音乐服务

图源 Navidrome Demo 示例

Navidrome 是一款由 Go 语言编写且基于 Web 的音乐收藏服务器与流媒体,你可以将自己喜欢的音乐放到 Navidrome 上然后在网页或其他移动端设备中收听音乐,从而避免因平台下架导致无法收听歌曲的情况。

部署 Navidrome 没有太大的难度,因为官方提供了比较详细的部署说明,你可以选择 Docker 命令或 docker-compose 来快速完成部署:

docker run -d \     --name navidrome \     --restart=unless-stopped \     --user $(id -u):$(id -g) \     -v /path/to/your/music:/music \     -v /path/to/your/data:/data \     -p 4533:4533 \      -e ND_LOGLEVEL=info \     -e ND_DEFAULTLANGUAGE=zh-Hans \     deluan/navidrome:latest

部署成功后并且手动添加了音乐之后,就可以根据 Navidrome 官方列出的 应用列表 来找到适合你设备系统的客户端,并连接上你的 Navidrome 服务器进行收听。

自动化操作服务

拥有了服务器怎么能少得了自动化操作相关的服务?

只要你足够 Geek,全天候 24 小时不停歇的服务器简直就是自动化利器;而关于自动化方面的开源服务或项目又可以说是多不胜数。这里我仅列举几个让我留有印象的项目。

n8n

n8n 类似于 iOS 的快捷指令,是一个开源、具备可扩展性、可自部署的工作流自动化工具,它不仅整合了国外 220 多种常用的应用服务,同时也拥有丰富的第三方模板社区以便人们分享自己的工作流。

但不同于移动端设备,n8n 是运行在服务器之上,在有效利用服务器资源的同时也可以让其他端设备享受到自动化的便捷。

图源 n8n 官网示例视频

n8n 本身有不同的付费计划,但对于个人使用而言,只需要选择自部署的社区版即可满足日常需求。当然我们在部署时同样是使用 Docker 来完成快速上线:

docker run -d \    --name n8n \    -p 5678:5678 \    -v /path/to/n8n:/home/node/.n8n \    n8nio/n8n

n8n 的部署过程十分简单,默认情况下使用 SQLite 数据库进行存储相关数据;你也可以根据自己的需要选择 MySQL 或是 PostgreSQL,具体可参考 n8n 官方的说明文档

部署完成之后我们只需要访问到对应接口的服务器地址并注册一个账户之后便可以开始自定义自己的工作流。

qinglong

如果不喜欢像 n8n 那样使用拖拽来完成自动化操作,并且你本身又有一点 JavaScript 或 Python 基础的话,那么可以考虑试试 qinglong(即青龙)。

青龙是一款由国人开发且开源的定时任务管理面板,用户编写完成脚本之后可以在上面设置运行时间,从而实现自动化运行。

图源青龙面板项目仓库

部署青龙面板我们只需要按照官方给出的 Docker 示例运行即可:

docker run -dit \    -v $PWD/ql/data:/ql/data \    -p 5700:5700 \    --name qinglong \    --hostname qinglong \    --restart unless-stopped \    whyour/qinglong:latest

部署完成之后即可通过访问 <服务器IP>:5700 登录 Web 界面,注册之后即可开始编写或上传脚本代码,并设置运行时间。

Dagu

除了青龙之外,你也可以选择 Dagu——一款基于 DAG(directed acyclic graph,即有向无环图)理念而设计的任务调度与运行的开源工具,它除了可以定时运行任务之外,还可以将多个任务编排在一起,从而构成有依赖的任务工作流。

图源 Dagu 项目仓库

Dagu 本身提供了 Web 界面,并且通过 YAML 文件进行配置,Docker 部署也十分简单:

docker run -d \    -p 8080:8080 \    -v $HOME/.dagu/dags:/home/dagu/.dagu/dags \    -v $HOME/.dagu/data:/home/dagu/.dagu/data \    -v $HOME/.dagu/logs:/home/dagu/.dagu/logs \    yohamta/dagu:latest

之后我们只需要到服务器上对应的文件夹路径中放入相应的 YAML 配置文件(具体参考 Dagu 官方给出的例子),之后我们就同样访问 <服务器IP>:8080 地址进入到 Dagu 提供的 Web 界面中进行操作即可。

结尾

受益于容器技术的发展,我们可以通过 Docker 这样的工具来在服务器上快速地自部署开源项目或服务,从而让服务器物尽其用不至于「吃灰」。

不过尽管通过容器部署能减少我们部署时的繁琐步骤,但你依旧可能需要学习一些额外的运维技术,包括如何设置 HTTPS、自动备份数据等等;同时,如果你不想总是通过「服务器 IP 地址 + 端口」的方式来访问服务或者 API,那么除了要购买域名之外,还需要考虑备案等问题(购买非内陆地区服务器则可以省略掉备案这一步)。

当然了,自部署的服务或项目远不止本文所介绍的那么点,如果你对于自部署感兴趣,那么可以到 awesome-selfhosted 项目中去寻找符合你需要的服务或项目。

封面图源 Unsplash。

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

Source: https://sspai.com/post/78424
This web page was saved on Thursday, Mar 16 2023.

2023-03-15

粮食出口世界第一、农民人均GDP8.5万美元:美国农业强在哪里?

2023-03-14 11:00:00

很多人的印象中,美国是一个工业强国。

美国也是一个农业强国。美国粮食产量约占世界总产量的1/5,是世界上第一大农作物产品出口国。

以数据比较全的2007年为例,这一年,美国小麦产量56百万吨,世界第三位,占世界总产量的9.3%。美国小麦出口量35.5百万吨,占世界总出口量的32.1%。美国玉米产量332百万吨,世界第一,占世界总产量的42.6%。美国玉米出口量63百万吨,占世界总出口量的64.5%。美国大豆产量70百万吨,世界第一,占世界总产量的32.0%。美国大豆出口量29.7百万吨,占世界总出口量比重的39.4%。由此可见,美国农业是一个庞然大物。

美国农业不仅大,也非常强。根据世界银行数据,2021年中国农业GDP为12883亿美元,2021年美国农业GDP为2214亿美元。而根据中国第7次人口普查数据,中国农业人口为5.09亿。美国农业人口为260万人。那么,中国农民的人均GDP是2531美元。美国农民的人均GDP是8.5万美元,美国农民的人均GDP是中国的33.6倍。

美国农业那么强,首先源于其自然条件。

美国面积大,适合耕种的面积比例也大。美国耕地面积157.7万平方千米。美国的纬度和我国差不多,所以气候多样,适合众多农作物的生长。比中国更有利的是,美国地形分布集中,山地、平原、高原都在一块的,不像中国比较分散。所以,一大片地区,就拥有类似的地理条件,就可以专业种植某一种作物,体现规模效应。

所以,美国形成了玉米、小麦等几大农业带。

西弗吉尼亚以东的12个州,气候湿冷,土壤贫瘠,无霜期短,不宜耕种,但适宜牧草和青贮玉米的生长,故形成了牧草乳牛带。此外,该地区也是马铃薯、苹果和葡萄的主要生产区。

五大湖附近的8个州,自然条件是地势低平、土层深厚,春夏两季气温高,湿度大,极有利于玉米生长发育,故成为世界上最大的玉米生产区,也是美国大豆的最大产区。

美国的小麦带位于美国中部和北部地区的9个州,这个区域海拔500米以下,地势平坦,土壤肥沃,雨热同期,水源充足,冬季较长而严寒,适宜于小麦生长。该地区的小麦播种面积通常占全国的70%,是世界上最大的商品谷物农业生产基地。

美国南方的棉花带,指跨大西洋沿岸密西西比三角洲的5个州,该地区地势低平,土壤肥沃,纬度低,热量充足,春夏降水多而秋季干燥,适宜棉花成熟。此地集中了全国大约1/3的棉花农场,播种面积超过160万公顷,产量占全国36%。此外,美国的西南部包括以"阳光地带"著称的加利福尼亚州和亚利桑那州的河谷地区生产的棉花也占全国产量22%。

华盛顿州、俄勒冈州和加利福尼亚州等,则是综合农业区。该地区受太平洋暖流的影响,气候温和湿润,宜于多种农作物的生长,美国大部分的蔬菜、水果和干果就出自此地区。

美国是一个发达的工业化国家,这自然会带动他们的农业。美国的农业机械化一直在全球领先,早在1940年代,美国已经基本上实现农业机械化,如今,其高度自动化的机械让美国以260万的农业人口,不仅养活了3亿国民,农产品还大量出口到其他国家。

机械化、连片的土地,使得美国农业形成了农场主种植的形式。这些农场以小型家庭农场为主,机械化程度非常高,生产规模比较大。统计数字显示,虽然只有260万农业人口,但有多达220万个农场,这些农场面积加起来有373万平方公里。这就意味着,美国农民人均耕地将近2145亩。相比之下,中国农业人口5.23亿人,2020年耕地保有量18.65亿亩,农业人口的人均耕地面积为3.57亩。

正因为机械化,连片的大农场的方式,极大地提高了美国农业的效率。庞大的产量,低廉的成本,使得美国农业在全球的竞争力非常高,美国每年出口大量农作物,对全球农业都有重大影响。

当然,美国农业有大量补贴,好不好,见仁见智,本质上是补贴了全世界的美国农产品消费者。美国农民会参加各种协会,通过协会一致行动,要求补贴。美国政府对农民有价格补贴,当农产品价格低于政府的目标价格,政府就会补回来。此外,美国政府还有自然灾害补贴、土地保育补贴、保险补贴,以及各种税收优惠。

某种程度上,大农场、机械化只是表象。大农场、机械化的本质是资本投入。为了提升土地的产出效率,农场主必须投入资金,修建各种设施,买各种机械,甚至进行人力资源的投资。农场主敢于这么做,是因为有长期的预期。否则,投资一个灌溉设施,如果只用几年,显然是不划算的。

在中国的小麦产区河南,不乏一望无际的麦田,但农场主都是在收割季节雇用联合收割机。原因之一,就是土地也是租的,土地租约不长,每家土地不多,有太多的契约方。所以买就不如租。

由于不同的地理条件,中国农业显然学不了美国,但发展方向,肯定是提高效率,集约化生产。这些年,中国土地流转与集约化在不断提升,农业效率在不断提升,这肯定是对的。

有观点认为,中国农业要维持一个低效率,让一个农民种3亩田,才能减少农业对石油的依赖,维持农业的稳定。这种观点显然是错的,这就像为了不出车祸,从此不坐车一样荒谬。


2023-03-09

咖啡加牛奶,对健康更有益

咖啡加牛奶,对健康更有益:
2023-03-04 10:00:00

M0gwky9723rqsWKGFPaYZKPssWbuuwy4U13TKJyD

咖啡加牛奶的组合,能使免疫细胞抗炎效果加倍。(视觉中国/图)

咖啡是世界上最流行的饮料之一,各种花式咖啡更是在满足口感的同时让人大饱眼福,现在丹麦哥本哈根大学研究人员的两项研究给我们提供了选择咖啡的另外一个理由:咖啡加牛奶的组合,能使免疫细胞抗炎效果加倍。

多酚遇到蛋白质

当细菌、病毒和其他外来物质进入人体后,人体的免疫系统就会通过部署白细胞和化学物质来进行自我保护,这种反应通常被称为炎症。存在于多种水果、蔬菜、茶、咖啡和红酒中的多酚是一种对人体很重要的天然抗氧化剂,可以通过抑制炎症实现部分抗氧化作用,有助于减少体内引起炎症的氧化应激,保护身体免受疾病的侵害。

哥本哈根大学研究人员开展的相关研究就是建立在抗氧化剂是否可以帮助预防体内的氧化应激和慢性炎症的基础上,他们在2023年1月发表于《农业与食品化学杂志》(Journal of Agricultural and Food Chemistry)和在3月刊登在《食品化学》(Food Chemistry)上的两篇“姊妹”文章,共同揭示了添加少量富含蛋白质的牛奶可以增加喝咖啡的健康益处。

在《农业与食品化学杂志》上刊登的研究中,研究人员先将人工炎症应用于免疫细胞,之后向这些细胞中注射多酚和氨基酸的组合,另外一组细胞只注射多酚类物质,而对照组细胞则什么也不注射。结果发现,用多酚类物质和氨基酸组合处理的免疫细胞在对抗炎症方面的效果是只添加多酚类的细胞的两倍。此前已经发表的相关研究中,多酚也被证明能与肉制品和奶制品中的蛋白质结合。由于咖啡豆富含抗氧化剂,人们喝牛奶咖啡时可能会摄入这种潜在的抗炎混合物,所以哥本哈根大学的研究人员发表于《食品化学》上的后续研究中,以牛奶加咖啡的特定组合,进一步测试了咖啡与牛奶混合时的分子层面反应,研究证实多酚和蛋白质之间的反应也存在于大多加牛奶的咖啡饮品中。

不过,这种特定的抗炎功效并非仅存在于咖啡牛奶的组合中,研究人员推测其他含有抗氧化剂和蛋白质的食物组合也可能产生类似的抗炎效果,将肉类与富含抗氧化剂的蔬菜相结合,也可能产生具有类似的双重抗炎效果。

咖啡的其他功效

长期以来,人们一直担心咖啡会对健康带来负面影响。对那些特殊风险人群,如孕妇、骨折高危妇女和咖啡因过敏者,确实应当避免饮用咖啡。除此之外,流行病学研究证实,对一般人而言,咖啡可以起到降低中风、心力衰竭、癌症、糖尿病、帕金森氏病的患病风险和全因死亡率的作用。

2020年丹娜-法伯癌症研究所的研究人员发表在《美国医学会杂志肿瘤学》(JAMA Oncology)上的一项研究就发现,每天喝几杯咖啡与晚期结直肠癌患者的较长生存率有关(也与癌症恶化的风险较低有关)。相关数据也证实了摄入咖啡对机体心血管疾病风险的积极影响效应。例如2022年4月美国心脏病学会第71届年度科学会议上发表的研究,使用了来自英国生物银行(UK BioBank)的一个大型前瞻性数据库,其中包含了五十多万人近10年的健康信息,这一庞大人群提供了每天不同程度的咖啡消费情况,从每天一杯到超过六杯,研究人员分析了咖啡摄入量与心血管疾病的关系,结果发现,喝咖啡(尤其是每天两到三杯)可以降低患心脏病和危险心律的风险。

另外,2023年2月发表在《营养素》(Nutrients)上的一项研究分析了来自意大利人口样本中摄入咖啡与外周和中心血压参数之间的关联,结果显示,相比不喝咖啡的人群而言,经常喝咖啡的人群在周边和中心血压水平上要明显更低,每天摄入2-3杯咖啡的个体相比只喝一杯或不喝咖啡的个体而言血压更低。不仅如此,2021年3月发表在《国际运动营养学会杂志》(Journal of the International Society of Sports Nutrition)上的一项研究还发现,在锻炼前半小时喝一杯浓咖啡可以提高脂肪燃烧的速度。

如今,人们越来越爱喝咖啡,随之而来的“咖啡文化”充斥在许多人的生活中。虽然咖啡的功效如此之多,但过度饮用咖啡也会带来失眠、胃酸、心跳加速等等健康问题。另外,值得注意的是并非所有的咖啡都是健康的,速溶的深加工咖啡含有糖和其他不健康的甜味剂制成的调味料,会导致各种健康问题。

1

2023-03-07

ChatGPT API 简单上手,接通专属于你的问答热线【转】

转自:https://sspai.com/post/78631

此前我介绍了 在命令行中使用 ChatGPT 的方法,但当时使用的开源项目没有使用官方 API 经常出现失效的情况。尽管该项目已更新了好几个版本,想要使用它完全取决于是否有可用的「小道 API」,可以说是相当艰难。

好消息是 OpenAI 在 2023 年 3 月 1 日发布了基于 gpt-3.5-turbo 模型的官方 ChatGPT API,这个模型与 ChatGPT 网页版完全相同,但优势非常明显:一是响应速度快得多,几乎不会出现意外断开连接的情况,二是 API 对用户登录网络的限制非常少,这对于中国大陆网友非常友好,能够极大地拓展应用场景。

ChatGPT API 的价格为每 1000 个 tokens 0.002 美元,根据 OpenAI 的介绍,1 个 token 约等于 4 个英语字母,或者 0.75 个单词,换句话说,1 个英语单词约等于 1.33 tokens(1 个汉字约等于 2.33 个 tokens)。新注册的 OpenAI 账号会自动获得 18 美元的余额,拥有 900 万个 tokens 的请求量,你可以在注册或登录 OpenAI 账号之后,在这里生成自己的 API key。

毫无疑问,企业用户将会是 ChatGPT API 的主要客户,可以预见,一大批基于 ChatGPT API 的应用将会迅速出现,未来处处是 ChatGPT 的应用场景正在到来

ChatGPT API 发布一天后出现的部分 AI 应用
ChatGPT API 发布一天后出现的部分 AI 应用

那么对于个人用户来说,除了使用这些第三方应用封装的 ChatGPT 应用外,应该如何使用 ChatGPT API 来提高自己的学习和工作效率呢?本文就来分享一些个人使用 ChatGPT API 的方法,主要是在 macOS 平台上。

由于关于 ChatGPT 的消息变化太快,无法保证内容的实效性,如果出现已变更或更新的情况,请前往原始链接查看相关信息。

开源项目

开源项目

OpenAI 提供了一个 Playground,可以通过可视化的方式学习如何使用 gpt-3.5-turbo 的接口,也就是 ChatGPT API,有 Complete、Chat、Insert 和 Edit 四种模式,可以通过鼠标拖动调节各个参数,非常直观方便。不过有点遗憾的是,使用这个页面需要登录,并且要求账户中有余额。

OpenAI Playground
OpenAI Playground

ChatGPT API 网页版

除了 OpenAI 官方的示例,有网友利用自己的 ChatGPT API 制作了专属的网页版,可以像 ChatGPT 预览版一样,直接在浏览器中使用,比如这个。与 ChatGPT 的官方页面相比,它的优势是完全免费、无需登录、速度超快、打开即用。

基于 ChatGPT API 的网页应用
基于 ChatGPT API 的网页应用

OpenCat

如果你不想与其他人共享同一个 ChatGPT 应用,可以使用 Baye 开发的 OpenCat,制作一个专属于自己的 ChatGPT。下载 OpenCat 之后,首次打开会要求你填写你自己 API key,之后就可以直接打开使用了,这种方式可以获得极快的响应速度,同时还能避免点击恼人的「验证你是人类」。

在 OpenCat 中通过 API key 使用 ChatGPT
在 OpenCat 中通过 API key 使用 ChatGPT

命令行工具

Python 脚本

OpenAI 官方提供了一个 Python 库 openai,可以使用 pip 安装:

pip install openai

需要注意的是,使用 ChatGPT API 需要 openai 0.27.0 或更新版本,如果你的系统中安装了旧版本,需要通过下面的命令查看版本信息和更新,否则无法使用 ChatGPT API。

# Show openai info, including version
pip show openai

# upgrade openai package
pip install --upgrade openai

接下来就可以根据 官方示例,写一个简单的调用 ChatGPT API 的 Python 脚本:

import openai
# Get OpenAI API key at https://platform.openai.com/account/api-keys
openai.api_key = "YOUR_API_KEY"

completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello ChatGPT!"}]
)

print(completion.choices[0].message.content)

将其保存在一个文本文件中,命名为 chat.py,并将第 2 行的 YOUR_API_KEY 替换为你的 API key,然后在终端中执行 python chat.py,就会向 ChatGPT 发送一条消息 Hello ChatGPT!,稍等一下就会返回它的回答,比如这是它回答我的内容:

Hello! How may I assist you today?

除了这种预先填写问题的方式,也可以使用 input() 的方式让用户输入问题,然后再返回 ChatGPT 的回答内容:

import openai
openai.api_key = "YOUR_API_KEY"

user_input = input("Input Your Question: ")

completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": user_input}],
    # max_tokens=100
)

print(completion.choices[0].message.content)

在终端中执行 python chat.py 之后,会弹出一个提示输入语句 Input Your Question:,你需要按照提示输入问题,然后同样稍等片刻,便会返回 ChatGPT 的回复。

Python 命令行工具

Python 库 openai 也提供了一个命令行工具,可以直接使用,而无需通过执行 Python 脚本来调用 ChatGPT API:

openai api chat_completions.create -m gpt-3.5-turbo -g user "Hello ChatGPT!"

这行命令中,openai 是调用 Python 库的命令行工具,api chat_completions.create 是指创建一个 ChatGPT 对话,-m gpt-3.5-turbo 是指使用 gpt-3.5-turbo 模型,-g user 是指提问者角色为 user

需要注意的是,上面这行命令没有提供 API key,这是因为我将它保存在了 .zshrc 中,方便全局调用。你可以在 .bashrc 或 .zshrc 中添加一行命令:

export OPENAI_API_KEY='YOUR_API_KEY'

然后就可以全局调用。如果没有将 API key 保存在环境变量中,则需要修改上面的命令为:

openai -k YOUR_API_KEY api chat_completions.create -m gpt-3.5-turbo -g user "Hello ChatGPT!"

Curl

Curl 是一个通过指定 URL 语法传输数据的命令行工具,它的普及性可以用「基础设施」来形容,在互联网应用中几乎无处不在,OpenAI 自然也提供了通过 Curl 来调用 ChatGPT API 的方式:

curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "List five alternative words of happiness"}]
}'

这几行命令返回的结果是 JSON 格式,这对于需要使用结构化信息的场景很有用。如果你希望 Curl 只返回 ChatGPT 的回答信息,可以使用命令行工具 jq 从 JSON 中把它提取出来:

curl https://api.openai.com/v1/chat/completions \
  -s \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "List five alternative words of happiness"}]
}' | jq -r '.choices[0].message.content'

这是上面这几行命令的返回结果:

1. Joy
2. Bliss
3. Delight
4. Elation
5. Contentment

Keyboard Maestro

前文介绍了在命令行中使用 ChatGPT API 的三种方式,它们的共同点是都需要打开终端再执行,略显麻烦。为了使用方便,我们可以将其改写一下,放在 macOS 上的自动化应用中来快速执行,比如 AlfredLaunchBarKeyboard Maestro。为此,我们需要将前面的代码略微修改一下,下面以 Keyboard Maestro 为例进行说明。

方式一

第一种执行 Python 脚步的方式需要将「从用户输入」改为「从 stdin 输入」,这是为了将拷贝的文字作为标准输入,以便放在 Keyboard Maestro 中执行:

import sys
import openai
openai.api_key = "YOUR_API_KEY"

standard_input = sys.stdin.readline().rstrip()

completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": standard_input}]
)

print(completion.choices[0].message.content)

将这几行代码保存在 chat.py 中,保存在任意位置。然后制作一个下图中的 Keyboard Maestro 宏来运行这段 Python 代码,其中 pbpaste 是 macOS 自带的命令行工具,用来粘贴剪切板中的内容,你需要将下面的 ~/Library/CloudStorage/Dropbox/code/chat.py 替换为你的系统中 Python 脚本的保存路径。另外,还要确保 Python 的安装路径在 Keyboard Maestro 的环境变量中,否则需要指明 Python 的绝对路径。

在 Keyboard Maestro 中运行 Python 脚本使用 ChatGPT
在 Keyboard Maestro 中运行 Python 脚本使用 ChatGPT

方式二

由于 openai 提供了命令行工具,我们可以直接在 Keyboard Maestro 中执行 Shell 脚本,这种方式不依赖外部文件,因此更加推荐:

pbpaste && openai -k YOUR_API_KEY api chat_completions.create -m gpt-3.5-turbo -g user "$(pbpaste)"

这行代码中,通过 $(pbpaste) 将剪切板内容转换为命令行的标准输入,而最前面的 pbpaste 是为了一并把问题粘贴回来。

在 Keyboard Maestro 中执行 Shell 脚本使用 ChatGPT API 的命令行工具

你可以在 这里 下载上图中的这个 macro。当选中一段文字后,按下快捷键 ⇧ + ⌃ + C 两次,便可以向 ChatGPT 提问,然后同时返回问题和答案。

在 macOS 上通过快捷键使用 ChatGPT

方式三

这种方式同样是在 Keyboard Maestro 中执行 Shell 脚本,不过使用的不是 Python,而是 Curl。下面的命令用 jq 将返回的 JSON 格式中提取出了 ChatGPT 回答的纯文字信息,如果你只需要得到 JSON 格式,可以将其移除。

curl https://api.openai.com/v1/chat/completions \
  -s \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "'"$(pbpaste)"'"}]
}' | jq -r '.choices[0].message.content'

 

在 Keyboard Maestro 中执行 Curl 命令使用 ChatGPT
在 Keyboard Maestro 中执行 Curl 命令使用 ChatGPT

以上三种通过 Keyboard Maestro 使用 ChatGPT 的方式,最为推荐的是第二种,你可以根据需要选择合适自己的任意一种方式。除了以上使用 ChatGPT 的基本方式,即鼠标选中文字向 ChatGPT 提问,你还可以利用 Keyboard Maestro 的 Conflict Palette,制作在特定应用场景下使用的宏,比如对文字进行翻译、润色、总结、解释等,可以参考吴秉儒的推文。

其他使用方式

PopClip

PopClip 是一款通过简单的鼠标点击或手势,快速地完成剪贴板操作、文本处理、搜索等任务的工具,它会在选中文本时自动弹出一个小工具栏,提供一系列可选操作,如复制、粘贴、搜索、翻译、分享等,除此之外,它还支持许多第三方插件。

几天前,PopClip 开发者 Nick Moore 制作了一个 ChatGPT 插件,可以选中文字,然后点击 ChatGPT 图标,在下方粘贴它的回复内容,按住 Shift 键则可以将回复内容拷贝到剪切板中。

通过 PopClip 使用 ChatGPT
通过 PopClip 使用 ChatGPT

除此之外,也有网友制作了校对和润色选中文字的 PopClip 插件,比如 ChatGPT Grammar Check ExtensionChatGPT Proofreader Extension

Bob

Bob 是一款 macOS 平台的翻译和 OCR 软件,同样支持插件。除了通过快捷键使用外,也可以通过 PopClip 调用 Bob

网友 yetone 制作了两个 Bob 插件,一个是基于 ChatGPT 的文本翻译插件,可以全面替代 DeepL,另一个是对句子进行润色和语法修改的插件,可以全面替代 Grammarly(心疼 DeepL 和 Grammarly 两秒钟 😂)。

通过 Bob 插件使用 ChatGPT 润色文字
通过 Bob 插件使用 ChatGPT 润色文字

快捷指令

苹果的快捷指令(Shortcuts)同样也可以用来调用 ChatGPT API,使用非常方便。比如吴秉儒制作了一个简单的 Shortcuts,用快捷指令来使用 ChatGPT。

使用 ChatGPT 的快捷指令
使用 ChatGPT 的快捷指令

除此之外,还有网友制作了一个通过 Siri 和 ChatGPT 对话的快捷指令,非常有趣,让原本的语音智障助手摇身一变成为人工智能助手 🤣

小结

模型更好,价格更低的 ChatGPT API 一经推出,便迅速引爆网络,沉寂已久的 Twitter 似乎也因此恢复了往日的热闹,时间线上的推文几乎都在讨论,有不少网友已经做出了很好玩的应用。本文基于我这两天上网冲浪的见闻,分享了一些个人用户使用 ChatGPT API 的方法,希望可以让你尝尝鲜,快速体验一番 ChatGPT 在日常学习和工作中应用的魅力。

如果说去年 12 月初的 ChatGPT 预览版开启了一扇小门,展现了它在自然语言处理方面的巨大潜力,让人们可以到门口一睹人工智能时代的惊艳,那么 ChatGPT API 的问世,则更像把这扇门移到了普通人的跟前,让我们无需走到门前就可以轻松地使用它。面对正在悄然改变我们生活方式的 ChatGPT,让我们共同期待并积极拥抱一个全新时代的到来吧! 

精选文章

旧手机变废为宝|五分钟安装Ollama跑开源大模型 - 开发调优 - LINUX DO

旧手机变废为宝|五分钟安装Ollama跑开源大模型 - 开发调优 - LINUX DO 在开始之前,请你先准备好一台旧Android手机以及特殊的网络环境。 1.安装Termux 2.更新软件包及依赖 pkg update && pkg upgrade 3.安...