I’m taking a departure from my usual deep dive analysis to write this “under the hood” exploration of how I’ve been building this bilingual newsletter. I want to share some behind the scenes information, because I’ve always treated Interconnected as a product, not just a blog. Even though it is basically a blog at the moment, there are many things I plan to build on top of this foundation, and sharing the technology, thinking, design, and various experiments is a good way to keep myself honest and learn better in public. I plan to write a similar post like this every year going forward to share and track all the changes, new technologies I try, keep, abandon, as well as product ideas that are constantly floating in my head.

On another level, I’m motivated to share, because I hope it will help more people produce bilingual content and lubricate the information flow between two languages -- not just the English-Chinese pairing, but any pairing. As I noted (perhaps lamented) in my opening letter of last week’s Interconnected Weekly, there’s still so much that needs to be done to improve the information flow between the English and Chinese language world. The 16-days gap between Jack Ma giving his Bund Summit speech and my translating and publishing the speech is too long and too unreliable.

Tech Stack

I use Ghost as my publishing platform. It is a relatively new platform (started in 2013) that’s completely open sourced, just like its older brethren Wordpress (started in 2003). Ghost is built on the JAM stack (JavaScript, API, Markup), which is a hot and trendy way to build static websites that’s fast and lightweight.

I chose Ghost because: 1. I’ve had some experience customizing it when launching another blog called COSS Media (writings focused on the commercial open source ecosystem) last year; 2. I like its open source nature (versus its proprietary counterpart Medium), which gives me more control. As many of you know, I’m quite deep into open source and have written a lot about it, so it’s important to me to “eat my own dog food” too. Ghost also has built-in features for collecting subscribers and designing paid tiers, which I plan to use eventually. Of course, you can do all this in Wordpress too, but it’s typically done via plug-ins that end up bloating the website and degrade load speed -- something I want to avoid in order to give all readers a good experience, wherever they are on our planet. Fast load speed helps with SEO too.

It’s not all smooth-sailing with Ghost. Being a young platform, it has plenty of bugs and rooms for improvement. It currently lacks some table stakes features, like email open rate, forwarding tracking, and basic analytics around email interactions with subscribers. I have chosen not to obsess over these metrics for now, because it tends to take my focus away from writing, bad for mental health, and Google Analytics is a sufficient enough substitute. All of these features are on Ghost’s roadmap, so I’m willing to be patient, for now.

Ghost also has some small issues that are not deal-breakers, just annoying. For example, it has a subscribers dashboard that generates a line chart to show growth (cool!) but there’s a bug that makes the line flat (sad...).

This is a known bug and tracked publicly on GitHub, which is standard practice for any open source software. In open source, you can’t hide your problems; you just have to deal with them, in public.

For my purpose, the best part about using Ghost is its choice of using Handlebar.js to do its frontend templating and rendering, which is an open source, mature JavaScript framework (first commit was in July 2010). Being open sourced, mature, and a bit boring (instead of new and flashy) is good, because I know there’s enough tutorials out there to help me do customization on my own. If I want something more complicated, I can easily find skilled developers. Going into building Interconnected, I knew providing a good bilingual reading experience would be a challenge, so customizability was key.

The initial version of Interconnected was an anchor tag hack that I cobbled together where readers who want to read the Chinese version will jump from a link at the top to the halfway point of the page where the Chinese part starts, but can’t jump back. It works but it’s far from ideal. During my research when writing “GPT-3: An Abstraction of Time vs Money”, I discovered that OpenAI’s blog has a nice toggle experience between the English and Chinese version of its charter. I already knew that OpenAI uses Ghost to publish content, so the toggle experience could definitely be replicated on Interconnected.

Instead of coding the improvement on my own, I decided to look for help to speed up progress. I ended up hiring a contractor, who is already familiar with Ghost’s various theme templates to do ad-hoc improvements on a project-by-project basis. In addition to building the bilingual toggle, this contractor also built the archive section and many UI improvements to make reading here more effective. The combined cost of these three improvements is less than $200.

Here are some best practices when working with remote contract developers: figure out exactly what you want first, down to the smallest details, before approaching anyone. Using contract developers can be very efficient and cost effective when there is a clear example to replicate, but they are not good (nor should they be) at designing and iterating on half-baked ideas with you. That’s also why, generally speaking, building a startup product with contract developers during its rapid prototyping and discovery phase is a bad idea.

In other words, contractors are good for cloning, not creating.

Bilingual Writing Process

I start every post in English first and usually get to a draft that is 85% done before starting on the Chinese version. In the beginning, I used Baidu Translate to turn the 85% done English version into a 50% done Chinese draft, before writing on top of it. I now use DeepL for the same purpose. I think DeepL is slightly better than Baidu Translate, but currently don’t have a strong opinion about either one; both work well done.

The process I apply to the Chinese version is what I call “trans-creating”, a term one of my former colleagues used, which I really like. It’s not a straight-up translation, but a re-creation in a different language. Because I’m the original creator of both, it’s not necessary to stay true to one version or the other -- the goal is to communicate ideas and information in the language they are being conveyed in, properly and naturally.

For example, the English version may contain certain companies, market concepts, and acronyms related to China that require additional context for the readers to understand, but are obvious for Chinese readers, thus the added background may be omitted in the Chinese version. Certain idioms and humor in the English version simply don’t translate well in Chinese, so the same part may be told in a more straightforward way in the Chinese version.

One surprising thing I discovered during this twice weekly “trans-creation” process is that writing the Chinese version actually helps improve the English version, because it more effectively exposes imprecisions, inaccuracies, and poorly written passages.

Writing is a draining process. Writing bilingually can be extra draining. And when you are drained, dumb mistakes and typos happen. (I loathe typos, because I think it’s the most disrespectful thing a writer can do to a reader.) To shore up quality, I hired an intern a couple of months ago, who is perfectly bilingual (much more so than me) to edit all my writings, plus doing additional research and product development projects. They (not a typo, but the preferred pronoun) also log all my mistakes along with examples of proper usage, so hopefully my own writing will improve over time.

I have been extra energized and motivated since this intern came on board; their contribution is immediate! I pay them a monthly stipend -- best money I’ve ever spent. (Treat your interns well!)

Future Product Improvements

Interconnected, as a product, still has a long way to go. While the English-Chinese toggle has made reading one specific post between the two languages better, the entire website is still more English-centric, which isn’t as friendly to my Chinese reading audience.

There are many multilingual websites out there, but most of them are corporate sites with limited content -- a form I find ill-suited for consuming long-form writing. There has to be a better design for bilingual and multilingual consumption. (If you have design ideas, please share them with me!)

Ghost’s built-in email template is also not flexible -- you cannot toggle or easily navigate between the two language versions, which is why I’ve started appending a message at the top of every email to guide my Chinese readers with the best way to consume my posts. (If you received this post via email, you would have seen it.) This is an area where I hope Ghost will offer more customizability. It’ll be the next big improvement I plan to tackle.

Lastly, I have plans to build more complex offerings on top of this foundation -- a community, a paid layer, a place for more interconnected, interdisciplinary knowledge exchange via multiple mediums, like audio, video, chat, and simulation games. Interconnected is a 10 year project for me; we are only in the 10th month.

I hope this “under the hood” post provides some useful information on how to build a bilingual newsletter -- an undertaking entirely doable and replicable by anyone. And I look forward to writing this post again a year from now and share the continuous evolution of Interconnected.

If you like what you've read, please SUBSCRIBE to the Interconnected email list. To read all previous posts, please check out the Archive section. New content will be delivered to your inbox (twice per week). Follow and interact with me on: Twitter, LinkedIn.

怎样做一个双语博客:2020版

一改往常的深度分析文章,今天写的是篇关于《互联》“幕后”的探索,介绍一下我是如何打造这个双语博客的。我想分享这些幕后信息的原因是因为我一直把《互联》当作一个产品来做,不只是个博客。尽管它现在基本上就是个博客,但我计划在这个基础上做很多东西。所以分享幕后关于技术、设计和各种各样的产品试验,可以要求自己保持诚实,不忘初心,同时也可以更好的做到“公众学习”(learning in public)。我计划每年都写一篇类似的文章,分享和跟踪《互联》的所有变化,包括我尝试、使用、放弃的新技术,以及不断浮现在脑海中的各种点子。

另一个促使我分享这些幕后信息的原因,是我希望能帮助更多人出版双语内容,润滑两种语言之间的信息流 -- 不仅仅是中英文搭配,而是任何两种语言的搭配。正如我在上周的《互联周刊》里的开篇信中所指出(或是感叹)的那样,在改善中英文两个世界的信息流畅方面,还有很多需要进步的地方。从马云发表外滩峰会演讲到我翻译并发表他的演讲之间的这16天时间,隔得太长了,太靠不住了。

技术栈

我用Ghost作为写作和出版平台。它是一个比较新的平台(2013年开始)和它的“大哥”Wordpress(2003年开始)一样,是完全开源的。Ghost建立在JAM Stack(JavaScript、API、Markup)上,是种快速、轻量的静态网站建设方式,现在很火,很时髦。

我选择Ghost是因为:1. 我在去年做了另一个名为COSS Media的博客,当时用的就是Ghost,所以已经有些使用它的经验 (COSS Media专注写关于开源商业化的生态);2. 我喜欢它的开源性质 (相比于它的闭源同行Medium),我有更多的自控权。很多读者都知道,我对开源的研究相当深入,也写了很多相关的文章,所以知行合一,使用我自己研究并推崇的开源性质平台,对我来说很重要。Ghost还内置了收集订阅读者和设计付费层的功能,这些功能我也打算以后使用。当然也可以在Wordpress上实现这些功能,但通常是用各种插件来实现,最终会使网站臃肿,网页速度变慢。为了给所有读者一个快速良好的体验,无论他们在地球的哪个角落,我想避免这种问题。网页速度快对SEO也有帮助。

使用Ghost并非一帆风顺。作为一个年轻的平台,它有很多问题和改进空间。目前,它缺乏一些标准功能,如邮件打开率、转发跟踪,以及邮件与订阅者之间互动的一些基本数据和指标。我选择暂时不纠结这些指标,因为天天刷指标看往往会干扰我对写作的注意力,对心理健康也没什么好处,Google Analytics已经足够了。所有这些功能也都在Ghost的产品路线图上,目前我愿意耐心等待。

Ghost也有一些其他不疼不痒、有点讨厌的小问题。例如,它有一个订阅者仪表板,可以生成一个线图来显示订阅的增长(很酷!),但有一个bug使线图一直是平的(很挫...)。

这是个已知的bug,并在GitHub上有Issue在跟踪,也是任何开源软件的标准做法。做为一个开源项目,Ghost无法隐藏问题,只能公开地去处理。

对于我的目的来说,使用Ghost最好的部分是它选择使用Handlebar.js来做前端模板和网页构造。Handlebar是个开源的、成熟的JavaScript框架(2010年7月开始的)。开源,成熟,而且有点无聊(而不是新颖和时髦)是好事,因为我知道网上会有足够的教程来帮助我自己做定制。如果我需要些更复杂的改动,可以很容易地找到熟练的开发者来帮忙。在一开始做《互联》的思考中,我知道提供良好的双语阅读体验将是一个挑战,所以平台的可定制性和灵活性很关键。

Interconnected最初的一版是我拼凑出来的一个用锚标签的体验,想读中文版的读者要从页面顶部的一个链接跳到网页的中间,也是中文部分的开始,但跳不回去。这个方法可以用,但远远不够理想。在写《GPT-3:时间与金钱的抽象》的过程中,我发现了OpenAI的博客的组织章程那页有很好的中英文版本切换体验。我当时已经知道OpenAI用Ghost,所以这个切换体验肯定也能在《互联》上实现。

我没有自己写代码做改进,而是决定找人帮忙加快速度。我外包了一个开发者,他已经很熟悉Ghost的各种模板,以单个项目的改进来合作。除了做双语切换体验以外,他还做了网页的档案部分和许多UI改进,使阅读效果更好。这三项改进总共花了我不到200美元。

这里分享些与远程外包开发者合作的最佳实践:在联系任何人之前,先弄清楚你到底想要什么,一直到最微小的细节。当有一个清楚的例子可以复制时,用外包开发非常高效和廉价,但他们并不擅长(也不应该擅长)与你一起设计和迭代一个半成品或想法。这也是为什么一般来说,在创业期间处于产品需要快速迭代和发掘定位的阶段,用外包开发不是个好做法。

换句话说,外包适合克隆,不适合创新。

双语写作流程

我每篇文章都是先用英文开始写,一般写到草稿85%定型后再开始写中文版。刚开始的时候,我用百度翻译,把85%的英文版变成50%定型的中文版做为草稿的基础来继续写。我现在用DeepL做同样的事情。我认为DeepL比百度翻译效果略好些,但对这两个工具总体态度很中立,都还挺好用的。

我写中文版的过程叫"转译" (trans-creating),是一个前同事用的词,我很喜欢。这个过程不是直接翻译,而是用一个不一样的语言进行再次创作。因为我是原创作者,所以没有必要忠于一个版本或另一个版本,最终目标是用不同的语言准确而自然地传达思想和信息。

举几个例子。英文版可能写到某些与中国有关的公司、市场概念和缩略语,这些内容时时需要外加些背景资料来帮助读者理解,但对中文读者来说是没有必要的,因此在中文版中可能会省略。英文版中的某些俗语和幽默无法很好地变成中文,因此在中文版中可能会以更直接的方式讲述同样的部分。

在这个每周两次的 "转译 "过程中,我发现了个令我有点小惊讶的现象,那就是写中文版的过程非常有助于改进英文版,因为它能更有效地暴露出不精确、不准确和写得不流畅的段落。

写作是一件很累的事,用双语写作会让人格外的累。人当累的时候,就会犯各种愚蠢的错误和打错别字。(我非常讨厌错别字,因为我觉得这是对读者的极为不尊重。)为了保持质量,几个月前我雇了一个实习生,TA(这不是错别字,而是个人选择的代词)有流利的双语能力(比我要流利得多)来修改编辑我的所有文章,还做一些研究和产品开发项目。TA还记录了我所有的错误以及正确使用的例子,所以我的写作质量希望会继续提高。

自从这位实习生加入后,给了我更多的动力,TA的贡献立竿见影! 我每月给TA发津贴 -- 这是我花过的最值的钱。(大家要好好对待你的实习生!)

未来的产品改进计划

《互联》,做为一个产品,还有很长的路要走。虽然中英文切换让双语阅读某一篇文章的体验更好,但整个网站还是以英文为中心的,这对我的中文读者并不友好。

多语言网站的例子有很多,但大部分都是些公司官网,内容有限。我觉得那种形式不适合阅读长篇文章,必定有更好的设计来满足双语或多语的阅读需求。(如果您有好的设计想法,请跟我分享!)

Ghost自带的邮件模板也不灵活 -- 无法切换两种语言版本来直接阅读。这也是为什么我开始在每封邮件的顶部附加一段话,来引导中文读者到最佳的阅读方式。(如果您是在邮箱里收到这篇文章的话,就会看到这段话。)这是我希望Ghost能够进步的一个方面,在邮件模版上提供更灵活的定制能力。这也是我计划实行的下一个重大改进。

我还计划在现有的基础上构建更复杂的产品 -- 社区,付费层,通过音频、视频、聊天和模拟游戏等多种媒介进行更多的互联、跨学科的知识交流。《互联》对我来说是一个10年的项目,而我们才刚刚进入第10个月。

我希望这篇 "幕后"文章分享了些关于怎么做一个双语博客的有用信息。这是个任何人都可以做到的事情。我期待着一年后再写这篇文章,分享《互联》背后的新发展。

如果您喜欢所读的内容,请用email订阅加入“互联”。要想读以前的文章,请查阅《互联档案》。每周两次,新的文章将会直接送达您的邮箱。请在TwitterLinkedIn上给个follow,和我交流互动!