标签 博客 下的文章

基于Markdown格式的电子书生成工具大比拼:gohugo、mdbook和peach

基于Markdown格式文件写博客已经很多年了,一直使用的是Wordpress的markdown插件,由于各种遗留原因,一直没有转换到直接使用静态站点的方式。博客文章之间一般来说多是独立篇章,少有关联,即便是写一个系列文章,数量也不会太多。因此,用博客形式来组织书籍章节是不大合适的。“术业有专攻”,我们还得寻找专门用来制作电子书的工具或平台,并且要支持本地安装,支持基于Markdown格式的源数据文件。

专门用于制作电子书类文档的知名工具包括:gitbookRead the Docs。不过前者的开源版本2018年末就不更新了,而Read the Docs则比较老,还需要多个工具配合。我个人倾向于单个二进制文件搞定一切。于是我找到了三个候选:gohugomdbookpeach,这三个候选部署时都只有一个二进制文件。gohugo和peach是Go语言实现的,而mdbook则是用Rust语言实现的。下面我们就来简单对比一下这三个基于Markdown格式的电子书制作工具。

1. mdbook

mdbook是模仿gitbook样式的从markdown文件生成电子书的工具和静态站点服务,它仅聚焦于“电子书制作和站点服务”。如果不是类似gitbook风格的其他类静态内容服务,那么它并不适合。因此,该工具采用了惯例优先原则(convention over configuration),使得使用时我们无需做太多的配置即可生成一个像模像样的电子书站点。

由于是rust实现的,mdbook本地部署时只需一个二进制文件,我们直接从它的github release上下载对应os平台的release文件(这里是macos的0.4.0版本):

wget -c https://github.com/rust-lang/mdBook/releases/download/v0.4.0/mdbook-v0.4.0-x86_64-apple-darwin.tar.gz

解压后,将mdbook所在路径添加到PATH环境变量中:

$tar zxvf mdbook-v0.4.0-x86_64-apple-darwin.tar.gz
x mdbook
$ls
mdbook*                        mdbook-v0.4.0-x86_64-apple-darwin.tar.gz

$mdbook -help
mdbook v0.4.0
Mathieu David <mathieudavid@mathieudavid.org>
Creates a book from markdown files

USAGE:
    mdbook [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    build    Builds a book from its markdown files
    clean    Deletes a built book
    help     Prints this message or the help of the given subcommand(s)
    init     Creates the boilerplate structure and files for a new book
    serve    Serves a book at http://localhost:3000, and rebuilds it on changes
    test     Tests that a book's Rust code samples compile
    watch    Watches a book's files and rebuilds it on changes

For more information about a specific command, try `mdbook <command> --help`
The source code for mdBook is available at: https://github.com/rust-lang/mdBook

接下来,我们就使用mdbook init命令创建一个电子书工程:

$mdbook init go-ml

Do you want a .gitignore to be created? (y/n)
y
What title would you like to give the book?
go machine learning
2020-06-27 15:58:03 [INFO] (mdbook::book::init): Creating a new book with stub content

All done, no errors...

我们看到mdbook init生成了一个目录,目录布局如下:

➜  /Users/tonybai/MyEbook/mdbook git:(master) ✗ $tree
.
└── go-ml
    ├── book
    ├── book.toml
    └── src
        ├── SUMMARY.md
        └── chapter_1.md

3 directories, 3 files

接下来,我们直接运行mdbook serve即启动了一个服务,用于访问该电子书:

➜  /Users/tonybai/MyEbook/mdbook git:(master) ✗ $mdbook serve go-ml
2020-06-27 16:06:56 [INFO] (mdbook::book): Book building has started
2020-06-27 16:06:56 [INFO] (mdbook::book): Running the html backend
2020-06-27 16:06:56 [INFO] (mdbook::cmd::serve): Serving on: http://localhost:3000
2020-06-27 16:06:56 [INFO] (warp::server): listening on http://[::1]:3000
2020-06-27 16:06:56 [INFO] (mdbook::cmd::watch): Listening for changes...

我们通过浏览器访问http://localhost:3000,可以看到如下页面:

img{512x368}

图:mdbook生成的电子书首页

我们看到:我们没有做任何配置就生成了一个和gitbook样式差不多的电子书服务站点。该站点还支持选择页面显示模式(截图中使用的是默认的Light模式)、支持查询等。

如果我们要增加新章节、编排章节标题缩进,只需编辑电子书工程下面的src/SUMMARY.md

$cat SUMMARY.md
# Summary

- [Chapter 1](./chapter_1.md)
  - [Chapter 1.1](./chapter_1_1.md)
- [Chapter 2](./chapter_2.md)

这些对于多数人来说已经是足够了的,后续只需关注书籍内容即可,无需对mdbook生成的工程进行什么调整。mdbook会自动探测src目录下的文件变化并根据变化重新生成静态html文件。我们只需刷新页面即可看到最新变化。

2. peach

peach是一款由Go语言实现的多语言、实时同步以及全文搜索功能的 Web 文档服务器。它由gogs的作者无闻打造,该作者的很多开源项目的文档也都是由peach生成和提供文档服务支撑的。
我们可以直接使用go get安装peach:

$export GONOSUMDB="github.com/russross/blackfriday"
$go get github.com/peachdocs/peach
go: github.com/peachdocs/peach upgrade => v0.9.8
$peach -v
Peach version 0.9.8.0810

接下来,我们用peach建立电子书工程:

$peach new -target=go-ml.peach
➜  Creating 'go-ml.peach'...
➜  Creating 'templates'...
➜  Creating 'public'...
Do you want to use custom templates?[Y/n] n
✓  Done!

我们这里直接使用peach项目自身文档的自定义模板:

下载配置好的自定义模板:

$ cd go-ml.peach

$ git clone https://github.com/peachdocs/peach.peach.git custom
Cloning into 'custom'...
remote: Enumerating objects: 62, done.
remote: Total 62 (delta 0), reused 0 (delta 0), pack-reused 62
Unpacking objects: 100% (62/62), done.
Checking connectivity... done.

启动web服务:

$peach web

intro/
     |__ installation
     |__ getting_started
     |__ roadmap
howto/
     |__ documentation
     |__ webhook
     |__ templates
     |__ static_resources
     |__ navbar
     |__ pages
     |__ extension
     |__ protect_resources
     |__ upgrade
advanced/
        |__ config_cheat_sheet
faqs/
intro/
     |__ installation
     |__ getting_started
     |__ roadmap
howto/
     |__ documentation
     |__ webhook
     |__ templates
     |__ static_resources
     |__ navbar
     |__ pages
     |__ extension
     |__ protect_resources
     |__ upgrade
advanced/
        |__ config_cheat_sheet
faqs/
[Peach] 20-06-27 10:17:31 [ INFO] Peach 0.9.8.0810
[Peach] 20-06-27 10:17:31 [ INFO] Peach Server Listen on 127.0.0.1:5556

我们通过浏览器访问http://localhost:5556,可以看到如下页面:

img{512x368}

图:peach生成的电子书目录页

不过,和mdbook不同,上面peach加载并渲染的文档并不在本地,我们在custom/app.ini中看到如下配置:

[docs]
TYPE = remote
TARGET = https://github.com/peachdocs/docs.git
SECRET = peach

我们看到当前例子采用了remote模式,即使用Github上的仓库peachdocs/docs中的数据(markdown文件)作为源文件进行渲染,而这个仓库的结构如下:

$tree -L 2 docs
docs
├── TOC.ini
├── en-US
│   ├── advanced
│   ├── faqs
│   ├── howto
│   └── intro
├── images
│   └── github_webhook.png
└── zh-CN
    ├── advanced
    ├── faqs
    ├── howto
    └── intro

11 directories, 2 files

TOC.ini文件描述了文档结构布局:

$cat TOC.ini
-: intro
-: howto
-: advanced
-: faqs

[intro]
-: README
-: installation
-: getting_started
-: roadmap

[howto]
-: README
-: documentation
-: webhook
-: templates
-: static_resources
-: navbar
-: pages
-: extension
-: protect_resources
-: upgrade

[advanced]
-: README
-: config_cheat_sheet

[faqs]
-: README

我们看到,和mdbook相比,peach的门槛稍高一些,需要学习TOC.ini中的特殊配置语法,同时如果要改变peach的默认风格,还要学习peach使用的模板语法(Peach 使用 Go 语言 Pongo2 v3 版本 作为模板引擎,它使用的是 Django HTML 格式)。

3. gohugo+git book theme

gohugo是这几年最火的静态站点生成工具。和上面两个工具不同的是:它致力于成为一个通用的静态站点工具,与hexo等目标一致。结合gohugo与git book风格的theme也能实现电子书制作与站点服务。

经过多年发展,gohugo的安装十分方便:在macos上,我们既可以使用go get安装(gohugo支持module),也可以使用brew安装:

$brew install hugo

==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/hugo-0.69.2.mojave.bottle.tar.gz

==> Summary
/usr/local/Cellar/hugo/0.69.2: 42 files, 74.3MB
==> `brew cleanup` has not been run in 30 days, running now...
Removing: /usr/local/Cellar/gettext/0.20.1... (1,899 files, 18.5MB)
... ...

$hugo version
Hugo Static Site Generator v0.69.2/extended darwin/amd64 BuildDate: unknown

通过hugo new site命令,我们来创建一个新的站点:

$hugo new site go-machine-learning

Congratulations! Your new Hugo site is created in /Users/tonybai/MyEbook/gohugo/go-machine-learning.

Just a few more steps and you're ready to go:

1. Download a theme into the same-named folder.
   Choose a theme from https://themes.gohugo.io/ or
   create your own with the "hugo new theme <THEMENAME>" command.
2. Perhaps you want to add some content. You can add single files
   with "hugo new <SECTIONNAME>/<FILENAME>.<FORMAT>".
3. Start the built-in live server via "hugo server".

Visit https://gohugo.io/ for quickstart guide and full documentation.

下面是生成的站点的初始目录结构:

$tree
.
└── go-machine-learning
    ├── archetypes
    │   └── default.md
    ├── config.toml
    ├── content
    ├── data
    ├── layouts
    ├── static
    └── themes

7 directories, 2 files

接下来我们来安装gitbook theme

$cd go-machine-learning

$git submodule add https://github.com/alex-shpak/hugo-book themes/book
Cloning into '/Users/tonybai/MyEbook/gohugo/go-machine-learning/hugo-book'...
remote: Enumerating objects: 3555, done.
Receiving objects:  18% (664/3555), 692.01 KiB | 4.00 KiB/s
... ...
remote: Total 3555 (delta 0), reused 0 (delta 0), pack-reused 3555
Receiving objects: 100% (3555/3555), 5.74 MiB | 5.00 KiB/s, done.
Resolving deltas: 100% (1809/1809), done.

我们可以修改一下顶层目录的config.toml,增加theme=”book”

baseURL = "http://example.org/"
languageCode = "zh-cn"
title = "Go机器学习"
theme = "book"

启动该站点:

$hugo server --minify --theme book

                   | EN
-------------------+-----
  Pages            |  7
  Paginator pages  |  0
  Non-page files   |  0
  Static files     | 80
  Processed images |  0
  Aliases          |  0
  Sitemaps         |  1
  Cleaned          |  0 

Built in 26 ms
Watching for changes in /Users/tonybai/MyEbook/gohugo/go-machine-learning/{archetypes,content,data,layouts,static,themes}
Watching for config changes in /Users/tonybai/MyEbook/gohugo/go-machine-learning/config.toml
Environment: "development"
Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop

这时由于content目录为空,因此通过浏览器访问: localhost:1313后只能看到只有一个标题的空白页面。

我们将https://github.com/alex-shpak/hugo-book themes/book下面的样例站点的content拷贝到我们的站点中:

 $cp -R themes/book/exampleSite/content .
 $ll content
total 8
drwxr-xr-x   6 tonybai  staff   192  6 27 16:36 ./
drwxr-xr-x  12 tonybai  staff   384  6 27 16:35 ../
-rw-r--r--   1 tonybai  staff  1165  6 27 16:36 _index.md
drwxr-xr-x   4 tonybai  staff   128  6 27 16:36 docs/
drwxr-xr-x   3 tonybai  staff    96  6 27 16:36 menu/
drwxr-xr-x   7 tonybai  staff   224  6 27 16:36 posts/

再次启动hugo server后,我们通过浏览器浏览,可以看到下面页面:

img{512x368}

图:gohugo生成的电子书目录页

我们看到这个页面分为三栏,最左侧是站点目录栏,中间是章节内容,右侧显示的是内容中的标题结构。电子书源文件分布在content目录下,该目录的结构如下:

$tree -L 2 content
content
├── _index.md
├── docs
│   ├── example
│   └── shortcodes
├── menu
│   └── index.md
└── posts
    ├── _index.md
    ├── chapter_1.md
    ├── creating-a-new-theme.md
    ├── goisforlovers.md
    ├── hugoisforlovers.md
    └── migrate-from-jekyll.md

5 directories, 8 files

  • _index.md是首页布局

  • menu/index.md是左侧栏的布局

其他均为文章内容源文件。如果我们要调整首页布局或左侧栏的书籍结构,我们只需调整上述两个文件即可。

4. 小结

我们粗略、快速对mdbook、peach和gohugo工具做了比较,三者部署时都是单二进制文件。

我们的目标是利用工具生成电子书,仅从达到这个目的难易度来看:

  • mdbook是“门槛”最低的,几乎无需配置,就能搭建出一个像模像样的类似gitbook的图书站点;

  • peach门槛较高一些,要配置的东西多一些;

  • gohugo门槛适中,但却最为灵活和强大。如果对gohugo的模板语法十分熟悉,可以定义出一套满足自己风格的电子书浏览页面风格。


我的网课“Kubernetes实战:高可用集群搭建、配置、运维与应用”在慕课网上线了,感谢小伙伴们学习支持!

我爱发短信:企业级短信平台定制开发专家 https://tonybai.com/
smspush : 可部署在企业内部的定制化短信平台,三网覆盖,不惧大并发接入,可定制扩展; 短信内容你来定,不再受约束, 接口丰富,支持长短信,签名可选。

2020年4月8日,中国三大电信运营商联合发布《5G消息白皮书》,51短信平台也会全新升级到“51商用消息平台”,全面支持5G RCS消息。

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻)归档仓库 – https://github.com/bigwhite/gopherdaily

我的联系方式:

微博:https://weibo.com/bigwhite20xx
微信公众号:iamtonybai
博客:tonybai.com
github: https://github.com/bigwhite

微信赞赏:
img{512x368}

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

果果十周岁了!

好久没有在我的博客上写关于果果的事情了,因为很多关于果果成长的经历都记录在她自己的博客中了。但今天是她十周岁的生日,是个值得纪念的日子。闺女成长的十年,也是我学习为人父的十年。作为父亲,我发自内心地想说点啥,是回顾,也是感受,亦有些寄语^_^。

img{512x368}

图:果果成长的十年

出生

老婆在2009年7月怀上了果果。那时我们刚刚新婚不久,二人世界还没过够^_^,小家伙的突然到来还让我们有些“手足无措”。为此,我们还认真地讨论了两天,最终老婆拍板:我要生下这个孩子,于是果果保住了^_^。如今,每当果果提及此事,都会“发狠”地盯上我几眼,我也只能呵呵呵呵地应对^_^。

老婆怀胎中段,我一直在福建出差,虽然有岳母陪在老婆身边,但年底那两个月,老婆心情十分差。直到那一年大年三十的下午2点,我才在桃仙机场下的飞机,匆匆赶回家。大街上连车的打不到,多亏还有公交系统。进入家门,心里满满的都是对老婆的愧疚。记忆中老婆似乎并没有说啥,只说了一句“吃饭吧”,我顿感心里热乎乎的。

果果似乎很享受在妈妈子宫中待着,预产期都过了几天了,她还没有反应,直到2010年5月3日凌晨1点多,规律性的宫缩“来袭”。我们匆忙赶到医院,早上6点半多,老婆进入产室,9点多,我在产室外听到了果果呱呱坠地后的第一声啼哭。

img{512x368}

图:刚出生的果果

果果出生后,恰逢徐峥的作品《人在囧途》上映,影片中徐峥扮演角色的孩子叫果果,我们觉得这个小名不错,于是便给我们宝宝起名为果果

第一次照顾这么小的孩子也着实让我们这些大人手忙脚乱一段时间。出月子后,生活逐渐恢复平稳。果果每天除了吃奶就是睡觉,也算是比较省心了。稍大一些后,果果似乎并不太愿意睡觉了,每次喂完奶都得放到小车上在厅里推过来推过去哄她睡觉,后来果果姥姥买的一个能发出大恐龙吼声的玩具也加入到促进果果睡眠的行列中^_^。

第一次走路(0岁)

果果一直母乳喂养,身体也很壮实。抬头、翻身、学会爬行和其他孩子相比都略有提前。最让我印象深刻是她第一次学会独立行走。记得那是2010年农历春节前,我们家当时的供暖非常好,室温在28度以上。果果在家只穿一套内衣裤,因此行动和玩耍起来非常方便。之前果果就可以扶着床沿踱步了并且她似乎也很喜欢站起来的感觉。那天她自己在卧室的地板上玩耍,我在门口偷偷观察她。她玩了一会儿就开始扶着床站起来,看我站在门口,她居然放开了扶着床沿的双手,向我摇摇晃晃地走了过来。从床边到卧室门口大约有不到2米的距离,我也兴奋地张开双臂,引导她向我走来。她边走边兴奋地笑,似乎也在惊讶于自己能独立行走了。在她扑到我的怀中的那一刻,我才意识到我见证了果果人生第一次独立行走,老婆听到这个消息也是兴奋不已。自从果果学会了走路,此后便一发不可收拾^_^。

打针不哭(1岁)

可能是因为母乳喂养,果果在一岁的这一年中没有患过任何感冒发烧的病症。但当母体带给她的免疫力逐渐失去作用后,果果便和其他小朋友一样,会得感冒,也会发烧。记得果果第一次感冒(刚过一岁生日没多久)就烧的特别厉害。由于我们也是第一次遇到这种情况,特别担心,于是就带她去医院检查。虽然我们期望医生开立口服药,但医生最终还是开了点滴。在护士站门口,果果看到其他孩子扎针时都哇哇的哭,心里也胆怯了。果不其然,当针头穿透她的皮肤进入血管的那一刻,果果也像其他孩子一样,哇哇大哭起来。

有了这次“痛苦”的扎针经历后,我们也对她进行了心理疏导,教她要学会坚强,从她的眼神看得出来,她似乎听懂了。在2011年的秋冬换季,果果又患感冒发烧。同样去了医院,同样开了点滴,但在护士站扎针的时候,果果居然很坚强的忍住了,没有哇哇的哭泣,这让看惯了孩子痛哭的护士也是惊奇不已。看着泪水在眼圈里打转但没有哭出来的果果,我们心里更是心疼她了。

送去幼儿园学说话(2岁)

果果在11个月的时候就会喊妈妈了,但直到2岁半她能吐出的字依然只有“妈妈”,偶尔也有“爸爸”。现在看来,果果说话晚是因为我们给她的语言刺激太少了。果果不愿意睡觉,一旦睡着了,老人生怕声音大吵醒她,于是就命令我们不许出声。久而久之,果果在潜意思中得到的声音刺激、语言刺激照比其他小朋友就要少很多。为此,我们还带着果果去看了生长发育门诊、做过筛查,结果都显示果果没有任何生理性的疾病。

我们需要找到一个让果果接受更多语言刺激的方法,最终我们决定在果果2岁零5个月的时候送她去幼儿园“学说话”。做过家长的都知道,送孩子去幼儿园的过程是“痛苦”的,孩子哭闹,家长心疼,但这个过程是必须要经历的。付出了就有收获。在果果上幼儿园后的一个月,果果的“话匣子”就彻底打开了^_^。

更像女娃了,但怕大海(3岁)

出生时,果果头发稀少,为了让果果长出更好的头发,我们每隔一段时间就把她的头发剃的很短(几近光头)。在2岁之内,果果更像一个“男娃”。直到3岁以后,我们开始给她留头发了。小家伙似乎也知道留头发后自己更好看了,姥姥每次给她梳头扎辫她都很喜欢。留着还有些短的头发让她更像女娃了:

img{512x368}

图:更像女娃的果果

下半年,我们把果果转到了更大的幼儿园,并且果果每天上幼儿园都不再费劲了。她在幼儿园也学到了许多知识、技能和礼节。

3岁的果果的身体显得比同龄的女宝高大一圈,我们也开始带着她到处出行游玩。劳动节黄金周我们第一次带孩子去海边。那天的风浪比较大,浪花拍击礁石的声音震耳欲聋,果果显得很害怕。我们抱着她向海边靠近,但她却一直在挣扎并大喊:“离开、离开、走、走”。当我自己独自向大海靠近时,她也大喊:“爸爸,你回来,你回来”。见此情景,我们都哈哈大笑起来。

后来我们去了一处比较海浪比较舒缓的地带,没有了海浪拍打的巨大轰隆声,果果镇定了许多。也开始站在沙滩上和其他小朋友一起挖起沙子了。

独立爬山(4岁)

4岁的果果不仅个头高,而且壮实了。我们在权衡了之后,决定在假期带她去爬山,并且我已经做好了背她上山的准备。那次我们爬的是千山。千山在整个省内的爬山困难指数排行榜上也是名列前茅的。不过小家伙似乎很喜欢爬山,在登山栈道上显得十分兴奋,我们也给她做心里建设,希望她自己爬到顶峰。虽然在中段她也曾打过退堂鼓,但最终小家伙还是凭借自己的双腿和毅力爬上了山顶,我和老婆也都是非常惊讶。下山过程中,小家伙也是一路欢喜,并没用我们费心。只是由于累了,在回程的车上,小家伙呼呼的睡了一道。

正因为此次爬山的经历,果果爱上了爬山。后续选择旅游景点,她总是先挑那些有山可爬的地方,比如:2019年的陕西的华山骊山等。

和妈妈一起去普吉岛(5岁)

孩子小的时候,出行很麻烦,而且孩子能收获的东西有限。5岁是一个很好的节点,她基本能自立了,而且感知和吸收外界信息的能力已经很强了。

5岁这一年是果果第一次和妈妈出国旅游,此次出行的目的是泰国普吉岛,和她们一起去的还有老婆的同事,这些同事也能帮助老婆照顾照顾果果,顺道还能锻炼一下果果的交际能力。这也是果果第一次乘飞机出行,在机场她十分兴奋。她们的航班在首尔中转,从首尔飞到普吉需要5-6个小时,这下让果果过了一把飞行瘾,她尤其喜欢飞机起降过程中的那种感觉,以至于以后每次出行,她都嚷嚷着要买多次经停或中转的航班^_^。

更难得可贵的是,这次的旅游经历深深印在果果的记忆中,至今每当翻看那时的照片时,她还能头头是道的给我们讲当时发生的故事。有些事情,我老婆都已经记不得了。

上小学了(6岁)

转眼间,果果来到了6周岁,已经到了上学的年龄了。9月份,果果正式成为一名珠江街第五小学一年级的“小豆包”。和第一次上幼儿园不同,这次果果适应的很快,也没有哭鼻子的情况。反倒是回来和我们说她班级有小朋友一直哭,她还很疑惑这些小朋友为什么要哭^_^。

上学后,更多的教育责任“甩”给了班主任老师,我们平时更多是帮忙批改批改作业,督促读读书,带着上上才艺班。果果的古筝是各门才艺课中学的最好的,果果也有了那么一些古典的气质:

img{512x368}

图:有一丝古典气质的果果

这一年我还给果果开了博客。有些东西,光靠脑子是记不住的,写下来,留给多年后的自己和孩子慢慢回味。在果果能自己维护这个博客之前,我就先替她维护了。

叛逆与独立(7~9岁)

进入到7岁以后,果果受到的教育多了,读的书多了,渐渐了有了自己的主见和小脾气,再也不是那个将父母话“奉为圭臬”的小女娃了。如果就某事“辩论”,她姥姥已经完全不是对手了。也只有我和老婆偶尔还能“恩威并举”的降住她:(。

果果喜欢读故事书。她最喜欢读郑渊洁的童话,按照她的说法,市面上郑渊洁的书她基本都读完了,有些书,她已经读过不止一遍了。受郑渊洁风格的影响,她喜欢写幻想类的作文,喜欢天马行空,因此在细节描写上就差了一些。

她还喜欢“米小圈上学记”,每天晚上都是在天猫精灵播放的米小圈上学记中入睡的。

她喜欢宜家买来的老虎和小狗玩偶,一个起名为花果,一个起名为木果,每天一左一右的陪她入睡。

天猫精灵是她每天不可或缺的“伙伴”。早上听新闻早报,天气预报;晚上听故事,听历史,听音乐;偶尔还和天猫精灵玩玩互动猜谜游戏。真不愧为互联网和智能时代的原著民。

8岁的果果,其古筝考级已经通过了10级,这还是在她不是很勤奋练琴的情况下取得的。

这个阶段的果果也十分贪玩,喜欢去游乐场,玩老爸都不敢玩的惊险刺激的项目(只能由她妈妈陪着)。

9岁时,她偶尔和妈妈看了一集“家有儿女”,从那时起就“沉迷”于该剧:只要拿起iPad就必然打开“家有儿女”视频。她看电视剧和她看书的特点一样,如果某一集是她喜欢的,她会反复看上好多遍,丝毫没有不耐烦的迹象。有些集的台词她都能背下来,并粘着我和我老婆要给我们讲。还别说,讲的还头头是道的^_^。

亭亭玉立的大姑娘(10岁)

由于新冠疫情的影响,果果的10岁生日在家里过的,我们也没法带她出去“玩耍”一番。10岁的她已经是一个亭亭玉立的大姑娘了。她的个头快赶上她妈妈了,大长腿,身材是“青出于蓝而胜于蓝”。

img{512x368}

图:十岁的果果

img{512x368}

图:亭亭玉立的果果

这次10周岁的生日除了生日蛋糕,还有一个更为特殊的礼物,那就是妈妈肚里的二宝,这也是果果一直想要的弟弟/妹妹。自从知道妈妈怀了二宝之后,果果变得更加懂事了。每天晚上对着妈妈的肚子给二宝讲故事,晚上睡觉前也会对着妈妈肚子猛“亲”几口^_^。

为了留下美好回忆,我们还特地在果果十周岁生日的时候在影楼留下了一家四口的合影:

img{512x368}

图:十岁果果生日时一家四口合影

小结

果果成长的十年给我的最大感受就是:!一晃间,果果都10岁了,二宝也即将出生。我和老婆也即将步入中年。这里做的这个阶段性的回顾,以期若干年后当记忆模糊时还能通过这篇文章回忆起当年果果小时候的点点滴滴。

这里也希望果果在未来的人生道路中能继续一帆风顺,身体健健康康,每天快快乐乐。

希望果果和即将出生的二宝一起姐妹情深,相濡以沫,共同走好人生之路。

最后,人生在于经历,而不在于得失


我的联系方式:

微博:https://weibo.com/bigwhite20xx
微信公众号:iamtonybai
博客:tonybai.com
github: https://github.com/bigwhite

微信赞赏:
img{512x368}

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats