Homebrew 安装指定版本的三种方式

方式一:官方多版本 formula

以 MySQL 为例

先搜索软件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
brew search mysql
```shell

```shell
==> Formulae
automysqlbackup          mysql-client             mysql-sandbox            mysql@5.7 ✔
mysql                    mysql-client@5.7         mysql-search-replace     mysqltuner
mysql++                  mysql-connector-c++      mysql@5.6                qt-mysql

==> Casks
mysql-connector-python            mysqlworkbench                    sqlpro-for-mysql
mysql-shell                       navicat-for-mysql

发现可用的版本有 mysqlmysql@5.7mysql@5.6,那么我们可以安装的就是这几个大版本:

1
brew install mysql@5.7

缺点:多数软件是没有提供历史版本专属 formula,且每个都是大版本、无法具体版本号。

macOS Big Sur 解决系统文件不可修改

起因

本是为了删除 macOS 11.4 自带的 PHP,经历了一下步骤:

  • 先关闭 SIP
1
csrutil disable
  • 再删除 PHP 相关文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cd /private/etc/ && sudo rm -rf php-fpm.conf.defaultphp.ini php.ini.default

cd /usr/bin/ && sudo rm -rf php php-config phpdoc phpize

cd /usr/include && sudo rm -rf php  // 10.14之后没有此目录

cd /usr/lib && sudo rm -rf php

cd /usr/sbin && sudo rm -rf php-fpm

cd /usr/share && sudo rm -rf php

cd /usr/share/man/man1 && sudo rm -rf php-config.1 php.1 phpize.1

cd /usr/share/man/man8 && sudo rm -rf php-fpm.8

Mac 开光指南 [2022.09.27更新]

💻 一份新 macOS 快速食用方法,普适新 Mac 或重装系统。

本指南基于 MBP 14寸 12.3 系统()和 MBP 13寸 11.4 系统。

系统和软件的更新频繁,本项目不一定及时更新,故操作界面或步骤会略有差别,但影响不大。

本指南涉及内容较广,请选择适合自己的操作。

请善用 TOC 目录导航内容,GitHub 中 README.md 左侧的按钮更方便。

本指南遵循许可协议 CC BY-NC-ND 4.0(请看转载要求

博客原文地址: https://shockerli.net/post/mac-initialize

长期更新地址: https://github.com/shockerli/mac-initialize

最后更新于 2022-09-27

应用安装

安装软件

软件下载途径

  • App Store 搜索或排行榜
  • 软件的官网,都会提供下载
  • 第三方网站(不一定安全,需自行甄别)

有一些软件,是没有上架应用商店(如搜狗输入法)、或应用商店里的是阉割版本(如柠檬清理),就需要去官网下载。

下载软件时,尽量选择与架构匹配的,不要选 Universal,因为 Universal 会同时包含两个架构的软件包,体积更大但却没啥用。以下图 VSCode 为例,如果是 M1/M2 等苹果芯片则选 Apple Silicon,反之则选 Intel Chip

vscode-select-mac-platform

当然,目前绝大多数的软件是不支持这么选择的,也就是只提供了一个 Universal 通用版本,那安装后,电脑里就会多一个架构的软件,可以使用柠檬清理进行查找清理掉,不影响正常使用。

桌面上的安装包图标怎么去除?

  • 方法①:桌面上右键安装包图标,选择「推出“XXX”」。

移除桌面安装包镜像图标

  • 方法②:Finder(访达)左栏的「位置」处也有对应安装包,点按应用名称右侧的推出图标即可。

  • 方法③:重启系统后,安装包镜像会自动取消,对应的图标也会自动消失。

分析解决本地开发 Java 项目启动速度慢

启动日志

以下是个 Spring Boot 项目启动日志(已刨除无关部分)

1
2
3
4
5
...
10:30:10.110 INFO  [background-preinit] org.hibernate.validator.internal.util.Version --- HV000001: Hibernate Validator 5.4.1.Final
10:30:15.135 WARN  [main] org.springframework.boot.StartupInfoLogger --- InetAddress.getLocalHost().getHostName() took 5001 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts).
10:30:20.142 INFO  [main] com.example.test.Application --- Starting Application on jioby.local with PID 67279 (/XXX/target/classes started by jioby in /XXX)
...

原因分析

上述日志均有个特点,每个涉及 DNS 解析的都会花费 5 秒钟左右。

然后根据日志提示,看看 InetAddress.getLocalHost() 需要执行多久:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import java.net.InetAddress;

public class Demo {

    public static void main(String[] args) {
        System.out.printf("Start: %tT%n", System.currentTimeMillis());
        try {
            System.out.println(InetAddress.getLocalHost());
            System.out.printf("Mid: %tT%n", System.currentTimeMillis());
            System.out.println(InetAddress.getLocalHost());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.printf("End: %tT%n", System.currentTimeMillis());
    }
}

输出结果:

1
2
3
4
5
Start: 17:27:58
jioby.local/192.168.131.48
Mid: 17:28:03
jioby.local/192.168.131.48
End: 17:28:08

如何不靠运气致富

美国风险投资家 Naval Ravikant 有一个很有名的长推特,一共40条,题目叫做《如何致富,不靠运气》,谈了他的商业观。

Naval Ravikant 后来还有一篇长文,详细解释这些观点。

中文版翻译

以下为和菜头翻译的中文版

  1. Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy.

    去寻求财富,而非金钱或地位。财富就是你拥有资产,而资产在你睡觉的时候都还在为你赚钱;金钱是我们转换时间和财富的工具;身份是你在社会等级体系里所处的位置。

  2. Understand that ethical wealth creation is possible. If you secretly despise wealth, it will elude you.

    要明白一件事:一个人完全可以不靠坑蒙拐骗站着赚取财富。如果你在暗中鄙视财富,那么财富也会躲着你。

  3. Ignore people playing status games. They gain status by attacking people playing wealth creation games.

    别去理会那些热衷于玩身份游戏的人,他们通过攻击那些创造财富的人以获得自己的身份。

MySQL 源码阅读 —— macOS VSCode 编译调试 MySQL 5.7

最开始用的 CLion,但电脑扛不住,最终换成 VSCode,世界瞬间清净了😁

macOS + CLion 版本看 这里

环境

  • macOS Big Sur 11.5.2
  • VSCode 1.59.1
  • MySQL 5.7.35

依赖

如果以下软件未安装或版本不符合,使用 brew 安装即可

  • CMake
  • g++
  • openssl 1.1

VSCode 插件

在 VSCode 应用商店搜索并安装以下插件

  • C/C++
  • C/C++ Clang Command Adapter
  • CodeLLDB
  • CMake Tools

MySQL 源码阅读 —— 问题 expanded from macro MYSQL_VERSION_MAJOR

问题描述

在执行 make 构建时可能会报错

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Building C object storage/myisam/CMakeFiles/myisam.dir/mi_rfirst.c.o
In file included from /path/to/mysql-5.7.35/storage/perfschema/cursor_by_account.cc:28:
In file included from /path/to/mysql-5.7.35/include/my_global.h:57:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/usr/include/c++/v1/math.h:309:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/usr/include/c++/v1/type_traits:417:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/usr/include/c++/v1/cstddef:37:
/path/to/mysql-5.7.35/version:1:1: error: expected unqualified-id
MYSQL_VERSION_MAJOR=5
^
/path/to/mysql-5.7.35/include/my_config.h:404:29: note: expanded from macro 'MYSQL_VERSION_MAJOR'
#define MYSQL_VERSION_MAJOR 5
                            ^

MySQL 慢查询 —— 值类型与字段类型不一致的隐式转换

示例慢 SQL

1
SELECT * FROM task_engine_base_data WHERE outer_task_id = 1001871

场景上下文

  • 数据表结构现状

为减少阅读干扰,已去除与本案例无关的字段及索引定义

1
2
3
4
5
6
7
CREATE TABLE `task_engine_base_data` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_type_id` int(11) NOT NULL DEFAULT '0' COMMENT '任务类型ID',
  `outer_task_id` varchar(64) NOT NULL DEFAULT '' COMMENT '外部任务ID',
  PRIMARY KEY (`id`),
  KEY `idx_outer_id_type_id` (`outer_task_id`,`task_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='子任务规则表';