开放“救赎进程”视频

早晨收到邮件,说是“HHW”网站502了。看了一眼,大约是需要重启。用自己的网站作为视频备份,似乎还是有些不稳定。

想了一秒钟,顺手将所有“救赎进程”的视频上传了油管,还是在公共领域的服务器上,数据会安全一点。这样看来,也许过一阵子就可以供公众观看了。

昨天收到另一封邮件,我们的BoBS项目已经完成了27门课程。作为唯一在地的老师,我特地安排,不要给学生上太多的课,大体上每一年两门课左右,就是这样已经很重复了,经常使用重复案例和示例而不自知。

我以后的计划或许是少上课,多设计一些新的课程出来,讲过一遍就上网,分享给乐于使用的人。我希望这些课程是不收费的,在福音上,invaluable就是valuable,costless就是cost。

手中正在做的下一门课应该是“四福音的和谐”,大约在不久之后我就要研究如何做四福音对读的ascii电子书了。

对了,今天讲完道,Ian要求拷贝了讲道的视频去,要分享给他的家人和教会。这几周都集中在基础的福音信息上,所以内容似乎不太敏感。但我还是略微解释了一下我的原则,为何不常分享讲道。

对此,Ian提出一个问题:如果按照“轻轨站舰”的原则,尽量保持小型化,又没有数量充足、训练良好的传道人,为何不将有限的讲道分享出来,让更多人可以受益呢?

当然,这是个好问题,但并不那么简单。我目前的解决方案是免费开放的“释经讲道工作坊”,希望能在坚持自己不分享讲道的原则下,示范我的释经和完成讲章过程。对于感兴趣的弟兄姊妹来说,大概这是足够了。


完成科目

展开表格,看看我们开设的课程。

序号 课程名称 授课老师 上课时间
01 神学治学法 2021年10月04-08日
02 旧约概论一 张聪 2021年11月15-19日
03 林前、后书 2021年12月06-10日
04 大学语文 2022年01月03-07日
05 教育学原理 2022年01月10-14日
06 系统神学 1 2022年03月14-18日
07 释经学基础 张聪 2022年04月04-08日
08 宣教学概论 2022年05月16-20日
09 新约概论 1 2022年06月13-17日
10 三福个人布道 张聪(挂名) 2022年07月11-13日
11 使徒行传 2022年07月04-08日
12 讲道学 张聪 2022.09.05-09
13 基础逻辑学 2022.10.10-14
14 灵命塑造 2022.11.07-11
15 文化人类学 2022.12.05.09
16 箴言 2023.01.02-06
17 系统神学2 2023.03.06-10
18 新约概论2 张聪 2023.04.10-14
19 旧约概论2 2023.05.08-12
20 教牧学导论 2023.06.04-09
21 西方文学 2023.07.10-14
22 系统神学3 2023.09.04-08
23 护教学 2023.10.09-13
24 教会历史1 2023.11.13-17
25 植堂 2023.12.11-15
26 启示录 2024.01.01-05
27 救赎进程 张聪 2024.01.08-12

工作日志

这几天忙着整理一本旧书,《透视保罗》。从前这书提交给我的pdf有些问题,按照宗德文的风格,图文并茂,对于译者而言就是一种巨大的折磨。那时的流程没有弄明白,所以采用了ocr,自己费了不少力气,但翻译出来之后,简直无法直视。

甚至译者本人也承受不了这个工作,所以我这几天已经把其他事情暂时放下,认真整理这书。

我的工作流程大致如下:

  • pandoc 将word文档转换为asciidoc。
pandoc -f docx -t asciidoc --pdf-engine=xelatex -V CJKmainfont="STsong" ./finiehed.docx -o finished.adoc
  • 从主文档中提取每一章,然后一点一点对照原版pdf来排版。 客户没有要求附图,所以我可以安全地把图片从文档中删除,并按照固定格式设定标题。

大体而言,我大量地使用了vs code的asciidoc插件,以及vim插件的正则表达式替换。 : 举个简单例子:

link:#calibre_link-94[[^1]] 需要替换为{chp1-fn1},作为脚注的引用。

这几天重新复习了vim的许多用法,在chatGPT的帮助下,想出了若干新的简化替换方式。比如用J一次性将所有脚注合并在一处,然后在一个大的文本块中进行替换处理。

我应该考虑将这本书就此做成asciidocbook,直接用于生成epub和mobi格式的电子书。

检查标点符号失配的python脚本

昨天还让chatGPT帮我写了一个简单的python脚本,用于检查文本中的标点符号失配。下面的代码就是目前调试通过的程序。用来检查adoc格式的标点失配,并进行人工修正。

点击展开代码

import re
import sys

def print_incorrect_quotations(paragraph):
    # This regex finds incorrect quotations but doesn't distinguish context.
    # It's a basic check to identify potential issues for review.
    potential_issues = re.finditer(r'”[^“]*”', paragraph)
    for issue in potential_issues:
        context = issue.group(0)
        # Print surrounding text for context, limited to 30 characters for brevity
        print(f"Incorrect quotation found: ...{context[:30]}...")

def correct_quotation_marks_in_paragraph(paragraph):
    parts = re.split(r'([“”])', paragraph)
    corrected_parts = []
    quote_flag = False

    for part in parts:
        if part == '“':
            if quote_flag:  # If there's an unmatched opening quote, close it
                corrected_parts.append('”')
            else:
                corrected_parts.append(part)
            quote_flag = not quote_flag
        elif part == '”':
            if not quote_flag:  # If there's a closing quote without an opening, open it
                corrected_parts.append('“')
            else:
                corrected_parts.append(part)
            quote_flag = not quote_flag
        else:
            corrected_parts.append(part)

    # Ensure all quotes are closed at the end of a paragraph
    if quote_flag:
        corrected_parts.append('”')
    
    return ''.join(corrected_parts)

def correct_quotation_marks(text):
    paragraphs = text.strip().split('\n\n')  # Split text into paragraphs
    for paragraph in paragraphs:
        print_incorrect_quotations(paragraph)
    corrected_paragraphs = [correct_quotation_marks_in_paragraph(p) for p in paragraphs]
    return '\n\n'.join(corrected_paragraphs)

def process_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        text = file.read()

    corrected_text = correct_quotation_marks(text)

    new_file_path = f'{file_path}.correct'
    with open(new_file_path, 'w', encoding='utf-8') as new_file:
        new_file.write(corrected_text)

    print(f"Corrected content written to {new_file_path}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py file_path")
    else:
        file_path = sys.argv[1]
        process_file(file_path)

使用neovim插件作为主要编辑器

vsCode NeoVim似乎是一个很不错的插件,利用NeoVim作为后台,不需要自己重写vim的命令映射,同时还可以兼容vsCode的命令。看起来,我要弃用vsCode的vim插件了。

用chatGPT写代码

今天为了预备讲道,用python写了一个获取圣经文本的程序。当然,如果没有chatGPT,我绝不会去做这样的事情。

点击展开代码。

import requests
import sys

def fetch_verses(verses, version='kjv'):
    """
    Fetch multiple verses and ranges from the Bible using the getbible.net API.

    :param verses: List of strings, each specifying a reference in the format BookChapter:Verse(s).
                   Example: ['John3:16,17', '1John3:16-19,22']
    :param version: String, the Bible version code (default is 'kjv' for King James Version).
    :return: String, the Bible verses text.
    """
    query = ';'.join(verses)
    url = f"https://query.getbible.net/v2/{version}/{query}"
    response = requests.get(url)

    if response.status_code != 200:
        return "Error fetching the verses."

    verses_data = response.json()
    verses_text = ""

    for book_key in verses_data.keys():
        book_data = verses_data[book_key]
        if 'verses' in book_data:
            for verse in book_data['verses']:
                verse_ref = verse.get('name', 'Unknown reference')
                verse_text = verse.get('text', 'Text not found')
                verses_text += f"{verse_ref}: {verse_text}\n"
    
    return verses_text.strip()

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python script.py [version] [verse1] [verse2] ... [verseN]")
        sys.exit(1)

    version = sys.argv[1]
    verses = sys.argv[2:]

    verses_text = fetch_verses(verses, version)
    print(verses_text)

博客和代码库混在一处了

我开始在博客的仓库中写脚本和代码,或者处理翻译,或者排版。使用asciidoc的目标是最终将内容全部统一起来,方便生成电子书、发布和出版。

我开始整理四福音书的学习手册,应该是一个挺好玩的工作。年底会开设这个工作坊吧。

对了,“救赎进程”工作坊所有视频上线,我也不客气了,欢迎围观。

救赎进程