Playing with TypeScript

JavaScript sucks, and we all know it. But it’s the lingua franca of the web (not like WebAssembly is ever taking off), so we have to learn to deal with it. That doesn’t, however, mean we have to write it. Oh, no. There’s a whole subculture of languages that compile into JavaScript, meaning you can write your code in something that looks sane (to you) without worrying about the end result being readable.

This trend really started a few years ago with CoffeeScript, which did an admirable job of making JS look like Ruby. From there, similar projects spun off, like Coco and LiveScript, which were far better in that they didn’t have anything to do with Ruby. And then Microsoft got involved. That’s where TypeScript comes from. Yes, that Microsoft.

But it’s not as bad as it sounds. The language and compiler use the Apache license, and that gives us a bit of protection from the worst of corporate silliness. And that means it might be interesting to look at TypeScript for what it is: an attempt at making a better JavaScript than JavaScript.

Up and running

TypeScript fits into the usual Node-hipster-modern ecosystem. You can install it through npm, and it works with most of the other big JavaScript tools like testing systems. Some of the big “web app” frameworks even use it by default now, meaning that I’m a little behind the times. Oh, and you can also use it with Visual Studio, but I can’t, because that’s Windows-only. (And VS Code is not the same.) But you don’t have to: the homepage even has a link to TypeScript support for the best text editor out there. I’ll leave it to you to decide which one that is, but I’ll tell you that it’s the same one I’m using to write this post.

My type

So you get TypeScript installed, and you’ve got a nifty little compiler that spits out perfectly fashionable JavaScript, but what about the source language? What’s so special about it? In a word: types. (You’ll note that this word makes up half the language’s name.)

Essentially, TypeScript is nothing more than JavaScript with strong typing. That may not seem like much, but it’s actually a huge change that alters the whole way you write code. Variables are typed, functions are typed, objects are typed. To be fair, they all are in JavaScript, too, but that language doesn’t do anything with those types. TypeScript is made to use them. By itself, that’s almost enough to overcome my instinctive hatred of all things Microsoft. Almost.

On top of the bare bones JavaScript gives us, we’ve got tuples, enums, generics (C#-like, so not the best we could get, but far better than what JS offers), and an any type that lets us ignore the type system when necessary. If you wanted to, you could just about get away with writing regular JavaScript, tagging everything as any, and running it through the TypeScript compiler. But why would you do that? You’re supposed to be using a better language, right? So use it! Besides, like any decent strongly-typed language, we can use type inference to save us most of the trouble of specifying what something should be.

The next level

Just having the added safety of stronger typing already gives TypeScript a leg up on its parent language. But if it didn’t offer anything else, I’d tell you not to bother. Fortunately for this post, it has a lot more.

JS is currently in a state of flux. Most (but not all) browsers support ES5, some let you use a lot of the new ES6 features, and the language standard itself has transitioned to the ridiculous rapid-release model that’s all the rage today, so it’s looking like we’ll soon be back in the bad old days of “Best viewed in {browser X}”. Polyfills can only take us so far, you see. For coders writing raw JavaScript, it’s a serious problem making something maximally compatible, and most just throw their hands up and say, “Just use Chrome like everyone else.”

That’s another case where I’ll give the MS team credit. TypeScript takes a lot of the newer JS additions and lets you use them now, just like Babel or other “transpilers”. You can declare your variables with let instead of var, and the compiler will do the right thing. You get the new class syntax for free, which is great if you never could wrap your head around prototype OOP. Generators aren’t even in JS yet, so TypeScript even looks a bit like the future in some cases.

Reservations

If there’s anything wrong with TypeScript, it’s not the kind of thing that shows up in a cursory inspection of the documentation. No, the main problems are twofold. One, it’s a project started by Microsoft, a company with a history of bad blood towards the open source community. The Apache license helps in that regard, though I don’t think it can ever completely alleviate some people’s fears.

Second, TypeScript has been around for a while now, but it’s only recently been picking up steam. Angular and React both like it a lot, as do some indie game engines like Phaser. But the JS community is fad-driven, and this new acceptance could be an indication of that. If TypeScript is simply “the next big thing”, then interest will fade once some other shiny thing catches the eyes of the hipsters. We can’t prevent that, but we can do our best to ignore it.

Will TypeScript become the future of web development? I can’t say. It’s definitely one option for the present, though. And it’s a pretty good option, from what I’ve seen. I think I’ll play around with it some more. Who knows? Maybe I’ll show you what I’ve made.

Let’s make a language, part 22a: Around the house (Intro)

Think of this part of the series as a chance to catch up on some of that linguistic spring cleaning you’ve been meaning to do. We’ve all been in houses, and we know how many things can be inside them, so taking a look inside the home is a great way to flesh out a conlang with a vast array of terms for all those miscellaneous items we have lying around.

Room to move

Houses, as we know them, are generally divided into a number of rooms. Which ones a house has depends heavily upon the culture, the level of technological advancement, and a few socioeconomic factors. Many apartments, for instance, don’t have kitchens. And while it’s very common in America to have bathing and toilet activities in the same room—the bathroom—not every country does that. On the “technology” side of things, you’re not going to find an entertainment center in a medieval home, but that’s not to say there won’t be a room for entertaining guests. Finally, the houses of the wealthy will, obviously, have more (and more varied) rooms than those of the common folk.

For a conlang, this matters because it’s those rooms that are common to most speakers’ houses that will be most likely to occur as native roots. In English, we’ve got dens and kitchens, for instance, but most of the others are compounds: bedroom, bathroom, living room, etc. And then there are a number of rooms whose names we’ve borrowed, such as the foyer. You can draw quite a few conclusions about a culture’s history in this manner, such as the fact that most Anglo-Saxons didn’t have a foyer, but some wealthy Frenchmen later on must have.

Another question is what to call the “ideal” room itself. Because English has a couple of different terms for that. We’ve got room, obviously, as in dining room, but fantasy or historical literature might instead speak of the more archaic dining hall. And that’s okay. Halls are rooms, too. There’s a different connotation, and connotations are always nice to see. They’re where conlangs can distinguish themselves.

What’s inside

What’s inside those rooms is usually much more interesting than the rooms themselves. Looking around my own bedroom (where I write), I see quite a bit of furniture. There’s the bed, of course, because what’s a bedroom without a bed? And I’ve got my desk, a bookshelf, my chair, and a few odds and ends. Other rooms in the house will have their own larger fixtures—furniture and appliances—almost always tied to the room’s function. American bathrooms will have toilets and sinks, while kitchens will have counters and cabinets.

Beyond the major functions of a room, the space will contain many other things. Some of these are tools, like all those screwdrivers we can never find when we need them. Others are strictly for entertainment, such as TVs or toys. We could also throw in toiletries and clothes and other such things, but we’ll save all that for other posts. For this one, we should focus on those things that make our house a home.

Changing things up

Home items can display a remarkable amount of irregularity. That’s almost all cultural baggage, as the things we find in our homes change as we interact with other peoples. Everything in the room around you has a history, and so does every word you would use to describe those things. Household items are a great place to toss in loanwords, odd and idiosyncratic compounds, sketchy neologisms, and whatever else you can think of. It’s not uncommon today to have a television (pseudo-classical Greek) sitting a few feet from your coffee table (compound derived from Turkish and Old French), which is right in front of your couch (Old French again), where you’ll curl up under your blanket (more Old French, but they borrowed this one from Germanic). Even the most xenophobic American can travel linguistically around the world from the comfort of his home.

Coming up

So we’re in 2017, and the series continues. Part 23 will come next month, after the usual Isian and Ardari posts. It will cover food and drink, topics that are subtly different from the “flora and fauna” subjects we saw not too long ago. Until then, keep on creating!

Magic and tech: clothing and fashion

We humans are peculiar in a great many regards, but one of those is our clothing. Call it a cultural imperative, but we all wear clothes. Those few of us that don’t, such as nudists or those few indigenous peoples who still haven’t adopted at least a loincloth, are seen as odd by the rest of our species. (The story of Genesis is at pains to point out that, once they received the higher wisdom of the tree, Adam and Eve very specifically became “ashamed” of their nakedness.) But the big picture tells a different story: as life on this planet goes, we are the weird ones. Only humans feel the need to cover some or most of their bodies in some other substance most of the time.

This may be from an evolutionary quirk, as humans are a rarity in another way. How many other animals choose to leave their evolved habitat? Very few. That’s not just how evolution works, but why. Species adapt to their environments, and there’s a kind of “inertia” that keeps them there. It’s probably because adapting is hard, and where’s the reproductive advantage in doing it all over again?

Putting something on

The first and most obvious choices for human clothing, looking back to prehistoric times, were likely animal skins. Despite the misguided crusades of PETA and others, that’s still an attractive option today. How many of you own a leather jacket, or a fur coat, or something of that sort? Skins are a good choice for protecting us from the elements (one of the original and most important uses for clothing), because, hey, it works for the animals they belong to.

Any culture can make clothing out of animals. It’s not that hard to do, all things considered. And there’s a lot of technological progress that can be made there. Tanning, the process of transforming raw hides into leather, may have been one of the defining developments of the Neolithic, alongside agriculture and villages, if only because it’s one of our oldest examples of a “manufacturing” process.

A few other materials coming from animals see use for clothing. Wool is the big one, but the hair of a few other mammals can also work. Biblical-style sackcloth, for instance, used animal hair, as did medieval hairshirts, strangely enough. Outside of the mammals, we also find silk, which comes from the cocoon of the silkworm. Like hair, silk is a fiber, and we can spin fibers into threads, then weave threads into cloth. Simple as that.

But the best fibers, in terms of cost, ease of use, and animal ethics, come in the form of plant fibers. And it’s those that formed the basis for most day-to-day clothing in the Western world until modern times. As a matter of fact, even our synthetic world of polyester and nylon and the like still holds ample evidence of plant use. I’m wearing an awful lot of cotton right now, for example, and linen (from flax) hasn’t gone away after all these centuries.

Dressing up

Intimately related to clothing is the idea of fashion. It’s all well and good to say that humans cover themselves with animal or plant parts, but how they do so is one of the hallmarks of a culture. What parts do we cover? (That’s a more nuanced question than you might think; in America, it’s different for men and women and children.) What sorts of clothes are acceptable? What kinds of styling do we use, and when?

A lot of questions like this are highly specific to a culture, and it’s hard to draw many general conclusions. Most every culture agrees that the pelvic region should be covered, for instance—though even that is not universal. And it’s rare to find a place that doesn’t have a fashion “hierarchy”, where certain people are expected to wear “better” clothes at certain times. Think of a suit, a tuxedo, or our “Sunday best”, then compare that to what we might wear at the beach, or just around the house.

One of the more interesting—and more visible—aspects of fashion is color. At some point long ago, our ancestors discovered they could dye those materials they used for their clothing. Today, we take that for granted, but it wasn’t always thus. Purple is seen as a royal color in the West because one shade of purple (Tyrian purple) was once worn exclusively by royalty. And why did they choose that particular purple? Because it was just about the most expensive kind of dye you could find: literally worth its weight in silver.

Throughout the ages, that becomes the refrain of high fashion. And high fashion eventually trickles down to low fashion, but low fashion has made its own developments in the meantime. Some of those developments are modern, such as the boxer briefs I’m wearing as I write this. Others have a much longer history, like sandals. Sometimes, the history is longer than you’d expect; art from over 2,000 years ago shows women wearing something that looks an awful lot like a bikini.

Fashionable magic

Whatever form it takes, fashion is an integral part of a culture, and it’s also an important part of any study of clothing. Thus, as we turn to our magical realm, we’ll treat the two of them as inseparable.

First, though, we need to make the clothes. In olden days, that was a laborious, time-consuming task. It’s not a stretch to say that the whole Industrial Revolution came about as a way to simplify that task. Spinning fibers into threads took so much time that some researchers have concluded that it was effectively a constant job for medieval-era women. They’d do it while they weren’t doing anything else, and sometimes when they were. Weaving was likewise hard work. Dyers might have been respected, but only if you weren’t downwind of them. And forget about all those things we take for granted, like zippers or standard sizes.

Industry changed all that, and so can magic. We’ve already seen how magic, within the boundaries we have set, can improve the manufacturing capabilities of our realm. Applying that to clothes-making will likely be one of the first things the mages do. It’s a no-brainer. In our world, it was one of the first true cases of factory automation. That’s not going to be any different if it’s magic powering the factories. (Putting all those women out of work will have…interesting consequences.)

On the other hand, dyeing doesn’t get much of a boost from magic. It’ll benefit from the advances in chemistry made possible by magic itself and the general inquisitiveness that magic will bring, but there are fewer direct applications. Processing the materials for dyes might be automated, though, in much the same way as spinning thread. The same goes for extracting the plant fibers for clothes in the first place; every American student has heard of Eli Whitney and the cotton gin.

One thing is for certain: magic will make clothes cheaper across the board. When clothes cost less, people will have more of them. Even the poorest folks will be able to afford richly dyed fabrics instead of plain whites, browns, and grays. That’s the point when fashion becomes “mainstream”. Once a sufficient percentage of the population has access to finery, styles can develop. Fashion transforms from a noble quirk to a cultural phenomenon. What form it will take is nearly impossible to predict. And it’s a moving target, even in older times. How many people do you know in 2017 wearing bell-bottoms or tie-dyed shirts? How many have you seen in corsets and pantaloons outside of reenactments?

To end this post, let’s look at one very intriguing possibility that sprang from the development of clothes: computers. I know that sounds crazy, but bear with me. Weaving complex fabric patterns on a loom is difficult. It’s hard to make a machine that can do that, and harder still to develop one that can change its patterns. Joseph Marie Jacquard did just that about 200 years ago. He created a mechanized loom that could change its weave based on a pattern of holes punched in a series of “input” cards. Punched cards. Herman Hollerith took them for his census-counting machine at the end of the 19th century. Sixty or so years later, IBM used them to store the data for their first computers.

Now, the “programming language” of Jacquard looms isn’t Turing-complete, and nobody would claim that someone using the loom was truly programming a computer, but the seed of the idea is there. In fact, almost everything an early computer would need can be done with the magic we’ve seen in this series, some six centuries before it “should” exist. That doesn’t mean our magical realm has computers, or will get them anytime soon, but it’s definitely one of those strange paths you might want to look down. In this new year, I’ll try and find more of them for us to explore.

2017: Resolutions for the new year

So a new year has begun. (By the time you read this, anyway. As I write, December is only hours old.) As you may have read the other day, I’m scaling back my quantity of posts here to make room in my “busy” schedule for more fiction. Assuming all goes well—it never does—I have quite a bit prepared for 2017, and more in the works. So let’s take a look, shall we?

New novel: Nocturne

This is the big one. Nocturne was my November writing project for 2016, and the month was a resounding success. Now, it’s time to see if the book itself will be. It’s a full-length novel, only the third one of those I’ve ever written. I like the characters, love the magic system, and find myself very drawn to the political interplay the story brings. I’ll admit, I’m biased. Hopefully, I won’t be the only one to like it.

Nocturne is also the first novel I’ll be putting through my new “pipeline”. The first finished draft will come out soon for Patreon supporters ($10/month). Then, after I’ve edited the thing into something coherent, I’ll put it out for the $3/month “serious readers”. Finally, once I’m confident of a release, it’ll go to the “casual” readers willing to put up a dollar a month, and also to the Kindle Store. I’m thinking $3.99 for the price there, but we’ll see.

The timeframe for Nocturne is pretty strict. I’ve already decided the absolute latest I can release it is August 21. That’s because the great solar eclipse of 2017 occurs then, and a solar eclipse is the defining moment in the life of the novel’s primary protagonist. That will be for the “official” release through KDP, but Patreon supporters will get it earlier. Right now, I’ve penciled in January 16 for the draft, April 21 for the supporters’ advance copy, and maybe somewhere in June or July for the final release. If that seems like a tight schedule, well, it is. On the plus side, I’m an indie. I don’t have the luxury of worrying about multiple back-and-forth rounds of editing, finding a slot at the press, working with cover artists, or setting up a publicity tour. So I can have a turnaround on the order of a few months.

Otherworld novellas

The Otherworld series is probably my favorite. It’s my worldbuilding playground, my sandbox for creating a setting, a language, a culture, etc. Oh, and the story’s pretty good, too. (Again, I’m biased.) I’ll be dribbling out the rest of the drafts for the series over the course of the next few months. Only once those are all out will I start work on reader releases, and I’m not sure if these will ever go on KDP. Maybe once I start Season 2.

Each of these runs about 50-60K in word count, and here’s my tentative schedule for the draft posts:

  1. Out of the Past — November 2, 2016
  2. The City and the Hill — January 6, 2017
  3. A Matter Settled — February 10, 2017
  4. Written in Black and White — March 24, 2017
  5. The Bonds Between Us — May 5, 2017
  6. Situational Awareness — June 9, 2017
  7. A Peace Shattered — July 21, 2017
  8. Long Road’s End — September 1, 2017

I’m also planning a series of Otherworld shorts, currently using the working title A Bridge Between Worlds. These will follow on from “Long Road’s End”, covering the intervening time before Otherworld #9, which hasn’t even entered the planning stages yet.

Linear short stories

The first three short stories in the Linear Anthology, “Either Side of Night”, “The Last Captain”, and “Forged in the Fires”, are already out on Patreon. The second half of the cycle will follow soon. I don’t actually have titles for these yet—as I write this on December 1—but they don’t take that long to write, so they shouldn’t be too hard. The dates I’m looking at for release are January 27 for Part 4, February 24 for Part 5, and April 7 for Part 6. And that’s it. I’m not planning on continuing the story past that at the moment, though I might come back to it down the road.

As for a few other details on this series, I’m still deciding. My original idea had been to release them separately on Patreon, then do a big collection (hence the name Linear Anthology) for KDP. Remember that Amazon has a cutoff for its 70% royalties: 99¢ books only get to collect 35%. I don’t feel comfortable charging three bucks for any individual story of this size, so I’d have to either combine them or settle for the lower royalties. Of course, if the Patreon thing works out, then less royalties won’t matter as much, and the cheaper release on the Kindle Store might drive more people to Patreon. It’s a lot to think about, and I don’t have the answer yet.

Other plans

If you’ve paid attention, you’ll see that I have at least three short stories planned for this year. Add in A Bridge Between Worlds, which will contain five more shorts, and that’s eight. And that’s only the beginning of what I want to do in 2017.

Let’s assume I’ve finished Nocturne by this time. As I write, I’m about 75% done with the first draft. Editing is a separate process, so we’ll ignore it for the time being. On top of those eight short stories, I’ll be doing another original novel in November, and I want to finish Lair of the Wizards, one I’ve been working on for a year and a half. The Otherworld “Season 2” collection would be a total of 8 novellas, probably adding up to half a million words. That might not be feasible, so I won’t put them all on the list. Maybe one or two. And then there’s a short story I plan on writing late in the year for all my loyal supporters…assuming I have any by that time.

So that’s the plan so far: 9 short stories, 2 novellas, and a novel and a half. All told, using some generous word counts, I’d call that about 400,000 words written. Throw in about 80-100 posts here on Prose Poetry Code, and you’re talking 500,000. It’s ambitious by any standard, but I have decided that it’s better to fail at unrealistic goals than to succeed at easy ones. Go big or go home, as they say, and I’m going big in 2017. I hope you’ll be along for the ride.

An announcement for the new year

So I’ve been doing this thing pretty regularly for a year and a half now. Except for a few illness-related breaks, I’ve been putting up three posts a week since the middle of 2015. I’m not complaining; I love doing this. But now that I feel like moving towards writing more original works of fiction, I’m not sure I can keep up the pace I’ve set for myself. See, I usually write these posts in one big batch at the end of a month, or when I have no other works in the, well, works. (For example, I’m actually writing this on October 4. Last week, I finished the final part of my Otherworld novella series, and I’m mostly killing time until NaNoWriMo.)

If I’m going to make a more serious effort at writing full stories, I don’t know if I can handle also writing 10-15 posts here. These tend to run about 1000 words apiece, sometimes far more—that’s basically 25% of my average monthly output that I could dedicate to other work. And honestly, I’m starting to run out of ideas for posts. I’m not doing as much coding as before. Really, my whole life right now is in a place I’d describe as…not the best. Fiction is my escape from that. The nonfiction I put up here just doesn’t have the same beneficial qualities.

So here’s what I’ve decided, looking at the three main types of posts I do on Prose Poetry Code, and then the ongoing series I’ve been running.

Code

Wednesdays have been my dedicated day for code-related articles. As I said, I haven’t done much in that area lately. I tried back in June to make a game, but you saw how that worked out. It’s not that I don’t like programming anymore. I still do, believe me. It’s more that I have other things on my mind, and the very analytical, very mathematical necessities of writing good code take me out of the moment.

For these, I’m going to drop back severely. I’ll probably only write 1-2 code posts per month in 2017, unless something big comes up. The field still interests me, and there’s a lot of fertile ground there, but the research and thought required to make a good post about programming each week just isn’t worth it right now. Maybe I’ll change my mind down the road.

Writing & worldbuilding

These are the meat of the site, in my opinion. The Monday posts are where I have the most fun, because they give me the chance to let my imagination roam free. Worldbuilding really is my favorite part of writing. If I lose it, then I’ve lost any reason to even have this place.

Therefore, I’ll keep Mondays mostly as they are. There might be a few more weeks off through the year, but rest assured that those will be for good reason: I’ll be writing something more important. In all, count on about 40 or so total posts about worldbuilding and general writing next year.

Languages and verse

Fridays originally started out as a way to showcase the art of conlangs. After all, language construction is one of the things that got me into worldbuilding in the first place. It’s only fair to give it the honor it deserves. Since then, I’ve been branching out a bit. Now, the last post of the week has become the time when I talk about poetry, song, verse, and music.

I’d like to keep that going, though maybe not at the same high level. I’ll probably take 1-2 Fridays off per month through 2017, meaning you’ll have around 30 total posts. Most of those will be conlang-related, but some will pick up the other topics.

Series

I do a lot of post series. I like them. They’re like chapters in a book, each building off the last or taking something in a new direction. I like the continuity. But lately it seems like all my posts are part of a series. There aren’t that many one-offs. So, for the coming year, I’m going to take a step back. For each of the main series I’ve got going, here’s my plans:

  • “Let’s make a language”: This was practically the reason I started the whole site. It’s not stopping in the near future. I’ve got plans all the way out to Part 27; at one part per month, that takes me through June. After that, it shouldn’t be too hard to come up with more ideas.

  • “Magic and tech”: Another one of my personal favorites, but I’m starting to run low on material. I think I’ll drop this back to one post every two months, or 6 for the year. Maybe, I’ll even have enough work here to write a novella set in the magical realm the series describes.

  • “Building aliens”: This one has almost run its course. I’ll let it, and then I think I’ll let it retire. Now, I’m not going to stop posting about aliens, so don’t worry about that. This is just the hard SF alien-making series that’s going away.

  • “Software internals”: There’s only so much more I can do here without getting way too bogged down in technical details, so I’m putting this one on hiatus. If there’s any kind of desire to see it return, I’ll consider it later on.

  • “Project SL”: The whole Social Liberty thing was a response to the election year. It won’t be back in post form.

  • “Assembly”: I love assembly language, but trying to debug code in a web-based emulator is annoying, even frustrating. If v86 gets better, I’ll look into starting it back up. (Really, what I need most is clipboard support.)

Never fear / Happy New Year!

I’m not abandoning this place. I’ve made a promise to myself that I wouldn’t let that happen. The quantity of posts will go down in 2017, but I hope that will be balanced out by a corresponding increase in quality. If I don’t have to worry as much about finding the material for three posts a week, maybe I can spend more time on each post that I do write. So even though it may not seem like I’m around as much, I’ll still be here. Now, let’s make 2017 the best year ever!

Programming in 2016: game development

I tried to make a game this year. My body failed me. But I’ve been keeping up with the news in the world of game development, and 2016 has been exciting, if a bit frustrating.

Unity

Unity’s still the big kahuna for indie development. But they’ve gone to that same “rapid release” model that everyone else has, the same one that has all but ruined Firefox, Windows, and so many other projects. On top of that, they switched to a subscription model. Rather, they switched to a subscription-only model.

Yes, that’s right. You can only rent the Unity engine on a monthly basis now. It’s still free for tiny devs, but it actually costs more now for everybody else. Sure, there’s the new Plus tier (something like $40 a month, I think), but it doesn’t give you much over the Free version. By the time you need it, you can probably afford the full subscription.

On the technical side, they’re making progress towards Vulkan support, and there are rumblings about actually upgrading their version of C# to something approaching modern. That’s probably thanks to the .NET Core open-sourcing I mentioned last week, but I don’t care what the reasoning is. Any upgrade is welcome here.

The other rumor is that they might switch to C++. I…don’t know about that one. On the one hand, I have to say, “Yes, please!” Modern C++ is just as good as C# in almost every way. In many, it’s better. However, what does this do to that huge body of C# Unity code? If there’s a compatibility layer, then you’ve got inefficiencies. If they simply include the “old” engine, they’ve only made more work for themselves. And then you have JavaScript, which is still (mostly) a supported language for Unity coding. How would it fit in to a C++ future?

Godot

Godot is still my favorite 2D engine. It’s free, the source is open, and it’s very easy to use. 3D is a known problem, but that doesn’t bother me much; I’m not capable of making a 3D game anyway.

Well, Godot made their big announcement back in the summer, with the release of version 2.1. It’s not really revolutionary, but it sets the stage for greater things. Time will tell if those come to pass, but I think they will. With 2.2, we’re supposed to get a better renderer and possibly C# support. The big 3.0 might even add Vulkan to the mix, not that it helps me. And the Asset Library, well, it can only get bigger, right?

The main problem for Godot has been its documentation, and that’s much improved over this time last year. There’s a growing body of tutorials out there, too. I don’t think the engine has reached critical mass yet, but I also don’t think it has peaked.

Maybe—if I don’t get sick the day after I announce it—I’ll try another “game in a month” thing. If I do, it’ll be in Godot.

Lots of little ones

I didn’t do much in the way of development in 2016. I didn’t look at Unreal in anything other than passing, for example. But I’ve kept an eye on happenings in the game dev world, and here are some quick thoughts on other engines out there:

  • Unreal is, like the C++ it’s written in, solid and relatively unexciting. That’s what makes it exciting.
  • Superpowers might be a nice little JavaScript platform, but it’s got this horrible bug that makes all the dropdown boxes turn solid black. Makes it hard to use, you know?
  • Clickteam Fusion may or may not be getting bigger in 2017. They’re working on their version 3 release, and it might be cross-platform. Stay tuned for more on that front.
  • Amazon put out their Lumberyard (a fork of CryEngine). It’s free, as long as you’re willing to use their cloud services, but the real cost is in the machine you need to run the environment.
  • CryEngine itself is…strange. They’ve put out source code, but it’s not open. In fact, reading the license, t’s almost impossible to find a game you could even make! Maybe they’ll fix that, but I wouldn’t hold my breath.
  • The Atomic Game Engine looked like a promising release a few months ago, but it seems to be dead. The developers haven’t put out any news since May, and the forums were shut down in favor of Facebook. Sounds like they don’t want new users to me.
  • Finally, RPG Maker has a new version. It’s finally becoming something other than Windows-only, and the coding part has followed the hipster crowd from Ruby to JavaScript. In my opinion, that can only be a good thing.

I could go on, but I’m running out of year, so I’ll stop. Let’s just say this: 2016 was a good year for an independent game developer. 2017 will be even better. You’ve got a massive selection of engines at your disposal, from solid open-source offerings to AAA beasts. Maybe next year will be when we finally solve the asset problem. We’re getting there, slowly but surely.

Let’s make a language, part 21c: Occupations and work (Ardari)

For Ardari, things aren’t much different from Isian. There’s still the big difference between the agris “rich” and nydor “poor”, those who have a kroll “job” and those who don’t. Ardari speakers are a bit more worldly, however, as can be seen in the modern öskul “school” common to every town. Their larger cities also each have a bank (prèt), ready to lend (khipy-) money to anyone who might need it.

By contrast, the alz “farm” isn’t as central to Ardari culture as it is to Isian. Being more urban, Ardari speakers are more likely to work at (if not run) a chemba “shop” or pyuli “restaurant” instead. Many work at building (moll-), as their people are in a state of growth these days. Diggers (dròkön, the same term is used generically to refer to any “blue-collar” worker) are needed everywhere, as well. Most of these, however, are men, while women tend to do things like cook (lòsty-) or weave (urdè-). Most respected of all, though, is the sydonkön “teacher”, an important man (or, as is increasingly the case, woman) in every locale.

Although farming isn’t as big a deal as it once was, rural areas still rely on it heavily. The èmlokön remains a necessary and honorable profession; land is passed down from father to son as it has been for centuries. Mills (panad) are integral, even if the miller (tyokön) more often observes and pushes buttons these days. Finally, the market (virdègh) continues to act as the center of an Ardari community, no different from how our shopping malls used to be.

Next time…?

So that covers Part 21 of our series on creating conlangs. We’re nowhere near done—if you think about it, we’re never truly finished, but bear with me here. Now, I can keep going. I actually do have plans all the way out to Part 27. However, as you’ll see in the coming days, I’ve got other things on my mind. There are places I want to go with Prose Poetry Code, and that includes this series. So I might slow down a bit on these posts. Or I may continue on the current schedule, with three posts (comprising one part) a month. I’ll be good through the first half of 2017 if I do that. Stay tuned for my decision; in the meantime, keep creating, and have a happy holiday, whichever one you celebrate.

Word list

General terms
  • job: kroll
  • poor: nydor
  • rich: agris
  • to borrow: mänyt-
  • to create: grät-
  • to destroy: sògör-
  • to lend: khipy-
  • to repair: èbord-
  • to use: qas-
  • to work: nafèlo
  • work: naf
Places of work
  • bank: prèt
  • bar (pub): om
  • farm: alz
  • inn: mäsoza
  • market: virdègh
  • mill: panad
  • restaurant: pyuli
  • school: öskul (borrowing)
  • shop: chemba
Work actions
  • to bake: mej-
  • to build: moll-
  • to clean: fènt-
  • to cook: lòsty-
  • to dig: drò-
  • to drive: brech-
  • to fold: sòv-
  • to grind: tyokh-
  • to guard: chud-
  • to hunt: kwar-
  • to pour: swar
  • to press: akwèt-
  • to serve: klo-
  • to sew: wènt-
  • to shoot: käzh-
  • to sweep: nwèse-
  • to teach: sydon-
  • to tie: tölon-
  • to wash: majtas-
  • to weave: urdè-
Occupations
  • baker: mejkön
  • carpenter: mollkön
  • cooking: lòstyënda
  • driver: brechkön
  • farmer: èmlokön
  • hunter: kwarkön
  • hunting: kwarönda
  • janitor: nwèsekon
  • laborer: dròkön
  • miller: tyokön
  • servant: klokön
  • tailor: wèntökön
  • teacher: sydonkön
  • teaching: sydonda (from sydon- + -önda)

Programming in 2016: languages

It’s nearing the end of another year, and that’s the cue for sites the world over to start looking back on the past twelve months. Due to a lack of creative impulse in the code sphere, I’ll be doing the same. So let’s see how the science and art of programming fared in 2016, starting with the advances and changes in programming languages.

JavaScript

JavaScript might not be the biggest language out there, but it’s certainly the one most people have experienced in some form, so it makes sense to start here. And JavaScript has certainly seen some improvements this year. For one thing, it’s got a new version, as the standards guys have moved to the same silly release model that gave us modern Firefox and Chrome. The only things added to ES2016 (what should have been ES7) are an exponent operator and a single new Array method, includes(). Absolutely nothing to get excited over, and the “big” changes, like async, are still in the future…if they’re ever put in at all.

On the other hand, the environment for JavaScript is getting better all the time. You can count on full ES5 support now, and you shouldn’t have too much trouble using ES6 features. Maybe you’ll need a polyfill for those, but that’s a temporary solution. And the one good thing about Windows 10 is Edge, if only because it’s the end of the “old” Internet Explorer and that browser’s awful support for, well, anything.

Outside the browser, Node keeps chugging along. They’ve had some problems there (such as the leftpad debacle), but they’ve got that whole Node/IO.js fork thing worked out. From a political standpoint, it’s not optimal, but the codebase is solid enough. The ecosystem is growing, too, as almost everybody is using some sort of Node/Webkit construction, from Visual Studio Code to Atom to Vivaldi.

As usual, JavaScript’s future looks much brighter than its past. It’s still straining at its own boundaries, but it’s growing. It’s becoming a better language. The two main platforms (browser and Node) have improved by leaps and bounds, and now they’ve become mature. In the next year, they’ll only get better.

C++

C++ had a big year in 2016, but it was all behind the scenes. The real test will come next year, when the C++17 standard comes out, but we already know what it’s going to have in it. What might that be? More of everything, really. I’ve already written about some of the more interesting bits in a three-part series back in August. (Part 1, Part 2, Part 3)

So 2017 looks like it’ll be fun, but what about now? “Modern” C++ is finally getting widespread support, so that’s good. Even those of you stuck on five-year cycles should now be ready for that, and C++14 was an incremental upgrade. On the platform side, it’s C++. The platform is your computer, or your phone, or your refrigerator. It’s the same platform it’s always been. That’s why you would use it over any other language.

C

Microsoft has been doing their schizophrenic love-hate thing with open source for a while now, but 2016 saw the biggest payoff of the “love” side. The open release of .NET Core happened this summer, complete with support for platforms other than Windows. Considering how hard it can be to get MS to even acknowledge such a thing, that’s practically a miracle.

It’s also the beginning of the end for Mono—the third E stands for Extinguish, remember—but that’s not as bad as it sounds. Mono still has its uses, mostly for older .NET code and the things that the MS offering won’t support. Oh, and they also bought Xamarin, whose main reason for existing seemed to be letting you write C# code for mobile devices. But if even some of .NET is open-source, we don’t need that anymore. The community can do it.

C# remains a Microsoft language, though. The MIT license won’t change that. It’ll definitely give non-Windows developers some peace of mind, but you always have to remember who holds the cards here.

Java

Java’s a funny thing. On the one hand, it’s not that bad a platform. On the other, it’s owned by Oracle. They’re still playing the part of Sisyphus, rolling a ball of lawsuits up the hill, only for the courts to send them right back down. But unlike in mythology, there’s the possibility that they might win.

If they do, it’s bad news for everyone, but most of all for Java developers. Who would want to use a language owned by a sue-happy corporation? (And now the C# fanboys can say, “There’s another thing Java ripped off!” Well, okay, at least MS hasn’t sued anybody using C#. Yet.)

But if you can put that out of your mind, Java’s not bad. It’s awful from a security standpoint, and the language sucks, and—well, you get the idea. I still believe it has some upside, though. Scala—or Clojure, if that’s the way you roll—makes using the JVM bearable. Android requires Java coding, even if they desperately want to call it something else.

So Java’s 2016 has been mostly dismal, but look on the bright side: Java 9 is coming soon. And one proposal on the table is “ahead-of-time compilation”. For Java. Just think about that for one second. Maybe I’m misunderstanding, but wasn’t that the exact thing Java was designed to prevent?

The rest

Other languages have had an interesting year, but it’s too much work to list them all. Besides, I haven’t used that many of them. But here’s a few of the highlights:

  • Rust is growing. It’s almost to the point of being usable! (The rewrite of Firefox into Rust will come before that point, however.)
  • Go is still bad, but at least Google isn’t trying to push it (or Dart) on Android devs anymore. I’ll call that an improvement.
  • Python really seems to be disappearing. It’s had some minor releases, but nothing amazing. That’s a good thing, but the glaring flaws of Python 3 haven’t gone away.
  • PHP remains the bad joke of the programming world, but maybe PHP 7 can fix that. Because PHP 6 did so well.
  • Perl 6…exists! Technically, that happened last Christmas, but it’s close enough. You can’t complain about a once-in-a-lifetime occurrence.

We’ll round out the year next week by looking at another area of development: games.

On colonialism

The process of colonization ran for untold millennia before it came to a halt in the past few generations, but colonialism is uniquely tied to the period beginning around 1500, with the first Spanish incursions into the Americas, and ending with the independence movements of British, French, German, and other territories around the end of World War I. That’s about 400 years worth of colonial sensibilities, a fairly large swath of “modern” history affected by the building and upkeep of colonies.

What can we use from that time to build a good story? It’s a little beyond the traditional view of fantasy, but this period has become a significant part of the post-medieval fantasy subgenre. Paul Kearney’s Monarchies of God series and Django Wexler’s The Thousand Names are two excellent works I’ve read in recent years that fit into the “colonial era”; the first is a voyage of exploration to a new world, the latter a native uprising in a faraway imperial holding. These neatly bracket the ends of the era, in fact: colonialism begins with the first attempt at a colony, and it ends when the native—or nativized—population revolts against its distant masters.

Making a colony

The colony itself, obviously, is the central focus of a colonial story. At the beginning, it’s very much a tale of people struggling to tame a hostile environment. The true stories of European settlers coming to America are riveting. They’re full of doubt and faith, strife both with the natives and with each other, desperation and perseverance. Australia, sub-Saharan Africa, and southern Asia all have equally gripping accounts of the trials and tribulations the supposedly advanced Europeans had to endure to make those places their own. Even in the realm of science fiction, one can imagine a story about the first colonists on the moon, Mars, or a planet in a distant solar system to fall along the same lines.

After the initial struggles, the colony is not out of the woods by any means. They’ll have to adapt to their new location, to the sheer distance from their homeland. In 18th-century Australia, for instance, colonists might as well have been on another world, because they about as likely to return to England. The churning waters of the Atlantic meant that the Americas were little better off. India and Indochina were surrounded by hostility, and the antagonism of the natives of Africa is the stuff of legend. Add to that the unfamiliar terrain, the entirely new set of flora and fauna, even the differences in climate—a colony today wouldn’t be a sure thing, and these people managed it as much as 500 years ago!

Eventually, the early turbulence settles, probably after a generation or two. Once the original settlers have died off, you’re left with a population that is truly “native”. That’s where the real fun of colonialism comes in. The home government (or corporation, or whatever) might want to send more colonists, and this will cause a clash between the newcomers and those who have grown up in the colony. Or the colony’s patrons back home might want something to show for their initial outlay; some colonies were established purely for profit, especially in the Far East.

It’s entirely likely for these tensions between the colony’s native inhabitants and their motherland to grow into rebellion or open revolt. It took England’s American colonies a century and a half to reach that point, longer for India and South Africa, but it did happen. Of course, that coincided with an increased liberalism in political thought, part of the Enlightenment that ran through the entire Western world. Without the philosophies of the late 18th century, the cause of American independence (and the Mexican, African, Indian, and others that followed in its wake) might have been delayed by decades.

Our land

There’s a single wild card that makes colonizing into colonialism: the natives. Whether we’re talking about Native Americans, Australian Aborigines, or any other preexisting population, they’ll have something to say about the foreigners landing on their shores, claiming their lands. In our history, we know how that turned out, but it wasn’t always a sure thing.

Australia had a relatively sparse population anyway, but its indigenous inhabitants tended to live in the same general areas that the colonists wanted to take for themselves. They’re the best lands on an otherwise marginal continent, so that’s not surprising. The Americas, on the other hand, may have been peopled to a much larger extent. Upper estimates put the total Native American population in 1491 as high as 100 million. Half that sounds more reasonable, but that’s still a lot more natives than you might think from watching westerns.

We know what happened to most of them, though: they died. Disease and what might be called an early example of ethnic cleansing did them in. The same things tended to have the same effect—devastation—on all the other native populations of the world, but the Americas get top billing, thanks to a combination of factors. One, the US has a lot more global power than Australia or South Africa. Two, the colonization started earlier, so the effects of this interchange of genes, ideas, and disease vectors weren’t understood as well as in the 1700s. And third, the violent persecution of the indigenous peoples didn’t end with colonialism; anti-Indian sentiment ran high for the first century of the United States’ existence. Yes, apartheid lasted longer as an institution, but it was more political than militant.

But enough about that. Let’s get back to colonialism. Anywhere there’s a society, even a tribal one, in place, there’s bound to be friction. The Europeans won everywhere both from the disease factor and because of their relative level of technology. Once the illnesses had run their course, and the surviving native remnants were immune or simply too remote to become infected, the guns and horses utterly outclassed anything they could bring to bear.

It wasn’t always constant warfare and subjugation, though. Many colonies wanted to work with the natives. The reasons for cooperation are obvious: here’s a culture that’s already entrenched. They know the land in a way you never will, and all they want are a few of your high-quality guns or blankets or iron pots. In exchange, they teach you how to live better. And some of the colonists badly needed such lessons. Religious dissidents and petty criminals make poor settlers in the best circumstances, and colonies were far from that. It’s not surprising, then, that so many histories of colonization start with a few years of working in concert with the natives.

The colonial populations always seem to grow faster than the indigenous ones, because they’re not susceptible to the diseases they brought and because they’re often being supplemented by a steady influx of new colonists from the homeland. Thus, it’s almost natural that the settlers start taking more and more land, squeezing out the natives. That’s when the squabbles start. Maybe it begins as a raid here or an assassination there. Eventually, it can become something far greater, as in the cases of King Philip’s War in America and the Zulu wars in Africa. (Sometimes, as with the French and Indian War, it can be helped along by outside forces.)

If all-out war happens, it’s rarely to the sole detriment of the colony. The natives can inflict some serious wounds—the Zulus certainly did—but a colonial nation necessarily has a sizable military backing. It’s often just a matter of time before the inevitable attrition takes its toll.

On the other hand, there’s another way a native population can be effectively destroyed by colonists: marriage. Intermingling between European and American began with the first voyage of Columbus, if not the Viking landings half a millennium earlier. It’s here where those cultural differences can come to the fore. Men taking native wives—even if by force—will have a moderating effect on the persecution of those natives. Some might even abandon their own societies to join those of their spouses, but far more will introduce half-native children into the larger colonial mix. This plays havoc with the casual racism of the period, creating systems of delineation like those in Mexico, but also further blurring the line between the “good” guys and the “bad”.

In the story

For a story set in the age of colonialism, you’ve got plenty of options. Your story could be the founding of a colony, from the first landfall (if not before, looking at the original cause of the migration) to the pivotal event that ensures its survival. With natives added in, that gives you ample opportunity for action, intrigue, and first-contact diplomacy. You can delve into the indigenous culture, possibly through the eyes of a hostage or envoy, or you might turn things around and give the POV of the natives defending their homes from invaders.

The second phase of colonialism, after the initial generation is dead and gone, might be considered the “boom” phase. New settlers are coming in, while existing ones are expanding their families at a high rate. Food and land are in abundance. Here, the tensions between foreign and indigenous are still in play, but then you have the growing class of born-and-raised native sons and daughters. What are their stories? Where do they stand? They may resent the “actual” natives for causing trouble, but equally despise the motherland they’ve never known, who only sees their home as a trading post, a military base, and a source of cheap labor.

If you’re following the American model, it’s not too far to go for the third phase: rebellion. If it’s successful, this is where the colony ends, but colonialism may remain for some time. Most likely, it’ll finally die out with the original rebels or their children, but animosity between “native” and “outsider” won’t go away so easily, even as those labels become less and less meaningful. It may even get worse.

In the end, though, it’s your story. Following the historical trail of cause and effect, however, is a good start towards realism. We know this outcome can happen, because it did. People, even people set in a different world, tend to have the same motivations, the same influences. Barring unforeseen circumstances—magic or aliens, for example—it’s hard to imagine colonialism turning out too differently. It’s human nature.

Let’s make a language, part 21b: Occupations and work (Isian)

Isian, as you’ll recall, is a language whose speakers live in a remote part of our world. They’ve been cut off from modern civilization for a couple of centuries, but they’ve recently been rediscovered. Because of this, they’ve got a lot of native vocabulary to describe work, but some newer concepts require compounds.

In general, work is lodunas, an abstract noun derived from lodu “to work”. But a specific job, career, or occupation goes by bor instead. Most jobs are intended to create (tinte), but some instead destroy (dika), and a select few repair (efri) what is broken.

Workers (lodumi, plural of lodum) can perform many actions, based on their jobs. Some might teach (reshone), others build (oste). Makers of food include bakers (ogami, from oga “to bake”) and simple cooks (pirimi; piri “to cook”). These aren’t the only “domestic” occupations, either. Many Isian speakers, for their jobs, must clean (nolmi), wash (hishi) clothes, sew (seshe), or simply act as servants (dulcami; dulca “to serve”). More important for the town are craftsmen such as totasami (carpenters, literally “wood men”).

Isian is the language of a society that is still very agrarian. Thus, many of its speakers work as farmers (sepami) or just as assistants on a ban “farm”. In cities, however, most working men are instead simple lodumi, day laborers. Women who work are more likely to be reshonemi “teachers” or seshemi—in this context, a better translation might be “seamstresses”.

Finally, the places where people might work can be just as interesting as what they do. Well-to-do Isian speakers might run their own seb “shop” or chedom “inn”. Cooks can work at a restaurant (hamasim, literally “eating house”), though some isimi (“bars” or “pubs”) also serve food. And it remains common for most of the town to gather one day a week at the rishan “market”.

Word List

General terms
  • job: bor
  • poor: umar
  • rich: irdes
  • to borrow: mante
  • to create: tinte
  • to destroy: dika
  • to lend: hente
  • to repair: efri
  • to use: je
  • to work: lodu
  • work: lodunas
Places of work
  • bank: mantalar (from mante + talar)
  • bar (pub): isim
  • farm: ban
  • inn: chedom
  • market: rishan
  • mill: mur
  • restaurant: hamasim (hama “eat” + isim)
  • school: teju
  • shop: seb
Work actions
  • to bake: oga
  • to build: oste
  • to clean: nolmi
  • to cook: piri
  • to dig: daco
  • to drive: foro
  • to fold: efe
  • to grind: harca
  • to guard: holte
  • to hunt: ostani
  • to pour: lu
  • to press: hapa
  • to serve: dulca
  • to sew: seshe
  • to shoot: chaco
  • to sweep: wesa
  • to teach: reshone
  • to tie: ane
  • to wash: hishi
  • to weave: sumbe
Occupations
  • baker: ogam
  • carpenter: totasam (totac “wood” + sam “man”)
  • cooking: pirinas
  • driver: forom
  • farmer: sepam
  • hunter: ostanim
  • hunting: ostanas (ostani + -nas)
  • janitor: wesam or nolmim
  • laborer: lodum
  • miller: mursam (mur + sam “man”)
  • servant: dulcam
  • tailor: seshem
  • teacher: reshonem
  • teaching: reshonas (reshone + -nas)