WebAssembly (Wasm):何时(以及何时不)使用它 |
2024-11-26 |
文章:WebAssembly (Wasm): When (and When Not) to Use It
请记住,WebAssembly 并不是为了提高速度。它是以 JavaScript 开发人员感觉自然的方式,将现有工具和功能引入web平台。当你在其他语言中拥有一个可以解决复杂问题的可靠库时,WebAssembly 就为你提供了一座桥梁,将该解决方案引入网络
完成的艺术 |
2024-11-22 |
个人项目没有截止日期。如果没有截止日期的外部压力,我们很容易陷入完美主义的陷阱。我们会发现自己总是在无休止地调整和改进,总是在追逐难以捉摸的 "完美 "解决方案。具有讽刺意味的是,这种对完美的追求往往会导致不完美的结果–或者根本没有结果。
在职场中,最后期限迫使我们分清轻重缓急,做出务实的决定。但在个人项目中,无限时间的奢侈可能会成为一种诅咒,让我们有理由在微小的细节上花费数小时、数天甚至数周的时间,而实际上,这些细节对项目的整体成功或实用性几乎没有影响。
这就严酷地提醒我们,有时候,"足够好"才是真正的完美,尤其是当我们根本没有完成项目时。
我中枪了,好多个人项目就是这么无疾而终的,比如最近在写的博客引擎的项目,其实可以发布了,但总有好多功能想加上,总是在想“这个功能做完就发”,然后就一直拖到了现在。。。。。。。
文章最后给出了一些策略来避免这种情况的发生:







硬币往往会落在开始的那一面 |
2024-11-22 |
论文:Fair coins tend to land on the same side they started: Evidence from 350,757 flips
无用的冷知识:抛硬币时,有51%的概率会和开始时的硬币同一面
《碟中谍:最后的清算》预告片 |
2024-11-22 |
预告片:https://www.youtube.com/watch?v=NOhDyUmT9z0
汤姆·克鲁斯的新电影《碟中谍:最后的清算》将在2025年5月23日上映
碟中谍系列竟然还在拍,汤姆·克鲁斯竟然也还在跑,不愧是新世纪的成龙
期待!
捷豹迷路了,但沃尔沃知道路 |
2024-11-22 |
文章:https://world.hey.com/dhh/jaguar-is-lost-but-volvo-knows-the-way-9601033c
我前天看到捷豹的新广告时,也是一脸懵逼,“这什么鬼”
然后看了DHH说的沃尔沃EX90的广告,确实也触动了。
正好最近家里也在选车,所以顺便说两句。
家里原先是一台沃尔沃油车,开了有十几年,第一印象就是安全,所以这次换车也是首选沃尔沃,但去4S店看了XC60,并试驾了,一点惊喜没有,中控内饰车型,还是老样子,非常土,由于后续都是我们开,父母极少开,所以即使我们很想选沃尔沃,但看到那土样子实在爱不上。
我们还试驾了林肯(航海家)、比亚迪(海豹06GT)、大众(探岳)、Smart(N1)和小鹏(P7+),简单总结下:
服务:沃尔沃 >> 林肯 > 小鹏 > 比亚迪 > Smart > 大众
车型外观:小鹏 > Smart > 比亚迪 > 大众 > 沃尔沃 > 林肯
驾驶感受:沃尔沃 > 小鹏 > Smart > 大众 > 比亚迪 > 林肯
惊讶程度:小鹏 > Smart > 大众 > 比亚迪 > 沃尔沃 > 林肯
解释下这个惊讶程度,首先是小鹏,试驾体验很不错,非常适合家用,除了5米车长外都很满意,智驾体验非常好。
然后是Smart,外观和内饰非常抓我老婆的心,但我们惊讶于官方的定价策略,非常奇葩,啥都要钱,果然Smart不坑穷人
大众:本来没报希望的,除了服务态度垃圾外,试驾感受也很不错,最后竟然纳入了我们的候选名单
比亚迪:中规中矩,各方面都很稳,买不了吃亏,也谈不上性价比
沃尔沃:很熟悉的感受,依旧很土的内饰,安心,还有非常热情的服务态度!
林肯:为什么林肯能堕落成这样,和十几年前不能比
最后我们的候选名单:小鹏(P7+)和大众(探岳)
但还没有完全定下来,因为不着急用车,所以想等等明年初的电车大战,看看有没有更好的选择,心心念念小米SUV
已定小鹏P7+
Jamcorder自动钢琴录音机 |
2024-11-21 |
网址:https://jamcorder.com/
号称是“世界上第一台自动钢琴录音机”,售价99美金。
主要用于捕捉即兴即兴创作的歌曲,以midi格式记录。
虽然我不会钢琴,但这小东西看着很酷炫
Draw.Audio |
2024-11-21 |
网页:https://draw.audio/
很有意思的一个免费在线音乐玩具,官方称其为“音乐素描板和声音合成探索工具”
摆脱低潮漩涡 |
2024-11-19 |
这2天不知为啥,我的动力精力骤减,什么也不想做,只想刷手机刷视频葛优瘫。
这种感觉,我再熟悉不过了,每过一段时间,这种低潮状态就会袭来,
以前我都是放任不管,想干嘛就干嘛,正常一周多就会好转
但这次我想主动出击:
首先,我认识到,这种情绪是很正常的,无需懊恼增加负情绪,也不要强制自己去做任何困难的事情,因为这时候的意志力非常脆弱且宝贵。
其次,刷手机刷视频葛优瘫等行为可缓解症状,无非就是因为快速的多巴胺分泌,大脑尝到了甜头,获得了即时的满足感
但,既然大脑想要愉悦和满足感,那么为什么不使用质量更高的内啡肽来替代呢
所以,我做了以下这些事:
- 我去学习了以前觉得不务正业、或者暂时无用的知识;
比如使用官方教程学习Zig语言,如果你是程序员,你应该知道学习一种新语言很舒爽,因为基础知识反馈的很快且有效,就像短视频一样 - 去自己的“稍后读”库里找文章看看,因为都是自己感兴趣的,所以很容易进入心流状态
- 折腾系统、NAS等,这不用我说吧,时间黑洞,而且很爽,虽然没什么用
很快,第二天下午我就拜托了低潮状态,虽然“浪费”了一天多的时间,但至少不会再像以前那样,刷7天的短视频,而且这一天多的“无用”时间,非常“有用”,顺带还输出了这篇博文。
综上,如果你也遇到了自己的低潮期,不要懊恼烦躁,它只是一种情绪,接受它,然后去做做那些以前你想做,但觉得“无用”而没去做的事,不仅限于学习新东西,还可以是扫扫地、收拾房间、种一盆绿植等
在Rails 8中使用SQLite进行全文搜索 |
2024-11-18 |
Rails 8中添加了很多SQLite的功能,而且全都是生产可用的级别,比如非常有用的fts, 也就是full-text search,对于中小型应用相当好用,不用再单独起一个服务。
但该功能全网还没有任何教程或者信息,包括rails官方文档也暂时没有更新,所以只能查代码和一个该功能的PR
以下是配置fts的基本步骤,供参考:
场景:给博客应用添加搜索功能,索引标题(title)和内容(content),其中content是rich text类型
- 手动创建迁移文件
bin/rails g migrate CreateVirtualArticleFts
内容如下:class CreateVirtualArticleFts < ActiveRecord::Migration[8.0] def change create_virtual_table :article_fts, :fts5, ["content", "title"] end end
- 创建model文件
app/models/article_fts.rb
class ArticleFts < ApplicationRecord self.primary_key = "rowid" # 虚拟表只能使用rowid end
-
创建
app/models/concerns/article/full_text_search.rb
文件module Article::FullTextSearch extend ActiveSupport::Concern included do has_one :article_fts, foreign_key: "rowid" end class_methods do def full_text_search(input:, limit:) where("article_fts.title LIKE ? OR article_fts.content LIKE ?", "%#{input}%", "%#{input}%") .joins(:article_fts) .limit(limit) .distinct end end def find_or_create_article_fts return if article_fts sql = ActiveRecord::Base.sanitize_sql_array( [ "INSERT INTO article_fts (rowid, title, content) VALUES (?, ?, ?)", id, title || "", content.to_plain_text ] ) ActiveRecord::Base.connection.execute(sql) end end
- 在
app/models/article.rb
模型中添加导入和回调函数include Article::FullTextSearch after_save :find_or_create_article_fts
- 在
app/controllers/article_controller.rb
使用搜索参数@per_page = 10 @articles = if params[:q].present? Article.full_text_search( input: params[:q], limit: @per_page )
- 添加搜索框的前端代码
<%= form_tag root_path, method: :get, class: 'search-form' do %> <%= search_field_tag :q, params[:q], placeholder: 'Search...' %> <%= submit_tag 'Search' %> <% end %>
最后重新
db:migrate
后就可用了
macOS设置默认shell为Nushell |
2024-11-17 |


使用Nushell有一段时间了,今天总算下定决心将其设置为默认shell ,因此记录下macOS设置默认shell的过程

-
安装Nushell:
brew install nushell
-
设置环境变量:
首先查看当前已有的环境变量:$env | reject config | transpose key val | each {|r| echo $"$env.($r.key) = '($r.val)'"} | str join (char nl)
正常情况下,要删除$env.PWD
和$env.SHELL
这两个变量,然后剩余的手动添加到nushell到env.nu配置文件中:
vim /Users/YourUserName/Library/Application Support/nushell/env.nu
-
添加Nushell到/etc/shells中:
sudo echo "/opt/homebrew/bin/nu" >> /etc/shells
如果该命令报错:zsh: permission denied: /etc/shells
则可以手动修改:sudo vim /etc/shells
-
修改默认shell:
chsh -s /opt/homebrew/bin/nu
如果命令报错:chsh: /opt/homebrew/bin/nu: non-standard shell
则检查第二步是否完成 -
验证:
echo $SHELL
-
注销重新登录即可
PS:由于nushell的配置文件在Application Support文件夹下,所以我还创建了一个软链接到~/.config/nushell
下,方便备份和编辑
ln -s $nu.env-path ~/.config/nushell/env.nu
ln -s $nu.config-path ~/.config/nushell/config.nu