avatar
xfyuan
Good concerns
本文已获得原作者( Jorge Manrubia )和 37signals 授权许可进行翻译。原文描述了在大型代码库中使用 Concern的一些设计原则。 原文链接:Domain driven boldness 作者:Jorge Manrubia(Github、Twitter),居住于西班牙瓦伦西亚,目前工作于 37signals,诸多 Ruby、Rails 的 Gem/Library 的作者,比如:Active Record Encryption(已被纳入 Rails 7 成为默认特性)、mass_encryption、console1984、audits1984、ib_ruby_proxy、impersonator、turbolinks_render 等 站点:37signals 以创建了 Basecamp 和 HEY 而举世闻名,也撰写了很多商业和软件相关的书籍(Getting Real…
avatar
Rei
用 Caddy 自动申请主域名、子域名和自定义域名的 HTTPS 证书
SaaS 支持客户子域名和自定义域名是很常见的需求。Caddy 是一个支持自动申请 HTTPS 证书的 Web server。最近用 Caddy 实现了子域名和自定义域名的自动 HTTPS 配置,记录如下以供参考。 主域名证书 Caddyfile 内容如下: domain.com { reverse_proxy localhost:8080 } DNS 只需要将域名 A 记录指向 IP,Caddy 即可自动申请 Let's Encrypt 的证书。 ⚠️ Caddy 的 data 目录存放着申请到的证书,必须将它配置在持久化的储存卷。 子域名证书 为了支持无限…
avatar
鱼翅
吐槽一下:还得是拓展坞懂视频接口
国际惯例,________。 保命声明: 第一、纯吐槽,我是硬件小白里的小白里的小白,说错了恳请哥哥姐姐们多指正 第二、不是水军,不是软文,哪有软文骂产品的 第三、还是 tmd 的公平 一台显示器整出一档子问题 因为早就受够了那台 1080p 的显示器,趁着 618 入了一台新的 27 寸显示器,2k 8bit,两个 HDMI2.0 接口和一个 DP1.2 接口,根据产品介绍,HDMI2.0 接口下可以达到 2k144hz,dp1.2 接口下可以达到 2k180hz 。 小…
avatar
Rei
合集功能已经被书签替代
原合集功能借鉴了 YouTube 的 playlist 功能,通过设置公开或者私有同时承担了收藏和分享的功能。经过观察,在实际使用中合集功能主要作用还是收藏,分享功能并不实用。 为了简化操作,现在用书签功能替代原先合集的收藏功能,只要点击文章旁的书签按钮即可完成收藏: 要查看书签,点击个人菜单的书签选项: 原先所有的合集数据都已经迁移到个人书签之中,如果发现问题请联系 [email protected]
avatar
写 bug 的大耳朵图图
Jmeter源码系列(1) - NewDriver 类详解-Jmeter 的启动器
写在前面的话 Jmeter 全称(Apache JMeter)是一个开源的、功能强大的性能测试工具,用于对各种应用程序和协议进行功能、负载、压力和性能测试。它被广泛应用于软件开发和计划阶段,以确保应用程序在各种负载情况下的稳定性和可靠性。 本系列将从 Jmeter 代码层面陆续剖析其实现原理,包括但不限于 Jmeter 设计思路,Jmeter 核心对象/接口/方法。如有错误,敬请指正! NewDriver NewDriver 是 org.apache.jmeter 包下的一个类,如下是 NewDriver 源码中的类说明 /** * Main class for…
avatar
写 bug 的大耳朵图图
Jmeter源码系列(2) - Jmeter 类详解-命令行参数处理CLOptionDescriptor
上一篇我们详细了解了 Jmeter 的启动类 NewDriver,知道了 NewDriver 会通过反射调用 Jmeter.start(String[] args)方法来启动 Jmeter,今天我们来分析下,Jmeter这个类内部到底做了什么。本篇章不会直接开始讲 start 方法,而是会先讲一下 Jmeter 类里面设置的 static 变量,因为这些变量会影响 jmeter 启动时的一些行为。 Jmeter 类的作用 Jmeter类位于 org.apache.jmeter 包下,通过类注释可以了解到它的作用 /** * Main JMeter class; processes options and starts the GUI…
avatar
写 bug 的大耳朵图图
Jmeter源码系列(3) - Jmeter 类详解-start方法,Jmeter 真正的启动过程
在开始讲 start 方法前,大家先考虑一个问题,Jmeter 启动时带不带参数有什么影响?我们可以带着这个问题往下看。 Jmeter启动参数是如何传递的? 在前面两篇文章中,已经跟大家非常详细的介绍了 Jmeter 启动时会做什么,回顾一下就是: 调用 NewDriver.main(String[] args) 方法,此方法会反射调用 Jmeter.start(String[] args) 方法。 在执行 Jmeter.start(String[] args) 方法前,Jmeter 类现需要实例化,这个类中包含了非常多的静态常量,绝大多数都是跟…
avatar
steve lee
Active Storage - some techniques
Requirements Install ImageMagick or libvips. Install image_processing gem 1. Get the dimension size of an image For example, we have a model MediaAsset like this: class MediaAsset < ApplicationRecord validates :media_file, presence: true end If the blob has been analyzed, you can access the image's dimension by: media_file = MediaAsset.find(2).media_file media_file.metadata # => {"identified"=>true, "analyzed"=>true, "width"=>1000, "height"=>1017} media_file.metadata["width"] # or height You must call analyze() method if the blob hasn't been analyzed. media_file.analyzed…
avatar
Muspi Merol
改写了我用的一个翻译插件的 prompt 实测效果还行
Sider 是一个浏览器插件,有划词翻译/解释/概括等功能(基于 GPT)。我一直用它来翻译。它的默认的 prompt我觉得写得不太好,原因如下: 它只读取划选部分的纯文本,所以丢失了所有结构,在翻译代码和列表时基本上结果没法看 经常把专有名词也翻译 今天实在忍不了,想着磨刀不误砍柴工,与其每次都受气不如狠下心来花点时间把 prompt 重写一遍,效果如下: 上面是我用来翻译长段 html,可以看到专有名词和代码块没有出现不…
avatar
写 bug 的大耳朵图图
深入理解Java中的序列化和反序列化
1. 技术背景 ​ 互联网的迅猛发展受益于网络通信技术的成熟和稳定。网络通信协议是机器双方共同约定的协议。在应用层看到的是结构体、对象,但是在网络协议里,机器之间传输的都是二进制流。网络编程中,需要定义应用层协议。最原始的应用层协议是字节数组,在 Java 语言里以 byte[]体现,在C语言里以 char[]体现。不管是 Java 语言还是 C 语言,开发人员都需要知道字节数组里每个字节的含义才能保证数据写入和读取的正确性。这对…
avatar
写 bug 的大耳朵图图
Java中的异常处理
1. Java 中的异常分类 Java中的异常类均以Throwable为父类,而Throwable又派生出 Error 和 Exception 两类,区别如下 1.1 Error类及其子类 代表了JVM自身的异常。这一类异常发生时,无法通过程序来修正。例如系统崩溃、内存溢出等。与异常不同,错误表示程序无法继续执行下去,一般不需要进行捕获或处理。错误通常是由底层系统或环境导致的,它们是不可控的,最可靠的方式就是尽快地停止JVM的运行。 1.2…
avatar
写 bug 的大耳朵图图
JVM 命令/工具使用介绍
JDK 自带了非常多的工具用于管理和监控 Java 应用程序状态,对于 Java 开发者来说,了解这些工具如何使用是非常有必要的,尤其是在排查线上问题,或者使用内部网络的情况下,可能无法或不允许使用三方工具,如 arthas,jvm-tools 等,这个时候熟练使用 JDK 自带的 jvm 工具就非常有助于我们分析和解决 jvm 的问题。接下来我将对 JDK 中自带的比较常用的工具进行介绍,同时也会穿插部分其他 jvm 分析工具的讲解。 注意…
avatar
写 bug 的大耳朵图图
线上问题分析案例:一个小括号引发的惨案
悲剧的开始 2023.8.17 早上 7:30 刚睡醒,都没来得及洗漱,手机上就收到了公司运维平台发的告警 有一台服务器 cpu 使用率超过 95%了,当时没在意,以为上面正在跑任务(这个服务器上面部署的是我们自己开发的自动化测试平台,用例执行引擎是 Jmeter,后端开发框架是 springboot)。等我收拾完准备出门上班的时候,发现手机上又双收到了 2 条告警,cpu 使用率没有下去,当时在想是不是自动化任务跑的时间…
avatar
写 bug 的大耳朵图图
Java 集成Maven Embedder 编译 Maven 项目
背景 最近在开发代码覆盖率的平台,涉及到对 java 项目编译后使用 jacococli 来生成报告,需要指定 java 项目 class 文件路径和源码路径。因此,需要对用户配置的 java 项目在服务器上进行编译,Java 项目构建工具有很多种,比如 Ant,Maven,Gradle 等,本文只针对 Maven 构建的项目如何编译进行讲解。以下用于演示编译的项目是 apolloconfig/apollo 编译方案 Maven 项目编译其实很简单,常用的命令就是 mvn clean package 但是我在上面说了,我是要在部署了…
avatar
roogen
Todo/Task management Website using React
Todo/Task management_Website Todo website that keeps track of everything you need to do, allowing you to focus on what truly matters. empowers you to organize your life with precision and efficiency. Features Login/Signup (with jwt and bcrypt) Add task Update task Delete task screenshots Tech Stack Clint: React, React-router-dom, Chakra-UI Server: Node, Express, MongoDB, JWT Learn More To learn more about React Native, take a look at the following resources: React Native Website – learn more about React Native. Getting Started – an overview of React Native and how setup your environment. Learn the Basics – a guided tour of the…
avatar
Muspi Merol
如何让一个实例知晓自己的变量名
这段时间在写一个做提示工程的库,其中顺便实现了一套模板语言,其中一个模板实例的 repr 格式化时想了一种方式获得一个实例的变量名。如下所示: 我创建了一个 GitHub Gist 这段代码定义了一个名为 AutoNaming 的类,该类的作用是自动获取并绑定实例的名称。 __new__ 方法:在创建新实例时,首先调用 __new__ 方法,它创建了一个新的实例,并调用 _bind_frame 方法。 _bind_frame 方法:获取当前的堆栈帧,并将其存储在实例…
avatar
steve lee
Clojure - a whirlwind tour
Clojure is a functional, dynamic language, a dialect of Lisp that runs on the JVM. Because it is a functional language, it has some aspects we can talk about: Immutable data Higher-order function Anonymous function Recursive Lazy evaluation My first impression is that Clojure exclusively uses prefix notation, instead of infix notation like other popular languages. For example, to evaluate expression 1 + 2 * 3, we must write: (+ 1 (* 2 3)) ; => 7 All operations in Clojure take the form opening parenthesis, operator, operands, closing parenthesis: (max 3 5) ; => 5 (println "result is:" (* 2 4…
avatar
Muspi Merol
就msgpack压缩效率不如JSON的问题的讨论
在 GitHub 上的 msgpack/msgpack 库下面,很早之前我发起了这么一个话题,今天突然得到回复了 Issue 链接在此:https://github.com/msgpack/msgpack/issues/328 我个人得出的结论是: Length-Prefixed serialization languages is less friendly to compressors compared to Delimiter-Separated serialization languages indeed More fine-grained research can be done through taking equivalent structures in both JSON and MessagePack, compressing them both with the same algorithm, and then studying the resulting compressed encoding in detail to understand exactly what tradeoffs the compressor made Web developers should consider JSON fist…
avatar
steve lee
Lambda Calculus: Represent in Clojure and Elixir
Lambda calculus is the main idea behind functional programming, a complete model for computation. There are a lot of documents and courses about lambda calculus on the Internet, so in this post, I'll not focus on lambda calculus in theory. I'll take a more practical approach - use specific languages to represent lambda expressions. Clojure and Elixir have been chosen due to their coherence and elegance of design. Introduction The λ-calculus is a language with three expression forms: variable reference, e.g., v, foo; function application, e.g., (f x), (f (g x)); and function abstraction, e.g…
avatar
Rei
Rails 构建时下载 importmap 资源的方法
问题 Importmap-rails 默认的加载来源是 CDN,但是公共 CDN 在国内访问不稳定。另一个方法是将 JavaScript 下载到 vender/javascript 目录,但是这个方法需要将外部 JavaScript 签入源码管理工具,导致源码体积变大。 有没有方法可以将下载 JavaScript 延后到构建时执行呢?我经过实践找到了一个方法。 解决 第一步,修改 .gitignore 在 .gitignore 加入以下内容: /vendor/javascript 这会使 git 忽略 importmap 下载的内容。 第二步,importmap pin {package} --download 在 importmap pin 的时候加上 --download 参数,例如: bin/importmap pin sortablejs…