MoreRSS

site iconDayu | 大宇修改

喜欢写博客和摄影,喜欢折腾服务器、体验数码产品、看书、看剧。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Dayu | 大宇的 RSS 预览

急救培训

2024-12-25 20:34:37

目前国内急救培训主要有两类:

  • 美国心脏协会(AHA,American Heart Association),技能证明类证书,非政府组织,学费为 800-1000 元。优势是小班授课,有充分的联系和沟通时间,证书可在大多数国家通用。
  • 红十字会组织的急救培训,政府公益性质,课程设置稍微简单一些,大部分是免费授课。核心部分两者相通。如无出国需求,考红十字会的即可。

想着既然感兴趣,就学最完整的版本。另外,马上要出国工作 2 年,对国际范围覆盖有需求,就报名了适用范围更广的 AHA 课程。

起初,我还陷入过一个误区,以为获取 AHA 或红十字会证书之后,才能获得「好人法」的救助豁免权。但实际上根据 2021 年 1 月 1 日起实施的中华人民共和国民法典第 184 条,因自愿实施紧急救助行为造成受助人损害的,救助人不承担民事责任。

即原则上自愿的,无任何酬劳的急救都是免责的。

所以学习和考证,是为了做更充足的准备,以便在需要的时刻保护自己,帮助他人。

给自己多一份勇气。

AHA

我学习的是针对大众的 AHA HeartSaver First Aid CPR AED 课程,一天可以学完,有三场实践考核和一场笔试。心肺复苏(CPR)和自动体外除颤器(AED)是培训的重点,还包括很多生活中常见的急救知识。

知识量挺大的,上了一天课头晕晕的,仿佛回到了高中。

同场次有6名学院,其中 2 位马拉松爱好者,2 位健身爱好者,一位很精神的初中生,和我。

小缺点是课程设计虽然经典,且能让所有人获得足够的信息,但确实陈旧了一些,大部分时间在看录像带,体验欠佳。

国外 AHA 课程允许学员先在家中通过网络课程学习视频内容,随后前往 AHA 培训中心进行实践测试,最终获得认证。这样更方便安排时间,人性化很多!

IMG_2560.jpeg

AED 地图

目前国内寻找附近AED的方法主要有以下几种:

  • 最近的地铁站;
  • 在大商场的话,快速联系保安;
  • 微信小程序里搜:AED 急救地图(左);
  • 微信-我-服务-城市服务-搜索「AED网点查询」(右),信息较多!目前测试了几次,离开微信之后,总是加载不出来;
  • 高德、百度地图等软件中搜索 AED,信息较少。
CleanShot 2024-12-25 at 20.01.38@2x.png

国外的我则找到了这一款软件 Life Saver,等以后试试看!

IMG_2593.PNG

对了,今年刚好是美国心脏协会成立 100 周年。

祝大家身体健康!

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

2024-12-20 10:59:27

# 引

将 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/gotest/NeoDB.Integration.zip

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

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

# 示例

在 WordPress 页面或文章中,使用以下短代码来显示数据:{neodb_page},使用时请将{ }符号换成[ ]。

Settings-NeoDB Settings 中可调整显示的内容、手动更新和清理数据库。

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

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

# 参考资料

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

2024-12-20 00:08:32

朋友们,已将该功能整合成一个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

好好吃饭 意大利肉酱面

2024-12-09 13:21:40

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

祝大家有个好胃口!

被烹饪的数据 Cooking Data

2024-12-07 20:47:34


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

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

本文是 Cooking Data 读后感。

幻想中的数据

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

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

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

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

文化盲点

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

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

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

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

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

不对等

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

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

礼物

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

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

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

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

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

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

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

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

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

剑玉 Kendama

2024-12-07 17:21:45

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

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

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

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

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

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

.png

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

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

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