Release: Fortress of Steel, part 1 (Modern Minds 4)

It’s time for a new Modern Minds short story. This time around, it’s Part 1 of “Fortress of Steel”. As always, we’ll start with the blurb:

Dirk is a young man looking for his future. His mind holds a secret strength, a defense few can understand, let alone break. Yet that very power will lead him further into the hidden world he has only just glimpsed, a world of mystery, wonder, and danger.

Head on over to my Patreon (at least until it gets shut down!) to pick this one up. All you need is to subscribe at my Serious Reader level, which only costs you $3/month. That’s not much at all. And you’ll get the conclusion of this one when it comes out in August.

Themis dev diary #4

Since my last update, I’ve now released the 6th alpha of Themis. It’s still not ready for primetime, alas, but I’m making progress. This particular milestone marks the introduction of ActivityPub support, one of the cornerstones of the Themis project. So far, the server can handle incoming Create activities (or post objects by themselves, which it converts into these as per the spec) and follow requests for groups…as long as they come from local users.

In other words, we’re not federating yet, but it’s something. I’ve never implemented a spec of this complexity before, and I’m still working alone. It’s harder than I thought, especially since so much of the AP spec expects you to be online. (In fact, it outright tells you not to deliver to localhost, meaning that I can’t even call Themis compliant until I’m done testing!)

Now, though, I’m taking a break from that and shifting my focus back to the front end. For Themis, this is a kind of SPA using the excellent Vue.js framework and the Vuetify UI library. It’s Material Design, but I’m a strange person. (Okay, you already knew that much.) I like the look of Material Design. It’s clean, uncrowded, and it has what I see as a nice feel. No design spec is perfect, of course, and Material does have some glaring flaws. Vuetify has even more. Still, I think it’s a good starting point.

The screenshot below shows what will become the front page of a Themis server. The login box switches to an account creation form when requested, the right-hand column displays a list of all known groups, and the middle portion will hold a server-specific description that can contain local rules, admin info, or anything else you like. (Editing that information is yet to be implemented.) Other than that, it’s pretty much final. All that’s missing is a logo, which may take someone with more artistic skill—compared to me, that’s anybody.

Because so many people use mobile devices instead of proper desktops these days, I’m also doing my best to make this front-end fully responsive. It’s not mobile-first, because I don’t believe in that philosophy, but Android phones and tablets will be first-class citizens in the Themis network. (I can’t afford to test Apple products, so that’s why they’re not included.)

So, after all that hard work to get 1/3 of the ActivityPub spec implemented, expect some faster progress now. Themis still has a lot of work to go, but I hope to get at least a feature-complete beta version out by October 1st. That’s my target, as it has been all along. Now, I think I can do it.

To share or not to share

Comic books have a long history of being set in a “shared” universe, and that has, in recent years, bled over into the movies and TV series made from them. Witness Marvel’s numerous offerings, how they all interconnect. Characters cross over, as can villains and plotlines. Major story events can reverberate through half a dozen individual series. (DC tried this, too, but they can’t seem to get it right the way their biggest rival does.)

In the world of “real” books, this kind of thing is not too common. That doesn’t mean it’s unknown, however. And there are a couple of ways to go about it. One might say that the Dune setting, for example, is a shared universe, as it has multiple authors working in the same world, under the same general constraints of style, characterization, and overall feel. The (now-defunct) Star Wars Expanded Universe is another good example: dozens of books, all able to build off one another, but still able to tell individual, independent stories.

The other option is a single-author universe. In this case, the meta-setting isn’t shared by multiple writers, but by multiple series. For this, the best example has to be Stephen King; The Dark Tower was his way of connecting all these disparate stories. Another example of an author placing lots of stories into the same universe is Brandon Sanderson, with his “Cosmere” setting. Again, the general principle is the same: multiple stories, all acting independent, but with signs that they are, in fact, set in the same world. (Or worlds, in this case.)

Even considering something like this is a massive undertaking, but…that’s just what I’ve been doing lately. And I’m fast coming to the conclusion that I’ve already started creating a shared universe for some of my works.

Let’s start with Otherworld, since it’s my biggest work yet. All along, I did intend it to be a place that could be shared. There’s a lot of worldbuilding and backstory that has absolutely no bearing on the main plot of the lost expedition. In fact, I’ve gone so far as to create a language for a race that won’t even show up in any of the planned 50 novellas and short novels that make up the “primary” Otherworld series. But that’s okay. In my mind, that gives me more room to try other stories. And I don’t even mind others trying their hand at something set in the universe. (Seriously. Just ask, and I’ll tell you all you need to know.)

One series does not a universe make, of course, but that’s where it starts getting bigger. My Endless Forms series of paranormal thrillers will soon see its second full release (next month in paperback and ebook formats), and I have slipped in a vague reference to one of the Otherworld “bridge” stories, specifically “The Control Variable”. It’s not overt, and it could easily be explained away as a chance coincidence, but I know the truth. And I know I should probably regret it. Now that I’m writing the third entry in Endless Forms, Change of Heart, I may end up adding more nods to Otherworld.

So that’s two, but not all. In November 2017 I wrote The Soulstone Sorcerer, the first entry in a series I’ve codenamed Gateway. The timing doesn’t work for it to reference either of the two above—it’s set in 2018, the others after—but I have gone the other way. The Second Crossing and Point of Origin, two of the 2nd season Otherworld novels you’ll see this year, both have oblique references to The Soulstone Sorcerer. Again, it’s not so obvious that you can’t miss it. No, this is nothing more than a mention. But it may grow into something more.

Shared universes don’t have to be connected through direct links like this, though. Thus, if I’m going to be doing this, then I have no problem saying that, for instance, Heirs of Divinity is set in the same world. There’s about 300 years of difference between it and any of the others, but it concerns essentially the same idea as Otherworld, Endless Forms, and Gateway: things on this planet are not as they seem.

That one’s a decision for later. The same could be said for “Fallen”, the novella I released for free last year. And “Miracles”, since it’s a direct spin-off of Heirs. Some others I have on my to-do list might also end up being in this shared setting, but we’ll see.

Obviously, not everything I write can fit this mold. Nocturne and The Linear Cycle quite obviously aren’t set on our planet. They’re fantasy stories in fantasy worlds. Orphans of the Stars is meant to be “harder”, so it’s out, too. The same goes for Before I Wake, although I may have made it a book that exists in the shared setting.

Hidden Hills is a tough one, though. On its face, it fits the fantasy theme the same as Nocturne. If you look at it the right way, however, it might actually be a far-future sequel to Orphans of the Stars. Okay, maybe I wouldn’t go that far, but if you read the two, you can see how they could, in theory, be connected.

In other words, even the notion of a shared setting can lead to false friends, stories that look like they’re linked, but really aren’t. Also, I have to resist the temptation of drawing stories closer together when they’re meant to remain separate. I’m not ready for crossovers. I don’t think they’d fit my writing style at all, and they feel a little too…campy for my tastes.

Still, it’s something to think about.

🖼🗣: the emoji conlang, part 5

As promised, this edition of our series on the emoji conlang 🖼🗣 (aka Pictalk), is going to be focused primarily on building our vocabulary. You saw last time the ways we can combine symbols to create new words, but we’re first going to look at roots, individual symbols that can be used as words in their own right.

The inventory

As of the recently-released Version 12 of the Unicode standard, we have a total of 3,019 emoji at our disposal. That sounds like a lot, for sure, but…it’s not that simple, at least as far as our script is concerned. Gender and skin tone modifiers don’t come into play for us, because their meanings aren’t exactly lexical. (Okay, gender is linguistic, but I’ve decided that it plays no role in 🖼🗣 grammar.) Take those out, take out the various “family” permutations, and do some shuffling, and my best calculation is a total of 1,581.

That’s still a large number, but we’re using quite a lot of them, such as ◻ or ➡, as grammatical particles, suffixes, or other “content-less” morphemes. Also, we’ve got plenty of duplicates, and some, such as the annoying “cat face” emoji, that we just don’t use. What’s left comes out to 1,200 or so symbols, plenty for a vast and diverse vocabulary even before you start compounding.

The roots

We can divide the roots into a number of categories. We’ll look at each of those groups in turn, because they tend to show some similarities. While I won’t describe every emoji in much detail, I hope this overview, along with the examples I give, suffice until I can create a real list.

Faces

Most of the faces (the emoticons, as we old-timers call them) stand for the emotion or state they express:

  • 😄 – happy
  • 😕 – confused
  • 😠 – angry
  • 😫 – tired
  • 😷 – sick

Not all are like this, though. The “basic” face 😀 instead translates as the noun face itself. 😆, 🙃, and 😤 represent verbs laugh, invert, and defeat, respectively. But symbols like these are the exception, and the class-changing suffixes we saw last time work to convert them into something more like their fellows.

Emotions

Unicode is for lovers, apparently, because there’s an awful lot of different hearts. But we’ve got other emotions, too. And most of the hearts turn out to be just color variations; in 🖼🗣, colored version of emoji always represent those colors.

The rest tend to be either adjectives describing the emotion or verbs that define an action, although some get more idiosyncratic meanings instead:

  • 💋 – to kiss
  • 💌 – romance
  • 💖 – emotional
  • ❣ – to compliment
  • 💨 – fast
  • 💤 – sleep (note that this is a noun first)

The standard includes a few others in the “emotion” section, namely speech bubbles. These are important as communication words in our script:

  • 💬 – to say
  • 👁️‍🗨 – the 1st-person pronoun “I” (where needed)
  • 🗨 – to reply
  • 🗯 – to shout
  • 💭 – to think
Body parts

Mostly, body part emoji stand for the that part of the body, or else the sense it provides:

  • 🧠 – intelligence
  • 👂 – ear
  • 🦴 – bone (this is new, so not all fonts support it)
  • 👁 – eye
  • 👀 – to see
  • 👄 – mouth

The various finger-pointing symbols, by contrast, have meanings less often associated with symbolism:

  • 👋 – hello
  • 🖐 – fingers
  • 🎌 – to hope
  • 👉 – to be
  • 👈 – a marker for relative clauses (which we’ll see in a future post)
  • 👆 – that
  • 👇 – this
  • 👍 – good
  • 👎 – bad
  • 🙏 – to pray
  • 🤲 – the 1st-person pronoun “we”

And I think you can guess what 🖕 means.

People

As stated above, 🖼🗣 doesn’t bother with the gender or skin tone modifiers of Unicode. Instead, people are just…people. With very few exceptions, the “person” emoji stand for the specific person represented:

  • 👨 – man
  • 👩 – woman
  • 👶 – baby
  • 🧒 – child
  • 👨‍🎓 or 👩‍🎓 – student
  • 👨‍🎤 or 👩‍🎤 – singer

Some of the exceptions include 🙍, for the verb frown, and 🙅, to indicate prohibition (“may not”, in English).

Also, any of the numerous family permutations is allowed as a substitute for 👪 family. The generic is considered the default, but more specific variants can show a degree of politeness or respect.

Activities

Technically, Unicode classes these as a subset of the “person” group, but they’re very different in our script. For most of these, the meaning is verbal, rather than nominal. Again, gender doesn’t matter, although it can be considered polite to use it where it matters. (Where available, the generic “person” forms are to be preferred as default.)

  • 🚶 – to walk
  • 🏌 – to play golf
  • 🏊 – to swim
  • 🛀 – to wash/bathe
  • 🛌 – to rest
Animals

Unicode has a bunch of animal emoji symbols, and we use almost all of them to represent those animals by themselves. Reduplicated forms (doubling the symbol) form a “pack”, “flock”, or any other collective noun, while the adjective and verb class-changing suffixes form words concerning the nature and actions of each individual animal.

  • 🐕 – dog
  • 🐈 – cat
  • 🐴 – horse
  • 🐁 – mouse
  • 🐔 – chicken
  • 🐳 – whale
  • 🐜 – ant

One of the few exceptions in this class is 🐽, which instead stands for the verb smell.

Plants

Plants aren’t as numerous as animals in the Unicode emoji set, and 🖼🗣 tends to use many of them for more abstract meanings. Still, the specific types of plant, such as 🌷 and 🌵, stand for their individual kinds.

Examples of the abstract set include:

  • 🌱 – plant
  • 🍀 – luck
  • 🍂 – autumn
Food and drink

People love to eat, and Unicode definitely has them covered there. As with plants and animals, most of these are specific foods or beverages, so their basic meanings encode those:

  • 🍔 – hamburger
  • 🍕 – pizza
  • 🍓 – strawberry
  • 🍪 – cookie
  • 🍺 – beer

A couple of abstract symbols include:

  • 🍳 – to cook (specifically fry, but any kind of cooking is a valid translation)
  • 🥘 – food

Also, the 🍴 and 🍽 symbols translate as eat and meal, respectively.

Places

Once more, we have a large set of emoji symbols whose meanings are fairly transparent. The numerous places, whether geographic or constructed, tend to represent in language what they look like:

  • ⛰ – mountain
  • 🏠 – house
  • 🏥 – hospital
  • 🏫 – school
Transportation

Unicode gives us a lot of vehicles, and we use them about how you’d expect. I know this is sounding like a tired refrain by now, but it’s just how it is.

  • 🚕 – taxi
  • 🚓 – police
  • 🚃 – train

A little wrinkle here is that 🛣 is the abstract road rather than something more specific; if you want something more concrete (sorry about the pun), you can use compounding.

Clocks

Clocks representing half-hour intervals should be self-explanatory. The ⌛ emoji represents time in the abstract, while the verb measure (specifically for time) can be translated as ⏱.

Sky and weather

Most of these are fairly obvious. Cloudy and sunny skies represent just that. The various kinds of weather emoji mostly encode that sort of state. 💧 is abstract water, however, and 🌊 is ocean rather than something specifically to do with waves.

Recreation

Games, sports, and activities mostly function the same as any other “this is what it looks like” emoji:

  • ⚾ – baseball
  • ⛷ – to ski

Some are different, though: 🕹 is control, 🃏 simply joke.

Clothing

Once more, it’s the same general idea: 👕 is shirt, etc. Some of the oddities here include:

  • 🎓 – to graduate
  • 🛍 – to shop
  • 🎒 – student
Technology

Many of the technology-oriented emoji are used for grammatical purposes. Most of the rest tend to be of the “object” sort we’ve seen so many times already:

  • 💿 – CD
  • 🎥 – film
  • 📸 – to take a picture
Tools

Most of the tools are of the “object” sort, representing the objects they appear to be. An important exception is 🔫, which always translates as a real gun, not a toy, when used alone. (Unicode quite clearly defines the symbol as “pistol”, but PC-crazed tech companies try to pass it off as a harmless water gun instead.)

A few other interesting symbols in this group include:

  • ⚖ – law
  • ⚙ – machine
  • 🗜 – to compress
  • ⛓ – to hold back
Household

These are more “object” type emoji, and they tend to fall under the same rules as above.

Keycaps

I’m skipping most of the symbols in this post for a very good reason: they’re symbolic. They don’t have well-defined meanings to begin with, so I felt no shame in recycling them for grammatical use. That includes things like audio controls, punctuation, and the multitude of arrows.

But one set of exceptions should be pointed out here, I think. The Unicode standard has a kind of generic method of constructing keycaps (boxed numerals that look like they’re on buttons), and it defines about a dozen of them. The numerical ones, such as 1, are ordinals: first, second, etc. The others are:

  • #️⃣ – number
  • *️⃣ – any
Flags

Lastly, about 300 of the available emoji are national or regional flags. These are a little special in 🖼🗣, for they can function as both nouns and adjectives without needing class-changing suffixes. The role they fill is implied based on position, defaulting to nominal:

  • 🇺🇸 – USA, American
  • 🇪🇺 – Europe, European
  • 🏴󠁧󠁢󠁥󠁮󠁧󠁿 – England, English (note: not the same as 🇬🇧)

Conclusion

Whew. That’s a lot to take in, and I didn’t even cover everything. Fortunately, it’s a lot smoother sailing from here on out. I’ll illustrate new words when they come up, and I’ll point out non-obvious compounds or derivations. Other than that, the next post will get back to grammar. Fun, isn’t it?

Release: Alignment Adjustment (Return to the Otherworld 2)

And here we go again. Return to the Otherworld continues with its second installment, Alignment Adjustment.

Things have changed.

The other world isn’t the same, nor are those whose lives have been touched by it. To truly understand how best to live in this new land, those who came from another must accept that first impressions are not everything. Only by recognizing their mistakes will they have the chance to avoid them in the future.

For the second expedition, readjustment is a necessity. Now that they have begun to dive deeper into the cultural waters of this world, they can no longer deny their place in it. Some may not like that place. Some may struggle with the preconceived notions of their new neighbors, their friends and lovers. But even that forces them into the mold they so desperately wish to escape.

Not a lot happens in this one, I’ll admit. It’s more getting things set up, moving people around, and a lot of character interaction. The expedition was gone for nearly a year, after all. It’ll take time to get back in the saddle.

As ever, Otherworld stories are Patreon exclusives for the time being. That means you can head on over to my Patreon and pick up Alignment Adjustment for a pledge of $3/month. And the list of things you can get for that low price keeps on growing.

Coming up next is Part 3 of the series, Waters Rising. Look for it soon, and remember to keep reading!

Milestone

Sometimes, I wonder if I should even be alive today.

Those aren’t the words of someone who has lived through tragedy, who overcame adversity he initially thought too much to bear. No, they’re the common refrain of survivors’ guilt, and they stem from a very pivotal moment in my life.

A little over five years ago, my cousin died. Joey was 35, and I saw him as a big brother. And I do mean big. He was 6’5″, and he weighed over 400 pounds—the latter most certainly contributed to his death in the opening days of 2014. Today, March 15, is the day when my current age will match that which he attained, and the last years (coinciding with my best writing output) have often seen me question whether I am worthy of that. He was the better man, in my opinion, so why should I be the one who keeps on living?

I know that’s the wrong way to think about it. I really do. Deep in my mind, I recognize the fallacy, yet my emotional side comes out, and…well, that’s my problem. Depression, as J.K. Rowling so eloquently said it, is the “absence of being able to envisage that you will ever be cheerful again. The absence of hope.” A “very deadened feeling.” And I understand those words perfectly.

A lot has happened to me over the past year. Some things I never imagined, some places my mind has never truly explored. I don’t like all of them, and there are a few thoughts, a few words, a few actions I wish I could take back. My mental state has taken a toll on my own health, as well as my relationship with my family. That, for me, is the worst. As I state in the acknowledgments of all my books, family comes first. In my opinion, that is the only right way to look at the world. If we forsake our family, then who are we?

They don’t make it easy, I’ll admit. Too many members of my family are Trump fanatics. Not merely Republicans, or conservatives, but the kind who see through glasses tinted by one man’s verbal wanderings. While I’m far from liberal on many issues, I have been tarred with that brush on repeated occasions. Here in the South, in a rural part of Tennessee, “liberal” is a dirty word. A political slur, rather than a racial one. Like any epithet spoken in anger, it hurts, and that hurt piles on top of the ones I already endure. But I can forgive. I must, to be the man I want to be. Family comes first.

One of my larger problems is that, in a lot of cases, there’s nobody else on the list after them. Since last May, I’ve managed to come out of my shell a bit, but I remain incredibly introverted. Nearly 800 posts on the fediverse (@mikey@toot.love, if you’re wondering) don’t change that. The three and a half months I spent trading texts with a woman I met online don’t change that. It’s part of my nature, as surely as my intelligence, rationality, and, apparently, depression.

To keep the darkness at bay, I write. Since I first reached the deepest depths, I’ve become a bit of a machine. Five stories done in 2015, eight (I think) in ’16. Twenty completed in 2017. I’ve written about three million words since my cousin’s passing, because I really don’t have any other creative outlets. Nor do I have a vent for my frustrations, my rage at the injustice of a world that would take away one of the most important people in my life.

I write. And in that writing, I tell my own story. Not for nothing are some of my favorite characters like me. Shade, protagonist of Nocturne, embodies my idealism, my personal disdain for extremism. Lucas, the character from my free novella “Fallen”, is my inner skeptic. And it seems like all my works have an intelligent, insecure man who really just wants to get away from it all. Alex in the Otherworld series, Asho in the Hidden Hills books, Porter in The Linear Cycle…the list goes on, and it probably will as long as I continue down this path. “Write what you know,” the advice goes, and I have taken that lesson to heart.

Can I change? I honestly don’t know. I’ve tried, and I’ve seen rays of sunlight pierce the darkness. For the second half of last year, I wrote far less than in the prior six months; this I owe to the influence of the woman I mentioned earlier. At no other time in my adult life had anyone ever confessed genuine interest in me, and…that made me feel good. It blew away the dark clouds for a time.

But the end of that time left me sinking further. Barely two months ago, I seriously questioned the purpose of continuing in this world. In the end, though, I did find one: family. Because family comes first.

If this stream of consciousness is hard to read, don’t worry. It was hard to write, too. But I needed to get these words out there, if only so there would be a record outside my own mind of what I’m going through. It’s why I write. It’s why I keep going. At this point, I don’t care if anyone ever reads my stories, or subscribes to my Patreon, or buys the books I submit to Amazon. The stories exist. They’re my escape, my salvation. When I’m writing, I can forget all the bad things in my life. I forget the good, too, but there’s never enough of that.

My hope, though, is that today will mark a change, in outlook if not in fortune. I have reached a milestone, and now I enter an uncharted phase of my life. The past is the past, the future unknown. For now, I look to the present, to each new day as it comes. Maybe that’ll work.

Thank you.

Themis Dev Diary #3

This will be a much quicker post than the last two, and there’s a very good reason for that. You see, I’ve never implemented a spec before. ActivityPub isn’t the easiest, from what I can tell, and it’s exposed quite a few…deficiencies in my design for Themis. So, at the moment, I’m spinning my wheels a bit.

The crux of the issue is the way the spec expects me to communicate. ActivityPub uses activities for that (duh). These are objects with a number of properties, one of which is an ID. These have to be globally unique, and the easiest way to do that is to tie them to the originating server. So the server at example.com, for instance, can make IDs of the form example.com/activity/1234: the last number is different for each new activity, and it probably comes from the autogenerated database key. (An alternative is UUIDs, which I use elsewhere in Themis. Flake IDs—what Pleroma uses—are another option, if you’re looking for something that can be sorted chronologically, which is required by certain parts of the spec.)

So far, not so bad. But the AP spec wants these IDs to be URIs. And that means I have to format them properly. The problem is, a URI has a few necessary components. I have to account for subdomains, for instance. And the difference between HTTP and HTTPS, because somebody might use the former (I am for my dev instance, so why not?). Let’s not forget nonstandard ports, either. Listening on 80 or 443 requires root privileges on Linux, and NestJS defaults to 3000.

Putting all that together proves that my initial idea of just storing an origin host name alongside the names of groups and users is, to put it mildly, inadequate. Yesterday, I added a new Server object, which will store every part of a URI except the path. Hopefully, that’ll be enough to make ID generation a lot easier. And let’s also hope I don’t break too much in the process.

Anyway, once I get that done, I’m thinking the rest of ActivityPub will be relatively simple. Not easy, mind you, but I actually have made some progress on implementing the client-to-server portion of the spec, which is something even Mastodon isn’t doing. Give me a few more weeks, and I think I’ll be ready for Alpha 6. Until then, keep your fingers crossed that I don’t screw this up too much.

🖼🗣 : the emoji conlang, part 4

🖼🗣 is becoming quite the little language. In the first three parts, you saw the basic outline of how we can take the wide array of emoji characters available in Unicode and contort them into a hieroglyphic script for modern times. Now, we’ll take another step by looking into the many ways in which we can construct new words from the building blocks we’ve been given.

Derivation

First of all, we need to make a distinction between the two different types of combining we can do. Derivation is mostly a grammatical process; it turns nouns into verbs, for example. Almost all languages have at least some derivational processes, and they tend to fall into a few major categories. 🖼🗣 is no exception, so we’ll look at these now. Later, we’ll turn to compounding, where we take individual words and combine them to create something new.

All of the script’s derivations are suffixes. We’ve already met a few, but here’s a complete list. (Note that tense markers, the plural and singular markers, and others like those are considered inflectional, so they’re not listed here.)

  • 〰 – This sign converts a word into an adjective. Usually, it’s a “quality” adjective: a 🧒 (child) is young, so 🧒〰 means “young”.

  • ▪ – This sign forms diminutives. These are “small” forms of words (typically nouns or adjectives) that indicate a lesser degree or amount: 🏙 “city” becomes 🏙▪ “town”, and ❄ “cold” turns into ❄▪ “chilly”.

  • ◼ – This sign changes an adjective or verb into a noun representing something to do with them. So we might turn 🍴 “to eat” into 🍴◼ “meal”, because a meal is something you eat.

  • ⬛ – The opposite of ▪, this sign creates superlative or augmentative forms. Linguistically, those are two different things, but they both pertain to an increase of a quality. With adjectives, ⬛ forms a superlative: 💪 “strong” becomes 💪⬛ “strongest”; this is really an inflection rather than a derivation. When used on a noun, however, the connotation is slightly different: 🌧 “rain” can become 🌧⬛ “torrent, flood”.

  • 🔻 – This marks a negative or inverse connotation. Usually, there’s already another word available, but using this suffix means you’re focusing on what something is not. An example might be 👍 “good” becoming 👍🔻 “not good”. It’s not quite the same as 👎 “bad”, but it’s close.

  • 🔺 – This is the counterpart to 🔻. It marks a positive connotation, which you may think has little use, but it can also function as an intensifier, a bit like “definitely” or (in colloquial speech) “literally” in English.

  • ➡ – As we have seen in previous parts, this forms verbs from other words. No examples needed here, because you should already get the gist.

These are the main derivations in 🖼🗣. Others do exist, but they have more specialized meanings, and they’re probably better analyzed as compounds, which we’ll get to right now.

Compounding

Most vocabulary in the script is formed by compounding. This process, much more general (yet also a bit more idiosyncratic) than derivation, allows us to express essentially any concept through a combination of 🖼🗣 symbols. The rules are a little involved, so pay close attention.

General compounding rules
  1. Any lexical symbol can be used in a compound. Those with a purely grammatical function (such as the derivational affixes above) aren’t allowed, except in very specific circumstances. (These form what’s called a closed class of words, and they don’t really concern us here.)

  2. The minimum number of symbols is 2, but the only upper limit is imagination. Realistically, however, most compounds will have at most 4 symbols.

  3. One element of the compound is the head, while the rest are considered modifiers. (Linguists note that the head element isn’t necessarily the semantic head, but it usually is.)

  4. The head determines the part of speech of the compound. Thus, compounds with heads that are nouns will be nouns themselves.

  5. Verb compounds are head-initial, while all others are head-final.

Noun-noun compounds

Compounds of multiple nouns are probably the easiest to understand. Almost all of them tend to denote specificity. In other words, the modifiers define a specific type of the noun represented by the head. We’ve already seen 🐕🏠 “doghouse”, for instance, but here are a few more:

  • 🐦🛁, “birdbath”
  • 🚲🛣, “bike path”
  • ✋🔫, “handgun”
  • 📰📄, “newspaper”

Simple enough, right? These are mostly English-oriented, but the same principles are common across many languages.

Adjective-noun compounds

These are almost the same as the noun-noun compounds above, but the modifier is an adjective instead:

  • 💨🛣, “fast lane”
  • ♨🛁, “hot tub”
  • 🤓☎, “smartphone”

Again, there’s not much to it.

Adjective-headed compounds

When an adjective is the head, the modifiers shift the base meaning toward their own. It’s a little hard to explain in prose, so we’ll try a few examples instead:

  • 🌹🔴, “rose red”
  • 🏛👴, “ancient”
  • 👿🖤, “devilish”

Unlike nominal compounds, these are often less transparent, but that’s okay.

Verb-headed compounds

Verbal compounds are the hardest. For one thing, they’re “inverted”, with the head coming first. For another, pinning down their meaning isn’t easy. In general, more active verbs tend to form compounds whose meanings are related to the head, while “static” verbs function a lot more like adjectives.

  • 🏃💨, “sprint”
  • 🤝💬, “introduce”
  • 👐🆓, “donate”

Moving on

Part 5 of this series will be a chance to pause and take stock. Instead of grammar and word-building, I’ll provide a lot more vocabulary, roots and compounds alike. I hope to see you then!

Themis Dev Diary #2

It’s been a few weeks, and this project of mine is still moving along. Maybe not as fast as I would like, but I am making progress. Since the last post, I’ve spent much of my coding time working on what I consider the biggest feature of Themis: filtering. Here, I want to talk a little bit about what I mean, and why it’s so important.

My computer, my rules

Today, essentially every discussion platform is moderated. What that means depends on the place, but let’s boil it down to its essence. Moderation is censorship, plain and simple. Sometimes it’s necessary, sometimes it serves a purpose, but a moderated community is one that has decided, either by collective choice or external fiat, to disallow certain topics. More importantly, the administrators of the platform (or their anointed assistants) have the power to remove such content, often without debate or repercussion.

Removing the users that post the prohibited content is the next step. If online communities were physical, such suspensions would be the equivalent of banishment. But a much larger site like Facebook or Twitter, so integrated into the fabric of our society, should be held to a higher standard. When so much in our lives exists only in these walled-off places, banning is, in fact, more akin to a death sentence.

It is my strong belief that none of this is necessary. Except in the most extreme cases—automated spamming, hacking attempts, or illegal content that disrupts the infrastructure of the site—there really isn’t a reason to completely bar someone from a place simply because of what others might think. Themis is modeled on Usenet, and Usenet didn’t have bans. True, your account on a specific server could be locked, but you could always make a new one somewhere else, yet retain the ability to communicate with the same set of people.

This is where Facebook, et al., fail by design. Facebook users can only talk to each other. You can’t post on Twitter timelines unless you have a Twitter account. On the other hand, the “fediverse” meta-platform of Mastodon, Pleroma, etc., returns to us this ability. It’s not perfect, but it’s there, which is more than we can say for traditional social media.

Out of sight, out of mind

But, you may be thinking, isn’t that bad? If nobody wants to see, say, propaganda from white supremacists in their discussions, then how is discussion better served by allowing those who would post that content to do so?

The answer is simple: because some people might want to see that. And because what is socially acceptable today may become verboten tomorrow. Times change, but the public square is timeless. As the purpose of Themis is to create an online public space, a place where all discussion is welcome, it must adhere to the well-known standards of the square.

This is where filtering comes in. Rather than give the power of life and death over content to administrators and moderators, I seek to place it back where it belongs: in the hands of the users. Many sites already allow blocklists, muting, and other simple filters, but Themis aims to do more.

Again, I must bring up the analogy of Usenet. The NNTP protocol itself has no provisions for filtering. Servers can drop or remove messages if they like, but this happens behind the scenes. Instead, users shape their own individual experiences through robust filtering mechanisms. The killfile is the simplest: a poster goes in, and all his posts are hidden from view. Most newsreader software supports this most basic weapon in our arsenal.

Others go the extra mile. The newsreader slrn, for instance, offers a complex scoring system. Different qualities of a post (sender, subject text, and so on) can be assigned a value, with the post itself earning a score that is the sum of all filters that affect it. Then, the software can be configured to show only those posts that meet a given threshold. In this way, everything a user doesn’t want to see is invisible, unless it has enough “good” in it to rise above the rest. Because there are diamonds in the rough.

Plans

The score system works, but it’s pretty hard to get into. So, by default, Themis won’t have it. But that doesn’t mean you can’t use it. The platform I’m building will be extensible. It will allow alternative clients, not just the one I’m making. Thus, somebody out there (maybe even me, once I have time) can create something that rivals slrn and those other newsreaders with scoring features.

But the basics have to be there. At the moment, that means two things. First is an option to allow a user to “mute” groups and posters. This does about what you’d expect. On the main group list (the first step in reading on Themis), muted groups will not be shown. In the conversation panel, posts by muted users will not be shown, instead replaced by a marker that indicates their absence. In the future, you’ll have the option to show these despite the blocks.

Second is the stronger filtering system, which appears in Alpha 4 at its most rudimentary stage. Again, groups and users can be filtered (posts themselves will come a little later), and the criteria include names, servers, and profile information. As of right now, it’s mostly simple string filtering, plus a regex option for more advanced users. More will come in time, so stay tuned.

In closing

This is why I started the project in the first place, and I hope you understand my reasoning. I do believe that open discussion is necessary, and that we can’t have that without, well, openness. By placing the bulk of the power back in the hands of the users, granting them the ability to create their own “filter bubbles” instead of imposing our own upon them, I think it’s possible. I think we can get past the idea that moderators, with all their foibles and imperfections, are an absolute necessity for an online forum. The result doesn’t have to be the anarchy of 4chan or Voat. We can have serious, civil conversations without being told how to have them. Hopefully, Themis will prove that.

Release: The Second Crossing (Return to the Otherworld 1)

It’s a new year, and that means it’s time for a new season in the Otherworld. 2019 brings Return to the Otherworld, a new eight-part series following the further adventures of those who have visited this strange land, those who stayed behind a year ago, and the new faces seeking their first opportunity to glimpse the alien world for themselves.

Opening up this time is The Second Crossing:

A year ago, eleven college students stumbled into another world by virtue of an accident. An unforeseen, yet ultimately beneficial, accident. Now, they plan to return, this time with purpose.

New faces will join them. Old friends will welcome them. Enemies will show themselves. And the second crossing will test this expedition in ways they never anticipated. What new discoveries await? What new dangers lurk on the other side of the strange, inexplicable portal between worlds?

None can say, but the students and their companions know one thing for sure: they must return to the other world.

It’s going to be a fun ride, and you can see it all through the year over at my Patreon. All I ask is a simple pledge of $3/month, which gets you access to Return to the Otherworld and the previous series, as well as much more. How can you go wrong?

Look for Alignment Adjustment in six weeks. Until then, have fun and keep reading!