阅读视图

发现新文章,点击刷新页面。

WordPress 插件-NeoDB Integration 书影音展示页面

将 NeoDB 书影音记录整合到 WordPress 中 实现了将 NeoDB 观影记录添加到 WordPress 页面中,展示页面:NeoDB 书影音

但流程较为复杂,本文将 Cloudflare worker 和 functions.php 整合成了 WordPress 插件,进一步简化流程。

本人无相关代码经验,插件由 ChatGPT 协助生成,时代真的变了。

使用方法

NeoDB API Developer Console 中点击Test Access Token,并 Generate 一个 NeoDB Bearer Token,示例:Th2121_qs-8agMAlSrkE_tzBbcvjsdkjtlCtr9QHX321312312Ytzo8_YmOxjxg

在终端(Terminal)或命令提示符(Command Prompt)中输入以下代码,将 YOUR_TOKEN 替换为 NeoDB Bearer Token。

curl -H "Authorization: Bearer YOUR_TOKEN" https://neodb.social/api/me

下载 NeoDB Integration 插件:https://github.com/DayuGuo/NeoDB-wordpress-Integration/releases/download/test/NeoDB.Integration.zip

在 WordPress 中安装并激活该插件。

在 Settings-NeoDB Settings 中输入 NeoDB Bearer Token。

示例

在 WordPress 页面或文章中,使用以下短代码来显示数据:

CleanShot 2024-12-20 at 00.09.10@2x.png

book 可以替换为 movie, tv, podcast, music, game, performance,展示更多数据。

type 可选 wishlist 和 complete,展示想看和看过的内容。

效果示例:https://anotherdayu.com/neodb/

CleanShot 2024-12-19 at 23.56.56@2x.png

另,附上我的 NeoDB主页:https://neodb.social/users/anotherdayu/,和 mastodon 账号:https://mastodon.social/@anotherdayu

参考资料:

hcplantern 的 将 NeoDB 记录整合到 Hugo 中

将 NeoDB 书影音记录整合到 WordPress 中

朋友们,已将该功能整合成一个WordPress插件,可直接看这篇 WordPress 插件-NeoDB Integration 书影音展示页面,更简单易用。

这两篇文章合在一起,是我第一次使用 ChatGPT 协助制作 WordPress 插件的心路历程。

NeoDB 是一个开源免费的书影音收藏社区平台,详情见:NeoDB | 书影音标记 – 豆瓣、GoodReads 和 Google Book 的替代品

本文参考 hcplantern 的 将 NeoDB 记录整合到 Hugo 中 ,实现了将 NeoDB 观影记录添加到 WordPress 页面中,展示页面:NeoDB 书影音

获取 NeoDB Bearer Token

NeoDB API Developer Console 中点击Test Access Token,并 Generate 一个 NeoDB Bearer Token,示例:Th2121_qs-8agMAlSrkE_tzBbcvjsdkjtlCtr9QHX321312312Ytzo8_YmOxjxg

在终端(Terminal)或命令提示符(Command Prompt)中输入以下代码,将 YOUR_TOKEN 替换为 NeoDB Bearer Token。

curl -H "Authorization: Bearer YOUR_TOKEN" https://neodb.social/api/me

设置 Cloudflare worker

注册 Cloudflare worker,点击 Create,创建一个 worker。

最初会展示一个 Hello World 基础案例,点击 Continue to project – Settings – Variables and Secrets。

添加一个环境变量(Environment Variables):

  • Type:text
  • Variable name:NEODB_TOKEN
  • Value:NeoDB Bearer Token,示例:H13121_qs-8agMAlSrkE_tzBbcvjsdkjtlCtr9QHX321312312Ytzo8_YmOxjxg

点击右上角的 Edit code,删除 worker.js 中全部代码,并将 hcplantern 提供的代码(如下)复制黏贴进去。

const myBearer = NEODB_TOKEN; // Assuming 'NEODB_TOKEN' is set in your Cloudflare Worker's environment variables

addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
try {
console.log(myBearer)
const url = new URL(request.url);
const category = url.pathname.substring(1);

// Optionally, handle query parameters (e.g., page number)
const page = url.searchParams.get('page') || '1';
// Available values : wishlist, progress, complete
const type = url.searchParams.get('type') || 'complete';

let dbApiUrl = `https://neodb.social/api/me/shelf/${type}?category=${category}&page=${page}`;
const response = await fetch(dbApiUrl, {
method: 'get',
headers: {
'Accept': 'application/json',
'Authorization': `Bearer ${myBearer}`
}
});

// Check if the response from the API is OK (status code 200-299)
if (!response.ok) {
throw new Error(`API returned status ${response.status}`);
}

// Optionally, modify or just forward the API's response
const data = await response.json();
return new Response(JSON.stringify(data), {
headers: { 'Content-Type': 'application/json' },
status: response.status
});

} catch (error) {
// Handle any errors that occurred during the fetch
return new Response(error.message, { status: 500 });
}
}const myBearer = NEODB_TOKEN; // Assuming 'NEODB_TOKEN' is set in your Cloudflare Worker's environment variables

addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
try {
console.log(myBearer)
const url = new URL(request.url);
const category = url.pathname.substring(1);

// Optionally, handle query parameters (e.g., page number)
const page = url.searchParams.get('page') || '1';
// Available values : wishlist, progress, complete
const type = url.searchParams.get('type') || 'complete';

let dbApiUrl = `https://neodb.social/api/me/shelf/${type}?category=${category}&page=${page}`;
const response = await fetch(dbApiUrl, {
method: 'get',
headers: {
'Accept': 'application/json',
'Authorization': `Bearer ${myBearer}`
}
});

// Check if the response from the API is OK (status code 200-299)
if (!response.ok) {
throw new Error(`API returned status ${response.status}`);
}

// Optionally, modify or just forward the API's response
const data = await response.json();
return new Response(JSON.stringify(data), {
headers: { 'Content-Type': 'application/json' },
status: response.status
});

} catch (error) {
// Handle any errors that occurred during the fetch
return new Response(error.message, { status: 500 });
}
}

然后点击 Deploy 部署即可。

注意在这一步中,需要复制保留左侧 Preview 下方的网址,示例 https://xyz-hall-ohxu.user.workers.dev/

WordPress Shortcode

在 WordPress 管理后台,导航到“外观” -> “主题编辑器”。

找到并编辑当前主题的 functions.php 文件。

将以下代码添加到 functions.php 文件中。这段代码创建了一个名为 neodb 的短代码。

注意:将代码中的 https://your-worker-url/ 替换为 Cloudflare worker 中的 https://xyz-hall-ohxu.user.workers.dev/

function neodb_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => 'book',
'type' => 'complete',
),
$atts,
'neodb'
);

$category = $atts['category'];
$type = $atts['type'];

$url = sprintf('https://your-worker-url/%s?type=%s', $category, $type);

$response = wp_remote_get($url);
if (is_wp_error($response)) {
return '数据获取失败';
}

$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);

if (empty($data['data'])) {
return '没有找到相关数据';
}

ob_start();
?>
<div class="item-gallery">
<?php foreach (array_slice($data['data'], 0, 10) as $value): ?>
<?php $item = $value['item']; ?>
<div class="item-card">
<a class="item-card-upper" href="<?php echo esc_url($item['id']); ?>" target="_blank" rel="noreferrer">
<img class="item-cover" src="<?php echo esc_url($item['cover_image_url']); ?>" alt="<?php echo esc_attr($item['display_title']); ?>">
</a>
<div class="rate">
<?php if (!empty($item['rating'])): ?>
<span><b><?php echo esc_html($item['rating']); ?></b>🌟</span>
<br>
<span class="rating-count"><?php echo esc_html($item['rating_count']); ?>人评分</span>
<?php else: ?>
<span>暂无🌟</span>
<br>
<span class="rating-count"><?php echo esc_html($item['rating_count']); ?>人评分</span>
<?php endif; ?>
</div>
<h3 class="item-title"><?php echo esc_html($item['display_title']); ?></h3>
</div>
<?php endforeach; ?>
</div>
<style>
.item-gallery {
display: flex;
padding: 0 1rem;
overflow-x: scroll;
align-items: baseline;
}
.item-card {
display: flex;
flex-direction: column;
flex: 0 0 17%;
margin: 0 0.5rem 1rem;
border-radius: 5px;
transition: transform 0.2s;
width: 8rem;
}
.item-card:hover {
transform: translateY(-5px);
}
.rate {
text-align: center;
}
.rating-count {
font-size: 0.8rem;
color: grey;
}
.item-cover {
width: 100%;
min-height: 3rem;
border: 2px solid transparent;
}
.item-title {
font-size: 1rem;
text-align: center;
margin: 0;
}
</style>
<?php
return ob_get_clean();
}
add_shortcode('neodb', 'neodb_shortcode');

使用代码

在 WordPress 页面或文章中,使用以下短代码来显示数据:

CleanShot 2024-12-20 at 00.09.10@2x.png

book 可以替换为 movie, tv, podcast, music, game, performance,展示更多数据。

type 可选 wishlist 和 complete,展示想看和看过的内容。

效果示例:https://anotherdayu.com/neodb/

CleanShot 2024-12-19 at 23.56.56@2x.png

另,附上我的 NeoDB主页:https://neodb.social/users/anotherdayu/,和 mastodon 账号:https://mastodon.social/@anotherdayu

好好吃饭 意大利肉酱面

对意大利肉酱面最初的回忆可能是萨利亚和必胜客,萨利亚的味道很寡淡,必胜客的则浓一些。

后来吃了一次「镰仓PASTA」,才知道意大利面原来可以这么好吃。有点可惜的是几年前上海的镰仓陆陆续续关门了。

之前有一段时间自己住,偶尔会简单的做意大利面充饥,但谈不上好吃。

最近开始想要好好做做意大利面,发现意大利肉酱面其实是个慢烧料理,长时间的炖煮才能让风味融合。

拿着基础菜谱,先简单实验了一下。

  • 肉馅 1:1 组合了猪肉和牛肉,煸炒后待用
  • 用炒肉馅的底油煎软洋葱碎,然后与肉馅混合
  • 放入胡萝卜碎和芹菜碎,再加入一点黄油,混合均匀
  • 放入新鲜西红柿和意面酱
  • 加盐、糖、黑胡椒和料酒
  • 小火炖煮90分钟

味道比以前好了许多,但感觉还是不够浓郁。

隔夜再烹饪时,我稍留了一些煮面水,再加了一些牛奶,和意面、酱料一同收汁。

酱料裹的更均匀,也更浓郁了。

但这次的肉馅感觉太瘦了,脂肪不够,所以肉的味道不够香。另外,即使加了两个西红柿,番茄味还是不够突出,酱料的层次也不够丰富。

下次煮酱料的时候,想加点培根碎、浓缩番茄膏和肉高汤,炒肉馅的时候耐心些,煎出焦化层,把料酒换成红酒,出锅时再加点芝士和牛奶收汁。

整理一下新菜谱,下次待用:

  • 肉馅1:1混合猪肉和牛肉,煎出焦化层后盛出待用
  • 用炒肉馅的底油煎培根碎和洋葱
  • 放入胡萝卜碎和芹菜碎,再加入一点黄油,混合均匀
  • 放入新鲜西红柿、意面酱和番茄膏
  • 加盐、糖、黑胡椒、红酒和肉高汤,可以尝试加少量月桂叶、牛至和迷迭香
  • 小火炖煮90分钟
  • 快出锅时,加入罗勒、芝士和牛奶,大火收汁至酱料浓稠

想做出好吃的食物还是得耐心。

另外,最近在尝试 Reeder 作者出品的菜谱软件——Mela,一如既往的舒服。

可 Self-host 的 mealie-recipes/mealieTandoorRecipes/recipes 似乎也是不错的选择。

祝大家有个好胃口!

被烹饪的数据 Cooking Data


大模型的好坏,与数据质量息息相关,目前的数据大多已投入模型中,如何获得优质的真实世界数据将成为长期的课题。

我平时会做一部分数据分析,喜欢人类学,明年又有可能参与非洲的研究项目。Crystal Biruk 写的这本 Cooking Data 则包含了这些我参与和热爱的内容。前段时间薄荷实验在招这本书的翻译,我甚至都心动了。

本文是 Cooking Data 读后感。

幻想中的数据

作为学院派的研究者,我们其实没有很多机会参与完整的现场调查和数据收集,平时将拿到手的数据称为 raw data,并认为该数据应该是「干净且客观的」,偶尔遇到数据质量差的数据,则会心生抱怨。

这本书的标题则直接指出,「干净的数据」这一概念是虚构的,是远离现场的人们所想象的。数据必然被「多次烹饪」,无法避免的与社会和文化环境交织在一起。

然而基于数据的决策系统,已经被广泛应用于政策制定,所以梳理和反思数据产生的全流程是必要的。

CleanShot 2024-12-07 at 15.24.13@2x.png

文化盲点

全员多语种的专家团队是任何一个大项目都负担不起的,需要翻译专家从中协调。然而,即使 ChatGPT 等大语言模型提升了翻译的下限,也远远不够,这是大部分全球健康项目数据质量的根源性问题。

将高质量数据标准方案翻译成其他语言本身就面临很大挑战,即使是 WHO 官方翻译的中文文件,有时我阅读起来都怪怪的,最后直接看英文,才能完全理解。这不仅是逐字翻译的问题,而是叙事习惯和结构的问题,这些方案和标准需要是易于理解和执行的。

另外,不同语言体系中,对特定专业词汇的解释会有细微差异,仅仅是找到相似的其他语言替代词并不足够,有时需要创建新的词组,以确保含义的一致性。与此同时,又增加了表述的复杂性。

有时我们会假定数据驱动的一些学科,是植根于新时代的理性产物,纯科学、非文化。但这种假设是被视野所局限的,忽略了文化背景特殊性。

传统人口学倾向于将数据生产看作一个线性、标准化的流水线。然而,实际上每个数据点的形成都更像是一个有机的、动态的生命周期。数据并非简单、重复性的工业产物,而是通过一系列的交易、经历和关系后形成的。这种观点挑战了简化数据处理为工业化生产的思维模式,强调了数据的复杂性。

不对等

在研究项目中,不同职能的工作者,如项目设计、数据收集、分析、传播,之间的权力关系是不对等的。以作者的非洲马拉维现场为例,研究者在处理数据的时候,会对马拉维当地的平均知识水平产生偏见,并将数据分析中遇到的困难,转嫁为数据采集的质量较差。

这些不对称在追求方法学严谨的数据时被放大,并在欧美主导项目的背景下,引出了种族、新殖民主义、城乡不对称等残留问题。每个维度都值得更多的讨论和研究,但这种复杂性有时会让人们望而却步。

礼物

现场调查者常会准备小礼品以助调研顺利,最初会选用糖,但袋装糖的成本较高,在高气温环境运输不方便,并会占据更多运输空间。另外,有些因摄入糖或食用油而生病的受访者会因此抱怨。

与之相似的是,现场工作人员拒绝赠送空水瓶。因为有孩子装水喝完,如果出事,会与村民关系恶化。

外来者本就会被警惕和观察,任何小问题都会被放大。

肥皂则是一个经过实践检验的最佳选择,简单、方便、干净。

但礼物这个概念本身就会引起不平等,因为同一项目的不同调查点可能有的发放礼物,有的没有。没有获得礼物的村民则会觉得不公平。

随机抽样也会造成,仅有被调查的人收到了礼物,形成幸运的内部人和不幸的外部人之间的不平衡。

这些方面都是我以前没有考虑到的,而确实是长期项目所需要关注的。

与当地人和谐相处,才能避免基层调查者和受访者的流失,保证回访的数据质量。

这几年翻译成中文的人类学书籍越来越丰富了,真不错!

剑玉 Kendama

剑玉(けん玉、Kendama),是一种源于日本或法国的民间游戏,由三皿一刺一绳一球组成。19 年的时候手痒买了一个,后来断断续续的玩着,越来越喜欢。

CleanShot 2024-12-07 at 17.02.49@2x.png

前几天在东京,特意去了涩谷附近的剑玉店,氛围很国际化,甚至店内是英文交流。一个老哥疯狂炫技,眼睛都要跟不上了。

各种异性、大型、小型的剑玉也让人目不暇接。东西很多,但价格略高,且我能接收的价位中,没有淘宝的选品看上去精致。

于是人处东京,淘宝激情下单,买了一款咖啡豆元素的国产剑玉。

这两天终于到手,比之前买的基础款稍大一些,枫木剑柄,白蜡木的球。黏性漆和稍大的大小皿,感觉更容易上手一些。线稍长,还需要一点时间适应。小缺点是剑柄和球上的文字有些多,如果都去掉,会更简约好看。

.png

这两年看电脑的时间太多了,需要一些不用眼的小活动,间歇性休息一下,剑玉就是很好的选择。

它的基础动作并不难,很适合和朋友一起体验。之前去露营的时候,我带了剑玉和飞盘,挺欢乐的。

目前我只能玩一些基础动作,连招对我来说还太难了,之后打算好好修炼一下!

迷失东京 Day 2 东京都写真美术馆和根津美术馆

东京都写真美术馆

买了两张票,一个是 Alec Soth 的个展,另一个是 The Gaze of the Present(日本当代摄影展)。

IMG_2409.jpeg

上一次看 Alec Soth 是在上海摄影艺术中心(SCoP),现在 SCOP 已经关门了,有些伤感。

这个展馆比 SCOP 大很多,内容也更丰富一些,但布展结构似乎没有 SCOP 那么自在,比较严肃传统。

日本当代摄影展则囊括了多名日本当代摄影师,小田黑惠美、菅野小百合、千贺健二、神奈川真吾、原田佑希。

二楼是购物区,有很多摄影书,看的很过瘾。

四楼则是图书馆,挺安静的,如果不是旅行,可以在这呆上一整天。

近几年,上海在艺术展布展方面越来越棒了,比如 Fotografiska、浦美、西岸美术馆。感觉以前上海的美术展会倾向于量大管饱,少了些对小而精的追求。Fotografiska 则有了一些新的尝试,票价也确实贵一些。

日本商业和艺术结合的会更紧密,很多小型艺术展都在商区之内,且质量很高。上海 k11 也有类似的规划,但还是少了些。看着西岸附近规划逐渐成熟,感觉以后类似的尝试会越来越多。

IMG_2410.jpeg

根津美术馆

隈研吾操刀,竹木墙外是表参道,闹中取静,选品和光线都很细腻。

展馆外有很大一片庭院,枫叶季美极了。

单论观展体验可能是这次日本之行中最好的。

IMG_2415.jpeg

结束

逛完根津美术馆,就要回国了,下次想去神保町逛逛。

目前使用的自托管服务

趁着黑五,新购置了配置高些的 VPS。折腾一番后,整理了目前自托管的服务。

第一个 VPS (Bandwagon)托管了 2 个项目 wordpress(建站) 和 Umami(数据统计),追求博客的稳定性:

第二个 VPS(Racknerd) 托管了 11 个项目:

  • Freshrss,RSS 阅读器,目前还安装了两个扩展:TranslateTitlesCN(谷歌翻译标题) 和 Auto Refresh(自动刷新)。日常我会使用 Reeder 登录 freshrss 账号阅读。Freshrss 因是网页端的,所以也很适合配合 immersive translate 使用。
  • wewe-rss,生成微信公众号订阅源,实际使用还挺稳定的,最后订阅了 27 个微信公众号。
  • rsshub,为其他网站生成RSS源,自建的更稳定些。
  • RSS-Bridge,订阅部分 rsshub 无法订阅的内容。本想用来订阅 instagram,但不稳定。不过功能确实挺强,便留下观察。与rsshub有很多互补之处,比如 rsshub 如果要订阅 telegram channel 比较复杂,RSS-Bridge 目前则比较简单。经费充裕的话,可以尝试 thefeedreaderbot,使用 webshare 的动态代理 ip,能够躲过 Block.
  • AdGuardHome,DNS 去广告服务,配合浏览器插件uBlock Origin,效果很好。
  • n8n,工作流自动化平台。
  • calibre-web,在线电子书库管理系统。
  • laber,跨越付费墙。
  • FileCodeBox,文件分享。
  • qBittorrent Web UI,BT 下载客户端的 Web 界面,可以远程管理和控制BT下载任务。
  • NextChat,以前叫 ChatGPT-Next-Web,ChatGPT 网页端界面,专门部署给家人使用。

更多自部署软件可参考:awesome-selfhostedTop 3 BEST applications you’ve decided to self-host?

个人倾向于将关键的非隐私类文件托管于信誉较好的大平台,如 Dropbox 和 1Password,所以没有使用自托管云盘和密码软件。

迷失东京 Day 1 Saul Leiter、FUJIFILM、安藤忠雄、Banksy 和 YOSIGO

Beauty in the Overlooked Ordinary

Saul Leiter 是我开始街头摄影时就喜欢的摄影师,《All about Saul Leiter》则是我买的第一本摄影书。

没有提前计划,来东京前一天搜展讯的时候,搜到了它,这就是缘分。

Art Cruise Gallery 是商场里的一个小小的展区,几分钟就能逛完。好在经典的几张作品都在,免费的展,也不能期待太多。

出门时买了《Forever Saul Leiter》,一红一黄,凑齐了两本。

IMG_2366.jpeg

FUJIFILM

上海富士 XSpace 是我很喜欢的去处,来东京之后没有找到同名的空间,但找到了富士旗舰店—六本木的 FUJIFILM SQUARE。

一进门是富士、滨田英明和迪士尼合作的特展,日式小清新的风格,主角是米奇米妮。比较商业化的主题,头套模特,很难捕捉到其中的情绪,感觉没有挖掘出滨田英明的优势。往里走有富士老相机的展柜和一组老照片特展,还有现售相机的陈列柜。

感觉还是国内的 XSpace 经营的更细腻一些,空间更大,讲座和活动也更多。

IMG_2355.jpeg

Pooploop

FUJIFILM SQUARE 隔壁是三得利美术馆,但当下主题不是很感兴趣,就直接去了安藤忠雄设计的 21 21 design sight,灵感来源与三宅一生,也算是梦幻联动。

经典的清水混凝土风格和公园融为一体,70%空间隐匿于地下。

门票是一张蓝色的贴纸,刚好和我那天的外套一个颜色,喜欢这种淡淡的巧合。

展览名称是 pooploop,与排泄、废物、发酵、循环等相关,恰好是我很感兴趣的领域。布展质量很高,逛起来也舒适。

小缺点是展馆太小,不尽兴。

逛完之后,在公园里坐了很久,享受了那本《Forever Saul Leiter》。

秋冬交际之时,东京的天气真是很舒服,站起来伸个懒腰继续逛。

IMG_2374.jpeg

THE NATIONAL ART CENTER, TOKYO

出了 21 21 design sight,稍走10分钟,就是国立新美术馆。

一楼的两个展有很鲜明的对照,一个是大学生群展,另一个是个人艺术家的群展。

个人艺术家那边,每个展位个性都很鲜明,逛得眼花缭乱。

大学生那边则是整齐的平面海报设计,逛起来舒适度高一些。个人对更喜欢大学生那边鲜活的力量感,和偏近现代的风格。

个人感觉群展多,也说明当地艺术生态很健康,喜欢这种热闹的感觉。

Banksy

去看 YOSIGO 的路上,刚好遇到了一个小小的 Banksy 个展。

Banksy 是一位匿名的英国涂鸦艺术家。年初的时候刚好去了他的故乡布里斯托,看了几幅他的街头涂鸦。

感觉冥冥中与他有些缘分,就逛了下。

3幅画 + 一段视频 + 一个标志性的红气球,300日元。价格算不上贵,但内容是真的有点少。

YOSIGO

YOSIGO 就在 Banksy 的楼上,是我喜欢的风格。

西班牙摄影师,喜欢捕捉地中海沿岸的风景和人文场景。

内容很丰富,有多个分区,拍摄对象各有不同,但艺术风格是统一的。

门票刚好和我的钱包同一颜色,一天之后有两次类似的巧合,让人心生愉悦。

IMG_2393.jpeg

如果你近期在东京想逛展,我会推荐:21 21 design sight – Pooploop 和 YOSIGO。

这两个布展质量都很高,逛得很享受。

那些脱口而出的思考

0

前几天和朋友谈起自己性格上的一些转变。

提到「表达自己想吃什么」,这一点,对我而言很重要。

说出这句话时,我其实也没有想清楚。

1

以前跟朋友出门玩或吃饭,我都会说随便,但我真的不在意吗?

那不是在谦让,也非在讨好。

实际上,我似乎觉得我的观点不重要,「自己也不重要」。并让自己变得能够尽可能适应身边的环境,让自己的口味尽可能随便,有更高的包容度。

害怕给他人带来麻烦,担心自己的选择会被否定。我在逃避选择的责任,逃避可能的冲突,逃避表达后的不确定感。

这对我而言,这意味着一种安全感。

我不是没有观点,而是害怕有自己的观点。

表达自己想吃什么,其实代表我开始认为「自己是重要的」,是值得被自己,被身边的人认真对待。

当我开始表达自己的需求和偏好时,实际上是在肯定自我存在的价值。

2

知道自己想吃什么,也很重要。

这意味着,开始认真对待内心的声音,与自己的感官和情绪建立连结,耐心观察每一个微小的需求。

记日记和写博客之后,感觉我越来越能理解自己,了解自身的喜好。

「自我人类学」是很好的实践模版。作者以人类学的视角观察和分析自己的生活,在个人田野笔记中捕捉即时的思想和情感,播下自我发现的种子。

写作和觉察相辅相成,帮助我们在生活中,一点一滴地找回与自己对话的能力。

3

当你真诚地面对生命,不再逃避,不再妥协。

你会发现,你即是你的思绪,你的恐惧,你的习性。没有一个独立于此的「你」在改变自己,观察者即是被观察的对象,你就是这个世界本身。

祝好,

我的朋友们。

Calibre-web 数据库路径和下载权限 500 Internal Server Error 问题

最近用 Docker 搭建了 Calibre-Web(书籍管理阅读平台),出现了一些问题,以下是解决方案。

Calibre 数据库路径

先是进入网页界面中,需要填写 Calibre 数据库路径,该路径需要进入 Docker 容器内部,创建数据库,并添加写入权限。

先查看容器内目录结构,并进入 bin。

docker exec -it calibre-web sh

ls /

cd bin

创建一个空的数据库。

calibredb add --empty --with-library /books

如果上面的命令成功,则设置正确的权限。

chmod -R 777 /books

初始化数据库。

calibredb add --empty --with-library /books

退出容器。

exit

OPDS

支持 OPDS 的阅读器,能更方便的下载和阅读 Calibre-web 中的书籍。

OPDS link 的正确格式是:http(s)://username:password@ip/hostname:port/opds

ip/hostname:port,也可以是网站域名。

iOS 中推荐 Cantook

CleanShot 2024-11-25 at 14.15.29@2x.png

下载权限问题

在绑定 OPDS 阅读器的时候,我发现无法正常下载书籍,网页版也有相同问题,但仍可以阅读。报错:500 Internal Server Error。

这部分报错是比较新的问题,在 Github issue 中找到了解决方案。与 PUID/PGID 相关,应使用运行 Docker 的用户的 ID,这样可以确保容器内外的权限一致。

重新回到 docker-compose.yml 中,将这两者都设为 1000,再重启 docker 即可解决。

services:  
  calibre-web:    
    environment:      
      - PUID=1000      
      - PGID=1000

2024年的付费墙

免责声明:本文仅用于教育目的。作者不认可或鼓励任何不道德或非法活动。使用此工具的风险由您自行承担。

12ft 是一个帮助用户绕过在线付费墙的插件,2023年被投诉下线之后,这些可以作为替代品:

考虑到工具的稳定性和长期性,我日常使用的是 Webpage archive 、自托管的 Ladder 和 Ublock origin(Firefox版)。

目前使用的 WordPress 插件

以下是我目前使用的WordPress插件,共 11 个:

  • UpdraftPlus,核心备份插件,免费版支持定期备份到 Google Drive。近期迁移了一次,安装好WordPress和该插件,再关联一下 Google 账号即可备份成功,体验很好。
  • Blocksy 主题 + 插件,目前在使用的主题,免费版够用,可自定义选项多,颜值高。
  • Polylang,多语言插件,免费版功能齐全,中英文界面可同时 SEO 索引,增强博客覆盖面。
  • Antispam Bee,屏蔽广告评论。
  • Post SMTP,邮件发送插件,更简单的配置 SMTP。
  • Wenprise Better Emails,提供邮件模板,美化邮件。
  • WP Super Cache,网站缓存插件,提升网站加载速度。
  • WPS Hide Login,安全插件,可以自定义WordPress登录页面URL。
  • Rank Math SEO,SEO 优化插件,增强搜索引擎可见度。
  • Meow Gallery,图片画廊插件。
  • Juicer,社交媒体聚合插件,能为国内用户展示 Twitter 时间线。

目前已有足够的舒适度,之后会偏重稳定性,于是关闭了插件和主题的自动更新。除了安全性更新,尽量不动。

除了 Blocksy,都用的免费版。但 Blocksy 其实也没用到几个付费功能,只是比较喜欢,且长期使用,支持一下。

在 Jack 的帮助下,最近管理面板换成了 1Panel,舒适度比 AMH 要高一些,操作也更简单。

截图留念!

CleanShot 2024-11-24 at 15.52.48@2x.png

多语言博客WordPress 插件 Polylang

我对多语言博客 WordPress 插件有以下几个需求:

  • 保持长期更新;
  • 免费或者不贵的买断制;
  • 中英文界面可同时 SEO 索引;
  • 操作简单易于多语言用户理解;
  • 中英文 RSS Feed 可以分开。

尝试多款插件之后,决定使用 Polylang,需求都能满足,且免费功能就够用。虽然内容需要自己翻译,但我也不是每篇都想翻译成英文,且借助 ChatGPT 并不费劲。

Pro 版(99欧元)可以和 DeepL 深度整合,并支持更多自定义功能。

基础设置跟着 Setup 流程即可。之后每翻译一篇,就会在英文界面展示一篇。

设置完成后的效果:https://anotherdayu.com/en/

聊聊最近 Lancet 上刊登的中药复方研究

前几天《Lancet》发表了关于中医药治疗急性脑出血的多中心随机、安慰剂双盲对照临床试验,Traditional Chinese medicine FYTF-919 (Zhongfeng Xingnao oral prescription) for the treatment of acute intracerebral haemorrhage: a multicentre,randomised,placebo-controlled,double-blind, clinical trial。

这篇文章颇为出圈,且被大家广泛关注的原因有 2 点:

  • 《Lancet》上首次刊登的中草药双盲对照研究。
  • 结果表明药物组和安慰剂组之间没有统计学差异,中风醒脑方(中药复方 FYTF-919)对中重度脑出血患者的功能预后、生存率和生活质量均无改善作用。

先聊聊现代医学

部分社会舆论其实长期将「中医」和「西医」两个概念模糊化和敌对化。这两个概念是地缘性的,是独特的文化现象,但很多人会将其与传统医学和循证医学混淆,模糊其中的界限,并加入很多个人和社会情绪,变得极端化。

将不同维度的标签分开,理性的看待问题是第一步。

大家长期指代的「西医」,是发展至今的循证医学,也是从草药学等传统医学一点点演变而来。循证医学是现代医学的一部分,强调应用完善设计与执行的研究(证据)将决策最佳化,但这也不是尽头,它其实是一种看待问题的思路。循证医学是随着文艺复兴、逻辑学和工业化发展,而演变而来的。

而「中医」则常被指代为传统医学和经验医学,但中国的传统医学,也是一点点发展的。现代化,不是非此即彼,而是客观规律。目前类似的医学方法可以被称为补充医学,即与常规(主流)医学一起使用的非常规医疗实践。

所有技术都是工具性的,有的只是属于和适合不同时代的医学产物。

现代仅是时间尺度,并非一定好或坏。所有目前在使用的医学技术,其实都可以被称为现代医学,即使是目前比较传统的中医。很多人觉得一些老中医使用的诊疗技法没变,但草药治疗的整体生产流程已经随着时代发生了很大改变。

橘生淮南则为橘,生于淮北则为枳。药材也是一样的,不同产地,细微品种差异都会对其功效有很大影响。

A 地区的 X 药材,可以在 D 药方中被使用,且最终效果良好。

但如果换成 B 地区 的 X 药材,D 药方中的其他成分可能都需要调整。

而现代集约化、工业化生产后,模糊了很多地缘性的药物使用习惯。

另外,在小范围的地区性医疗实践中,可治疗的病种相对固定,经过长期的实践积累,形成了丰富的经验,这为中医的有效性提供了基础。然而,随着当代社会人口流动的加速和病种的复杂化,经验医学的局限性逐渐显现,已经超出了个体学习能力的范围。

要正视时代和社会环境的变化。

回到这篇论文

很多过去的社会性问题木已成舟,我们无法改变过去,聊聊以这篇论文为契机的影响。

以发展得眼光看问题,借鉴传统草药学的证据,并在不同时代赋予新的解释方式,是很正常的科研思路。

中药复方队列研究和双盲对照研究其实一直在进行中,随着国内相关产业的完善,会越来越合规和标准化。这些研究结果各异,如《Nature Medicine》上的这篇表明在常规治疗中加入芪苈强心胶囊(QLQX)可以改善 HFrEF 患者的临床结果,Source:The traditional Chinese medicine Qiliqiangxin in heart failure with reduced ejection fraction: a randomized, double-blind, placebo-controlled trial

其实对于尚未获批的药物,阳性结果更具意义,因为这意味着它有可能获得批准;而对于已在使用的药物,阴性结果则更为重要,因为这可以指导未来的临床决策。

这项研究引起的社会关注度是超出预期的,严谨的研究结果对中国现代医药产业发展也是有好处的,去伪存真。

改变永远不怕晚,真正的勇气,是正视自己的愚蠢和弱点,并勇于改变,从狭隘和局限挣脱出来。


方便大家看原文:

Kagi 使用体验和近期更新:翻译、助手和与Perplexity的对比

距上次聊 Kagi 已经过去几个月,当时初用不久,分享了一些使用技巧

近期 Kagi 又更新了一些功能,如翻译、助手(Assistant)和一些基础体验优化。

基础体验优化

Kagi 技术团队的响应速度很快,5月份的时候发邮件建议将中文「?」作为快速回答启动器,近期不知不觉中就支持了。

另外,Kagi 有一个贴吧 Kagi Feedback,能提交希望实现的新功能,并还可以勾选 Roadmap 中优先级高的任务,支持得人越多,进度应该会越快。

Translate

翻译功能是这个月新加入的,访问 translate.kagi.com 即可直接使用,界面清爽,由于是基于LLM的翻译工具,速度不及谷歌翻译。

大多数情况它的体验不错,但对科研相关专业词汇的识别,Kagi Translate 的效果就有些一般,经常出错。希望未来会有针对性的优化。

有一个小技巧:将翻译界面下面的 Kagi Translate 书签移动到书签栏,后续在希望翻译的网页上点击该书签,即可跳转到 Kagi Translate 界面得到网页翻译结果。

CleanShot 2024-11-17 at 10.20.50@2x.png

Assistant

9月份 Kagi 公布了 Assistant,需要 Ultimate Plan 的用户才能免费使用。家庭组用户可以将单个用户升级为 Ultimate Plan,该用户需每月额外支付 15 美元。

Kagi Assistant 与 Perplexity 的功能接近,并可以访问 Claude 和 ChatGPT。实际体验略逊于 Perplexity,但差距不大。毕竟是刚出的功能,值得期待。

15 美元比 Poe 的月费要便宜一些,界面舒适度要优于 Poe。日常使用中我是能把 Poe 每月 token 用光的,Kagi 似乎目前还没有限制,我就使劲用吧。

CleanShot 2024-11-17 at 09.39.30@2x.png

个人体验

Kagi 我目前是 Ultimate Plan,Perplexity 也购买了会员。

未开启 Kagi Assistant 之前,我的使用体验是:

  • 需要快速概览的用 Perplexity,它给的信息会具体易懂一些,日常快搜常用。
  • 需要精确性和真实性的用 Kagi,先看「快速回答」里的概要,然后往下翻精确信息源。
  • 专业性越强,越想了解得深入,越会选择 Kagi。

开启 Kagi Assistant 之后:

  • 很少开启 Perplexity了,偶有 Kagi Assistant 回答不清晰的问题,Perplexity 其实也无法解决。
  • 「Kagi 快速回答」可以快捷跳转 Kagi Assistant,还挺常用的。
  • 小众服务的福利是 Kagi Assistant 无须梯子,即可在国内使用。

其他

Orion 浏览器也是 Kagi 公司的产品,最近发现它的日常更新维护还挺频繁的,也又评测了一下,发现兼容性还是堪忧,沉浸式翻译的 Chrome 和 Firefox 版都无法正常支持。

戴尔显示屏(U2720QM)屏闪问题

目前我使用的显示屏是 Dell U2720QM,偶尔有屏闪问题(4 年间出现过 3 次)。

过去一直以为是电压不稳或接触不良,关机一段时间重启就好了,但昨晚反复重启多次也没有恢复。

于是查了些资料,发现屏闪似乎是 Apple M 系列芯片的通病,尤其是 M1 和 M2 芯片,且 BenQ 也会出现该问题。

解决方法千奇百怪,大家各有各的道理:

  • 弃用 Type-C,改用 HDMI;
  • 关闭 freesync;
  • 关闭 True Tone 和 Auto Adjust Brightness;
  • 使用 Colour LCD 色彩文件;
  • 下载 Dell Display and Peripheral Manager Application(可能是我的显示器太旧了,该软件不适配);
  • 将分辨率锁定为60;
  • 等等。

这些方法都不适用于我的情况。最终激活显示器硬件设置中的 LCD Conditioning 后,解决了屏闪问题。

另外,也有网友表示开源软件 aiaf/Stillcolor 可以通过禁用时间抖动(Temporal Dithering)永久解决该问题,我目前已安装,有备无患。

向国内用户展示Twitter X和Instagram-WordPress插件

Twitter 在 WordPress 上的常规展示方式是 嵌入时间轴,缺点是仍基于 Twitter 数据库,所以国内用户无法查看。

近期我使用的是 juicer.io,这个网站可以将 Twitter、instagram、RSS 等时间轴聚合,展示在一个网页中。

而且支持 WordPress 插件,将嵌入时间轴。优点是经过 juicer.io 的转存后,国内用户也能访问该页面:https://anotherdayu.com/timeline/

小遗憾是数据没有储存在本地,所以无法进行 SEO 索引。胜在轻量级,不折腾,

CleanShot 2024-11-16 at 09.44.35@2x.png

流程如下:


另外,昨天和评论尸交流了一下,他开发的插件可以通过 RSS 为 WordPress 载入即刻的时间轴,并且有可能为 twitter 实现类似的效果。因为是通过 RSS 实现的,数据会保存在服务器中,并可以被 SEO 索引。

目前还在测试阶段,感兴趣的朋友可以关注他的 Twitter :@JeffreyCalm ,跟踪项目进展。

PIVOT Vol.10 写作、思考、辩论

本刊物不定期发布,您可以通过 RSS 订阅:

IMG_1488.jpg

「Writes and Write-Nots」

写作困难主要因为需要清晰思考,而清晰思考本身并不容易。然而,许多重要工作却需要写作,从而产生压力。

随着AI技术的发展,人们可以依靠AI进行写作,这减少了这种压力,导致社会可能分裂为会写作的人和不会写作的人。

作者认为,这种趋势很危险,因为写作是思考的一部分,没有写作能力的人可能丧失某种思考能力。就像在工业化前大多数人因劳动而强壮一样,以后只有那些选择写作的人才会保留这种「思考」能力。

「少许荷西分享的几场辩论赛」_

「Meta Segment Anything Model 2」

SAM 2是一款用于分割图像和视频中物体的模型,能够快速、精确地选择任意图像或视频中的物体。

「Ancient parasite analysis: Exploring infectious diseases in past societies」

古代寄生虫研究对于了解过去社会的健康状况和生活方式至关重要。通过在考古环境中鉴定寄生虫,可以洞察古代人的饮食习惯和卫生状况。寄生虫的存在受到卫生设施、饮食结构和环境条件等多重因素影响。一些寄生虫具有广泛分布,而另一些则呈现地域特性,反映了人与环境的复杂互动。

IDDO | Infectious Diseases Data Observatory

传染病数据观测站 (IDDO) 是一个由全球传染病和新发感染群体组成的科学独立的多学科联盟。它提供了将数据转化为证据的方法、治理和基础设施,从而改善全世界患者的治疗结果。目前,IDDO 有八个活跃的研究领域,还有更多领域已经在开发或正在研究可行性。

「Do All Roads Lead to Philosophy on Wikipedia?: They Do About 97.3% of the Time」

在浏览维基百科时,用户最终会随着好奇心接触到哲学。

以Mariya Takeuchi的歌曲《Plastic Love》为例,用户通过从一个条目跳转到另一个条目,最终浏览到哲学相关的页面。截至2016年2月,约有97%的条目都与哲学相关,而其他条目则要么形成循环,要么没有链接。

维基百科不断变化的特性意味着这些链接可能随着时间的推移而变化,受到用户编辑的影响。例如,从“橙汁”跳转到“哲学”通常需要13个步骤,但如果链接顺序发生变化,这一过程也会随之改变。

作者强调,尽管这些变化使得绘制维基百科联系的过程变得复杂,但并不影响网络设计的核心原则。哲学是广阔知识网络中的关键纽带,与探索万物之间联系的哲学追求相呼应。

「The Peter principle revisited: A computational study」

Peter Principle(彼得原理)是一个管理学概念,核心思想是:在等级制度中,每个员工都倾向于升职直到达到他们的”无能水平”(level of incompetence)。换句话说,员工会因表现出色而获得晋升,直到他们达到一个不再称职的职位,并停留在那个位置上。

彼得原理揭示了组织晋升机制的一个潜在问题,即仅根据员工当前表现而非未来潜力的晋升政策,可能导致组织整体效率下降。这启发管理者在制定晋升政策时,应更全面地评估员工的能力和潜力,而非仅仅根据当前表现。

这篇文章则通过计算机模拟,重新审视了彼得原理。

  • 基于能力的晋升政策可以最大化组织效率,而完全随机的晋升,效率最低。
  • 提供额外培训可以帮助员工更好地适应新职位,减轻彼得原理的负面影响。
  • 引入降职和换岗机制,而非简单地将其困在不称职的位置上。
  • 彼得原理揭示了等级制度的潜在低效(inefficiency)。
  • 探索扁平化、去中心化等新型组织结构,减少等级化可能带来的负面影响。
  • 应建立更全面的绩效评估体系,综合考虑员工的能力、潜力、soft skills等多方面因素,而非仅仅局限于当前的KPI。

「How walkable is your city? Online tool shows how major centres measure up」

15-minute city 指居民步行或骑行15分钟内可以生活必须和服务是理想的,但大部分城市无法达到这一目标,这该研究设计了一个交互式的网站,用于浏览不同区域生活必须服务的可及性:https://whatif.sonycsl.it/15mincity/

「Find success without a “performance-based identity”」

基于绩效的身份是通过与他人比较的绩效结果来定义自我价值,而这种模式通常由偶然的自我价值、对失败的恐惧和完美主义驱动。这种身份模式可能短期有效,但不可持续,会对个人福祉、关系及潜力产生负面影响。当个人的身份建立在绩效之上时,任何失误都被视为威胁,导致压力和焦虑增加。

「名人和名言」

社会上崇敬名人,于是以为名人的话就是名言,却忘记了他之所以得名是那一种学问或事业。 名人被崇奉所诱惑,也忘记了自己之所以得名是那一种学问或事业,渐以为一切无不胜人,无所不谈,于是乎就悖起来了。 其实,专门家除了他的专长之外,许多见识是往往不及博识家或常识者的。

——鲁迅


❌