avatar
Rei
用 Postal 搭建邮件服务器
最近我用 Postal 搭建了一个邮件服务器,体验比想象中更好,迫不及待分享一下经验。 为什么要搭建邮件服务器 发邮件是 Web 服务常见的需求,例如账号验证,密码重置等等。一般情况下推荐使用第三方的邮件服务,因为自建邮件服务器声誉不足容易被判定为垃圾邮件。 不过第三方服务也存在一些问题: 价格昂贵。如果只是发送事务性邮件那么支出不高,而要做邮件列表等发送量大的功能时价格就不能忽视了。 共享声誉。第三方服务的邮件服务器是在一个…
avatar
yuan
Svelte props or component events?
在 Svelte 中,一个组件的事件具体行为如果必须由外部来定义的话,有两种解决办法,一种是用 props, 一种是组件的自定义事件。 使用 props 的写法: <!-- App.svelte --> <script> import Inner from './Inner.svelte'; let name = 'Hamburger'; function alertName() { alert(name); } </script> <Inner name={name} sayMyName={alertName}/> <!-- Inner.svelte --> <script> export let name; export let sayMyName; </script> <form on:submit|preventDefault={sayMyName}> <input bind:value={name}/> <button type='submit'>Say it!</button…
avatar
NoCode
docker ubuntu 20.04 config timezone
ENV TZ=Asia/Shanghai RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \ && apt-get update \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ && apt-get install tzdata \ && apt-get clean \ && apt-get autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 参考 https://dev.to/0xbf/set-timezone-in-your-docker-image-d22
avatar
yuan
利用 Paging 3 给 RecyclerView 列表分页
前置知识: Kotlin Flow 的使用; Android 的 view binding; RecyclerView 的基本用法。 Paging 3 基本用法 首先实现一个 PagingSource<Key, Value> 类,这里的 Key 用于标识当前页,通常是当前的页码,Value 则是列表上每一项的具体内容对应的模型。例如: class StuffPagingSource : PagingSource<Int, StuffResponse>() PagingSource 需要实现两个方法,一个是 load() 方法,用于从数据库或者远程 API 加载当前页所需要的数据。在该方法中,你主要需要做的是将当前页的页码、上一页的页码以及下一页的…
avatar
yanghailong
Vue.js 项目本地调试 session 丢失问题
进行 Vue.js 本地调试时,遇到了 API 请求到后端服务后 session 丢失的现象。 本地开发环境: 后端服务是 SpringBoot 本地启动的项目,运行在 8080 端口; Vue.js 本地调试时启动在 8081 端口; 排查发现多个请求中 JSESSIONID 会发生变更,导致前面登录时写入的 session 后续请求读取不到,都是 null。 如下面两张图所示的正常情况下,JSESSIONID 是用户请求服务端时服务器生成并通过 HTTP response 写 Cookies 到浏览器,浏览器后续访问便会带上该 Cookies…
avatar
steve lee
Elixir Note - Concurrency
For example, we have a simple module to fetch the price of a given ticker symbol (or stock symbol) from API and parse the results. defmodule Worker do def price_of(ticker) do call_api(location) |> parse_data end defp call_api(ticker) do # function to call api end defp parse_data do end end Now we can start making our code concurrent, with two approaches: 1. Use Elixir primitive process: defmodule Worker do def loop do receive do {sender_pid, ticker} -> send(sender_pid, {:ok, price_of(ticker)}) _ -> IO.puts "don't know how to…
avatar
4EVERLAND
如何将WordPress多媒体内容储存到4EVERLAND进行免费去中心化存储
介绍 WordPress (WP, WordPress.org) 是一个免费的开源内容管理系统 (CMS),用 PHP 编写并与 MySQL 或 MariaDB 数据库配对。功能包括插件架构和模板系统,在 WordPress 中称为主题。 WordPress 可以通过插件将多媒体内容存储到 4EVERLAND,4EVERLAND 提供去中心化的存储服务,可以将相应的多媒体内容同步到去中心化的 IPFS 或 Arweave。将多媒体内容保存在分散的存储服务上具有以下好处: 多媒体内容将具有更高级别的可靠性。 您的服务器不需要为多媒体内容提供额外的…
avatar
4EVERLAND
客观的分析Filecoin与Arweave,4EVERLAND又在他们的基础上做了哪些改进?
去中心化存储及分布式存储作为未来Web3发展的必要基础设施,正伴随Web3发展逐步成长,这是已知的共识。而IPFS作为目前行业使用最为广泛的存储协议,其市场需求也正在不断激增。Pinata作为一个的中心化的IPFS Pin Service服务在近期完成2000多万美金融资,也可见市场对于IPFS未来整体市场的看好。 当然IPFS存在很多自身的局限性,例如IPFS没有内置的激励机制,这导致IPFS的实际使用效果与预期相差甚远,资源的访问、上传等效率受限于目前…
avatar
鱼翅
数据结构其二 并查集
前言 看了下时间距离上一篇 线性表 的文章已经过去了半年了…… 虽然这段时间倒也没有停止学习,但也由于各种原因总之是一直拖着没产出。所幸最近因为一些机缘巧合杠上了并查集,趁热打铁的赶紧把这篇文章写了。 考虑到自己学习这些东西的过程其实也不是线性的(总是忍不住东搞搞西搞搞),所以这篇就以更加轻松的方式来简单分享一下最近对并查集这种数据结构的学习好了…
avatar
4EVERLAND
如何参与4EVERLAND贡献者计划并获得奖励
4EVERLAND 贡献者计划启动已经有一段时间了,很高兴看到许多社区成员积极参与并努力共同建设和推广 4EVERLAND。本教程的目的是鼓励更多想参与贡献者计划但不知道如何参与的人参与社区建设并获得丰厚的回报。贡献者计划:4EVERLAND社区贡献者计划旨在鼓励更多用户参与我们的社区发展!我们认为这个程序是以用户为中心的。所以,让我们一起建设一个强大、健康、繁荣的 Web3 社区吧!参与者可以通过完成任务获得“积分”,成为不同级别的…
avatar
peiming
OpenWrt 给指定设备分配不同网关/旁路由
问题 Xbox 上的极限竞速:地平线下载调教、涂装以及拍卖场功能访问都很慢,基本不可用,需要科学上网,所以选择旁路由透明代理实现科学上网。但是旁路由会影响局域网内的所有设备,如何只给Xbox设置透明代理呢? 解决方案 方案一:静态 IP 给 Xbox 设置静态IP,网关填旁路由的IP即可 方案二:DHCP 根据 Mac 地址指定网关 vim /etc/dnsmasq.conf 添加 dhcp-host=A1:B2:C2:D4:E5:F6,set:TPROXY dhcp-option=tag:TPROXY,3,10.0.0.121 dhcp-option=tag:TPROXY…
avatar
busylog
Android-x86 manual install & grub2 boot
required files: kernel, initrd.img, system.sfs under /Android (ext4 filesystem). optional: data.img (ext4 filesystem), system.img (ext4), system/default.prop (system extracted) the init will check every block device: for device in ${ROOT:-/dev/[hmnsv][dmrv][0-9a-z]*}; do check_root $device && break 2 mountpoint -q /mnt && umount /mnt done grub config: set kd="/Android" search --no-floppy --set android -f $kd/kernel set root=$android linuxefi $kd/kernel root=/dev/ram0 $src SRC=$kd initrdefi $kd/initrd.img boot modified from https://www.android-x86.org/source.html
avatar
NoCode
npm postinstall 场景Docker构建优化
有些项目中 npm 会用到postinstall这个配置在安装完依赖做一些事情,这样在Docker 构建的时候,想缓存依赖的话会麻烦点,必须把代码整个复制,不然跑postinstall的就可能失败,可以使用 --ignore-scripts 优化,把postinstall 的逻辑拆开,安装完依赖后跑 比如 { "name": "dataengine-doc-front", "version": "0.1.0", "private": true, "scripts": { "dev": "NEXT_PUBLIC_APP_ENV=local next dev", "postinstall": "npm run generate:nav", "generate:nav": "ts-node -O '{\"module\": \"commonjs\"}' scripts/generate-navigation.ts", "dev2": "NEXT_PUBLIC_APP_ENV=development next dev", "build": "npm…
avatar
busylog
OpenWRT as client (ver 2022)
reset eth0 to dhcp (dhcpv4 only) client # remove br-lan uci delete network.@device[0] uci set network.lan.device=eth0 uci set network.lan.proto=dhcp # disable dhcp. also needed in VM/container. uci set dhcp.lan=dhcp uci set dhcp.lan.ignore=1 uci set dhcp.lan.dhcpv4=disabled uci set dhcp.lan.dhcpv6=disabled uci set dhcp.lan.ra=disabled uci set dhcp.lan.ndp=disabled # optional? uci set dhcp.odhcpd.maindhcp=0 /etc/init.d/odhcpd disable add wan6 (but wan6 will be in WAN zone, lan is in LAN zone?! that is quite wrong...) uci set network.wan6=interface uci set network.wan6.proto=dhcpv6 uci…
avatar
Rei
更大的编辑界面,以及一些 UI 调整
在上一次的 UI 改动中,编辑界面改得像个论坛编辑器,这收到了一些负面的反馈,认为编辑体验倒退了,我觉得说得有道理。GeekNote 的长期目标是建立一个写作社区,但它首先应该是一个体验良好的写作工具,所以现在编辑器改回了以往的全屏沉浸式界面: 希望这次改动能让写作体验再次愉快。 提示:编辑界面可以用快捷键 Ctrl+S(Windows/Linux)或者 Command+S(Mac)快速保存。 其他的一些 UI 改动有: 首页三栏布局改成两…
avatar
Rei
处理 Cloudflare 与 Let's Encrypt DNS-01 验证冲突的问题
问题 上个月某一天,GeekNote 的 Cloudflare 代理提示 Error 526。Error 526 是指 CloudFlare 的节点无法验证源服务的 SSL 证书。相关文档如下: https://support.cloudflare.com/hc/en-us/articles/115003011431-Troubleshooting-Cloudflare-5XX-errors#526error GeekNote 部署在 fly.io 平台,fly.io 为网站生成证书用的是 Let's Encrypt,按理说会自动更新证书,问题出在哪呢? 解决 我尝试到 fly.io 的控制台重新申请证书,但 Fly 的证书颁发进度一直卡在 Wating 状态。 随后我继续调试,发现在 DNS 记录有…
avatar
电子芥末
PyBoke: 极简博客生成器
使用过程极简 功能极简,代码极简 因为功能少、代码简单,任何懂编程的人(只要懂 Python 基础) 就能在短时间内完全看明白本软件的全部代码并且随心所欲地修改。 主要功能 只支持 Markdown 格式,用户只需要用 Markdown 写文章,即可生成静态博客。 添加文章时,不需要在任何地方填写文章标题、文章分类、标签、日期…… 这些全部都不用管,只管写文章 博客页面有一个 "random" 按钮,可随机阅读文章 自带四个极简主题 (CSS style), 可自行添加更…
avatar
4EVERLAND
🎁来解锁4EVERLAND奖励中心
我们很高兴地报告,4EVERLAND 仪表板的奖励中心活动现已上线,有 13 GB 的免费 IPFS 存储空间可用于完成所有任务。 活动如下!让我们开始行动吧! 加入我们的 Discord 即可获得 1GB 的 IPFS 存储空间! 关注我们的推特以获得 1GB 的 IPFS 存储空间! 订阅我们的时事通讯以获得 1GB 的 IPFS 存储空间! 以 5 美元存入您的帐户或邀请 3 位新用户每人获得 5GB 的 IPFS 存储空间! 我们欢迎所有新老用户体验我们的产品并同时获得免费…
avatar
uptonking
test geeknote editor
富文本 默认视图采用普通文本的格式,预览会渲染markdown 表格 图片
avatar
Rei
用 Puppeteer 生成网页预览图
问题 现在社交网络一般都支持网站设置预览图,有预览图的网页能更占据更大的展示空间,提高点击率。 GeekNote 此前已支持作者自己设置文章封面,并且默认将封面设为预览图。但不是所有作者都有空设置封面,影响传播效果。 于是我就想给网站加上自动生成预览图的功能,这个功能要怎么实现呢? 解决方案 基本的思路如下: 用 HTML/CSS 设计预览图的内容。 将 HTML/CSS 内容转换成图片。 在网页 head 添加相关的 meta tag…