[appendix]
= Mac OS 使用技巧
== homebrew
=== 简介
Homebrew 是一款 Mac OS 平台下的软件包管理工具，拥有安装、卸载、更新、查看、搜索等很多实用的功能。
Homebrew 通过简单的一条指令，就可以实现包管理，不需要关心各种依赖和文件路径的情况。

=== 安装 homebrew
由于官网的安装方式会比较慢，此处我们将采用清华大学开源软件镜像站进行安装。

==== 设置环境变量
[source,bash]
----
export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
----

==== 下载并执行安装脚本
[source,bash]
----
# 下载安装脚本
git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install

# 执行安装脚本
/bin/bash brew-install/install.sh
----

==== 环境变量持久化
[source,bash]
----
# 通过以下命令将环境变量写入 ~/.zprofile 文件
echo '# Start Set PATH, MANPATH, etc., for Homebrew.' >> /Users/wangshaoping/.zprofile
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"' >> /Users/wangshaoping/.zprofile
echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"' >> /Users/wangshaoping/.zprofile
echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"' >> /Users/wangshaoping/.zprofile
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"' >> /Users/wangshaoping/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/wangshaoping/.zprofile
echo '# End Set PATH, MANPATH, etc., for Homebrew.' >> /Users/wangshaoping/.zprofile

# 关闭并重新打开终端以便环境变量生效
----

==== 检查安装情况
[source,bash]
----
brew -v
----

=== 卸载 homebrew
[source,bash]
----
# 下载安装和卸载脚本
<1> git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install

# 执行卸载脚本
<2> /bin/bash brew-install/uninstall.sh
----

=== Homebrew 术语

* Formulae：软件包，包括了这个软件的依赖、源码位置及编译方法等
* Casks：已经编译好的应用包，如图形界面程序等

=== Homebrw 文件夹用途

* bin：用于存放所安装程序的启动链接（相当于快捷方式）
* etc：brew 安装程序的配置文件默认存放路径
* Library：Homebrew 系统自身文件夹
* Cellar：通过 brew 安装的程序将以 [程序名/版本号] 存放于本目录下

=== 常用的 brew 命令
[source,bash]
----
# 查看brew版本
brew -v

# 更新brew版本
brew update

# 本地软件库列表
brew list

# 查看软件库版本
brew list --versions

# 查找软件包（xxx为要查找软件的关键词）
brew search xxx

# 安装软件包（xxx为软件包名称）
brew install xxx

# 卸载软件包（xxx为软件包名称）
brew uninstall xxx

# 安装软件（xxx为软件名称）
brew cask install xxx

# 卸载软件（xxx为软件名称）
brew cask uninstall xxx

# 查找软件安装位置（xxx为软件名称）
which xxx
----

=== brew install & brew cask install
Homebrew 提供了两种安装软件的方式，brew install 和 brew cask install，下面对两种方式进行一些解释说明。

.brew install
brew 是下载源码解压，然后 ./configure && make install ，同时会包含相关依存库，并自动配置好各种环境变量。
对于对程序员只需通过简单的指令，就能快速安装和升级本地的各种开发环境，非常快捷方便。

.brew cask install
brew cask 是针对已经编译好了的应用包（.dmg/.pkg）下载解压，然后放在统一的目录中（Caskroom），省掉了自己下载、解压、安装等步骤。
这个对一般用户来说会比较方便，包含很多在 AppStore 里没有的常用软件。

简单来说，

* brew install 用来安装一些不带界面的命令行工具和第三方库
* brew cask install 用来安装一些带界面的应用软件

== 启动、停止服务
[source,bash]
----
brew services start xxx     # 启动名为 xxx 的服务
brew services stop xxx      # 停止名为 xxx 的服务
brew services restart xxx   # 重启名为 xxx 的服务
----

== 国内镜像配置
=== 安装
[source,bash]
----
# 设置环境变量
export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
export HOMEBREW_PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"

# 从本镜像下载安装脚本并安装 Homebrew / Linuxbrew
git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install
/bin/bash brew-install/install.sh
rm -rf brew-install

# 设置环境变量
test -r ~/.bash_profile && echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.bash_profile
test -r ~/.zprofile && echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
----

=== 替换现有仓库上游
[source ,bash]
----
# 设置环境变量
export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"

# 更新 brew
brew update

# 设置环境变量
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"


brew tap --custom-remote --force-auto-update homebrew/core https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
brew tap --custom-remote --force-auto-update homebrew/cask https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git
brew tap --custom-remote --force-auto-update homebrew/cask-fonts https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-fonts.git
brew tap --custom-remote --force-auto-update homebrew/cask-drivers https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-drivers.git
brew tap --custom-remote --force-auto-update homebrew/cask-versions https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-versions.git
brew tap --custom-remote --force-auto-update homebrew/command-not-found https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-command-not-found.git

brew update
----

== Shottr 截屏
这是一款功能丰富，支持小巧，反应快速的截图工具，并且还是免费的，很难得。

== 查看隐藏文件
在访达文件夹中, 通过快捷键 [command + shift + .] 进行切换

== 刷新 dns
[source,bash]
----
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
----

== crontab
[source,bash]
----
# 查看 crontab 是否启动,Mac的定时任务都由 launchctl 来管理.
sudo launchctl list | grep cron

# 输出
-	0	com.vix.cron

# 没有就查看一下启动项的配置
locate com.vix.cron

# 输出
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

# 报错，database 不存在，按照提示步骤创建一个
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

# 再次查看一下启动项的配置
locate com.vix.cron

# 输出
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

# 发现没效果，进行库更新一下
sudo /usr/libexec/locate.updatedb

# 再次查看一下启动项的配置
locate com.vix.cron

# 输出
/System/Library/LaunchDaemons/com.vix.cron.plist

# 查看配置项
vi /System/Library/LaunchDaemons/com.vix.cron.plist

# 配置项的内容
----

[source,xml]
----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.vix.cron</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/sbin/cron</string>
        </array>
        <key>KeepAlive</key>
        <dict>
            <key>PathState</key>
            <dict>
                <key>/etc/crontab</key>
                <true/>
            </dict>
        </dict>
        <key>QueueDirectories</key>
        <array>
            <string>/usr/lib/cron/tabs</string>
        </array>
        <key>EnableTransactions</key>
        <true/>
    </dict>
</plist>
----

[source,bash]
----
# 注意，其中有个 KeepAlive 的条件是 /etc/crontab 是否存在
# 所以查看是否存在，如果不存在，我们需要创建一个，不然任务是无法正常运行的。
sudo touch /etc/crontab

# 到此，就完美了，接下来我们开始创建任务了。

# 我们通过下面一个命令来添加一个计划任务
crontab -e

# 我们会进入一个页面，上面就可以添加我们的计划任务了，每一行代表一条。
*/1 * * * * touch /Users/wangshaoping/Desktop/test/$(date +\%Y\%m\%d\%H\%M\%S)

# 查看我们的所有任务
crontab -l

# 删除任务
crontab -r
----

== 如何加速 github 网站的访问
github 由于某些原因，经常导致无法访问或者访问比较慢，主要是因为 dns 的污染，可通过以下方式加速 github 网站的访问。

.增加 crontab 任务
[source,bash]
----
# 增加 crontab 任务, 每小时更新 /etc/hosts 文件，获得最近的 github 网址的 ip 地址
crontab -e

# 增加以下内容,每个小时更新一次 /etc/hosts 文件
0 0/1 * * * sh /Users/wangshaoping/Documents/etc/crontab-github.sh
----

./Users/wangshaoping/Documents/etc/crontab-github.sh
[source,bash]
----
#!/bin/bash
source /etc/profile

# 替换 /Users/wangshaoping/Documents/etc/hosts 文件中以下部分
# GitHub520 Host Start
# .......
# Github520 Host End
sed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /Users/wangshaoping/Documents/etc/hosts

# 从 https://raw.hellogithub.com 下载 hosts 文件并将其内容追加到 /Users/wangshaoping/Documents/etc/hosts 文件的最后
curl https://raw.hellogithub.com/hosts >> /Users/wangshaoping/Documents/etc/hosts

# 将 /Users/wangshaoping/Documents/etc/hosts 文件复制到 /etc/hosts 文件
cp /Users/wangshaoping/Documents/etc/hosts /etc/hosts
----

./Users/wangshaoping/Documents/etc/hosts
[source,bash]
----
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost

# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

# sonatype nexus repository and gitlab source code repository
127.0.0.1	platform.sc.io
----

.修改 /etc/hosts 文件权限
[source,bash]
----
# 修改 /etc/hosts 文件权限
sudo chmod a+rw /etc/hosts

# 修改 /Users/wangshaoping/Documents/etc/crontab-github.sh 文件权限
chmod a+x /Users/wangshaoping/Documents/etc/crontab-github.sh
----

== 微软 Windows 云桌面
微软学习平台的这个云桌面是微软家的，是用来进行学习微软相关课程知识的。

* 众所周知，国内是可以直接访问微软的！
* 众所不周知，微软的学习平台提供了云桌面服务。
* 众所不周知，微软的云桌面的ip地址是全球各地的CDN。

所以，我们可以借助微软的云桌面，协助我们的办公工作。

=== 申请网址
https://learn.microsoft.com/zh-cn/training/modules/implement-common-integration-features-finance-ops/10-exercise-1

image::9999-appendix/mac/001.png[,80%]

访问上述网址，点击【登录以启动 VM 模式】登录微软账号，完成授权。授权里面可能需要你填写一些信息，能跳过就跳过，随便填。国家一栏当然是填美国了。

=== 限制
每次可连续使用2小时,超过2小时则会自动断开，并且清空云桌面的内容，无法保存数据。毕竟这本来是用于学习的工具。