博客

  • 2026 佛山五十公里徒步・顺德线

    2026-03-21

    顺德欢乐海岸

    ✨ 今年专程奔赴顺德再战一年一度佛山五十公里徒步,路线更长,想好好挑战自己,看看自己到底能坚持多远。

    📍 起点|顺德欢乐海岸

    08:30 出发

    天阴沉沉,刚起步就飘起小雨

    防水风衣也挡不住凉意

    但身边每个人都热情满满

    瞬间被点燃,直接开冲!

    📌 第一签|桂畔海篮球场

    10:31行程:7KM用时:2小时1分

    状态超轻松~

    沿途顺峰山、云鹭湿地、桂畔海风景都很美

    可惜雨断断续续,少拍了好多照片

    但心情一点没受影响

    简单补水补给,继续向前

    📌 第二签|乌洲水闸集市

    13:12行程:15KM用时:2小时41 分

    走到这里直接心态崩了!

    伦教突降大暴雨,视线模糊,路面全是积水,鞋子早已湿透。

    躲雨时又冷又累,甚至萌生放弃的念头,可看着周围没有便捷交通,只能咬牙坚持。

    不过这里可以免费进入长鹿乐园,随便踩点看以后值不值得来。

    📌 第三签|西海亲水平台

    14:34行程:22KM用时:1小时22 分

    在大雨中煎熬一个多小时,终于抵达第三签。

    幸运的是,雨渐渐停了。

    河边微风拂过,尽管全身湿透,疲惫却消散大半,补充能量后,重新出发。

    📌 第四签|君兰河岸公园

    15:45行程:29KM用时:1小时11 分

    雨停了,可鞋子里全是水

    每一步都不舒服走完快 30 公里,腿开始发酸

    但行程已经过半

    心里反而多了一份必到终点的底气

    坚持住,往前冲!

    📌 第五签|龙堤广场

    18:23行程:36KM用时:2小时38 分

    这几公里,全程最煎熬

    腿酸到没力气

    脚底泡水泡出了水泡,每一步都疼

    傍晚天慢慢暗下来

    路上依旧人潮不断

    说明我们没有掉队

    只剩最后 4 公里

    无论如何都要撑到最后!

    🏁 终点|世纪莲体育中心

    19:20全程:40KM总时长:约11小时

    终于抵达终点!

    近 11 小时风雨兼程

    40 公里圆满完成

    累到双腿抬不起来

    心里却超级兴奋、超级骄傲

    暴雨、淋雨、水泡、疲惫

    全都扛下来了

    没有什么能挡住坚持的脚步!

    ✍️ 小结

    这次顺德线比上次禅城徒步更辛苦

    不只是距离更远

    还遇上全程阴雨

    沿江风景在雨天少了几分惊艳

    却也遇见了很多从没踏过的风景

    同行伙伴超给力,一路互相打气

    让这段路更有意义

    风雨无阻,挑战自我

    期待下一次,再出发!

  • 广客 GZK6100(无额头) | 13、59路 | 1:110模型

    模型资料

    厂商
    广州客车厂
    型号
    GZK6100(无额头)
    城市
    广州
    线路
    13、59
    比例
    1 / 110
    材质
    金属

    车身展示

    13 路
    59 路
  • Python 学习笔记:常用核心库简介

    近期在使用影刀开发自动化流程,发现即便借助影刀的指令体系,深入掌握 Python 第三方库依然至关重要。这些库覆盖了数据处理、可视化、网络请求、自动化等几乎所有编程场景,因此我整理了这份新手入门级的 Python 常用库笔记,包含核心功能、安装方式和极简示例,助力快速上手。

    一、基础必备库

    1. NumPy(数值计算基础)

    核心功能
    • 提供高性能的多维数组(ndarray) 数据结构,是科学计算的基础。
    • 支持向量化运算、矩阵操作、线性代数、傅里叶变换等数值计算。
    • 比 Python 原生列表快得多,是 Pandas、Matplotlib 等库的底层依赖。
    安装
    pip install numpy
    极简示例
    import numpy as np
    
    # 创建一维数组
    arr1 = np.array([1, 2, 3, 4])
    # 创建二维数组(矩阵)
    arr2 = np.array([[1, 2], [3, 4]])
    
    # 数组运算(向量化,无需循环)
    print(arr1 * 2)  # 输出:[2 4 6 8]
    print(arr2 + arr2)  # 输出:[[2 4], [6 8]]
    # 矩阵乘法
    print(arr2 @ arr2)  # 输出:[[7 10], [15 22]]

    2. Pandas(数据处理与分析)

    核心功能
    • 提供 DataFrame(表格型数据结构) 和 Series(一维序列),完美适配表格数据(如 Excel/CSV)。
    • 支持数据清洗(缺失值、重复值处理)、筛选、分组、合并、透视表等。
    • 是数据分析、数据挖掘的核心工具,能轻松处理几十万甚至百万行数据。
    安装
    pip install pandas
    极简示例
    import pandas as pd
    
    # 创建DataFrame(模拟表格数据)
    df = pd.DataFrame({
        "姓名": ["张三", "李四", "王五"],
        "年龄": [20, 25, 30],
        "城市": ["北京", "上海", "广州"]
    })
    
    # 数据查看
    print(df.head())  # 查看前n行(默认5行)
    # 数据筛选:筛选年龄>22的行
    print(df[df["年龄"] > 22])
    # 保存为CSV文件
    df.to_csv("user_info.csv", index=False)
    # 读取CSV文件
    df_read = pd.read_csv("user_info.csv")

    二、数据可视化库

    1. Matplotlib(基础可视化库)

    核心功能
    • Python 最基础的绘图库,支持绘制折线图、柱状图、散点图、直方图等几乎所有基础图表。
    • 高度可定制(标题、坐标轴、颜色、样式等),是其他可视化库(如 Seaborn)的底层。
    安装
    pip install matplotlib
    极简示例
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    x = np.linspace(0, 10, 100)  # 0到10之间生成100个均匀分布的数
    y = np.sin(x)
    
    # 绘制折线图
    plt.plot(x, y, color="red", label="sin(x)")
    plt.xlabel("X轴")  # X轴标签
    plt.ylabel("Y轴")  # Y轴标签
    plt.title("正弦函数曲线")  # 标题
    plt.legend()  # 显示图例
    plt.show()  # 展示图表

    2. Seaborn(高级可视化库)

    核心功能
    • 基于 Matplotlib 封装,语法更简洁,默认样式更美观。
    • 专注于统计可视化(如箱线图、热力图、小提琴图、配对图),适配 Pandas 的 DataFrame。
    安装
    pip install seaborn
    极简示例
    import seaborn as sns
    import pandas as pd
    
    # 使用内置数据集
    tips = sns.load_dataset("tips")  # 餐饮小费数据集
    
    # 绘制柱状图(按性别分组,展示平均消费)
    sns.barplot(x="sex", y="total_bill", data=tips)
    # 绘制热力图(展示变量相关性)
    sns.heatmap(tips.corr(numeric_only=True), annot=True, cmap="coolwarm")

    三、网络请求与爬虫库

    1. Requests(HTTP 请求库)

    核心功能
    • 替代 Python 原生的 urllib,语法极简,支持 GET/POST 请求、Cookie、Headers、代理等。
    • 是爬虫、调用 API 接口的首选库。
    安装
    pip install requests
    极简示例
    import requests
    
    # GET请求(获取网页内容)
    response = requests.get("https://www.baidu.com")
    response.encoding = "utf-8"  # 设置编码
    print(response.text[:100])  # 打印前100个字符
    
    # POST请求(模拟表单提交)
    data = {"username": "test", "password": "123456"}
    response = requests.post("https://httpbin.org/post", data=data)
    print(response.json())  # 以JSON格式返回响应

    2. BeautifulSoup4(网页解析库)

    核心功能
    • 解析 HTML/XML 页面,提取标签、属性、文本等内容,搭配 Requests 实现爬虫。
    • 支持 CSS 选择器、正则表达式匹配,上手简单。
    安装
    pip install beautifulsoup4
    极简示例
    import requests
    from bs4 import BeautifulSoup
    
    # 获取网页内容
    response = requests.get("https://www.baidu.com")
    soup = BeautifulSoup(response.text, "html.parser")  # 解析HTML
    
    # 提取指定标签(比如所有a标签的href属性)
    a_tags = soup.find_all("a")  # 找到所有a标签
    for tag in a_tags[:5]:  # 打印前5个
        print(tag.get("href"), tag.text)

    四、自动化与实用工具库

    1. os & sys(系统交互库,内置)

    核心功能
    • os:操作文件/目录(创建、删除、遍历、路径拼接)、执行系统命令。
    • sys:获取系统参数(如命令行参数、Python 版本)、控制程序退出等。
    • 无需安装,Python 原生内置。
    极简示例
    import os
    import sys
    
    # os库示例:遍历指定目录下的文件
    print(os.listdir("."))  # 列出当前目录所有文件/文件夹
    os.makedirs("test_dir", exist_ok=True)  # 创建目录(已存在则不报错)
    
    # sys库示例:获取命令行参数
    print("Python版本:", sys.version)
    print("命令行参数:", sys.argv)  # 运行时传入的参数,如python test.py 123,则sys.argv=[test.py, 123]

    2. datetime(时间处理库,内置)

    核心功能
    • 处理日期、时间的解析、格式化、加减运算,替代原生 time 库的复杂操作。
    • 无需安装,Python 原生内置。
    极简示例
    from datetime import datetime, timedelta
    
    # 获取当前时间
    now = datetime.now()
    print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 格式化输出:2026-03-11 10:00:00
    
    # 时间加减(比如3天后)
    after_3_days = now + timedelta(days=3)
    print(after_3_days.strftime("%Y-%m-%d"))
    
    # 解析字符串为时间
    time_str = "2026-01-01"
    time_obj = datetime.strptime(time_str, "%Y-%m-%d")
    print(time_obj)

    3. OpenPyXL(Excel 操作库)

    核心功能
    • 读写 Excel 文件(.xlsx 格式),支持单元格样式、公式、合并单元格等。
    • 替代老旧的 xlrd/xlwt,功能更全面。
    安装
    pip install openpyxl
    极简示例
    from openpyxl import Workbook, load_workbook
    
    # 创建新Excel并写入数据
    wb = Workbook()
    ws = wb.active  # 获取活跃工作表
    ws["A1"] = "姓名"
    ws["B1"] = "年龄"
    ws["A2"] = "张三"
    ws["B2"] = 20
    wb.save("test.xlsx")  # 保存文件
    
    # 读取Excel数据
    wb = load_workbook("test.xlsx")
    ws = wb.active
    print(ws["A2"].value)  # 输出:张三
    print(ws["B2"].value)  # 输出:20

    4. Playwright(现代自动化测试/爬虫库)

    核心功能
    • 由微软开发,支持无头浏览器自动化(Chrome、Firefox、Safari 全兼容)。
    • 相比 Selenium 更轻量、速度更快,API 设计更简洁,内置等待机制(无需手动加 sleep)。
    • 可用于网页自动化操作、动态渲染页面爬虫(如 JavaScript 加载的内容)、UI 自动化测试。
    • 支持同步/异步两种调用方式,新手优先学同步版即可。
    安装
    # 安装库
    pip install playwright
    # 安装浏览器驱动(首次使用必须执行,会下载Chrome/Firefox/Safari驱动)
    playwright install
    极简示例
    from playwright.sync_api import sync_playwright
    
    # 启动浏览器(headless=False 显示浏览器窗口,True 为无头模式)
    with sync_playwright() as p:
        # 选择浏览器:chromium/firefox/webkit
        browser = p.chromium.launch(headless=False)
        # 新建页面
        page = browser.new_page()
        # 访问网页
        page.goto("https://www.baidu.com")
    
        # 1. 输入并搜索(定位输入框,输入内容)
        page.locator("#kw").fill("Python Playwright")
        # 点击搜索按钮
        page.locator("#su").click()
    
        # 2. 等待页面加载并提取数据(等待标题出现)
        page.wait_for_selector("h3")
        # 提取所有搜索结果标题
        titles = page.locator("h3").all_text_contents()
        print("前5个搜索结果:")
        for title in titles[:5]:
            print(title)
    
        # 关闭浏览器
        browser.close()
    核心优势(对比传统爬虫/自动化工具)
    1. 能爬取动态渲染页面(如需要登录、滚动加载、JS 渲染的内容),解决 Requests 无法处理的场景。
    2. 内置自动等待:无需手动设置 time.sleep(),会等待元素加载完成后再操作,稳定性更高。
    3. 支持截图/录屏page.screenshot(path="baidu.png") 可保存页面截图,便于调试。

    五、其他常用库(快速了解)

    库名 核心用途 安装命令
    Scikit-learn 机器学习(分类、回归、聚类) pip install scikit-learn
    TensorFlow/PyTorch 深度学习(神经网络) pip install tensorflow / pip install torch
    Flask/Django Web 开发(轻量/全栈框架) pip install flask / pip install django
    Pillow 图片处理(裁剪、滤镜、格式转换) pip install pillow
    PyAutoGUI 键鼠自动化(模拟点击、输入) pip install pyautogui

    总结

    1. 基础核心库:NumPy 是数值计算基石,Pandas 是数据处理核心,二者是数据分析的必备组合。
    2. 可视化库:Matplotlib 是基础,Seaborn 更适合统计可视化,优先掌握折线图、柱状图、热力图等常用图表。
    3. 实用工具库:基础爬虫用 Requests+BeautifulSoup4 处理静态页面,Playwright 适配动态页面/网页自动化;os/datetime/OpenPyXL 覆盖日常文件、系统、时间和 Excel 操作场景。
  • 2025 佛山改装展

    2025.9.20

    佛山潭洲国际会展中心

    网上得知佛山举办改装展,立刻前往展馆。虽然下着大雨,但并不影响我逛展会的热情。

    ◉ 模型展区

    国内品牌齐聚,微缩场景细节拉满,氛围超热烈。其中网上大名鼎鼎的“火车长鸣”的展区人气最高。

    火车长鸣展区
    MiniCity 展区

    ◉ 改装车展区

    主馆超 2000 台改装车集结,JDM、欧系超跑、宽体改装全覆盖。外场漂移赛轮胎冒烟、引擎轰鸣,还有港车北上车队交流,文化氛围拉满,视觉和听觉双重震撼。

    ◉ 纪念品

    MiniCity | 苏州金龙.海格 | N 比例
  • Vue 3.0 核心特性技术日志

    作为从 Vue 1.0 一路使用过来的开发者,Vue 3.0 并非简单的版本迭代,而是在核心架构、性能、开发体验上的全面升级,同时兼容了 2.x 的大部分核心思想,既保留了我们熟悉的开发范式,又解决了 2.x 长期存在的痛点。以下从核心架构、语法特性、性能优化、工程化等维度,结合 2.x 对比梳理关键变化。

    一、核心架构:从 Options API 到 Composition API

    1. Vue 2.x:Options API 为主

    Vue 2.x 采用「选项式 API」,将代码按 datamethodscomputedwatch生命周期钩子 等选项划分,优点是上手简单,但存在明显痛点:

    • 逻辑碎片化:一个业务逻辑(如「用户登录状态管理」)的代码会分散在 data(状态)、methods(方法)、watch(监听)、mounted(初始化)等多个选项中,组件越大,逻辑越难追踪;
    • 代码复用受限:mixins 是主要复用方式,但存在命名冲突、来源不清晰、逻辑依赖隐晦的问题;
    • TypeScript 支持薄弱:Options API 天生不契合 TS 的类型推导,需要额外的类型声明,开发体验差。

    2. Vue 3.0:Composition API(组合式 API)+ 保留 Options API

    Vue 3.0 推出「组合式 API」,核心是 setup 函数(组件的入口),允许按业务逻辑维度组织代码,而非按选项类型:

    
    <template>
    
    <div>{{ count }}</div>
      <button @click="increment">+1</button>
    </template>
    
    <script setup>
    // Vue 3.0 组合式 API(<script setup> 语法糖)
    import { ref, computed, onMounted } from 'vue'
    
    // 状态定义(替代 2.x 的 data)
    const count = ref(0)
    
    // 方法定义(替代 2.x 的 methods)
    const increment = () => {
      count.value++
    }
    
    // 计算属性(替代 2.x 的 computed)
    const doubleCount = computed(() => count.value * 2)
    
    // 生命周期(替代 2.x 的 mounted)
    onMounted(() => {
      console.log('组件挂载完成,count 初始值:', count.value)
    })
    </script>

    核心优势

    • 逻辑聚合:一个业务逻辑的所有代码(状态、方法、监听、生命周期)可集中写在一处,组件结构更清晰;
    • 灵活复用:通过「组合函数(Composables)」复用逻辑(如 useUser()useRequest()),替代 mixins,解决命名冲突和依赖问题;
    • 完美支持 TS:基于函数式的写法天然契合 TS 类型推导,无需额外声明即可获得完整的类型提示。

    兼容说明

    • Vue 3.0 完全保留 Options API,2.x 的代码可直接迁移(仅需少量适配),支持「渐进式升级」—— 既可以在老组件中继续用 Options API,也可以在新组件中用 Composition API。

    二、响应式系统:从 Object.defineProperty 到 Proxy

    1. Vue 2.x:响应式的痛点

    Vue 2.x 基于 Object.defineProperty 实现响应式,存在天然限制:

    • 无法监听数组下标修改(如 arr[0] = 1)和数组长度修改(如 arr.length = 0),需通过 Vue.set/this.$set 或数组变异方法(push/splice)触发更新;
    • 无法监听对象新增属性/删除属性(如 this.obj.newKey = 1),同样需要 Vue.set/this.$delete
    • 响应式初始化时需要递归遍历对象,性能随对象层级加深下降。

    2. Vue 3.0:Proxy 重构响应式

    Vue 3.0 改用 ES6 的 Proxy 实现响应式,彻底解决上述问题:

    • 原生支持监听数组下标/长度修改、对象新增/删除属性,无需 $set/$delete
    • 非侵入式:无需修改原对象,而是代理对象,初始化时无需递归遍历(懒代理,访问属性时才递归),性能大幅提升;
    • 支持 RefReactive 两种响应式方式:
      • ref:用于基础类型(字符串、数字等),通过 .value 访问(模板中自动解包,无需 .value);
      • reactive:用于对象/数组,返回代理对象,直接访问属性即可。

    示例对比

    // Vue 2.x
    export default {
      data() {
        return {
          arr: [1, 2, 3],
          obj: { name: 'Vue2' }
        }
      },
      methods: {
        updateData() {
          // 无效:无法监听数组下标修改
          this.arr[0] = 100
          // 有效:需用 $set
          this.$set(this.arr, 0, 100)
    
          // 无效:无法监听对象新增属性
          this.obj.age = 3
          // 有效:需用 $set
          this.$set(this.obj, 'age', 3)
        }
      }
    }
    
    // Vue 3.0(Composition API)
    import { ref, reactive } from 'vue'
    const arr = ref([1, 2, 3])
    const obj = reactive({ name: 'Vue3' })
    
    const updateData = () => {
      // 有效:原生支持数组下标修改
      arr.value[0] = 100
      // 有效:原生支持对象新增属性
      obj.age = 3
    }

    三、性能优化:体积、渲染、编译全方位提升

    1. 体积更小

    • Vue 2.x 运行时体积约 22KB(gzip);
    • Vue 3.0 通过「树形摇树(Tree-shaking)」重构核心代码,仅引入使用的功能(如仅用响应式、不用编译器),最小体积约 10KB(gzip),体积减少 50% 以上。

    2. 渲染更快

    • 虚拟 DOM 重构:Vue 3.0 优化了虚拟 DOM 的生成和对比算法,引入「静态标记」—— 对模板中不变的节点(如纯文本、静态标签)做标记,对比时直接跳过,渲染性能提升约 55%;
    • 编译优化:Vue 3.0 的模板编译器会提前分析模板结构,生成更高效的渲染函数,更新性能提升约 133%。

    3. 内存占用更低

    Vue 3.0 优化了组件实例的内存占用,同场景下内存使用减少约 50%。

    四、其他关键变化(对比 Vue 2.x)

    1. 生命周期钩子

    Vue 3.0 保留了 2.x 的生命周期概念,但命名略有调整(Composition API 中),且新增 setup 替代 beforeCreatecreated

    Vue 2.x Vue 3.0(Composition API) 说明
    beforeCreate setup(开始) setup 执行时,组件实例未创建
    created setup(结束) setup 执行完,组件实例已创建
    beforeMount onBeforeMount 挂载前
    mounted onMounted 挂载后
    beforeUpdate onBeforeUpdate 更新前
    updated onUpdated 更新后
    beforeDestroy onBeforeUnmount 卸载前(命名更语义化)
    destroyed onUnmounted 卸载后(命名更语义化)

    2. 模板语法

    • 支持多根节点:Vue 2.x 模板要求唯一根节点,3.0 支持多根节点(Fragment),无需包裹 `
      `;
    • 更灵活的 v-model:Vue 2.x 中 v-model 本质是 value + input 事件,3.0 支持自定义绑定属性和事件,且支持多个 v-model:

      <!-- Vue 2.x:仅能绑定一个 v-model,且固定 value/input -->
      <Child v-model="name" />
      
      <!-- Vue 3.0:支持多个 v-model,自定义属性和事件 -->
      <Child v-model:name="name" v-model:age="age" />
    • 移除 filter:Vue 3.0 废弃了 2.x 的 filter 过滤器,推荐用计算属性或方法替代(减少 API 复杂度)。

    3. 全局 API 调整

    Vue 2.x 的全局 API(如 Vue.componentVue.directive)会污染全局环境,3.0 改为「实例化 API」:

    // Vue 2.x
    import Vue from 'vue'
    Vue.component('MyComponent', { /* ... */ })
    Vue.directive('my-dir', { /* ... */ })
    new Vue({ el: '#app' })
    
    // Vue 3.0
    import { createApp } from 'vue'
    const app = createApp({ /* 根组件 */ })
    app.component('MyComponent', { /* ... */ })
    app.directive('my-dir', { /* ... */ })
    app.mount('#app')

    优势:多个 Vue 实例可独立配置,避免全局配置冲突(如多应用嵌入场景)。

    4. 废弃/不推荐的特性

    • 废弃 Vue.prototype:改用 app.config.globalProperties 挂载全局属性;
    • 废弃 $on/$off/$once:移除实例事件总线,推荐用第三方库(如 mitt)替代;
    • 不推荐 filters:用计算属性/方法替代;
    • 不推荐 mixins:用 Composition API 的组合函数替代。

    五、迁移建议(从 Vue 2.x 到 3.0)

    1. 渐进式迁移:先保留 Options API,逐步在新功能中使用 Composition API,降低迁移成本;
    2. 工具适配:升级脚手架到 Vite(Vue 3.0 推荐)或 Vue CLI 5+,安装 @vue/compat 兼容包,可临时兼容 2.x 代码;
    3. 重点检查
      • 替换 Vue.set/$setVue.delete/$delete(3.0 无需);
      • 调整生命周期钩子(如 beforeDestroyonBeforeUnmount);
      • 替换 filter 为计算属性/方法;
    4. TypeScript 接入:新组件建议用 <script setup lang="ts">,充分利用 3.0 的 TS 优势。

    总结

    1. 核心架构:Vue 3.0 的 Composition API 解决了 2.x Options API 逻辑碎片化、复用难、TS 支持差的问题,同时兼容 2.x 写法,支持渐进式升级;
    2. 响应式系统:基于 Proxy 重构,彻底解决 2.x Object.defineProperty 无法监听数组/对象新增属性的痛点,性能和易用性大幅提升;
    3. 性能与体验:体积更小、渲染更快,模板语法更灵活(多根节点、多 v-model),全局 API 更合理,是对 Vue 2.x 核心痛点的全面优化,同时保留了 Vue 一贯的「易用、渐进式」设计理念。
  • 2025 佛山五十公里徒步・禅城线

    2025-03-22

    文华公园

    ✨ 今年是我来佛山定居的第十年,所以去参加了50km徒步纪念一下。一大早就起床,吃完早餐就骑电驴向集结地文华公园出发。

    起点:文华公园

    08:24 出发

    现场人山人海。之前我还想走50公里不是普通的运动量,参加的人应该不多,结果发现上到满头白发的老人、下到三岁小孩都来参加,看来我低估了大家对这个活动的积极性。

    好,从此刻正式开始!

    第一签:升平里

    09:53行程:5KM

    开局像过年游花市,大家都是一个挨一个,沿途的路都围蔽了。就这样慢吞吞地走了1.5小时。心想,这样走岂不是晚上十点都走不完?!来到升平里人更多了(是我见过这个地方人最多的一次),赶紧找签到点盖章离开。

    第二签:欧洲工业园C区

    11:48行程:12.8KM

    这段感觉人少了不少,原因其实很多人只是为了打个卡发发朋友圈,(毕竟 5km 对现在的人还是极限)。太阳也出来营业了,还好沿途绿道大树也比较多。这一段是考验耐心的,因为要经过一片老旧的工业区,所以风景一般,路边的大货车经过会扬起一片灰尘……

    第三签:城发悦城峯境

    13:24行程:17.8KM

    沿汾江河边都是新打造的绿道,风景很不错。沿途都是卖小吃、饮料的小贩。也经过了我一直想去的王借岗公园,又帮我在百度地图点亮了一个片区。

    第四签:绿岛湖国际中心

    14:29行程:20.5KM

    距离不远,但人走了一个上午已经有点累,所以走到绿岛湖就在湖边休整了20分钟。在这里汇合身穿浅蓝色衣服的"三水线"驴友,这些都是大神人,因为他们的线路比我们多出14km,也就是说别人一大早7点就已经出发,并且走得很快。其实禅城线算是“作弊”线路,因为它全场是36km,是全部线路中最短的。

    第五签:智慧公园

    15:25行程:24.5KM

    这段就开始拼耐力了,阳光猛烈,大树比较少,脚步也渐渐慢下来。不过令我意外的是智慧公园原来很漂亮,又找多了一个休闲的地方。

    第六签:青年公园

    16:46行程:30.5KM

    如果认真计算距离和时间,就发现我速度快了很多。不,我没作弊(已经看到很多人骑共享单车跑了),其实原因是身边的队友也受不了骑车去。我只是自己发挥真正的实力 ^_^。PS沿线的公交线路都挤满了人,其实这不是比赛,尽力而为就好。

    终点:世纪莲体育中心(18:12 | 36KM)

    18:12全程:36KM

    突然想起十年前那次30公里徒步,走完整个人都废了,所以这次出发前一直怀疑自己到底行不行。现在看来,身体确实比以前能扛了,但更关键的是——只要咬咬牙,好像也没什么走不完的路。

  • BYD K9|1路公交|1:110模型

    模型资料

    厂商
    比亚迪
    型号
    K9
    城市
    广州
    线路
    1
    运营区间
    东山 ⇄ 芳村花园
    比例
    1 / 76
    材质
    金属

    比亚迪K9系列是比亚迪推出的大型纯电动客车,主打城市公交与长途通勤。其采用磷酸铁锂电池技术,具备零排放、低噪音和较高续航能力,广泛应用于全球多个城市公共交通系统,体现了绿色出行与新能源技术的发展方向。

    车身展示

    广州动物园纪念版

  • 广州 11 号线开通首日体验

    早上我和家人去了广州动物园,下午回来赶上了11号线的开通首日,顺便体验一下新线路。

    列车进站的时候,大家都掏出手机拍照,我也赶紧拍了几张发朋友圈。11号线的站台和车厢都很大,不愧为A8列车,坐着特别舒服,相比广州其它线路,绝对的王者。而且它是城区环线,所以去哪里换乘都方便。

    到了中医学院站,发现人还挺多的,大家都想第一时间体验新线路,而且这个站也是「大站」,以后可以换乘12号线。站台设计很有特色,融入了很多中医药文化的元素。

  • MIDI 音符代码表

    MIDI 音符代码是用于表示音符的数字系统,范围从0到127,对应不同的音高和八度。具体如下:
    1. 音符编号:每个音符对应一个唯一的编号,例如:

      • C4(中央C)的编号为 60。
      • C5 的编号为 72。
    2. 音高与编号

      • 编号 0 对应 C-1(最低音)。
      • 编号 127 对应 G9(最高音)。
    3. 八度划分

      • 每增加12,编号提高一个八度。例如,C4 为 60,C5 为 72。
    4. 半音关系

      • 相邻编号相差一个半音。例如,C4 为 60,C#4/Db4 为 61。
    5. 常用音符示例

      • C4: 60
      • D4: 62
      • E4: 64
      • F4: 65
      • G4: 67
      • A4: 69
      • B4: 71
      • C5: 72
    6. 应用

      • MIDI 音符代码用于音乐软件、硬件和数字乐器中,控制音符的播放。

    附表:

    编号 音符代码(二进制码) 音符代码(十六进制码) 所在音阶 音调
    0 0000000 00 -1 C
    1 0000001 01 -1 C#
    2 0000010 02 -1 D
    3 0000011 03 -1 D#
    4 0000100 04 -1 E
    5 0000101 05 -1 F
    6 0000110 06 -1 F#
    7 0000111 07 -1 G
    8 0001000 08 -1 G#
    9 0001001 09 -1 A
    10 0001010 0A -1 A#
    11 0001011 0B -1 B
    12 0001100 0C 0 C
    13 0001101 0D 0 C#
    14 0001110 0E 0 D
    15 0001111 0F 0 D#
    16 0010000 10 0 E
    17 0010001 11 0 F
    18 0010010 12 0 F#
    19 0010011 13 0 G
    20 0010100 14 0 G#
    21 0010101 15 0 A
    22 0010110 16 0 A#
    23 0010111 17 0 B
    24 0011000 18 1 C
    25 0011001 19 1 C#
    26 0011010 1A 1 D
    27 0011011 1B 1 D#
    28 0011100 1C 1 E
    29 0011101 1D 1 F
    30 0011110 1E 1 F#
    31 0011111 1F 1 G
    32 0100000 20 1 G#
    33 0100001 21 1 A
    34 0100010 22 1 A#
    35 0100011 23 1 B
    36 0100100 24 2 C
    37 0100101 25 2 C#
    38 0100110 26 2 D
    39 0100111 27 2 D#
    40 0101000 28 2 E
    41 0101001 29 2 F
    42 0101010 2A 2 F#
    43 0101011 2B 2 G
    44 0101100 2C 2 G#
    45 0101101 2D 2 A
    46 0101110 2E 2 A#
    47 0101111 2F 2 B
    48 0110000 30 3 C
    49 0110001 31 3 C#
    50 0110010 32 3 D
    51 0110011 33 3 D#
    52 0110100 34 3 E
    53 0110101 35 3 F
    54 0110110 36 3 F#
    55 0110111 37 3 G
    56 0111000 38 3 G#
    57 0111001 39 3 A
    58 0111010 3A 3 A#
    59 0111011 3B 3 B
    60 0111100 3C 4 C
    61 0111101 3D 4 C#
    62 0111110 3E 4 D
    63 0111111 3F 4 D#
    64 1000000 40 4 E
    65 1000001 41 4 F
    66 1000010 42 4 F#
    67 1000011 43 4 G
    68 1000100 44 4 G#
    69 1000101 45 4 A
    70 1000110 46 4 A#
    71 1000111 47 4 B
    72 1001000 48 5 C
    73 1001001 49 5 C#
    74 1001010 4A 5 D
    75 1001011 4B 5 D#
    76 1001100 4C 5 E
    77 1001101 4D 5 F
    78 1001110 4E 5 F#
    79 1001111 4F 5 G
    80 1010000 50 5 G#
    81 1010001 51 5 A
    82 1010010 52 5 A#
    83 1010011 53 5 B
    84 1010100 54 6 C
    85 1010101 55 6 C#
    86 1010110 56 6 D
    87 1010111 57 6 D#
    88 1011000 58 6 E
    89 1011001 59 6 F
    90 1011010 5A 6 F#
    91 1011011 5B 6 G
    92 1011100 5C 6 G#
    93 1011101 5D 6 A
    94 1011110 5E 6 A#
    95 1011111 5F 6 B
    96 1100000 60 7 C
    97 1100001 61 7 C#
    98 1100010 62 7 D
    99 1100011 63 7 D#
    100 1100100 64 7 E
    101 1100101 65 7 F
    102 1100110 66 7 F#
    103 1100111 67 7 G
    104 1101000 68 7 G#
    105 1101001 69 7 A
    106 1101010 6A 7 A#
    107 1101011 6B 7 B
    108 1101100 6C 8 C
    109 1101101 6D 8 C#
    110 1101110 6E 8 D
    111 1101111 6F 8 D#
    112 1110000 70 8 E
    113 1110001 71 8 F
    114 1110010 72 8 F#
    115 1110011 73 8 G
    116 1110100 74 8 G#
    117 1110101 75 8 A
    118 1110110 76 8 A#
    119 1110111 77 8 B
    120 1111000 78 9 C
    121 1111001 79 9 C#
    122 1111010 7A 9 D
    123 1111011 7B 9 D#
    124 1111100 7C 9 E
    125 1111101 7D 9 F
    126 1111110 7E 9 F#
    127 1111111 7F 9 G
  • 【City Corners】佛山 . 高明

    高明,它藏着老巷的烟火、山水的灵秀。这是我对高明一步一脚印的记录,领略这座城每一个角落。

    荷城

    高明汽车客运站是我暂时去过最大的公交站场,对于公交迷的我是一个胜地。

    高明有轨电车,算是遗址吧~反映了一个城市变迁的缩影。

    西江

    骑共享电驴游西江是一种享受。

    苏村

    这个坐落西江,以锦鲤为主题的村落,绝对是来高明必去的打卡地。