Saturday, June 9, 2018

500 Words on World-Building

500 Words on World-Building — Blue Ink Alchemy

I'm very much looking forward to introducing more people to Dungeons & Dragons. The published materials for that purpose within the Starter Set are quite fine, but even moreso than the content within the books, I appreciate the flexibility of it. It's been a while since I've put together a world into which others will be introducing characters with their own motivations, drives, fears, and goals. I want to flex those muscles again. As much as I like the Forgotten Realms setting, what's the harm in creating what might be considered a parallel world on the Prime Material Plane? Similar, but different in many ways. Same maps, different names. Similar factions, different motivations. A history all its own that resonates with the high points of established materials. If nothing else, it's a great exercise in world-building. Even when set in the modern era on Earth, authors tend to create their own worlds when they set out to tell a new story. Look at Jim Butcher's Dresden Files, Seanan McGuire's October Day, Diane Duane's Young Wizards, Lev Grossman's the Magicians — the list goes on. I know that these are all fantasy examples, but considering this pontification is rooted my D&D ambitions, they're what come to mind for me. I'm sure you can think of your own. Speaking of D&D, there's been quite a bit written about the Starter Set called Lost Mines of Phandelver. For my part, my desire is not just to integrate it into a slightly different world of my own creation, but also deepen and flesh out the characters within the adventure. Even within a D&D campaign, I'm not terribly fond of one-dimensional characters, be they cackling villains or glorified vending machines. These are, for the most part, people; people have thoughts and feelings, they have hopes and dreams, they make mistakes. To me, it's important to convey those things and demonstrate that the protagonist (or in this case, the player character) are not alone in the world in terms of beings with agency and identity. Not long ago, I began running an adventure for some friends at a neighbor's house. Upon a cursory reading, I got a notion for how the local innkeep behaved and what his relationships were like. On the fly, as the players interacted with him, I created the character's partner and began role-playing their interactions in front of the players. It was just a little flavor, a bit of color splashed into the black and white text of the pages in front of me. And it went over incredibly well. I can't overstate the importance of taking just a little time to flesh out parts of your world, whatever you're creating it for and however you're creating it. Tolkien and Martin might at times get carried away with descriptors, but would we care so much about their tales and their many characters without those passages, that depth? Their worlds persist because of the way they were built. Don't you want the same for yours? On Fridays I write 500 words.
Blue Ink Alchemy

Songs of Cornell: Just Getting Started

Songs of Cornell: Just Getting Started — Blue Ink Alchemy

There really wasn't anything Cornell Starblossom liked more than a lively tavern at night. Night was when everybody shook of the day's responsibilities, relaxed, and loosened their laces, especially their purse strings. The half-elf was adept enough with bandore and thelarr to maintain a decent enough lifestyle with just a few hours of song every night. What really got him attention — and tips — was his voice. Unlike the instrumental skills, honed by years of study at the College of Fochlucan, he'd been born with a melodious voice with good range and solid timbre. He'd trained that too, to be sure. From participating in hymns to Sune with his mother, to literally singing for his supper all up and down the Sword Coast, he'd built the stamina, clarity, and expressiveness to handle a night's worth of song, much to the delight of patrons and approval of tavern owners. He sang songs of pure love, loves lost and regained, learning to love one's own self. He sang ballads of heroes long gone and the battles of mighty nations. He sang of dragons, dire portents, and powerful magic. Most of all, he sang to the individuals in the tavern, rubbing elbows with men and sitting beside ladies, all the while keeping a fine hat in view for the depositing of coin. It was getting late at the Clover Wall Roadhouse when Cornell wrapped up his encore. He felt tired, but satisfied. After recent ordeals, he was glad to have time to simply ply his trade and get to know the locals, especially those in high standing. The blacksmith in particular had been of interest to him, in terms of acquiring better means of protecting himself. Having done that, he resolved to spend the next tenday involved in nothing but good song, good food, and pleasurable company. He was thinking about the feisty redhead who'd invited him to her chambers in a few hours as he counted the night's coin. Just enough for his upscale rooms and meals to last him until tomorrow night. He leaned back with a smile. He had no taxes to pay, no lands to manage, no manor to worry over. Just him, his music, and the road. It was freedom, and he valued it highly. "Oi. Knife-ears." He blinked, slowly, and looked up at the source of the voice. It was a burly, smelly human, beefy hands in fists. A thinner, weasel-faced human stood behind the first, sneering at Cornell. "Gentlemen." Cornell's voice came out in his easy drawl, an affect picked up from his youth in Daggerford and time on the road. "Got some feedback on th' set? I'm always lookin' t' improve." "We bet good money on you in the arena, flower-muncher. We want it back." Ah. So these two were from the Redplumes. Or, at least, had supported the Redplumes in their assault and kidnapping of innocents along the road. Especially non-humans. Cornell's smile faded just a touch, remembering the roar of the crowd, the frothing of the quipper-infested waters... "Ain't my fault you bet on th' wrong odds." He paused. "Were they good odds that we were gonna bite it? I shoulda placed a bet on us, myself. Might've been able to help you kind gents." The beefy one slammed his fist into the table. "We will have coin, or we will have blood!" "Oi." This was the barkeep, wiping down his bar, looking up from tending to his last few customers. "Keep it down or get out. No fighting in my place." Cornell gave the barkeep a nod and a smile, and got to his feet. "You heard th' man, gentlemen. Care t' step outside?" The two humans shared a vicious grin and moved to the door. Cornell handed the barkeep his coin — "for my rooms and board 'til tomorrow night" — and followed, running his fingers over the feather in his hat before putting it on his head. He thought about the rapier hanging from the left side of his belt, and the new crossbow on the right. It was his bandore that he hefted onto his left shoulder, however. As he walked to the door, he did a quick check of the tuning of the strings, plucking one or two to get the notes just right. As soon as they were outside, he saw Weasel-face pulling out a pair of crossbows not unlike Cornell's new acquisition: built for a single hand, quick to reload, deadly with good aim. Ham-fist's weapon of choice was a hammer with a long haft and a heavy-looking head. They grinned. Ham-fist opened his mouth to speak. Cornell looked squarely at Weasel-face and gave the bandore a quick riff.
this may hurt a little but it's something you'll get used to
The discordant melody and minor chord made Weasel-face's eyes go wide. Screaming in panic, the man dropped his crossbows to clutch his head in pain, and turned to run as fast as he could. Ham-fist whirled to yell an imprecation, and that's when Cornell drew his crossbow, aimed, and shot the human in the back of the thigh. Howling, Ham-fist went down. Cornell walked over, hanging the crossbow from his belt, and drawing his rapier. He placed the tip of the blade under Ham-fist's chin, and lifted the human's face towards his. "I'm no killer, nor am I thief," he said, his voice grave and even. "But I am a Harper agent." Cornell lowered his instrument to the ground gently and opened the left side of his jacket, showing the badge he wore underneath. "An' you are a threat t' the common folk, or at least those who ain't like you." He put a little pressure on the rapier, a tiny bead of blood appearing on the man's white skin. "I suggest you grab your friend an' leave. Don't let me see you here again. Remember: we're watching you, racist." Ham-fist nodded, or at least did so as well as he could with a rapier at his throat. Cornell smiled, stepping back, and sheathing his weapon. Ham-fist stumbled to his feet and jogged after Weasel-face. Cornell took a deep breath, and let it out again. While he had no taxes or land, he did have his responsibilities. It was the Harpers who had sponsored his entry into Fochlucan, kept his mother safe, and appraised his father, an elf wizard and adventurer in his own right, of Cornell's progress. And there was the whole empathy-for-the-common-folk thing. Growing up half-elven wasn't easy, especially in areas in the North of the Sword Coast mostly dominated by mainline humans. He could empathize with so many of them. It was part of the reason why stories of the Harpers had always appealed to him, and why he now wore their emblem. He adjusted his hat and headed back for the Roadhouse, bandore on his shoulder. The night, much like his journey across Faerûn in search of story, song, and worthy causes, was just getting started. Mondays are for making art. Dungeons & Dragons copyright Wizards of the Coast.
Blue Ink Alchemy

500 Words on the Adventurer's League

500 Words on the Adventurer's League — Blue Ink Alchemy

Of late, (almost) every Friday night, I take a long trip from my flat to West Seattle so I can join in the occasionally madcap shenanigans known as the Adventurer's League. For the uninitiated, the Adventurer's League is the 'official' organization for players and DMs of Dungeons & Dragons, sanctioned by Wizards of the Coast. Participants log their adventures, XP gains, and magical items to maintain a relative power level. There are three tiers of play, based on player character levels. New players start with characters at level 1 and work their way up the tiers, trying a smattering of different adventures every week as they progress. To what end, you might ask? The advantage of the Adventurer's League is that you can take an official, logged character to any League venue and game, and fit right in. No need to explain any odd stats or homebrewed items to your new DM. You can review a logsheet at any time, make sure things are on the level, and start rolling dice from there. It could be a friend's house, a coffee shop, or a huge gaming convention. It doesn't matter. Got that +1 breastplate and your holy avenger logged and approved by another DM? You're in. Speaking of DMs, being a Dungeon Master for the Adventurer's League has perks all its own. When you run an adventure, you don't just get the satisfaction of helping your players have a good time, even if you kill their characters. You also get rewards to apply to characters of your own. Dungeon Masters can be hard to come by — the DM experience is ultimately rewarding in and of itself, but it can be incredibly intimidating. There are incentives given just to get someone behind a screen at the table. After all, you can't have a Dungeons & Dragons adventure without someone to populate the dungeon and bring those dragons to life. Most of all, however, beyond the experience points and whatever else players and DMs gain, the Adventurer's League is a wonderful way to meet new people. Tabletop gaming, more often than not, is a collective experience, and everyone has something to bring to the table. Meeting like minds who contribute to a wonderful night of adventure and magic helps create a feeling of community. It helps people feel like they're not alone. It draws people out, and encourages them not only to engage their imaginations, but share it with others. That, in and of itself, is a beautiful thing to me. This happens with most D&D groups, of course. But when gathering at home, most of the players know one another, or get to know one another fairly quickly as they meet regularly. In the League, this happens with strangers. Every week. And everyone benefits from it, and walks away having had a good time. I know this isn't always the case, but so far, my personal experiences have been overwhelmingly positive. In spite of my worries, I plan to keep making the trip every week.
Blue Ink Alchemy

Friday, June 8, 2018

WordPress PHP PayPal Payout Helper Class

WordPress PHP PayPal Payout Helper Class — Blue Ink Alchemy

View on GitHub

At-A-Glance

Platform: WordPress Language: PHP Keywords: RESTful API, PayPal, eCommerce, WooCommerce

Overview

We live in an international, interconnected world. We work for one another on all sorts of solutions. And we all want to get paid for our work, right? Right. It's not uncommon for people to use a CMS like WordPress to advertise, facilitate, and implement their business. And when doing so, an eCommerce platform handles all of the sales, taxes, and so on. But what if we're not paying for a product, but rather providing payment to another person for a service rendered? The client in this example is running a business in Australia, and connects those needing professional SEO services with qualified freelancers. The desired solution would not only ensure the proper flow of payment from the former to the latter, but also automate the process so that recurring contracts with a monthly or bi-weekly payout schedule would take place without requiring manual input.

Approach

The prevailing idea was to have a solution that was as seamless as possible with current WordPress and WooCommerce functionality. The modularity of WordPress and, by extension, WooCommerce means that new classes to handle a situation like this can be added onto the platform is relatively straightforward. With that in mind, I worked to craft a class that drew the information required from existing sources, work it through the PayPal API, and update all of the pertinent data without interfering with other processes. In most instances, this is a process that is done manually. By automating things, we could make the work of the client more smooth, provided that we could ensure the success of these transactions should they run automatically as a CRON job based on whenever the appropriate payout should be made, as well as checking for the proper currencies on payout.

Result

Thanks to the functionality of WooCommerce and PayPal, the incoming currency was the only type that requires a callout. Once the recipients information is entered and the transaction started, PayPal handles the rest. However, giving it the incoming currency is crucial, in that PayPal is informed that default currency values should not be used. Then, it's a matter of making sure the correct credentials are culled for both payer and recipient from the WordPress database. This information is entered by both parties as part of their registration for the site. The class consolidates this information and, along with the currency type and amount, facilitates the transaction.
Blue Ink Alchemy

WordPress PHP PayPal Payout Helper Class

WordPress PHP PayPal Payout Helper Class — Blue Ink Alchemy

View on GitHub

At-A-Glance

Platform: WordPress Language: PHP Keywords: RESTful API, PayPal, eCommerce, WooCommerce

Overview

We live in an international, interconnected world. We work for one another on all sorts of solutions. And we all want to get paid for our work, right? Right. It's not uncommon for people to use a CMS like WordPress to advertise, facilitate, and implement their business. And when doing so, an eCommerce platform handles all of the sales, taxes, and so on. But what if we're not paying for a product, but rather providing payment to another person for a service rendered? The client in this example is running a business in Australia, and connects those needing professional SEO services with qualified freelancers. The desired solution would not only ensure the proper flow of payment from the former to the latter, but also automate the process so that recurring contracts with a monthly or bi-weekly payout schedule would take place without requiring manual input.

Approach

The prevailing idea was to have a solution that was as seamless as possible with current WordPress and WooCommerce functionality. The modularity of WordPress and, by extension, WooCommerce means that new classes to handle a situation like this can be added onto the platform is relatively straightforward. With that in mind, I worked to craft a class that drew the information required from existing sources, work it through the PayPal API, and update all of the pertinent data without interfering with other processes. In most instances, this is a process that is done manually. By automating things, we could make the work of the client more smooth, provided that we could ensure the success of these transactions should they run automatically as a CRON job based on whenever the appropriate payout should be made, as well as checking for the proper currencies on payout.

Result

Thanks to the functionality of WooCommerce and PayPal, the incoming currency was the only type that requires a callout. Once the recipients information is entered and the transaction started, PayPal handles the rest. However, giving it the incoming currency is crucial, in that PayPal is informed that default currency values should not be used. Then, it's a matter of making sure the correct credentials are culled for both payer and recipient from the WordPress database. This information is entered by both parties as part of their registration for the site. The class consolidates this information and, along with the currency type and amount, facilitates the transaction.
Blue Ink Alchemy

500 Words on Job Hunting

500 Words on Job Hunting — Blue Ink Alchemy

One thing I didn't anticipate when I moved to Seattle was how competitive the job market would be outside of the gaming industry. I knew I'd be in for a fight if I went straight for video gaming's jugular. It was something I wanted to get into, for sure, but first had to come gainful employment for which I was already suited and trained. So I started looking for positions as a web developer. That, too, has turned out to be a highly competitive field. I probably should have anticipated it'd be this difficult. After all, some major companies with healthy profit margins exist out here. It's natural for people, especially younger professionals, to scramble and fight for the positions that would be available. I wasn't adequately prepared for that. Years later, I'm paying the price. It's taken me a rather long time, but I'm finally coming to grips with the fact that if I'm going to be employable to a degree that will support my partner and my distant family, I need to catch myself up on what I've been missing in terms of development and programming. As much as I want to get paid for writing novels and making games, my imagination doesn't need the refreshers that my knowledge of languages like JavaScript and PHP do. Plus, there's quite a few new languages I'd benefit from picking up — Python, TypeScript, C#, and so on. I can't afford to take classes, especially since my unemployment ran out months ago. So I'm on my own, using tutorials and code examples forked from GitHub and posted on blogs. But I'm making progress. I know that some people go into positions like the ones I'm applying for without knowing anything about frameworks like React and Angular. The more I can learn, the more employable I'll be when I walk into an interview. The barriers between me and those interviews, at times, seem insurmountable. I've sent out dozens, maybe hundreds, or resumes. I apply to jobs on LinkedIn, Glassdoor, and CraigsList every single day. I'm working with recruitment agencies. Yet, for all of that effort, since my last contract ended in January, I've had three in-person interviews that could have yielded paying work. That, I think, shows just how cutthroat it is out there. I'm not about to give up. If I have to, I'll take another office job while I stay on the hunt. But I'm not giving up this hunt. I've had a dearth of energy over these previous few months, and with it seemingly to be finally on the upswing, the last thing I want to do is settle for less than I can earn. If I can land the right sort of job, a lot of the problems I'm currently dealing with will be obviated. It'll free up mental bandwidth to write more, create more, do more. I'll have to manage my time differently, but there'll be structure to work around. My job's out there. I'll hunt it down.
Blue Ink Alchemy

Friday, March 2, 2018

500 Words on Going to Seed

500 Words on Going to Seed — Blue Ink Alchemy

This blog has, admittedly, gone to seed a bit. So much of my energy and time has been consumed with two things: finding a job, and getting/keeping my shit together. That second part is a bigger task than I admit to myself sometimes. I'm not neurotypical, not by a long shot, and there are some days when I simply do not have the bandwidth for leaving the flat, let alone interacting with humans. It's different when I have a dayjob, a structure; left to my own devices, I spend an inordinate amount of time just keeping myself upright and mobile. I try not to berate myself or flagellate myself over this or that: not writing more, not cleaning more, not hunting more jobs, not hammering out my own structure. Self-improvement, especially at fundamental levels of thought patterns and behaviors, takes a lot out of a person. I go over things in my head, events from days or months or years past, and put them under a metaphorical microscope to pick out flaws and find things to learn. There's always something to learn. If you think you don't have to learn anymore, then you've gone to seed just as much as this blog did. I've seen it happen. People get stuck in their ways. They refuse to change. They begin making assumptions — a friend will always be there, a job is secure and one's position is unshakable, "I'm one of the good ones." They don't consider asking questions: how can I change or improve how I'm doing what I'm doing? What steps can I take to learn more, get more perspective? Who do I want to be, and what has to be done to make me that person, who's closer to the best version of myself possible? One doesn't always have the energy or wherewithal to ask these questions, and act on those answers. That's okay. The very baseline thing is the intent, the desire to change oneself and one's circumstances to yield growth and do away with toxicity. Have the conversations, with yourself or with others, that focus on solutions and how you can be a part of them, rather than the problems and who's to blame for them. Take the time to consider the past, learn from it, and apply those lessons to the future. Pick yourself up and move — physically, if you have to — so you never stop growing. That's the way forward. That way lies change. Not everybody can do it. Not everybody has the self-awareness to realize that change starts with the person we live with every day no matter what: ourselves. It lies within ourselves — not our family, not our friends, not the groups or organizations or bandwagons to which we think we belong — to be true vectors of change and growth. Only through thoughtfulness, concerted effort, and the determination and resilience to see these changes through to their conclusions can we avoid going to seed and truly grow as people. Give it a try.
Blue Ink Alchemy