Release: Fortress of Steel, part 2 (Modern Minds 5)

Four more months means a new Modern Minds story. This time around, it’s the conclusion to “Fortress of Steel”, which you first saw back in April. If you read that one, you don’t really need a blurb, but you get one anyway:

Amid the tumult of storms and the times, Dirk finds himself drawn into an adventure he never truly wanted. For all its impenetrable defenses, his mind continues to follow his heart. No power on earth can affect his thoughts, his emotions, but love and fear will find a way.

As usual, you can find it over on my Patreon for only $3 a month. And December will bring yet another little story in this series, “Memory Remains”. Keep watching for that one, and I’ll see you soon.

Summer Reading List 2019: Midpoint madness

We’re around the halfway point of summer, and considerably farther through the unofficial season of the Summer Reading List Challenge. This year, thanks to what we’ll call “fortunate events”,1 I haven’t finished all three of the books, but I do have one, so here we go.

Fiction

Title: Sins of Empire
Author: Brian McClellan
Genre: Fantasy
Year: 2017

I’ll go ahead and say this up front: Brian McClellan’s Powder Mage series quickly became one of my all-time favorite fantasy trilogies. It occupies a small but growing niche variously referred to as flintlock fantasy or riflepunk, which counters the oft-held belief that fantasy ends with the invention of gunpowder. I love that sort of genre-bending, and those three novels hit a sweet spot for me.

Well, Sins of Empire continues the story. It’s the first of a new series, Gods of Blood and Powder, but it carries over many of the characters. Set about ten years in the future, on a new continent, it has a kind of “summer blockbuster” feel: full of action, with a few nonsensical twists and an epic finale. The prose is, at times, not the greatest, something I’ve begun to notice with increasing regularity. But this book makes up for it in worldbuilding, in pacing, and in the sheer fun of the ride.

I’ve had this one sitting in my to-do pile since last Christmas, and I’m glad I chose it for this year’s challenge. It’s not a filling meal. No, it’s more of a dessert, something for a reader’s sweet tooth. Which isn’t all that bad, as long as you don’t over do it.

Coming up

I still have two more books to finish in the next month or so. I’m more than halfway through one, but I haven’t started the other. It looks like this might be a summer of procrastination, but that’s okay. It’s what I did in school, right?


  1. One of those fortunate events doesn’t like my completely logical punctuation style, but she’s not reading this. 

Release: Falling Into Place (Return to the Otherworld 5)

Now it’s time for the fallout. Here begins the second half of Return to the Otherworld, and we start with Part 5, Falling Into Place.

Disaster averted.

The other world, or this part of it, has seen much better days, but all agree that the worst has passed. Now, the members of the second expedition, along with those who have made their homes here, can return to the bigger business of science, learning, exploring.

But all is not well. The stress of the past weeks has taken its toll. The uncertainty of the future leaves some shaken. And further danger lurks beyond the borders of this fair land. As time runs out on their stay, the students, the teacher, and all those closest to them search for the perfect ending to the tale of spring.

Just because the flood’s over, that doesn’t mean our team is out of the woods. Oh, no. That would be too easy. Now, the scope of their effects on the Otherworld are growing. People are noticing. And decisions must soon be made.

You can get Falling Into Place, along with all my other Otherworld works (now that’s a tongue-twister!) over at my Patreon. It only costs $3/month, and there’s so much more left in store. Like Whence We Came, which is only six weeks away. I’ll see you then.

Release: Whence We Came (Return to the Otherworld 4)

Already halfway done. It feels like time’s just flying by, even in the Otherworld.

In the face of a greater danger, lesser arguments are left behind. When disaster strikes, old enmity is forgotten. Nowhere is that more true than in the other world.

The flood continues, submerging the lands of what some may have believed to be their corner of paradise. The secrets of the distant past remain buried, but they are slowly coming to light. And one member of the second expedition chooses a different path, a path that will test her faith in not only the divine, but also herself.

This one’s pretty much a direct continuation of Waters Rising, which shouldn’t be too out of the blue. It’s a nice little arc, mostly self-contained, but I threw in the added wrinkle of a “guest” chapter on Earth. Because our team has been gone a few weeks now, and they left behind some unfinished business.

Otherworld stories, remember, are available exclusively on my Patreon, so head on over that way to pick this one up. While you’re there, make sure to check out all the other great works you can get for the miniscule pledge of only $3/month. And get ready for Falling Into Place, which is only six weeks away. It’s a perfect choice for your Summer Reading List challenge.

Keep reading!

Themis dev diary #5

I’m up to the 8th alpha release of Themis, and things are looking up. Since my previous entry in this dev diary, I’ve made considerable work on implementing more of ActivityPub, but most of my time has been taken up by two things not absolutely necessary for a program to work, but vital to getting it adopted.

First is the bane of all programmers: documentation. I’ve spent most of the last month working on internal docs, source code comments, and the like. Fortunately, this all came at a time when I was facing a little bit of burnout on Themis, so the project itself didn’t suffer. Now, I still need to write the user documentation, including such minor tidbits like setting up a Themis server, logging into an existing one, and so on. But that’s for later. You know, when I think I might be ready for users.

Second, the front end. I hate doing UI work. I’m not an artistically-inclined person. I work better in text than art. I can’t draw, I have no real intuition when it comes to formatting or color schemes or anything like that. It’s just not who I am. On the plus side, ActivityPub is meant to be client-agnostic. Mastodon, Pleroma, and other platforms using the standard do have builtin clients, but you can also use the servers with your own apps. (I’ve mostly been using Fedilab, but I’ll likely switch from that now that its author has outed himself as a censor.) Themis will, I hope, reach the same state. For now, though, it has a simple, functional front-end inspired by traditional newsreader programs (such as my old favorite, Xnews).

Originally, I thought to use a three-panel system, in the vein of reader programs such as Pan and Forte (Free)Agent. Or even Thunderbird, although it’s geared more towards email than newsgroups. Thus, the left-hand panel would contain the groups, while the right side would be split between threads on the top and posts on the bottom.

I used that for the 0.0.6 version I described in the last dev diary, and it just didn’t work. Vuetify, the UI library I’m using on this project, made it extraordinarily difficult to align all the metadata columns while preserving the tree structure of a thread. As the tree is one of the two most defining features of Themis, this was unacceptable. On top of that, three-panel is hard to make work in the browser, especially when you’re working with widescreen monitors. (Back in the day, that wasn’t an issue. We had 4:3, and we liked it!) So I scrapped that and rewrote the whole thing. Now, Themis still uses 3 panels, but they’re set up as columns. Let’s take a quick look at how they work.

On the left is the list of groups your server hosts or otherwise knows about. Being an ActivityPub implementation, a Themis server can connect to other servers (instances, as they’re called). Some of these might not run Themis themselves; nothing’s stopping a Mastodon user, for example, from posting to a Themis group. But they can’t create groups, because their software doesn’t know how. Thus, you’ll only get groups from your server and any other Themis servers it has interacted with in the past. (Federation isn’t completely implemented yet, so take this as more of an ideal than the way things really are.)

Once you select a group, the middle panel appears. This shows the threads in the chosen group. Threads work here like they do in forums, email, or newsgroups. Each has a subject (interestingly enough, this also means all Themis posts will appear on Mastodon with content warnings) and other metadata, but you won’t get to see the text until you click.

That opens the right-hand panel, the thread view. This is what I couldn’t get working in previous versions, necessitating the rewrite. But I must admit a great amount of pride at my accomplishment. Internally, it’s a hand-rolled, block-level tree component with integrated event handling. For non-developers, just know that it shows every post in a thread in a nested format similar to comments on Reddit, Slashdot, Disqus, and many other sites/services. Best of all, you have an inline reply form, so you’ll always know where your post will appear in the thread.

Also coming in the rewrite was a new navigation system, easier to work with on the developer side. Version 0.0.8 adds in some of the places it can take you, namely your profile and your list of “favorites”, which is basically the same as on any other social media platform.

Some things remain unimplemented, but I feel I’m making great progress. Before the beta release—still targeted for October 1—I want to add a new, more comprehensive filtering system. That’s the big one, in my opinion. That’s what separates Themis from the pedestrian “block or mute” systems of other platforms, and it will, I hope, allow for a higher standard of discussion. “All that’s dead might live again,” as the song says. (And if you can name that tune, I’ll put you in the contributors section!)

Keep watching for future dev diaries, and track the progress of the project over at Github. If there’s any interest, I might set up a donations page, too.

Themis front page, version 0.0.8, showing the login form, site info, and “A Look Inside” counterpart
Themis 0.0.8 main page, with only Group View open
Themis 0.0.8 main page, with all panes open, showing nested replies
Themis 0.0.8 main page, with navigation menu open
Themis 0.0.8 main page, showing the New Thread composer
Themis 0.0.8 user profile page, showing mostly placeholders
Themis 0.0.8 main page, showing the Inline Reply composer

🖼🗣: the emoji conlang, part 7

Welcome to another chapter in the story of the emoji conlang 🖼🗣. This time around, we’ll get most of the more complex clauses you’d find in a language, including some that are traditionally considered the hardest to pin down. So let’s get right into it, shall we?

Comparisons

Comparing two things is both easy and common. In English, of course, you use “comparative” forms of adjectives: bigger, stronger, more interesting. 🖼🗣 does things a little differently, however.

First off, there are no special adjective suffixes for comparisons. That fits with the general idea of the conlang as being very isolating. Instead, we use the verb ⬜▫. Normally, it has the meaning “to exceed”, but we can prefix it with an adjective (effectively functioning as an adverb) to create a comparison: 👇 👨 ↕〰 ⬜▫ 👆 👩 “this man is taller than that woman”.

The form, then, is fairly simple. First comes the thing that is being compared. Next is an adjective for the quality being compared. Third on the list is the verb ⬜▫ (which can take suffixes if needed). Last comes the “standard”, the yardstick being measured against.

Note that this construction is for actual comparisons only. If you just want an adjective meaning “more of X”, you can just use the superlative suffix ⬛. It works for English “more” and “most”.

Causation and purpose

In 🖼🗣, these two concepts are closely related. Something can cause something else to perform an action, or something can perform that action for a reason. Either way, the form is similar, so we’ll treat these two types of clauses together.

First, the simpler purpose clause is just a string of verbs or verb phrases, with objects and the like inserted where they would normally go. So “I went to the store to buy food” becomes 🤳 🛫◀ 🏬 🛍📨 🥘.

Note here that the subject of the second clause is implied. That’s normal. Just having multiple verbs strung together is enough to indicate what we’re talking about. But we can add a subject, too: 🤳 🛫◀ 🏬 🤲 💁 👉▶ 🥘. (That strange 💁 in there will make sense in a minute.) Roughly, this sentence translates as “I went to the store so we’ll have food.”

Now, building off this, we can use the verb ↘ “cause” to create, well, causatives. For instance, ♀ ↘◀ 🤳 🛫 🏬 would mean something like “she made me go to the store”; here, we explicitly indicate the subject in the second clause, showing that it is not the same as in the first.

Finally, two special words work with the purpose clause to add to it. Between the verb phrases, we can add ⤵⌛: or ⤵↘ to express times or reasons, respectively. Here’s an example of each:

  • 🤳 ❔➡ 🚫 🛫◀ 🏫 ⤵⌛ ➡ 🤢. “I couldn’t go to school while I was sick.”
  • 🤳 ❔➡ 🚫 🛫◀ 🏫 ⤵↘ ➡ 🤢. “I couldn’t go to school because I was sick.”

The topic particle

I promised I’d explain 💁, so here goes. In linguistic terms, it’s a topic particle, sometimes called a topicalizer. If you know Japanese, it should feel familiar, as it functions much like the particle wa (は). If not, read on.

The topic of a sentence is often the same as the subject. In cases where it isn’t, however, or when we want to emphasize it for some reason, we use the topic particle to draw attention to it. Notably, 🖼🗣 uses this in possessive predicates. The formula here is (owner) 💁 ➡ (possession), and we could translate it loosely “with (owner), there is a (possession)”. Complicated, I know, but you’ll get the hang of it.

Indeed, possessives like this are one of the few cases where the language gives two similar concepts wildly different forms. Compare 🤳 💁 ➡ 🐈 “I have a cat” versus 🤳’🐈 “my cat”. Not nearly the same.

Back to the topic particle, though, because it’s got another use: subjects. Not the grammatical sort, but the discussion sort. If I wanted to say in 🖼🗣 that my favorite food is chicken, for instance, I might type 🥘 💁 🤳 🔘👍 🐔. You can follow the same pattern to express preferences, opinions, ideas, and much more.

Relative clauses

Last, we’ll look at what is traditionally considered one of the most difficult phrases to describe, the relative clause. Fortunately for us, 🖼🗣 makes those fairly easy to start.

Relative clauses always begin with 👈, so if you see that, you know what you’re dealing with. In some cases, you don’t even have to worry about anything else. When the head noun is the same as the subject of the relative clause, you’re done: 👩 👈 🏡➡ 📍 👵 ⬜▫ 🤳, “the woman who lives here is older than me”.

When it’s not the subject, the only thing that changes is an extra pronoun that we add into the relative clause, kind of a placeholder for what we took out. 👨 👈 🤳 👀◀ ♂ means “the man that I saw”, but a more literal translation would be the grammatically incorrect (in English) “the man that I saw him”. If you’ve ever lost yourself in relative clauses, you’ll recognize this one!

That extra pronoun functions exactly as the noun it’s replacing, even in possessive constructions. And pedants will either love or hate the way 🖼🗣 deals with relative nouns in prepositional phrases. Because of this “placeholder”, we have no reason to end a sentence with a preposition: 👇 👈 🤳 ➡ ⬅⬅ ◻ “this is where I’m from” (or, if you must be formal, “this is the place from where I come”).

Conclusion

That’s all for now, but we really have all that we need. Well, except for words. Those are, after all, the meat of a language, so the next part of the series is going to go back to making them. Keep watching, because it’s about to get even more fun!

Summer Reading List 2019

It’s that time of year again. Hard to believe it’s been twelve months already, but here we are. Memorial Day, at least for those of us in the United States. And that means it’s time for the 4th iteration of my Summer Reading List Challenge!

As with the last three, the whole thing is all for fun. Don’t worry too much about it. Think of it as a chance to try something new, or to clear out that growing stack of books (or files, if that’s how you roll).

The rules, which are really more recommendations than rules, are as follows:

  1. The goal is to read 3 new books between the US holidays of Memorial Day (May 27) and Labor Day (September 3). These are the “unofficial” beginning and end of summer, respectively. (Obviously, if you’re south of the equator, this is a winter reading list!)

  2. Books are loosely defined as any non-periodical work. Comics don’t work, nor do individual chapters of manga. Pretty much everything else is fair game, though. The important thing is that you’re honest with yourself.

  3. At least 1 book should be of a genre or subject you don’t normally read. (In the past, I’ve used a rule that you should have 1 nonfiction book, but I’m shaking things up this time around.) So, if you’re a big fantasy reader like me, try sci-fi or something like that. Or nonfiction. Nothing wrong with that.

  4. Anything you wrote doesn’t count. That makes sense, because they wouldn’t be new to you. And if I didn’t have this rule, I’d only read my own stuff.

That’s all there is to it. You can track my progress on my Patreon or my blog, Prose Poetry Code. For you social types, use the hashtag #SummerReading to spread the word. And you can follow me on the fediverse, now at a new address: @mikey@letsalllovela.in.

However you do it, have a great summer, and remember to keep reading!

Release: Waters Rising (Return to the Otherworld 3)

Here we go with another Otherworld story, Waters Rising:

In either world, the forces of nature are far beyond the power of a single person to deflect. Here in the other world, where life is already fragile beyond any experience of the second expedition, danger comes even from the skies above.

While some choose to delve into the ruins surrounding their point of arrival, others must fight a true disaster, a flood that threatens not only the scientific endeavors they seek here, but also the homes, the health, the lives of those they have come to love. Unlikely heroes will rise, unexpected aid will arrive, yet all eyes turn to the river, to the rising waters that form their shared foe.

It’s about a flood, obviously. A flood that takes place in a land without modern conveniences like trucks full of sandbags, but that’s what makes it fun!

As always, you can pick up all my Otherworld stories on my Patreon for the low, low price of $3/month. Keep watching for Part 4, What We Leave Behind, coming in June. Until then, keep reading!

🖼🗣: the emoji conlang, part 6

It’s time for some more 🖼🗣. Last time around, you may remember that we looked at the vast collection of emoji in the Unicode standard (as of version 12). Most of them, not counting the numerous variations allowed by gender, skin tone, and hair modifiers, have some sort of meaning in our script.

Now it’s time to put them to use in making not just words, but phrases, sentences. We’ve been doing that already, of course; parts 2 and 3 were dedicated to that. Here, though, we’ll delve deeper into the nuances. And we’ll take it one step at a time.

Noun phrases

Conveniently enough, most words in 🖼🗣 are nouns, so we’ve got a lot to work with here. (Since emoji are icons, and it’s a little difficult to have an icon that represents something abstract, it’s only natural.)

To start off, remember that our script doesn’t have articles. There’s no “a” or “the” in 🖼🗣. They’re not needed. (Plenty of languages around the world get by without them, after all.) The meaning is implied; if you really need to specify something definite, then the demonstrative pronoun 👇 can provide a similar function. It’s not exactly the same, as it actually means something closer to “this” than “the”, but you get the idea.

Numerals are another important part of noun phrases. For us, they’re pretty simple: just use them. For “one”, you write 1. Ordinals, as we saw last time, instead use the “keycap” emoji such as 1️⃣. For ordinals greater than 10, you can compound them: “fourteenth” (the day I’m writing this) is 14.

Everything else is fairly straightforward. Adjectives occur before their head nouns: ⬜ 👨 “a big man”; 🔵 🚗 “the blue car”. Possessives use the apostrophe notation we saw in Part 2, always attaching to the head noun: 3 🤳’🧒 “my three children”; 👇 👴 🤲’🏠 “this old house of ours”. The last traditional component of a noun phrase is a relative clause, which we’ll deal with later.

Before we move on, though, a couple of little extra rules. First, adjectives can’t appear as subjects without a head noun. (They’re fine as predicates, by the way.) Thus, you can use the determiner word ⚪ as a kind of “empty” noun in these cases: 2️⃣ ⚪ “the second one”. This is not the same as converting an adjective to a noun; that’s why ⚪ is a separate word here.

Second, you’re allowed to use a verb as a head noun in a very specific circumstance. Linguists call it an action nominal, but you can think of it as something like the English gerund phrase. It must be as part of a possession construction: 🤳’📖 “my reading”; ♂’🛑 🚗 “his stopping (of) the car”. Somewhat obscure, I’ll admit, but it might come in handy.

Verb phrases

Verbs have quite a bit of variance, as we saw in Part 3. But that’s all inflection. At the phrase level there’s not a lot to them. 🖼🗣 doesn’t do much in terms of verbal grammar, because we’re trying to keep things simple.

That said, we do have a handful of auxiliary verbal words. 🙆 and 🙅 indicate permission and prohibition, respectively; they’re equivalent to English may and may not: 💮 🙅 🛫 “you may not go”. Much to the dismay of students, there’s a different can counterpart, ❔➡. That one is only for ability.

Simple negation uses 🚫, so we might say 👁️‍🗨 🚫 🍴⏯ “I haven’t eaten”.

The imperative is what linguists call direct commands, and we mark it with the suffix ❕, as in 🛑❕ “stop!” Using the appropriate pronouns, we can do a few more tricks with this: 🤲 🛫❕ “let’s go”, 👥 👀❕ “let them see”.

The special compound pronoun 👐↔ means roughly “each other” when used as the object to a verb. We might use it like this: 👨 ➕ 👩 💕➡ 👐↔ “the man and woman love each other”.

Finally, you may be wondering where all the adverbs are. Well, 🖼🗣 doesn’t have a separate class of them. Instead, it just uses adjectives that modify verbs. That’s pretty much what a lot of English speakers do in colloquial language, so it shouldn’t be any problem. ✔ ✍❕ ◻ “write it correctly”, ♀ 👍 🗣 “she speaks well”.

Prepositions

Now we’re only missing one major part of language, and that’s the preposition. Grammatically speaking, those in 🖼🗣 function as adjectives, with the special rule that they always appear at the beginning of a noun phrase; this phrase can then appear after another one or at the end of the sentence, depending on the situation. (It’s not quite free variation, in case you’re wondering. Sentence-final phrases tend to be those that modify a verb.)

Here are some of the most common single-symbol prepositions in our script:

  • ⏩ – “after”
  • 🆚 – “against”
  • ⏪ – “before”
  • ➗ – “between”
  • ⤵ – “in” or “into”
  • ⤴ – “out of”

A lot more are compounds, often using the adjectival suffix 〰:

  • ⬆〰 – “above”
  • ⬇〰 – “below”
  • ⬅⬅ – “from”
  • ➡➡ – “to” or “for”
  • ➕↗ – “with”

Last, and simplest, is the way 🖼🗣 says at: @. You can use this as a normal preposition: 🤳 👉 @ 🎦 “I’m at the theater”. But it also has a secondary use as a kind of attention-getter for speech, in which case it works as a prefix on a head noun: 🤳 💬◀ @♂… “I said to him…” (The intent here is to emulate @-mentions, as on Twitter and Mastodon.)

To be continued

This post covered the most basic sorts of phrases you’ll find in 🖼🗣, but not the only ones. In the next installment, we’ll look into the more complex clauses: relative, purposive, subordinate, and so on. Sounds hard, I know, but never fear. There’s really not that much to them.

Amazon release: The Beast Within (Endless Forms 2)

Has it been a year already? Time for another Amazon release.

Fame is fleeting, but fear lives on forever.

The monsters are real. Cam Weir knows this. He’s seen them in the flesh, in all their naked, hideous glory. Yet he remains skeptical. Perhaps two monsters were enough for one man, for one life. Surely all those other things people see, those shadows lurking in the night, were merely products of overactive imaginations.

In most cases, they are nothing more, but not every call Cam receives can be so easily explained as a hoax. As he struggles to come to terms with his new status as a celebrity, a famous hunter of the paranormal, Cam finds that the world is strange, and it’s only becoming stranger. Now, in addition to Bigfoot, he must hunt a werewolf.

If you’re interested, head on over to the book’s page, where you can find a link to the Kindle Store for the digital edition, or the paperback for those who, like me, prefer the real thing. As always, be sure to check my Patreon for more info on how you can support me.