Code Collaboration or (Subversion isn’t always Subversive)

Tags

,

Have you ever attempted to work on a Microsoft Word document with friends?  You created the document, emailed it to six friends, and suddenly found yourself struggling to merge all of the different changes that came back to you.

It’s a nightmare.

If so, first off, it’s time to leave the Office and move to Google Drive.  It’s a great way to collaborate online, in real time, on documents and spreadsheets.  I use it when I write stories and blog posts in my spare time, and for all of my work documents too.

This post, however, is not about how to plan your vacation with six friends by using Google Drive.  This post is about how multiple programmers can work on the same project at the same time.  In its simplest form, it is two programmers sharing one content file, much like working with a friend to edit a Microsoft Word document.

At its most difficult, it is multiple teams of front and back end coders working on thousands of files in a project.  Do you want to be the person to merge all of those files by hand as changes are made?  Nope, neither do I.

That’s where subversion comes in.  No, not subversion, the attempt to overthrow structures of authority.  The subversion I am talking about is a software versioning and control system.

We did not always use subversion at Mindscape. Originally, we used the FTP server functionality that came with Dreamweaver.  It allowed us to check out a file from the server.  If someone else tried to checkout and work with the file as well, they were told that it was in use.

It was alright when there was three of us. Sure, sometimes a person would ignore the lock and work would get lost. Or someone would forget to check a file in before going on vacation, and we had to wait for them to get back and unlock it.

As the team grew, those mistakes happened too often. That’s where subversion came in.

A very trimmed down explanation of subversion would be that there is a machine that controls the repository that all the files come from.  Users can get files from the repository.  On their machine, a subversion client keeps track of changes made to those files.

When the user checks the files back in, the server compares the changes to the what it has. If there have been no changes since the user started working, it just applies the changes. If someone else made a change first, the server will attempt to merge the changes together.  Mostly it works great, but sometimes it cannot merge it for you. In that case, the users are notified and have to manually merge the changes.

At Mindscape, we use a software service called Springloops to manage our repositories. It was easier to set that up then to learn how to administrate our own server. It has the added benefit of being able to deploy sets of changes to our development and production servers. It’s actually been a great tool for us.

On our computers, many of us use Tortoise, a free subversion client that keeps track of file changes locally. It’s easy and integrates directly into Windows.

Utilizing subversion, we are able to have multiple people working on a project at the same time. We can use the logs to go back through and see each change that happened, when it happened, and who made the change. It’s a great way to see who built a feature, and just as nice to figure out who to blame for a bug!

It certainly beats emailing files back and forth and trying to have a person manage merging them together.

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

90 Day challenge–2 week checkin

Tags

, ,

Eighteen months ago, both my wife, Denise,  and I were leading a life just a bit too sedentary for our own good. We spent most nights sitting around watching TV while eating cookies, and our waistlines were showing the fruits of our (lack of) labors.

That November, my friend Tim got us an early Christmas present. He paid for our signup fee at the local YMCA.  Denise and I dropped our cable service and started going to the gym five nights a week to play racquetball, volleyball, run and lift weights.

A year later, I had dropped down from a high weight of 235, to a low of 205.  I’ve been there since, not able to shed the last 15 pounds I’d like to lose. 

Early this year, a number of co-workers started a 90 day challenge using Visalus called the Body by Vi challenge.  Each one of them had great results. They’ve seen losses of 25 to 45 pounds over a 90 day period.  Some of them picked up the exercise while they did it, others just switched over to the food plan and lost the weight without any additional exercise.

I decided to start it myself on May 16.  It’s been really easy so far.  I weighed myself on the 17th, and I was at 210.  On the 24, I was 206.  Yesterday, I was 200.5!  I haven’t been below 205 since I was a sophomore in college 14 years ago.

I am surprised with how easy it has been. If you know me, you know I love to eat. I thought I’d be starving and craving more food.  The first week was a bit tough, but week two was simple. The cravings have just gone away. Here’s how a typical day goes.

Morning:

I make two shakes by adding 4 scoops of Visalus and a teaspoon of unsweetened Hershey’s Cocoa with fat free milk. I put it all in a Nalgene bottle and shake vigorously. Then I head off to work.

I drink half of my shake (which is one serving) at 8 am.  It’s less than 200 calories, but has lots of protein and nutrients.

At 10am, I have a Danon light and fit yogurt. They are delicious!  If I find myself hungry again, I drink a glass of water and eat a few raw almonds.

At 11:30, I drink the other half of my shake. I then fill my Nalgene bottle to the 16oz mark with water, shake it up to clean out the shake, and down the water. It cleans the bottle and hydrates the body – the ol’ two birds with one stone.

(Some days I eat lunch at work, and have a shake for dinner instead.  That actually seems easier to get through the day.)

Afternoon

Around 2pm, it is time for more almonds and water.

4pm – I grab an applesauce, a carrot, an apple, or more almonds. Almonds are pretty good. I found some Emerald almonds that have a light coating of dark cocoa and mint. Tasty.

Evening

Time for dinner!  I haven’t shied away from anything yet. I’ve done 2 chicken cordon blues, Buffalo Wild Wings, Ucellos for pizza, a Memorial day cookout, and pancakes. Pretty much whatever I typically would do for dinner. I’ve even had soda a couple of times.

Snacks in the evening

Did you know a whole carrot only has 35 calories?  I’ve been munching on whole, unpeeled, organic carrots. Yum.

My new favorite snack is slicing an apple and sprinkling cinnamon and sugar on it.  It’s lovely.  We’ve done popcorn, rice cakes (which are pretty good, actually), a slice of ham or a hunk of cheese.

That’s it. 10 pounds in two weeks doing that.

I used to dig deep in the house for chocolate every night. Just before I made the decision to try this out, I found myself melting bakers chocolate to drizzle on ice cream. That’s what we call a low point.  (It didn’t work that well, either).  Since I’ve started this, my sugar cravings have dropped to almost nothing. I may cave in for a tootsie roll once in a while, but I find myself getting sick of the soda I’m drinking half way through a can.  Interesting.

If you’ve had trouble losing weight or sticking to a diet, I think you should give it a try.  The shakes cost about $1.67 each, so it is not expensive, especially if you are cutting out going to lunch like I am. Oh, and they taste like cake batter.  Tasty cake batter.  And if you want, you can blend it with a scoop of peanut butter and half a pouch of sugar-free, fat-free chocolate pudding to make an amazing meal while only adding about 100 calories to it.

You can learn more here: http://aaronbrander.bodybyvi.com

Another set of eyes (or Blinded by the Light)

Tags

,

sherlock

I just spent the last week banging my head against a wall.  I came away with no physical bruises, though my metaphysical cranium hurts a bit. 

It is not the first time this has happened to me, and I am sure it won’t be the last. And I’m willing to bet that something similar has happened to you, Dear Reader.  

The issue cropped up with our new server environment.  We added a second web server and a load balancer to split traffic between the two machines.  It will be a great environment for both performance and for redundancy.

We ran into a strange issue after running with the load balancer for a few days. It seemed that if we made a change to the website, the two servers got out of sync and started throwing errors. The error mentioned that it was looking for a particular dynamically built assembly file.

The issue happened quite frequently in our old environment, and typically it just took a refresh of the page to get it running perfectly until the next update.  That didn’t work in the new environment. We troubleshooted it for a while, but we finally made the decision to stop load balancing and go back to one server until we can figure out the issue.  As soon as we went back to a single server, the issue cleared up.

To me, that meant it was an issue with having more than one server in the mix.  I began to work with our hosting partner to find a fix while I did a lot of googling for answers. After a week of trying a lot of different things, including making our site work as a precompiled site instead of dynamically compiled, we were no closer to the answer.  I was really confident that precompiling the site would fix it and when it did not work, I was out of ideas.

Enter a second pair of eyes.  Eric Patterson had just come free from a different project, so he helped me look deeper into the issue. Armed with the knowledge of all I had tried in the past week, he took a closer look at the Stack Trace for the error we had.  Stuck deep down in the stack trace, he kept seeing this:
DBauer.Web.UI.WebControls.DynamicControlsPlaceholder.RestoreChildStructure

That is a control that we use to put our “Page Parts” onto the site in the correct order. For me, that was not a clue because I knew it was used on every page.  For Eric, who had no such mental constraints, it was a place to start looking.

He quickly found this article.  It seemed to fit perfectly:
1) Error only in a web farm (which is what we have after introducing the second server) 2) Error with finding the temporary Assembly name
3) Using the DBauer Dynamic Controls Placeholder.

That article has a pretty easy fix to the issue that will cause the Dynamic Controls Placeholder to use a relative path to the User Control and not a fixed path.  If you need the source code, it can be found here.  I made the change to the source code, compiled it, and added it to our website.

The error disappeared!

There’s something to be said for walking through a problem and eliminating possibilities. That needs to be done.  But when you find the frequency and power of your head banging into that wall increasing, go grab someone else to help.  Their fresh perspective can often find you the answer quickly.

The Internet is Down (or How did we ever live without it?)

Tags

,

The internet is down in the office.  My productivity just came to a screeching halt.

The code I was writing in Visual Studio? Turns out I was connected to our development server’s database, so I can’t test my code without the Internet.

Check my email and work on that? I work in Gmail all day, and don’t have a way to access it offline.  Without the internet, I don’t have any email.

Ask a co-worker if they have Internet? Not feasible.  Google Chat is down when the Internet is out, so no instant messaging.  Use my voice to ask?  That’s just barbaric. Instead I’ll take off my headphones, I can’t reach Pandora anyway, and stare at the expensive brick in front of me.

Check Facebook or ESPN while I wait for the Internet to come back… oh wait. That’s on the internet too.  I’d watch some TV while I wait, but I stream that through Hulu and Netflix.

No work, no email, no music, no diversions.  What’s left? When did our lives become so dependent on the Internet?  I’d go outside, but without weatherchannel.com, how will I know what it’s like out there? Should I risk life and limb and step outside unprepared? I think not.

I thought I’d write this blog, but I use Google Docs and those need online access too. It took some brainstorming, but I realized that I had Microsoft Word on my computer still and that I could type this blog up there. Whew, something I could accomplish.

I guess I could have used pen and paper, but I’m not even sure where I could find it!

Oh, wait.  The internet is back! Sweet. Now I can post this blog and get back to work!

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

Request.URL–what’s that property?

Tags

, ,

Request.URL can be used in .NET to get the value that the web browser used to access a page. However, there are many different properties to choose from, and sometimes it is difficult to know which property to use.

I tired of guessing at the correct value and decided to write a small bit of code to display all of the properties so I could find the correct value faster next time.

Here’s what my code looks like:

Imports System.Reflection

Partial Class Tests_requestURL
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim info() As PropertyInfo = Request.Url.GetType().GetProperties()
        For Each a As PropertyInfo In info
            If a.CanRead Then
                Me.ltlValues.Text &= String.Format("{0}: {1}<br><br>", a.Name, a.GetValue(Request.Url, Nothing))
            End If

        Next
    End Sub
End Class

The code uses a bit of reflection and I am sure can be helpful for figuring out the properties of any other object.

For this url:

http://train.mindscapesolutions.com/tests/requesturl.aspx?query1=test&query2=test

The output is:

AbsolutePath: /tests/requesturl.aspx
AbsoluteUri: http://train.mindscapesolutions.com/tests/requesturl.aspx?query1=2&query2=3
Authority: train.mindscapesolutions.com
Host: train.mindscapesolutions.com
HostNameType: Dns
IsDefaultPort: True
IsFile: False
IsLoopback: False
IsUnc: False
LocalPath: /tests/requesturl.aspx
PathAndQuery: /tests/requesturl.aspx?query1=2&query2=3
Port: 80
Query: ?query1=2&query2=3
Fragment:
Scheme: http
OriginalString: http://train.mindscapesolutions.com:80/tests/requesturl.aspx?query1=2&query2=3
DnsSafeHost: train.mindscapesolutions.com
IsAbsoluteUri: True
Segments: System.String[]
UserEscaped: False
UserInfo:

Java, JavaScript and jQuery (Or What’s With All the J’s?)

Tags

, ,

Technology is full of confusing terms, and building websites is no different. As a developer or as a person in need of a website, you will no doubt encounter a number of acronyms and words that you either don’t understand, don’t want to understand, or that just plain make you want to cry a little bit out of sheer frustration.

DNS? PHP? .NET? IIS? Apache? Joomla? Drupal? CMS? IE? FF?

The list grows longer and your attention span grows shorter. I’ll not bore you with all of the acronyms now, I’ll just save that for another post. Instead, I want to shed a small ray of sunshine upon a dark corner of confusion.

What’s the difference between Java, JavaScript and jQuery?

Java

Let’s start with what Java is not. Java is not coffee; you won’t find it at Starbucks.

Java is not a populous island nation in the Indian Ocean; at least, not the Java we are talking about.

Java is a programming language developed in 1995 for Sun Microsystems. Its main purpose is to be able to run on all different types of operating systems. In other words, a program written in Java can run on a Microsoft computer and an Apple computer. All you need is to download the Java run-time to your computer and you can run any Java applications.

Java can be used on the Web, but I haven’t seen an example of a site using Java in a long time. If someone is telling you they’ll build your website using Java, they probably mean JavaScript.

JavaScript

JavaScript is not Java, just like tea is not coffee and Bermuda is not the same as Java the nation. Beyond some superficial similarities in syntax (the words and symbols used to write the code), Java and JavaScript are quite different.

JavaScript is built to run on the Web. How it executes and how well it performs is dependent on the type of browser you are using (Check out this website to help you determine: What is a browser?).

JavaScript was decried, denigrated and dismissed by many programmers for years, including myself. The relatively recent rise of “fancy” websites that update quickly without reloading a page (Ajax or asynchronous JavaScript execution) has brought JavaScript into prominence, and has even made an old hater like me at least acknowledge its importance.

If a salesperson is talking to you about using JavaScript to build something on your website, they are probably talking about implementing some sort of “fancy” interface feature to make the site more appealing to your visitors.

jQuery

Finally, we come to jQuery. jQuery has nothing to do with questions. In fact, it answers a lot more questions than it raises. jQuery is a library of functions that uses JavaScript. It is like using the phone instead of sending a telegram. It is like sending a text instead of using the phone. It is like using GPS navigation instead of an old, paper map.

jQuery is what made it palatable and fun to start using JavaScript again. It is the most popular JavaScript library in use today, and if you are building a site you should be using it. If you are having a site built, when the sales person talks about JavaScript, it is almost certain that the developer will be utilizing jQuery to make it happen.

So there you have it. Java, JavaScript, and jQuery, now clear as mud for you!

Shattered – Episode 2: Benson Jyri #5

Tags

, ,

***************************************

Here’s another scene fragment from Episode 2.  I hope you like it!

Just a note, this is still very rough. I read through it and pulled out a few big mistakes, but you will find typos and things that do not quite make sense.  Just roll with it!

For the entire first Episode and other posts from Episode 2, see this link: https://aaron-brander.com/tag/shattered/

***************************************

DARK, MENACING laughter chilled Eli’s spine and stopped him dead in his tracks.  Next to him, Jyri looked deflated. The long years suddenly visible on his countenance.

The swarm of goblins came to a stuttering halt, ranging around the courtyard and trapping Eli and Jyri against the temple. Their wailing cacophony assaulted his ears and drowned out the temple’s still ringing bell.

From the west, the goblin horde parted, and through the gap slid a nightmare.  Goblins were a smelly beast, their sweat, grime, and the juice and grit from past meals combining into a pungent perfume that Eli could smell from where he stood.  But the creature that came forth now was preceded by a stench so foul, it knocked the breath from him.

The laughter came again, and with it, an icy wind of sorrow and despair washed over Eli. His body was unwilling to move and attack or to turn and flee.

The thing was taller than Eli and slender.  It did not so much walk, as glide sinuously over the glittering courtyard toward Eli and Jyri.  Its body was hidden in a billowing, black cloak. The hood cast a deep shadow over its face, but the outline of it’s skeletal face was visible beneath the glow of its red eyes.  It was terrifying.

JYRI STARED uncomprehendingly at the stalking nightmare.  How could a dreadmach have returned?  Surely they had all been wiped out at the Battle of Utand when justice and peace prevailed over the evil of the world.  And yet, the dreadmach was there, as was a horde of goblins the size of which he had only previously seen at the Utand.

His powers had failed him, and he had no more fight in him.  He could trust only to Balim, and hope that he would provide a way out of this predicament, because there was little he could do to fight the dreadmach.

“Benson Jyri,” the thing spoke, its voice as oily and sinuous as its movements, “I have been told much about you.  I have desired to devour your soul and send you to serve my Lord, Memnon, since I was told of my task.”

The dreadmach had crossed most of the tiled, temple floor and was but a few steps from Jyri.  He glared down at the dreadmach, his eyes unwavering as he met the nightmare’s blazing, red eyes. The dreadmach reached out with its hand, the cloak falling back from its hand, uncovering a mangled mockery of a human hand; bent, broken, and gnarled with long, sharp claws.

Jyri grabbed Eli’s hand and took a knee, forcing Eli down with him.  The dreadmach reached forward, the icy blast of sorrow emanating from it pushed Eli towards the welcoming inane of death.

The claws brushed against Jyri’s hand, before caressing his face almost lovingly. Then the air pulsed, a bright white flash seared through Eli’s consciousness, and he knew no more.

What is a Technical Design (Or Why You Need a Blueprint)

Tags

, ,

Have you ever had a house built, or an addition added to your house? Did it go like this?

*****

“Good day, Mr. Architectman, I would like you to build a home for me,” Chris VonClient said.

“I would be happy to help, Chris. How big do you want the house to be?” Andy Architectman responded, tilting his head to the right so that he could hear Chris better.

“I was thinking we needed three bedrooms and two bathrooms. So I don’t know, two thousand square feet?” Chris was not really sure what he wanted, but he had a vague picture in his mind.

“Two thousand square feet, eh? Hmm. Yes. I can see it now. That’s enough for a big kitchen, vaulted ceilings, a den in the basement, a living room upstairs. Wait, you do want a basement, right?”

“Oh, that’s a great idea, Mr. Architectman. A basement is just what we need!” Chris was excited. He could see the house better already.

“Alright then. We can get started next week. How’s $150,000 sound and we’ll be done by September?” Andy was quite sure he knew exactly what Chris wanted.

“Perfect! Thanks Mr. Architectman!”

*****

I am hopeful that when you had your home built, it did not go this way. Somewhere in this process, Mr. Architectman built out a full blueprint for the project, perhaps even with visual aids like a 3D rendering of the home so you could walk through it.

Unfortunately, too many software projects are treated like the short story above. With a few descriptive words about the project, the developer is off and running and the client is left to wait for the project to be done.

Honestly, we have done projects this way at MINDSCAPE in the past. It was a long time ago, but still it happened. It was fairly standard practice in the software industry. There are two main ways to protect against this.

The first way is something called agile development. You can go ahead and look that up on Google if you would like, but basically it means that we work directly with the client through all phases of the project. The client asks for something small and we will deliver in a week or two. That thing is then evaluated, changed as necessary and we start work on thing two. It’s a great way to make sure the client gets what they want; but it has two downsides:

1) It is time intensive for the client. We’ll need your ear and your mind a lot of the time during development. That could be a month to a year of work, and not many clients have that time.

2) We don’t know how much it will cost because we are working collaboratively on it. That means we end up charging for all of the time we put into the project. Not many clients are willing to engage in that agreement.

So, we have taken the idea of agile development and married it to a more traditional process. Once we get to development, we make sure the client receives regular updates of what we are building and they will get to play with the software as we work. We do this by breaking up a large development into multiple milestones.

But to get to development, we first have to build the blueprint, and that’s where technical design comes in. There are three benefits to the technical design.

1) The client and the developer can look at words and pictures and sometimes even partially functional prototypes to make sure we see the same ideas.

2) The developer has a better understanding of what the client wants and how long it will take to build.

3) The client can take the technical design and have it quoted by other development companies. Sure, we’d like to have their business, but the technical design ends with a solid deliverable that will give other development shops a solid way to understand the project quickly.

So what does a technical design include? Much of it will depend upon the scope and complexity of the project, but it will always include one or more of the following:

Feature List

This is present in even the simplest design documents. It lists out the features that are needed with a description of what the feature does.

Wireframes

Often, we’ll pair the feature list with a visual representation of what each page may look like. This is not intended to be a final design, but rather a way to communicate how the feature will flow and look on the page. We often use a program called Balsamiq to help this process. Here is what a Balsamiq mockup looks like.

Prototypes

Sometimes, it is necessary to model interactions or complex use cases in a more dynamic way. In this instance we will build out a prototype. This allows the client to play with the proposed solution instead of just reading about it or seeing a picture. This is helpful when there is a lot of animation or fancy user interaction with the application. It is not the final solution, as it will not have any data or logic tied to it, but it is helpful for showing what the application should do.

No two technical designs are ever the same as we tailor it to the client, the project and the scope of work to be completed. However, the technical design should make the requirements clear to the developer and the client, should allow the developers to create a reasonable estimate of work and give the clients a deliverable that they can shop to other developers.

And it’s just a good idea to build a house with a blueprint and not an ambiguous conversation.

Shattered – Episode 2: Benson Jyri #4

Tags

, ,

***************************************

Here’s another scene fragment from Episode 2.  I hope you like it!

Just a note, this is still very rough. I read through it and pulled out a few big mistakes, but you will find typos and things that do not quite make sense.  Just roll with it!

For the entire first Episode and other posts from Episode 2, see this link: https://aaron-brander.com/tag/shattered/

***************************************

JYRI LOOKED about in disgust.  Was this, then, the price of freedom?  A flock of sheep where once there were lions?  The calm had been nice for a generation, but the storm had arrived.  Jyri heard a familiar twang, and looked up to see a flight of arrows heading towards him.  He lifted his staff and willed his god-given powers of righteousness and justice into the weapon.  A blast of wind from Jyri’s staff disrupted many of the arrows, but the shrieks and cries of the wounded told him that some still got through to accomplish their vile work.

“Get to the temple!” Jyri cried, trying one more time to get the sheep moving.  There was no more time to play shepherd.  Jyri dashed towards the goblins and prayed the villagers figured it out and fled to safety.

As he ran, his battle chant spilled from his lips.

“Balim nu doct.  Balim nu molatting.  Solun imort belom, troi memnock dor faruck Balim!”

In the common tongue, it meant: “Balim is peace.  Balim is righteousness.  Through my arms, let evil know Balim is justice!”

To Jyri, the words felt like the embrace of a lover after a prolonged absence — or so he imagined, being a celibate monk after all.
He felt Balim’s power rush through him and transform his as he ran.  Jyri was a large man be any standards, but when Balim’s justice needed meting out, he grew to the size of a small mountain.

As a fisherman in a small rowboat looks upon the sea with fear and loathing as a tempest hits and the sea rages, so too did the goblins quake at Jyri’s approach.  No one had warned them that Jryi Benson, Balim’s Justice on Earth, would be crashing down upon them this day.

It would be their doom, for Jyri felt no mercy as his staff cracked down, pulverizing two goblins and knocking a dozen to the ground.  He waded in, knocking the startled creatures to the ground with each swing of his mighty staff.  But the goblin’s numbers started to bear down on him.  With the momentum of his charge spent, the goblins worked to slide in behind Jyri to encircle him.  Though each strike from the large, orange clad monk took down multiple goblins, there were just too many.  The little biters slipped sword thrusts past his defenses and nicked him.  Blood started to flow down from his legs and mix with the offal of dozens of destroyed goblins.

Jyri knew he needed to disengage from the fight and get back to the temple where its defenses and Maia could help him.  He spun in a circle with his staff held out low.  Four goblins were knocked back and a fifth, shorter goblin had its head staved in.

With room for a moment, Benson picked his unfortunate target.  Green Gummer was a model goblin: short, squat and surly.  Its moss-colored skin had a sickly pallor that was not completely attributed to its skin color, but may have something to do with its rotted teeth.  Black, patchy hair stuck out from under its misshapen helmet, which sported a blunt spike on top.  An equally battered breastplate covered its skinny chest.  In its hands, it hefted what appeared to be a sledge hammer, but with a vaguely pointed face where it would normally be flat.

Jyri noticed this all in a flash of insight.  He felt no remorse or recognition, he merely needed a target for his righteous fury.  Jyri snapped the staff above his head.  He took a deep breath, sent a quick, silent prayer up to Balim for strength, and smashed the staff down directly on the helmeted head of Green Gummer.  The squat goblin exploded in slimy gibbets of body parts.  As Jyri’s staff slammed into the ground, it sent waves of earth spreading out from the epicenter of the strike, knocking goblins into the air all around him.

Jyri did not hesitate, he broke into a run back towards the temple before the first goblin crashed back to the earth.  In the distance, Jyri descried the other goblin groups as they gained the edge of town.  The howls of enraged goblins behind him spurred him in his retreat.  The defenses of the temple were his only hope now.

ELI MAIA had sent one of the young men up to the bell, and it now rang with a desperate pealing that underscored the panic felt in the sanctuary below.  Maia stood outside the doors, his wooden staff in his hand, and herded the running villagers into the darkness of the temple.

The flow of villagers lessened, and still Maia had not seen his parents. He prayed to Balim that they had found a place to hide from the swarm of goblins.  And yet…and yet, perhaps it was best if they had been killed swiftly.  The world was changing. Maia could feel it happening in the air.  The peace they had known the last generation was not just ending, it was being shattered.  There were few people equipped to deal with this change and if this was just the tip of the shift, as Maia was beginning to fear, many would lament living through the desolation.

The last villager ran past Maia, and he turned to see Jyri Benson fleeing from a giant horde of goblins.  He slammed the door shut on the temple, and heard the locking mechanism rumble into place.  It was now just he and Jyri and their belief in Balim that stood before the goblins.

Jyri slid to a halt beside Eli, winked at him, and turned back to face the goblins while he leaned panting on staff.

“You know, young cub, I have not had this much fun in years.  It is lamentable that we were caught unawares, but we will crush these beasts for what they have done, and then we will find out what the devil is going on,” Jyri spoke sideways to Eli while not wavering from gazing a the goblins.  Eli did not know how to react to that.

The horde of goblins was an unstoppable flood of green limbs, gnashing teeth, and howling rage as it streamed into the courtyard.

Jyri raised his arms and intoned solemly, “Vintin sar malincardum”.

Nothing happened.

Jyri looked around, bewildered.

He spoke again, this time with angst edging his words. “Vintin sar malincardum!”

Again, nothing.

Jyri looked at Eli, shrugged, and said, “I guess the temple’s defenses won’t be helping us.  This just got a lot tougher. Get ready, we’ll have to do this the hard way.

Jyri picked up his staff, gave voice to his war cry, and ran to meet the raging green wall of goblins.

And then he stopped.  Balim’s power had not infused him. He remained merely Jyri, a large, overweight monk.

Shattered – Episode 2: Benson Jyri #3

Tags

, ,

***************************************

Here’s another scene fragment from Episode 2.  I hope you like it!

Just a note, this is still very rough. I read through it and pulled out a few big mistakes, but you will find typos and things that do not quite make sense.  Just roll with it!

For the entire first Episode and other posts from Episode 2, see this link: https://aaron-brander.com/tag/shattered/

***************************************

JYRI WATCHED and waited, the shock of seeing goblins in the world again was wearing off and leaving behind a good number of questions.  The most immediate was about to be answered.  How much had the villagers forgotten of the old ways?  The bell should bring them all running to the temple with weapons in hand.  Jyri was sure the other planned defensive measure had been forgotten.  Few had kept to the military traditions, for what was the need?

The villagers were achingly slow to respond.  Jyri saw them emerge from buildings across the expanse of the village and look around slowly like so many dumb sheep.  If they had heard the screams from the fields they gave no sign, and from street level he doubted they could yet see the smoke.

Jyri looked again to the fields and saw there were now three groups of goblins rampaging towards the city from different sides.  Two had paused to burn the crops.  Benson Jyri assumed those poor farmers in the fields had fallen like wheat before the scythe.

The third group of goblins had no farmers or fields to distract them from their dread purpose.  They were charging along the main road and would reach the town in mere minutes.

“Damn,” cursed Jyri.

Outnumbered three hundred to one and a half, he would prefer the villagers come to him.  The temple had defenses of its own.  But if he stood on the balcony and waited for the villagers, there would not be many left, if any at all, for him to protect.

Jyri took a deep breath and shook his head.  He should have been careful what he wished for.  It looked like he was to have all of the fighting he could handle.  With a rueful chuckle, he launched himself over the balcony.

He dropped like a stone and landed on one knee with his back bent and his arms outstretched.  Tile cracked and dust billowed up around him as he stood and surveyed the task before him.  His life’s purpose had returned.  He had innocent people to protect and evil creatures to pummel.

The man once know as Balim’s Judgement ran towards the knot of confused villagers to try and get them moving.

MAIA LET out a surprised gasp as Benson leaped off of the tower and crashed to the courtyard below.  He had three agonizing seconds to wonder how he could fend off the attack without his master’s aid before he saw Benson sprinting down the road towards the villagers.  A white light was building around Jyri as he ran. It must have been some magical aura as Maia could hear Jyri’s cries as if he was standing next to him.

“Run! Run for the temple!”

Maia could see the villagers look around alarmed, yet they were slow to react and flee for safety.  Further on, the goblins had reached the edge of town with their frenetic dash down the road.  Maia forgot all about the bell he was supposed to be ringing as he watched a group of goblins stop and load their vicious, small bows.

As the arrows rained down around the hapless villagers, they finally awoke to the danger.  For some, it was too late.  The murderous arrows found flesh with a sickening squelch.

Maia watched the tide of villagers turn and start running towards the temple.  With a start, he recalled his charge.  He gave the bell one last frantic tug and then ran headlong down the stairs in a mad dash to pull the villagers into the temple.