Versun

对待生命,不妨大胆一点,因为我们终将失去它



使用 Strava 跟踪国家领导者

2024-11-02

文章:Tracking World Leaders Using Strava

早在 2018 年,人们就注意到,使用 Strava 健身应用发布的数据,您可以找到秘密军事基地。士兵和其他军事人员都在使用它们来追踪自己的跑步情况,你可以查看公开数据,找到本不应该有人跑步的地方。

六年后,问题依然存在。Le Monde也报道了使用 Strava 数据用于跟踪世界各国领导人的行踪。他们没有佩戴跟踪设备,但他们的许多保镖佩戴了。

社工无处不在,比如还追踪名人的私人飞机来进行跟踪的,追踪披萨的订购数量等,这种side-channel attack非常广泛,想象力是唯一能束缚它的


网络框架 Hono 的故事,来自 Hono 的创建者

2024-11-02

文章:The story of web framework Hono, from the creator of Hono

挺有意思的一篇 Hono 的介绍,这是一个快速、轻量级的 Web 框架,支持任何 JavaScript 运行时,来自Cloudflare。

如果说 Next.js 是从客户端 React 开始的全栈框架,则 Hono 正试图成为一个从服务器端开始的全栈框架。

看起来概念比React简单很多,至少我能看懂,非常看好这个框架


技术雷达 第31期

2024-11-01

PDF:技术雷达 第31期
来自Thoughtworks团队的“技术雷达”报告,该团队每半年左右会针对近半年的工具、技术、平台、语言、框架等进行指南。
报告质量很不错,上一次的报告我还没看完,积灰很久了


高和低

2024-11-01

文章:High and Low
换一个角度来看待一个问题,不再将问题描述为大或小,而是高或低
类似于第一性原理,当出现一个问题时,可能这个问题是由于一个更高层次的问题而产生的,所以解决当前问题并不是最佳选择,而应该找出造成该问题的上层问题去解决。

今天在HN上看到了一个帖子似乎也印证了这个想法:

人们不断为 JavaScript 语言发布新的捆绑器、压缩器、转译器、包管理器。这是一个警告,表明这门语言有些地方出了问题。
显然经过一次次重写,问题还没有得到解决。对我来说,这表明存在根本问题:我们没有在正确的层次上解决问题,或者可能根本无法解决。


Firefox隐私设置入门指南

2024-10-30

宗旨:适合新手,简易快速

使用工具:https://github.com/arkenfox/user.js

参考资料https://github.com/arkenfox/user.js/wiki/3.4-Apply-&-Update-&-Maintain#-apply

平台:桌面端

第一步:下载Firefox

如果从 Mozilla 网站下载的Firefox,会自动生成一个唯一标识符用于遥测。

因此建议从 Mozilla FTP 下载没有标识符的安装包,截止2024年10月30日的最新版本是132.0

第二步:安装Firefox

第三步:下载配置文件

共需要下载3个文件:

  1. user.js
  2. prefsCleaner:清理无用的配置(wiki)
    1. Linux/Mac:https://github.com/arkenfox/user.js/blob/master/prefsCleaner.sh
    2. Windows:https://github.com/arkenfox/user.js/blob/master/prefsCleaner.bat
  3. updater:将user-overrides.js中的内容附加到user.js中(wiki)
    1. Linux/Mac:https://github.com/arkenfox/user.js/blob/master/updater.sh
    2. Windows:https://github.com/arkenfox/user.js/blob/master/updater.bat

第四步:配置Firefox

  • 打开Firefox,输入 about:profiles
  • 打开Profile: default-release的Root Directory文件夹,并进入default-release文件夹,然后将下载的3个文件复制进去
  • 可以自行创建user-overrides.js 添加额外的配置,可参考我使用的
  • 关闭Firefox
  • 双击运行prefsCleaner
  • 双击运行updater

第五步:验证配置

输入about:support

查找user.js

如果显示如下图,则表示应用成功:

firefox-7d46e272.png 34.7 KB

也可在about:config中搜索相关的配置,查看是否和user.js中配置的一样

维护和更新

适用于更新user.js或者user-overrides.js

  • 关闭 Firefox 浏览器
  • 运行updater
  • 运行prefsCleaner

进阶: 阅读arkenfox/user.js的wiki


批量将Miniflux阅读器的条目设置为已读

2024-10-24

由于follow阅读器今天公测,导致服务器卡爆,内容完全刷新不出来。
这件事让我再次警觉起来,意识到了掌握自己数据的重要性。
因此我重新启用了Miniflux,并重新导入了源,但同时也丢失了阅读记录,产生了大量的未阅读条目。
所以只能从数据库层面,进行筛选,将发布时间大于7天的内容全部设置为已读,步骤如下:
1.首先要连接到miniflux的pg数据库:docker exec -it <container_name> psql -U miniflux -d miniflux
2.查看会影响多少条记录:

SELECT COUNT(*) 
FROM entries 
WHERE status = 'unread' 
AND published_at < (CURRENT_TIMESTAMP - INTERVAL '7 days');

3.如果数量合理,执行更新:

UPDATE entries 
SET status = 'read' 
WHERE status = 'unread' 
AND published_at < (CURRENT_TIMESTAMP - INTERVAL '7 days');

4.验证更新结果:

SELECT COUNT(*) 
FROM entries 
WHERE status = 'unread' 
AND published_at < (CURRENT_TIMESTAMP - INTERVAL '7 days');

这次应该返回0条记录。


为什么要早起

2024-10-18

我从大一开始到现在,几乎每天,我的生物钟准时在5点到6点半期间叫醒我(取决于阳光)
我已经养成了习惯,所以并不痛苦,但当我想让自己的女儿也养成早起的习惯时,才发现确实很难

但换一个角度看,并不是她不愿意早起,而是早起没事做,或者没有动力早起,那么这个问题就好解决了。

我告诉她:早起可以在上学之前做任何你想做的事,有很多玩的时间,你想玩什么都可以,我们不会管,只要按时吃饭上学就行。
女儿:包括玩switch游戏吗
我:是的

正如预见的那样,接下来的几天,我只要提前半小时叫她,她都能起来,并玩一会游戏,开开心心的吃饭上学,不在像以前那样,因为赖床,搞的大家匆匆忙忙,心情很不好。

当然,任何事都有代价,比如玩游戏伤眼睛就是代价,但还是可控的。
而且早上的情绪非常能影响一天的活力,所以还是很值得的。


有助于延年益寿的事

2024-10-18

来源:https://domofutu.substack.com/p/these-18-things
以下是我目前认为较易实现的事项清单,仅供参考。
请根据个人情况灵活采纳,并注意适量实践。
请注意,这些建议不包含任何形式的保证。
此外,我已根据主观判断,按照效益从高到低进行了排序。

  1. 补充维生素E、维生素C、多酚,有助于减少 DNA 的氧化损伤
  2. 减少接触污染物和紫外线辐射,避免吸烟
  3. 保持规律的睡眠、早晨的阳光照射、补充褪黑素有助于调节睡眠周期
  4. 补充维生素D、锌,增强免疫功能
  5. 有氧运动、阻力训练、高强度间歇训练(HIIT)
  6. 冥想
  7. 桑拿
  8. 间歇性禁食,有助于修复蛋白质/促进衰老细胞的清除
  9. 减少糖和精制碳水化合物
  10. 补充富含欧米伽-3 脂肪酸(如鱼油)、槲皮素和鱼黄素
  11. 乳酸杆菌、双歧杆菌、菊粉和抗性淀粉等膳食纤维
  12. 生酮饮食(高脂肪高蛋白低碳水)
  13. 长期禁食可刺激干细胞再生,尤其是在免疫系统中

Rails的helper_method和Concern

2024-10-12

今天在做用户认证时,在控制器中一直用authenticated?来判断用户是否登陆,但一直不成功。

查了下,发现authenticated?Authentication Concern的helper_method方法,
而helper_method是暴露给view层使用的,在其它控制器中是不能直接使用的,
需要在控制器的class下include Authentication才可以使用


Conern是Rails非常有用的一个概念,在以前,我经常会写多重继承的代码,
比如“大象”类继承“哺乳动物”类,而“哺乳动物”类又继承自“动物园”类,
这时候为了兼容,很容易出现“动物园”类里有很多“大象”类和“哺乳动物”类所不需要的方法,
这就造成代码重用性的问题,而且也不容易维护。
而Conern允许将共享的代码逻辑封装到单独的可重用的模块中,通常存放在 app/models/concernsapp/controllers/concerns 目录下,
然后在需要使用这个 Concern 的类中,使用 include关键字导入就行了

class SomeController < ApplicationController
  include Authentication

  # 现在可以使用 Authentication 中定义的方法和回调
end

比如“哺乳动物”类就可以作为一个Conern,“大象”类直接继承自“动物园”类,但可以在“大象”类里include “哺乳动物”类来使用需要的方法。

有点像 接口/协议 的概念,但接口/协议主要是定义/签名,不一定有方法的实现,而Conern直接提供方法的实现,更注重代码的重用性,其它不用考虑


Rails 8的Authentication模块

2024-10-11

如果你像我一样刚开始学习Rails,则建议直接开始使用Rails 8.0.0.beta版本,因为该版本更新优化了很多功能,最重要的是加入了身份验证模块抽象层,不用像7之前的版本那样麻烦。
在这里记录下我的相关笔记

  • 一键生成身份验证系统: bin/rails generate authentication
    该命令会创建User、Current、Session三个模型,并且会在app/controllers/conerns下添加Authentication模块
  • 只有认证模块,没有注册模块
  • 默认使用邮箱和密码进行认证
  • Authentication模块的方法,建议直接打开该模块文件,就55行代码,非常的简洁明了
  • 查看三个模型对应的的controller文件,也非常简洁明了。。。
  • 认证流程(via):
    rails-8-authentication-f0149eb4.png 75.3 KB
  • 重置密码流程(via):
    rails-8-authentication-d01eb7d5.png 111 KB
  • 添加注册流程

    1. 创建Users Controller: bin/rails g controller Users

      # File: app/controllers/users_controller.rb
      class UsersController < ApplicationController
      allow_unauthenticated_access only: %i[ new create ]
      def new
      end
      
      def create
      @user = User.new(user_params)
      if @user.save
        redirect_to root_path, notice: "User was successfully created."
      else
        render :new
      end
      end
      
      private
      def user_params
      params.require(:user).permit(:email_address, :password, :password_confirmation)
      end
      end
    2. 创建view文件
      #File: app/views/users/new.html.erb
      <%= tag.div(flash[:alert], style: "color:red") if flash[:alert] %>
      <%= tag.div(flash[:notice], style: "color:green") if flash[:notice] %>
      

      Sign Up

      <%= form_with(model:User) do |form| %> <%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address] %>
      <%= form.password_field :password, required: true, placeholder: "Enter your password", maxlength: 72 %>
      <%= form.password_field :password_confirmation, required: true, placeholder: "Confirm your password", maxlength: 72 %>
      <%= form.submit "Sign up" %> <% end %>
    3. 添加route
      #File: config/routes.rb
      resources :users