I was asked this question yesterday, and I wasn’t sure how to answer. I’m speaking at a church on Sunday and it’s one of those places where only people who are ordained can give the benediction. If I’m not ordained, I have to finish the service at the Lord’s prayer. The Japanese churches that we work with recognise me as a pastor, and allow me to give the benediction, but this is a church outside our network. So what should I say?
I think probably I’m not ordained, because what they want is someone who is ordained as a pastor in a denomination. But it didn’t seem to matter which one, and I’m sure that the requirements are different across denominations. If I was ordained in the Universal Life Church, I’d be able to say truthfully yes, and nobody would ask any questions. But I haven’t done that, and it seems like a bit of a fudge anyway.
So in the strict sense I haven’t been ordained as a pastor—no other pastor has put their hand on my head and said “bang, you’re a pastor now”, or whatever it is that happens at ordination. But on the other hand, I have been commissioned as a missionary—after a sufficient period of professional training and personal testing—in a Christian mission agency. Is that materially different to having been ordained as a pastor after a similar training and probationary period? I don’t know. As Bosch pointed out, the distinction between mission agency and denomination is pretty weak. They all do the same stuff: start churches and run them.
t has in recent years become customary to devote an enormous amount of energy to theological discussions about whether missionary societies are legitimate agents of mission. Is mission not rather to be regarded as an expression of the church? Without denying the merit there is in such a discussion I would like to suggest that, within the framework of the paradigm spawned by the Enlightenment, there was not much to choose between the organized church as bearer of mission and the mission societies. The point is that, in Western Protestantism, the church was increasingly fractured into a great variety of denominations which, phenomenologically speaking, were not decisively different from missionary and other religious societies. Denominations, too, were organized on the voluntary principle of like-minded individuals banding together. They were, in a sense, para-church organizations.
Thinking about it more, it would be strange to regard me as not being ordained, when what I am trying (and commissioned) to do here is to plant churches—a network of churches, in fact—and appoint leaders for those churches; that means in any meaningful sense of the word, I can ordain others without having been ordained myself. Surely this is wrong.
I tend to think that if the answer to a simple yes-or-no question is so complicated and unclear, then the problem is with the question itself. The reason for asking the question was that only Special People, who have had something spiritually happen to them, can give a blessing to other people. It is based on the assumption that leading a church is not a role, but a quality, fine, but it also sounds very, very much like magical thinking. Bosch again:
In practice, most denominations in mainline Protestantism today are muddling along with an understanding of the ordained ministry vacillating between the traditional Reformation definition and a view closer to that of Catholicism.
So what did I do? I said no, not because I think the answer to the question is no, but because it’s easier just to say no than to be a smart-arse and reject the premise of the question. The only difference it makes, practically, to me or to anyone else, is that the congregation of some church in Japan won’t get a blessing from God this week. Sorry, guys. Hopefully my sermon will make up for it.Subject tags: theology
I have got out of the habit of writing, and I need to get back into it. So for practice I’m going to write about something that should come easy to me.
A few years ago, I wrote a little program called SILE. (rhymes with “mile”). It’s a typesetter: it takes some words, and puts the words into lines, and puts the lines into pages, and puts the pages into a book. This is a more difficult task than you might think. Since then, SILE’s development has been the closest thing I have to a hobby. Some people go running; some take photographs or make music; I write typesetting software.Where SILE is up to
I’m always amazed when SILE works. I guess this is for a few reasons; first, I wrote it and so I know more intimately than anyone else what doesn’t or shouldn’t work yet. As a developer I spend all my time working on SILE’s failings, not celebrating its strengths. Second, it started life as a kind of toy project and so in my mind it’s still a bit of a toy, and so when it’s used to successfully produce something serious.
But looking at it more objectively I think it is as good, if not better in some areas, than most of the other solutions in the same field—in particular, the TeX family. TeX has a longer history and a larger community, and so a lot of third-party packages and time-saving solutions built on top of it, so in that sense it is still more robust and easier to use, but in terms of capabilities SILE offers the same functionality, but with many improvements. (In particular, the multilingual support which I’ll talk about in a minute.)
And recently things have got to the state where I have preferred using SILE to anything else. As an example, I’m publishing a commentary on a book of the Bible; the text goes through the book commenting on each verse. The convention for commentaries is to have the running headers mark the first and last verses treated on the spread, so that you can easily find the comments for the verse you’re interested in:
Here, “12:11” is the first verse treated on the left page, and “13:15” is the last verse treated on the right page. Normally I’d publish this sort of thing with TeX but I wasn’t sure how to correctly achieve those running heads. (Now I know: the answer is the titleps package, but there’s a lot of code there in that answer required to make it work.) I fiddled and fiddled, and in the end thought, “stuff it, I’ll do it in SILE”. SILE’s infonode package was designed for exactly this sort of thing, and it’s implemented explicitly in the bible class. Now sure, it could be because I know the SILE packages much better than the TeX packages, but it was more straightforward for me to get something done in SILE than in TeX, which was a nice surprise.
So SILE can (and does) typeset books quite nicely now. I still find that amazing.Recent development
The last release of SILE happened in June, but an awful lot of work has happened since then. Mostly this was conference-driven development, spurred on by my upcoming talk at the 2015 Granshan conference. Granshan is all about global design, and so I’ve been doing a lot of work to ensure that SILE can cope with some of the more complex writing systems around the world.
You can find all the details in my Granshan talk, but this has meant working on a variety of issues:
• Line breaking for non-Latin languages is interesting. Japanese, for example, is written without spaces between the words, and you can break a line after most—but not all—characters. SILE needs to know which break points are feasible and which aren’t. We do this in a few ways. For Japanese, SILE knows the rules and has a language-specific tokenizer. For language which don’t have a specific tokenizer, SILE tries to use the ICU library to pick out the line breaks; if the ICU library is not available on the system, then it uses its own (horribly incomplete) implementation of UAX #14.
• Line breaking for Indic and South Asian scripts is particularly interesting. In many south Asian scripts, you can break a line after any complete syllable, but working out when a syllable is complete requires doing morphological analysis on the text, at which point you are on your own. (“Such an algorithm is beyond the scope of the Unicode Standard.”) So SILE needs to know how to do the morphological analysis for those languages. I’d like to make this easier and create a domain-specific language for breaking (a little like ICU has for its break iterator data); the Javanese implementation has something like this, but it would be good to generalise it so it can be used in other languages too.
• Bidirectional text—mixing e.g. English and Arabic—is also interesting, because you need to reorder the text to make everything operate in the same direction. This gets particularly tricky over line breaks, because you then need to reorder again so that the text flows correctly from top to bottom. I think this basically works in SILE now; Behdad Esfahbod and Khaled Hosny have been extremely helpful in pointing me in the right direction, as it were.
• Speaking of directionality, Mongolian goes top to bottom, left to right—I think it’s the only language that does that. Most typesetting systems started off being designed for Latin scripts, and then tried to add support for this kind of “unusual” script later, with varying degrees of success. Nothing supports Mongolian, as evidenced by Toshi Omagari’s font design gymnastics. I knew that if SILE was going to become a truly global typesetting system, I needed to get rid of “ethnocentric” ideas like “X” and “Y” directions, and allow the user to choose the “writing direction” and the “page advance direction” and do everything in terms of them. Now to do Mongolian, you just tell SILE to typeset “TTB-LTR”, and everything just works.
• As well as preparing for Granshan, because I live in Japan I have wanted to make sure that SILE can produce professional-quality books in Japanese, including vertical (top-to-bottom) layout. Japanese has particular standards for how much space there can be on a line or between characters, how to mix Japanese and Latin texts and so on; it’s typographically very complex, which is why there’s a separate TeX implementation just for Japanese.
SILE’s Japanese support is nearly there. I had everything working, including vertical layout, except for ruby (furigana) support, but then all of the development I’ve been talking about above has caused a few code changes that have broken it all again—the vertical Japanese support was written before the great “writing direction/page advance direction” reshuffle, and so a few things have fallen out of that.
Speaking of which, another big thing we have been working on recently is regression testing, so we know when changes break things. That’s been very helpful (especially when I’ve been making changes to the line breaking algorithm, which was handed down by Don Knuth on tablets of stone) but it has shown us that the glyph metrics have turned out to be different on different systems: when the tests work perfectly on my laptop, they then fail on the Linux virtual machines provided by Travis, and vice versa. Behdad tracked that down to be an issue with FreeType, and we have plans to remove FreeType and just use Harfbuzz for everything. But right now, Harfbuzz doesn’t give us everything we need (in particular, vertical Japanese metrics), and the latest bleeding-edge Harfbuzz won’t be in distributions for a while yet, so that’s on the back burner.
I have also added something which is quite fun: there’s the beginnings of an OpenType font table parser within SILE. Partly I wanted this to report the font versions in use, to track down these metric discrepancies between Travis and my development environment. (Some of them came from the fact that Travis grabbed the latest release of the Noto fonts, and my system was just using the last version that I had installed, and some metrics had changed between the two.) But another reason I wanted it in there was because of Granshan.
Granshan was a conference for type designers, and they had a very different set of use cases for SILE than other users—high-level concepts like “documents” and “paragraphs” were not so important; they wanted to focus on ligatures and how individual glyphs were represented. So I thought it would be fun to produce type proof sheets by reading the Opentype ligature tables and automatically displaying all the ligature and complex combination combinations within the font.
And then I realised that this was an extremely niche use case and I don’t actually need it myself, so it isn’t much of a priority to develop it. If anyone else wants to run with it, there’s code there to support it, but…Future development
So there have been a lot of good changes since the last release. I know I should probably release more often, but I don’t like doing a release when I know there are things which don’t work perfectly—and that’s a problem, because there’s always going to be things which don’t work perfectly.
I had a roadmap which set out where I wanted to go in terms of SILE development, but (as often happens) things have developed in quite different ways to what I expected. I imagined that we could get a lot more uptake of SILE by making e.g. a full DocBook stylesheet so that SILE can be used immediately as a DocBook processor. The problem with that is that I personally don’t really need to process DocBook, and I’m not very motivated to work on problems that I don’t have.
In terms of the bigger picture for SILE, I have the condition that the 1.0.0 release will be able to correctly and predictably typeset a Bible from USX source to PDF unsupervised. To get closer to that, I am now shifting my emphasis on development away from the “back end” stuff of languages and scripts that has occupied me since 0.9.2, to more higher level issues.
For instance, one big priority is to have a nice way to shift between single and multiple column frames, on the same page.
One of SILE’s purported features is the ability to dynamically put multiple text frames on the same page, but I am starting to have my doubts about how well that can work in practice. There are so many moving parts to the page already: for instance, you want to shrink the size of your content frame based on the amount of footnotes coming into the page. But then if you decide to finish with the current content frame and start again with another one, all your footnote calculations get screwed up and you get output like this. I am not sure what to do about this.
There’s an interesting bug with the two-column USX processor at the moment when it comes to footnotes. Actually there are a few different ways to deal with footnotes on multi-column Bible layouts, which is all kinds of fun. You can have a single footnote frame which stretches across the two columns and steals space from both of them—for this you normally want the footnotes to appear horizontally, not one after the other; you can have a single footnote frame sitting at the bottom of the right column and stealing space from it; you can even have footnotes in a gutter between the two columns. Eventually SILE should support all of these layouts, but here’s the bug at the moment: if you have footnotes on the left column, they get typeset after the left column is finished. Adding more footnotes makes the footnote frame bigger, stealing space from the textblock. Then you have footnotes in the right column; these get added to the footnote frame, but the left footnotes are already committed, which means that the right column’s footnotes appear above the left column’s ones. Oops!
There are also (still) some bugs with the grid layout that I haven’t managed to track down, and balancing columns, another thing you really need for Bible typesetting, is also a hard problem. These are the major challenges that are left at the functionality level; on top of that, I also need to get some typographically pleasing page layouts and write sets of macros that make a professional-looking book design. For the USX document class I’m currently using the processing instructions that come with UBS’s Paratext software, but actually I don’t think I like the look of them.
I think we are still a long way from 1.0.0, because the remaining issues are quite challenging, but I still find myself wondering at how far SILE has come…Subject tags: technologywhats-going-on