I Am a Genius: listen to my words

I Have the Conch


listen to my words

Archive for the ‘Projects’ Category

Projects are… mostly miscellaneous. Anything taking major effort and coordination is a project. For example, coding this site was a project. Working on a novel is a project. News and results from my projects get funnelled here.

Media Query Update

So I did some more tinkering. I figured, there has to be a way this makes sense.

Especially since I spent another day at work working with a page with these declarations that is working exactly as intended:

<link rel="stylesheet" media="screen and (min-width: 320px) and (max-width: 480px)" href="styles/rplo-iphone5.css">
<link rel='stylesheet' media='screen and (min-width: 560px) and (max-width: 720px)' href='styles/rplo-iphone5.css' />

I did a version of my page from the last post that had this:

@media only screen and (min-width:300px) and (max-width:309px) { body { background-color: rgb(0,1,0) } }
@media only screen and (min-width:310px) and (max-width:319px) { body { background-color: rgb(0,2,0) } }
@media only screen and (min-width:320px) and (max-width:329px) { body { background-color: rgb(0,3,0) } }
...

on up to 1609px.

Every mobile device/browser matched the 980-989 range. Just like I expected from my last results.

Honestly, I have no idea how to begin to reconcile the behavior between those two segments of code. It makes zero sense to me.

So I finally tried using min-device-width and max-device-width.

@media only screen and (min-device-width:300px) and (max-device-width:309px) { body { background-color: rgb(0,1,0) } }
@media only screen and (min-device-width:310px) and (max-device-width:319px) { body { background-color: rgb(0,2,0) } }
@media only screen and (min-device-width:320px) and (max-device-width:329px) { body { background-color: rgb(0,3,0) } }
...

This one gave me usable results. For the first time. Ever.

But it’s still pretty frigging weird.

Chrome and Firefox, on my Samsung Galaxy SIII, agree that in portrait, the device-width is 360px, and that in Landscape the device-width is 640px.

The built-in default browser, however, insists that the device-width is 720px no matter what orientation the device is. I’ve no idea where it gets that number. It’s like the developers choose it from a hat full of slips of paper with pixel resolutions written on them.

I can understand reporting an identical device-width no matter the orientation, I guess. There’s an argument to be made that the device-width hasn’t changed just because you turned the device. It’s a completely impractical and useless argument, but at least it’s there. And there’s precedent. iOS reports (using Chrome or Safari) the same device-width no matter which orientation you hold the device (on this iPhone 5 that device-width is 320px, and on the iPad Air it is 760px). This is another reason for me to hate Apple, but at least it’s consistent.

Android’s default browser giving me 720px is like saying that 1+1=2, or 3 for especially large values of 1.

But, still, at least I can use it.

You can make media queries that fit those device-widths without much of a problem

/* iPhone 5, portrait */
@media only screen and (min-device-width: 320px) and (max-device-width: 359px) and (orientation: portrait) {}
/* iPhone 5, landscape */
@media only screen and (min-device-width: 320px) and (max-device-width: 359px) and (orientation: landscape) {}
/* Android Chrome, Firefox, or default, portrait */
@media only screen and (min-device-width: 360px) and (max-device-width: 639px),
only screen and (min-device-width:720px) and (max-device-width:1000px) and (orientation: portrait) {}
/* Android Chrome, Firefox, or default, landscape*/
@media only screen and (min-device-width: 640px) and (max-device-width: 719px),
only screen and (min-device-width:720px) and (max-device-width:1000px) and (orientation: landscape) {}

Note that the 1000px measure there is an arbitrary number.

I will probably do something like this to get a measure in em. And maybe do it with device-height as well. Just to see if I get something else useful.

Media Queries

“I seem to be having tremendous difficulty with my lifestyle…” er… media queries.

I’ve been working with a bunch trying to come up with a definitive set of queries to make CSS work across browsers so I can just copy those queries as needed from page to page.

Except, they don’t work consistently.

At work we have a page that uses this set of link declarations on one page:


<link rel='stylesheet' media='screen and (min-width: 320px) and (max-width: 480px)' href='css/iphone4.css' />
<link rel='stylesheet' media='screen and (min-width: 560px) and (max-width: 720px)' href='css/iphone5.css' />
<link rel='stylesheet' media='screen and (min-width: 600px) and (max-width: 1024px)' href='css/tablet.css' />

It seems to work pretty good for iPhone and iPad, though less so for Android.

But I was experimenting to find what worked. What was the min-width for various devices.

I have a Samsung Galaxy SIII with Chrome, Firefox, and the default browser.
I have an iPhone (5, I think?) with Chrome and Safari
I have an iPad3 with Chrome and Safari.

I wrote a PHP script to generate a style sheet with media queries incrementing the min-width by 10. Like thus:


@media screen and (min-width: 320px){body{background-color: rgb(0,0,1)}}
@media screen and (min-width: 330px){body{background-color: rgb(0,0,2)}}
@media screen and (min-width: 340px){body{background-color: rgb(0,0,3)}}
@media screen and (min-width: 350px){body{background-color: rgb(0,0,4)}}
...

…and so on, up to 1260px. Note that the color gradation was very subtle, so I included a JavaScript statement to tell me the color value actually being used. From that I could see which media query matched.

It wasn’t helpful because all three devices, in all their browsers, told me that the color was rgb(0,0,67). Which corresponded to 980pxs. It did this in portrait AND landscape orientations. The only exception was Firefox on the Galaxy. It matched something like 530px, but only in portrait. In landscape it was 980px.

However, I’ve also had people observe that linking stylesheets works differently (read, “better”) than inline media queries. So I did the same thing, only using stylesheets.


<link rel="stylesheet" media="screen and (min-width:320px) href="style320.css">
<link rel="stylesheet" media="screen and (min-width:330px) href="style330.css">
<link rel="stylesheet" media="screen and (min-width:340px) href="style340.css">
<link rel="stylesheet" media="screen and (min-width:350px) href="style350.css">

I got identical results.

I have a coworker who testifies to the True Nature of the media queries we use on the functional page mentioned above.

So I made this page:


<html>
<head>
<title>css test</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<style>
body { background-color: #000; color: #fff; }
</style>
<link rel='stylesheet' media='screen and (min-width: 320px) and (max-width: 480px)' href='style320.css' />
<link rel='stylesheet' media='screen and (min-width: 600px) and (max-width: 1024px)' href='style600.css' />
<link rel='stylesheet' media='screen and (min-width: 560px) and (max-width: 720px)' href='style560.css' />
</head>
<body>
<script>
$(document).ready(function(){
switch ($('body').css('background-color')) {
case 'rgb(0, 0, 3)':
$('body').prepend('Document matches this media query: screen and (min-width: 320px) and (max-width: 480px)');
break;
case 'rgb(0, 0, 27':
$('body').prepend('Document matches this media query: screen and (min-width: 560px) and (max-width: 720px)');
break;
case 'rgb(0, 0, 31)':
$('body').prepend('Document matches this media query: screen and (min-width: 600px) and (max-width: 1024px)');
break;
default:
$('body').prepend('Document does match any media query you defined').
break;
}
})
</script>
</body>
</html>

The page (with lots of commented code from other experiments) can be found at http://herbertlives.com/misc/mq

All it does is use media queries to decide which stylesheet to use.
The stylesheets each have one declaration, the color of the body background.
The JavaScript/jQuery detects the background color, and depending on what it gets, prints out what query matched.

Android Chrome

Android Chrome

Android Firefox

Android Firefox

Everything iPhone and iPad matched Android Chrome. Which, it should be noted, is the range that 980px fits in. Firefox was the confusing one, because… 530px doesn’t fit between 320 and 480.

I’ve seen a lot of “lessons” and “tutorials” and “sample code” that give example queries. They all seem to go with the iPhone declared screen size of 320px and browser reported size of 640px. And none of them work like I expect them too.

I’m left believing that web pages must be styled according to target device, not screen sizes.

If I’m doing something wrong, feel free to tell me what it is. I’d like the world of web development to make some sort of fracking sense once in a while, and human error in this project would explain a lot.

The Monkey Duck has arrived

So… I finished the theme with all the nit-pickiness that accompanies an official WordPress theme.

You can acquire it here.

I’ve gotta re-tweak it before I make the final version what I’m using here. But there you go. A full demo is currently live at http://wptest.herbertlives.com but once I start on another theme that site will change.

Enjoy! And feel free to leave suggestions, questions, comments, and smart remarks right here.

WordPress… Y U No Love Me?

OK, so I’m trying to release this as a theme, but here’s the problem.

Currently, comment_class() add “odd” or “even” to a comment’s class, presumably to enable alternating colors on a list of comments. It’s pretty fail when it comes to threaded comments, though.

  • comment 1
    • first reply to comment 1
      • reply to the reply
    • Second reply to comment 1
  • comment 2

In this example, clearly you’d want comment 1 to be class=”odd” and comment 2 to be class=”even” if you were alternating colors. No dice. comment_class is no respecter of hierarchy or depth.

In this scenario you get:

  • comment 1: class=”odd”
    • first reply to comment 1: class=”even”
      • reply to the reply : class=”odd”
    • Second reply to comment 1: class=”even”
  • comment 2: class=”odd”

Note that comment 1 and comment 2 both get the same class, and therefore if they’re used for styles, they’ll get the same appearance. True, they also get “thread-odd” and “thread-even” (respectively) so you can style on that, but that doesn’t help with first reply and second reply — which both get class=”even”. Only the first level in the hierarchy gets “thread-odd” and “thread-even” so you’ve still got two sequential comments with identical styling.

It would be useful if the “odd” and “even” assignments reset for each level of a thread. Then I could use them in conjunction with their level (which is already assigned by comment_class()) to get approprite styles. So we’d get this:

  • comment 1 (class=”odd thread-odd depth-1″)
    • first reply to comment 1 (class=”odd depth-2″)
      • reply to the reply (class=”odd depth-3″)
    • Second reply to comment 1 (class=”even depth-2″)
  • comment 2 (class=”even thread-even depth-1″)
    • first reply to comment2 (class=”odd depth-2″)

if a depth was an even number, it would have one pattern for odd/even. If the depth was an odd number, then it would have a different pattern for odd/even.

I have had a number of thoughts today for how to fix this so I could get what I wanted. Using jQuery to correct all the classes after it all loaded was one idea. Another was to write my own functions for not only how each comment displays but also for displaying the whole list. In the end, I think the simplest way is to hack the core modules, which means it won’t be going into the distributed version of this theme. Although I might find a simple way to get it all in how I want it without duplicating the entire comment_function.php file.

Anyway, for the curious, this is how I do it. I use the following code to replace WordPress’s get_comment_class() in */includes/comment-template.php

function get_comment_class( $class = ”, $comment_id = null, $post_id = null ) {
  global $comment_alt, $comment_depth, $comment_thread_alt, $mdg_leveltrack, $mdg_lastdepth;
  if (!empty($comment_depth) ) $mdg_lastdepth = $comment_depth; #eric did this
  $comment = get_comment($comment_id);
  $classes = array();
  // Get the comment type (comment, trackback),
  $classes[] = ( empty( $comment->comment_type ) ) ? ‘comment’ : $comment->comment_type;
  // If the comment author has an id (registered), then print the log in name
  if ( $comment->user_id > 0 && $user = get_userdata($comment->user_id) ) {
    // For all registered users, ‘byuser’
    $classes[] = ‘byuser’;
    $classes[] = ‘comment-author-’ . sanitize_html_class($user->user_nicename, $comment->user_id);
    // For comment authors who are the author of the post
    if ( $post = get_post($post_id) ) {
      if ( $comment->user_id === $post->post_author ) $classes[] = ‘bypostauthor’;
    }
  }
  if ( empty($comment_alt) ) $comment_alt = 0;
  if ( empty($comment_depth) ) $comment_depth = 1;
  if ( empty($comment_thread_alt) ) $comment_thread_alt = 0;
  #Eric’s code starts
  if ( empty($mdg_leveltrack) ) $mdg_leveltrack= array(1=>0, 0,0,0,0,0,0,0,0,0);
  if ( empty($mdg_lastdepth) ) $mdg_lastdepth = 0;
  if ($mdg_lastdepth < $comment_depth) $mdg_leveltrack[$comment_depth] = 0;
  $mdg_leveltrack[$comment_depth] ++;
  if ($mdg_leveltrack[$comment_depth] % 2) {
    $classes[] = ‘odd’;
    $classes[] = ‘alt’;
  } else {
    $class[] = ‘even’;
  }
  /* end eric’s code, but then he commented out this bit here
  if ( $comment_alt % 2 ) {
    $classes[] = ‘odd’;
    $classes[] = ‘alt’;
  } else {
    $classes[] = ‘even’;
  }*/
  $comment_alt++;
  // Alt for top-level comments
  if ( 1 == $comment_depth ) {
    if ( $comment_thread_alt % 2 ) {
      $classes[] = ‘thread-odd’;
      $classes[] = ‘thread-alt’;
    } else {
      $classes[] = ‘thread-even’;
    }
    $comment_thread_alt++;
  }
  $classes[] = “depth-$comment_depth”;
  if ( !empty($class) ) {
    if ( !is_array( $class ) ) $class = preg_split(‘#\s+#’, $class);
    $classes = array_merge($classes, $class);
  }
  $classes = array_map(‘esc_attr’, $classes);
  return apply_filters(‘comment_class’, $classes, $class, $comment_id, $post_id);
}

The Monkey Duck Cometh

It’s not done, but it almost is. And I needed a real world scenario to finish up the styles anyway — the dummy data sets I’ve found simply didn’t do enough.

But here is is. Monkey Duck Genius. When it’s finished (hopefully, in the next day or so) I’ll be putting it on WP.org for anyone who is interested. In the mean time, I’d love feed back about specific things you’ve noticed need fixing.

Socially Awkward Penguin Sharted on my Web Site

Let's Talk...

One of the things my team does at work is maintain and develop a set of five distinct but related web sites. They have different content and styles, but they have related material and the same layout and code structure.

One of the design elements that is the same across all the sites is that they have a row of buttons that link to each of the other sites. These buttons are graphics that consist of the name of the target site.

The particular implementation of this design element looks as graphically attractive as fornicating porcupines. I mean, they go well as a set, but no one needs to see that.

Specifically, they look (literally) like someone wrote the name down in marker, and before it was dry wiped it with his thumb. It’s horrendous — and they were created by the individual I have referred to in the past as my nemesis. She’s been gone nearly a year and I’m still trying to fix all the damage she did.

At any rate, until recently only four of the five sites were inter-related this way. The fifth one, which we were already responsible for, was a little more independent. But now it’s integrating with the other five. This means that before we had 3 buttons on each of four sites (no site links to itself, dur). But now we need to implement a fourth button on each site, and put four buttons on the newly integrating site.

That means creating a new graphic.

The new site has a very similar name to one of the previous four, so the name we were using is being tossed, and we’re using an abbreviation for both these sites.

So that means making another new graphic. Two in total, which is 20% of all the graphics we used.

My nemesis, naturally, did not bother to save a source file which could be easily edited to make changes or add a new button. This usually is something that would justify my low estimation of her competence, but this time around I was grateful. With no record of what font was used and a pretty small set of letters to work it out with, coupled with my inability to recreate the horrible appearance of the old ones, altogether meant that I had to redo all five graphics. Or, more to the point, that I not only had no choice, but that I could make graphics I could live with.

Another objective in remaking the graphics came in at this point. The lengths of the names being used varied from 3 to 10 letters. With the previous name set, the variation was from 6 to 10. So the previous buttons were all different widths, but not too big a difference. Doing that again was going to make some huge appearance differences.

So I made all five. Very simple, all based off a very easily editable Illustrator file. Took me ten minutes. They all match, they were all the same width, they all look good, and they all blended with their background better.

When I first put them out on a test site, it didn’t look good. It was like one of the porcupines was still there, but now he was shtoinking a jellyfish. There didn’t seem to be a reason for the apparent spacing variations. I could just crop them to the name length, that made it look like the jellyfish was really kinky, had convinced the porcupine to become a swinger, and invited an ostrich to the festivities.

So I put a simple one pixel border around each button. Voila. Now they look like five different objects all the same width, evenly space. It was beautiful (in relative terms, of course). I was complimented on how good it looked.

Documentation for the sites is handled by a different group, and around this time they asked for a copy of one of the graphics so that they could put it in the documentation. No problem. I sent it over.

1980s Troll Doll

REMEMBER ME?!

A few hours later, the troll wrote back.

I call him a troll because, honestly, it’s he reminds me of one of those dolls from the 80s.

He’s short, round, and I’m quite certain that if I stuck him on a pencil and spun him his hair would make a weird mess. Normally this just amuses me. This time, it was irritating. Not the hair, just the trollness.

And trollness he projected at me.

He started complaining about how the changes hadn’t been approved, and we’d have to send it through the stake holders. And how he’s “uncomfortable” changing the “look and feel” of the sites and that we’d have to fill out a change request form which at this time “we don’t have time to do.”

All of this seemed intended to bug me. Socially Awkward Penguin Evacuates

I thought, maybe this guys just being lazy.

But over the course of 10 paragraphs in 3 emails I was certain he wasn’t being lazy. He was putting far too much work into getting out of this.

I came to a conclusion: he was scared to do this. It was change. And he feared change. Because he wasn’t given explicit written instructions to do something, he couldn’t do it.

I guess he kind of had a point to a certain amount. I mean yeah, we don’t make changes just because we feel like it. Even if they’re necessary. But on the other hand, I was already making changes that were not just asked for by the stakeholders, but were REQUIRED. I certainly couldn’t leave things as they were. They had to change.

As for filling out the a Change Request form…. Really? You’re one of those people? One of the people who thinks it’s a good idea to create more paperwork? What the heck is wrong with you? That’s so foreign to my way of thinking that I can barely comprehend it.

Business Cat Tells You What He Really Thinks

Plus, I know what happens to paperwork around here. We literally changed the name of a document once to submit it as the necessary paperwork for a different project than the doc was created for. No one ever said anything. Paperwork around here is a gatekeeper. It’s not to accomplish anything usefully administrative. It’s to keep the faint of heart from ever asking for anything to be done at all.

And after all, adding the borders (or taking them away) was all of 3 minutes of work. If my computer was experiencing some sort of lag.

So we argued with the troll for a while. It was finally conceded that the borders had to go, and the troll finally gave a parting shot that “he had to explain this to the stakeholders.” At which point one wonders (or at least, I wonder) why the border couldn’t simply be part of that, since it was good for the design and all.

So in the end, we no longer have porcupines fornicating on these web sides. But it sure does look like some waterfowl defecated on it.

Philosoraptor Questions Your Ethics

The answer, philosoraptor, is NO.

Deep Blue: A Diceless RPG v0.7

Deep Blue is a story-oriented, diceless roleplaying system. The players and the referee work out a story together, with new elements brought in all the time.

One of the big issues with a roleplaying game is coming up with the character concept. With Deep Blue, conceptualizing a character is simple. If you are well and truly stuck, you can simply use yourself as a model.

A character in Deep Blue starts out as a simple, normal person. Going to school, driving a taxi, shuffling kids to activities, working in the office, or what have you.

Sounds dull, doesn’t it.

Don’t worry, this isn’t Essays and Economics. In Deep Blue, each character has powers that he is unaware of. These powers manifest within the game whenever a key point in the plot would make it dramatic.

Every character has a pool of Character Points (CPs) that can be used to manifest these powers, either to discover a new power or use one he has recently discovered. Naturally, discovering a new power costs more points than using one established already.

How many CPs a character starts with depends on the setting. A generic Earth setting (like our own, but with latent powers) typically uses characters that start with 10 CPs. A game with typical superpowers will probably start with 2-4 times that number. In fantasy, a wizard will start with 20 points or so.

TRAITS
There are four trait-pairs that governpowers: Focus-Spontaneity, Hubris-Humility, Creativity-Traditional, and Boldness-Restraint. Your score in these traits determine how well you can use your powers and how strong they are. Together, trait-pairs will total 10; in other words, if you have a 3 in Focus, your Spontaneity will automatically be 7. When one trait in a pair is lowered, for whatever reason, the opposite trait is raised, and vice-versa.

It should be noted early on that a low score in any of these traits is not a “bad thing.” A character with a low score in Creativity, for example, is not stupid. He is simply systematic in his approach to problems. He is better at logic than intuition. A low Boldness score does not indicate fearfulness, but careful planning. Such a character would “play it safe” when it comes to dangerous situations.

Each Trait has a score between 0 to 10. A score of 5 is unremarkable for either the trait or its opposite. A score of 0 or 10 probably indicates some sort of compulsive behavior the character has. A character with a Focus of 0, for example, would be incapable of completing all but the most basic and simple of activities before he loses interest and moves on to a new project).

Focus-Spontaneity: Focus describes your dedication to completing a task. The higher a Focus score is, the less likely a character is to be able to interrupt something he is working on. However, Focus also measures dedication to a plan or an idea. Characters with high Focus scores are dogmatic and are difficult to sway. Characters with high Spontaneity, on the other hand, are willing to try new experiences. A high Spontaneity score indicates a high level of impulsiveness and an acceptance of change, while a high Focus score resists change.

Hubris-Humility: Hubris is essentially pride. An unusually high Hubris score usually indicates such self confidence as to exclude any reliance on others. However, an exceptionally high Humility score means the character does not admit himself capable of anything. Low Hubris, taken moderately, indicates Humility. Characters with high Hubris prefer to grandstand and be in the limelight. Characters with high Humility prefer to be behind the scenes and not receive any attention.

Creativity-Traditional: Creativity measures a character’s ability to come up with original applications, solutions, or constructions. A high Creativity score is representative of a character that chafes without new ideas. He revels in thinking “outside the box.” A high Traditional score prefers to make use of resources that already exist, and tried and true methods of execution.

Boldness-Restraint: High Boldness scores indicate characters that jump into problems regardless of the risk involved. Gamblers have high Boldness, for despite the possibility of loss, they are willing to try for a large gain. High Restraint characters are not necessarily cowardly. They are merely conservative. They will evaluate, at length, all the factors to try and predict the outcome.

Assigning Traits
During character creation the player assigns traits as he desires, keeping in mind the combined total of 10 for each trait-pair. The referee may also assign a maximum score for initial scores in traits based on the setting and style of campaign he wishes to run. A score of 7 in a given trait is a good maximum for “real world” campaign.

POWERS

Like, traits, Powers are rated with a minimum of 0 and maximum of 10. They are controlled by a related trait.

I have no intention of making an exhaustive list of powers. The nature of Deep Blue is to make up powers as you go. When your character is in a tight situation, and there seems to be no way out, spend some CPs and manifest a new power. The more creative the power, the better. Of course, the more generally useful and powerful, the more CPs it will cost. A great deal of this is using best judgment. While the referee will have the final say in the matter, all the players should be involved in the discussion about how the power works and what the cost should be.

Below I have provided below two example powers (based on superheroes we know and love) to demonstrate the relative costs a power should have.

Power Example: Flight (min Hubris 4)

4 Extended jumps (over tall buildings, for example)
5 Clumsy flight (think The Greatest American Hero)
6 Traditional superhero flight
7 Perfect or superspeed flight
8 Perfect superspeed flight

Power Example: Self Multiplication (min Spontaneity 4)
4 Create a temporary mirror image of yourself
5 Create multiple illusions of yourself
6 Project an image of yourself that you don’t need to concentrate on to maintain
7 Project an image of yourself that can work by itself, but can’t physically interact
8 A single “double” of yourself
9 Multiple “clones”
10 A permanent separate being springs into existence

Use of powers
When you want to use a power you have already used in the past, you must think about exactly what you want to do with it. The more complicated or extreme the application of the power, the harder it will be to use. Once you have declared that you will use the power, you are committed to it, whatever the consequences.

Together, the group decides what trait the power requires for use and the minimum required score in that trait. You must have that number or greater in the trait to use it. If this is the case, you have succeeded and you are able to dictate how it works. Be descriptive, and explain what happens. The referee will, of course, moderate, but you have a lot of latitude in your description.

Failure: if your trait score is less than the minimum score needed, something has gone wrong. If this is the case, you have lost control. The referee describes what happens as the result of your attempt. It is possible you will still achieve the ultimate result you wanted, with perhaps something unpleasant happening as well. However, if you have missed the target by large number, then there will be drastic consequences — possibly injury or even death. The player group may choose to point out that the referee has taken too much liberty for the degree of failure, but again, the referee is the final arbiter.

Example 1: Cornered by a strange monster that has chased him and his friend to the edge of a cliff, Stephen decides to manifest the power of flight. He actually only needs to jump — across the cliff or down to the ground below, but he wants to take his friend with him. Normally an inhuman jump such as this would require a minimum Hubris of 4, but they agree that since he will be carrying someone, it will be a bit more difficult, and that it will be a minimum Hubris of 5. Since Stephen has a Hubris of 6, this is not a problem, and he escapes the beast. Stephen’s player announces that he grabs his companion and leaps to safety on the other side of the chasm.

Example 2: Tasha is fighting a gang of teenagers who are trying to take her purse. She hopes to be able to confuse them, or possibly fight them off by creating a double of herself. She decides that she won’t need to actually fight them with the doubles, so she creates 3 illusions “selves;” since she won’t be able to concentrate, she needs them to be able to work independently. Together the group decides this will require a minimum Spontaneity of 8. Tasha’s Spontenaeity score is 4, and she fails to manifest the doubles. The referee then describes what happens. Because she failed by four, he rules that she has become distracted by her own attempt, allowing one of the gang members to grab her and pin her arms behind her.

Manifesting a New Power: In the normal course of events, you do not have powers. However, in the game of Deep Blue, new and strange things can happen. Manifesting a new power (one that you have never used before), costs CPs. When you first manifest a power, your group should decide what the minimum trait needed for that use of the power. Multiply this number by 2 to find the cost for manifesting the power in CPs.

If you have the CPs available to purchase the power, you have done so. However, you can still fail to use it correctly (as seen in Use of Powers above). If you do not have the CPs, nothing happens, and you have wasted some in-game time (as appropriate for the situation). Note that if the CPs are available, you must purchase the power, even if you will fail in your attempt. Once you have announced that you will manifest or use a power, you are committed to the attempt.

Example 3: Lillian is an elf wizard trying to foil an attack by a rival sorcerer. Before he arrives, she creates a temporary clone of herself to distract him while she sneaks up from behind. She has never used the duplication power before, and the group decides that this will require a minimum Spontaneity of 8. Thus the cost of manifesting the power in CPs will be 16. (8 x 2 = 16). Whether the attempt will succeed will depend on what her Focus score is.

Example 4: Electroman decides that to capture the villain who is escaping he will need to fly. He is not worried about grace however, as long as he can get close. This will require a minimum Hubris of 5, meaning that manifesting the power will cost 10 CPs. (5 x 2 = 10).

As you can see, it is easier to manifest a power at its weakest stage first, but since most powers manifest at the mercy of circumstance, this is not always possible.

When a new power can manifest: The obvious way to get around the expense of manifesting a new power is to do something small and insignificant with the power when you use it for the first time. However, this is not always possible. Powers only manifest during times of great stress — combat, danger, and so forth. The story being told at the time will reveal these times of stress. Compelling player reasoning is encouraged, but the referee has the final say regarding whether the circumstances warrant a new power. During these times it’s true that you could still use a “low end” manifestation of the power to get a reduced point cost, but this will have narrative consequences as well: if the player does not manifest a power significant enough to overcome the problem he faces, then he has wasted in-game time and the problem may overcome him.

SKILLS AND TASKS

In any roleplaying game, there are things you want to get done. Sometimes these tasks are routine: buying a commonly available piece of equipment, for example, or driving a car to a new location. Unless there are unusual or extenuating circumstances, these tasks should simply be done. However, what if that piece of equipment is illegal and only available on the black market? Or what if you’re being chased in your car by a motorcycle gang? Suddenly things are a little more difficult.

I am a strong believer in the precedence of story and fun over mechanics. However, simply allowing the referee to decide whether a difficult task is possible will often seem unfair to players, and (let’s face it) people, even referees, are imperfect and occasionally will act capriciously.

At character creation a character gets 3 Accomplishments and 5 Skills assigned. These numbers may be altered by the referee if the character is older or the setting justifies it.

Skills

Just as with powers, we have no intention of creating an exhaustive list of skills. Players and referees should exercise judgment when deciding whether to allow a skill and what it relates too. Skills are things your character has some training and/or experience at. They should not including routine skills like driving a car (though stunt driving would be appropriate) or writing (though contest winning writing talent would be). Example skills include fencing, firearms, computer programming, research, diving, or trivia.

Accomplishments

An Accomplishment is just what it sounds like. Something your character is achieved in his life. Accomplishments are things like gaining a Bachelor’s degree, competing professionally in a sport, or serving a tour of military duty. They are more broadly applicable than Skills (you learn to do a great many things in the army, for example) and can be applied to more tasks. As this is part of your character’s history and personality, you will need to make them relevant to the character you have established.

Performing a Task

When you try to accomplish a more difficult action, a difficulty of at least 1 and usually below 5 will be assigned to it by the referee. For each point of difficulty, you need to have either a relevant Skill or Accomplishment, or pay a CP. In many cases, the referee may rule that you must have a relevant Skill or Accomplishment as part of your “payment” for the task. For example, if you want to write a virus to take down the master computer, the referee should demand that at least one of the difficulty points is compensated for by a programming skill. For difficulties of 3 or more, the character is required to have at least one relevant Skill or Accomplishment.

Example 5: Skill Difficulty “For Instances”
Difficulty 1: Programming a database (requires a relevant skill)
Difficulty 2: Hitting a small target with a firearm
Difficulty 3: Landing a plane at night
Difficulty 4: Jumping your car over the parting drawbridge
Difficulty 5: Assassinating the president and escaping

Low-stress Tasks: Some tasks can be repeated until they are complete, even if someone fails on the first try. For example, writing a program. Even if your first attempt fails, you can rewrite code until it works, assuming you know enough about the programming language. If a character has the time, and the task is appropriate, difficulty 1 tasks can be assumed to be successful eventually. Many difficulty 2 tasks can also be done this way (the example of hitting the target is one, if you have enough ammunition, you will eventually hit the target), but it would be appropriate to pay a CP for automatic (if eventual) success on a difficulty 2 task.

Unusually High-stress Tasks: Many difficult tasks, like a drawn out battle, will take their toll. An extra CP point (but not a Skill or Accomplishment) should be paid by any character in such a situation, even if the task is normally one that would be automatically successful (a karate black belt facing a long succession of simple opponents, for example). This is to simulate the physical, mental, or emotional stress of the task. Please note that a task need not be a “task,” necessarily. Enduring emotional torture may also qualify for the loss of a CP.

ADVANCEMENT

One of the great rewards of roleplaying is watching a character improve or progress. Thus, at the end of each session, the referee should award a CPs to each character. A typical award for standard play is 2 or 3 CPs. Extra Character Points should be awarded to characters who accomplished something difficult or were very original in either description, use, or choice of powers. Characters should rarely, if ever, receive more than 6 Character Points for a single session. A session, however, should be defined not as the time you’ve actually met. It should be defined by a recognizable chunk of a story. If your group breaks early because someone needs to leave, you should not call that the end of a session. The end of the session will be when the adventure, or adventure chapter, ends.

In between sessions, players may also alter their character’s Traits. By paying a number of CPs equal to the highest score in a trait-pair, that trait-pair can be adjusted by one. In other words, if a character has a Boldness 7/Restraint 3, it will cost 7 points to raise Restraint to 4 or Boldness to 8.

Skills may also be advanced between sessions. 1 CP may be spent to gain one skill. However, this can only be done if there is sufficient in-game time between sessions to have learned the Skill.

Character Points never “expire.” They can be saved indefinitely. However, once they are spent, they have been permanently used. They do not regenerate automatically.

Tabitha Reeves: SPACE GIRL! Parts I -

Part I: Awakening

Gasping. Confusion. Panic. Choking. Vertigo. Collapse.

Tabitha Reeves hit the metal grate covering the floor on her hands and knees. She vaguely felt the blood leaking through the skin on her knees as she coughed over and over. It felt like dry heaves, but a little liquid came out each time. It looked a little like blue mucus, she thought. What the hell is going on?

Then strong hands grabbed her shoulders, and flipped her over. Everything was blurry, but she made out a huge man holding her down. She was suddenly acutely aware of the fact she wore no clothing.

Panic and bile rose to her throat as the man set his knee across her legs and pinned her shoulders to the floor. Then another set of hands shoved something hard in her mouth, lodging it between her back teeth to hold her mouth open. Then some sort of tube went in and down her throat. Another object went into her nose and she felt it hit her throat as well.

A second later there was suction in her lungs and her gut, then the blue mucus started to flow through the tubes. Her body started to relax, and as it did she felt the man move off of her. She tried to sit up but found that didn’t work so well, and she felt another bruise form on her elbow. So she laid there, waiting for her strength, sight, or breath to return.

As Tabitha waited she was given a towel by one of the people with her. She wiped her face, noting finally that her body was covered with a thing layer of something very like the slime being withdrawn from her body. As she toweled off and her mind relaxed she was able to remember how she’d gotten here.

She’d been in stasis – that explained the slime, it provided her body with oxygen and nutrients and even simulated the benefits of exercise for her muscles and bones while holding her aging at bay. The ship she was on was bound for Chigon IV. Even at faster-than-light speeds propelled by the dark matter drive it was a trip that would take decades.

She hadn’t imagined waking up was that unpleasant. She’d read the documents they’d given her. Disorientation and minor sickness was all she remembered. But she thought they used beds and restraints to avoid some of the trauma.

She finished toweling off and she was handed another towel — no, a blanket. She wrapped it around her body and looked up and around to try to get some bearings, but everything was still blurry.

The big man grabbed her arm and she felt a sharp pinch. She tried to pull away but he held her fast while injecting her with… something.

She was distracted as suddenly she started coughing again. The last of the blue fluid had left her body, which she could tell because the tubes were clear now. She couldn’t get her body to breathe on its own, though.

The second figure came to her rescue and quickly pulled the tubes from her face, then slapped her back till she had one final, wet cough and drew her first, ragged breath.

“Thanks. I…” she couldn’t hear herself. She felt panic rise for the third time when the figure who had just helped her made calming gestures. A hand held forward, fingers slightly splayed, telling her to wait a moment.

As she stared, she started to make out more details. The second figure was a woman. Above average but not too tall. Jet black hair, dusky skin and blue eyes, indicated a mixed genetic heritage. She wore a tight uniform of gray-blue, identifying her as crew on the ship. She sat on the floor, holding the used towel and smiled kindly at Tabitha, showing white teeth.

The big figure was indeed a man. Genetically designed, it appeared. He had the purple eyes that indicated such. Which explained his size: he was squatting but Tabitha could tell he was at least seven feet tall, and at least half that shoulder to shoulder. Every bit of his body was muscled, and she could tell because he wore a uniform similar to the woman’s. It didn’t hide much on either of them.

Tabitha drew the blanket tighter around her, suddenly embarrassed at her nakedness.

The man said something, but Tabitha still couldn’t hear. The woman responded, and it went back and forth for a few moments.

After a few moments Tabitha was able to make out the names sewn on the left breast of her companions’ uniforms. The woman’s read “Genzi.” The man was “Schwartz.” Last names, clearly.

“… long will it take.”

Tabitha jumped as her hearing suddenly returned.

Genzi laughed softly. “Apparently that long. Can you hear me, honey?”

Tabitha nodded.

Schwartz grunted. “Finally. We don’t have time.”

“Come on, we need you.” Genzi held out a hand.

She was still confused, but she took the proferred hand and rose to her feet, stumbling slightly.

Genzi led her through a door, and Schwartz followed them.

“Get dressed,” Schwartz growled. He held out a uniform similar to the ones they wore.

Tabitha took it gingerly but hesitated.

Genzi spoke up again. “Schwa, dear. Give her a moment of privacy.” Schwartz grunted again but stepped back through the door and slid it closed. “You want me to leave too, honey?”

Tabitha wasn’t sure, but she needed answers, so she shook her head and started to dress. She noted that the name on the uniform said “Kronopolos.” It wasn’t made for her. She hoped it would still fit. “What’s going on?” she asked. “I wasn’t supposed to be revived until we got to Chigon.”

Genzi grimaced. “I’m afraid you’re not going to like the answer.”

Part II: Escape!

For some reason, that didn’t surprise Tabitha. She hadn’t liked being woken up at all. Why should not liking the reason for it be a shock? Tabitha didn’t respond, she just waited for Genzi to continue. Which she did a moment later.

“The ship’s been hailed by another vessel.”

“What?” Tabitha paused, her arm half in one of the sleeves. “What are the chances that two ships can get close enough to hail out here?” The space between Chigon and anywhere civilized was vast, even by astronomic measures.

“Impossible. Or near enough to not matter any. Unless they had a means of tracking the ship. It wouldn’t be that hard to install something if they got to the ship before it departed.”

“But, why would they?”She finished sliding her arm in.

“If they wanted something from the ship and found it difficult to acquire while in port, they could reach it in space, where security would be easier.”

“So these guys are crooks? Ok, fine. But why are you waking me up?”

Genzi gave a humorless grin. “Honey, you’re what they want.”

“Me? That doesn’t make sense. My family isn’t rich. They can’t get a ransom.” Tabitha finished dressing and the break along the front sealed seamlessly as she ran her finger along it. Whoever this Ms. Kronopolos was, she has small feet and a small rear end, but a much larger bust. It was almost too tight to walk in the legs but quite roomy up top.

Genzi shrugged. “You’re Tabitha, right?” Tabitha nodded. “You’re who they asked for. We’ve woken you because they’re going to board. We don’t have defenses strong enough to repel them. On board security teams should probably be able to stop them, though. We just don’t want to risk they’ll make it this far and get you.”

Genzi was right, Tabitha didn’t like the answer. She swallowed, her throat dry. “Ok.”

“Ready, honey? Ok, let’s go.” She slid the door open and greeted Schwartz.

Schwartz nodded and started walking.

The room was full of passengers in stasis. Rows and rows of tanks, all of them filled with blue, viscous fluid in which a human body floated motionlessly. It was eerie to see them all in so much silence. There had been a lot more movement and noise when she’d entered the tank before departure.

Schwartz didn’t pause, moving forward with the ease and directness of someone who was familiar with such sights and had something else to get too. Tabitha was behind him, Genzi bringing up the rear.

They exited through a door on the far side of the room and passed through close, dark corridors, turning every now and then. The walls curved away from the floor and then back together to the ceiling, making the halls resemble tubes. Tabitha was unable to keep track of the path they took.

Before long, the distant sounds of fighting could be heard. Shots, crashes, small explosions. Though it was cold, Tabitha felt perspiration forming on her body. The uniform quickly swept it away, but she was still aware of it.

They encountered a small pack of men. They weren’t dressed in uniforms, but they carried firearms of various models and styles. One of them grinned. “How much you bet this is her?” he cackled.

Tabitha’s eyes went wide, but Schwartz didn’t hesitate. He ran forward, yelling incoherently at ear-damaging volume. The invaders fired but that didn’t stop Schwartz as he waded into the middle of the crowd, throwing enemies to the side. He was probably wearing something to block the attacks, but that he didn’t even break stride was impressive.

“Come on, honey,” Genzi said, pulling Tabitha down a side passage. Tabitha followed, not willing to wait and see how the fight ended. Genzi held her wrist and pulled her along. They were moving than Tabitha believed she could run. Soon Tabitha was breathing hard, but Genzi kept going.

A man blocked their passage. His purple eyes showed he was genetically designed, but he was nothing like Schwartz. He was smaller, narrower, wiry. He had corded muscles on his arms and legs that made them look like braided steel cables. And his arms were long, like an ape. He raised his arm and his arm grew at least five feet.

Genzi dropped low and grasped the man’s wrist. His arm shrunk back to its previous size, even as his other arm stretched out again, grabbing lower to keep Genzi from ducking again.

This time Genzi dodged to the side and ran up the round wall before pushing off and launching herself at the man. A knife appeared in her hand and she stabbed the man’s neck. Blood sprayed everywhere.

“Let’s go,” Genzi said, waving to Tabitha.

Tabitha stood for a second, taking in what happened. “How did you do that?”

“Honey,” Genzi hissed. “We don’t have time. There’ll be more.”

Tabitha finally found motivation to move and stepped to Genzi. The dark-skinned woman took Tabitha’s wrist and started running again. She hid the knife back on her sleeve as they moved.

The sounds of fighting grew louder and closer. Genzi stopped to check a computer panel, bringing up a display that looked like ship floor plans. Red and blue dots blinked all over it.

“Cark!” Genzi spat. “They’re everywhere. We can’t get to the secure hold.”

“What do we do? Surrender?” Tabitha tried to keep the fear from her voice, but the rising pitch almost certainly gave it away.

“If you want to be a pirate’s slave, be my guest, honey.” When Tabitha didn’t answer Genzi continued. “We could take an escape pod, but at this point the pirates are just as likely to win as the crew. ” She stared at the screen for a few more moments. “We could walk.”

“Walk? We’ve been running…” Tabitha realized suddenly what Genzi meant. “You mean… outside?” Genzi nodded. “But I’m not rated for… I’ve never even done it before! What if I float off?”

“Honey, we can stick to the outside of the ship. The bad guys are either driven off or leave when they can’t find you. Afterward, we go back in and you’re safe. We’ll tether together so you can’t get lost. I don’t see another option.”

Part III: Clinging to the Surface

No other option? Tabitha could think of a few. Fighting their way through was one. Genzi was more than competent, it would appear, having taken out that Gen-D without breaking a sweat. They could take the escape pod, which was much less terrifying than the prospect of a space walk. But Genzi was right. With the outcome of the battle up in the air, who knew who would pick the pod up? If either one did at all. Both ships could be disabled and then where would she be?

Tabitha closed her eyes. “Alright. We’ll walk,” she heard herself say. She shivered as she did so. She opened her eyes to see the humorless grin on Genzi’s face.

“Let’s do it then.” She took Tabitha around a corner to an airlock. A variety of space suits hung in the hallway by the iris portal.

They both began to dress, Genzi in a navy blue suit, Tabitha in a pink one. When she had her feet and arms in, Tabitha couldn’t figure out how to seal the suit. She touched the zipline but it didn’t respond.

“They don’t work that way. They’re designed not to respond to touch – that makes it too easy to open the suit in space.” Genzi set the helmet – a transparent bubble that looked a little like a slightly flattened fishbowl – on Tabitha’s head and pointed at a screen by the hanging suits. “Everything in the suit is controlled by eye movements. The seal command is pretty complex because, well, you don’t want to accidentally open up your suit out there. Just follow the dot with your eyes.” She pressed a button and a blinking purple dot appeared on the screen. For several seconds it moved in circular patterns that crossed over each other and then turned into back and forth and up and down. Tabitha could see why they had the screen help, because she couldn’t imagine ever memorizing the pattern.

When the dot disappeared, she heard the soft thumb and tearing sound of the suit sealing. The inside surface of the helmet was suddenly covered with a variety of lights in complex data displays. Charts, read outs, lists, arrows – she couldn’t make sense out of any of it. She stumbled backward, then held as still as she could, trying to overcome the vertigo caused by the display superimposed over the real world.

Inside her suit, she heard Genzi laugh. “You can’t see, can you?”

Tabitha shook her head.

“Using the HUD is at least half of the rating program for using one of these. Move your eyes right-left-right-left.”

Tabitha relaxed as the display disappeared, replaced by the solidity of the real walls.

“You can talk, you know,” Tabitha told her. “The comm is voice activated and defaults to broadcasting to local suits.”

“Ok,” Tabitha said quietly.

Genzi held the end of an orange cable. “The tether,” she explained. “Turn around.” When she did Genzi pushed the cable against the back of Tabitha’s suit. “Move your eyes in a clock wise circle three times.” The cable sealed itself to Tabitha’s suit. More accurately, the suit sealed itself to the cable, Tabitha thought.

Genzi held out the other end of the cable. It was about 20 feet long. “Push it against the square on my back.”

When they were both connected to the tether, Genzi started pushing buttons by the screen again, but seemed to ignore the button for opening the lock.

“I’m hacking the registry so there’s no record we went out this way,” she explained. We don’t want them to know where to look for us.”

As Genzi worked, Tabitha became aware of how silent it had become. While dressing, they had heard the sounds of the ship operating and the fighting going on. But inside the suit the silence was absolute. Tabitha couldn’t remember anything being this quiet.

At last Genzi finished and opened the iris door to the airlock. “Let’s go, honey.”

Tabitha stepped in, and the iris closed behind her. It was dark inside the lock.

“Why isn’t the other door opening?” she asked, her voice shaking a little.

“They’re pumping the air out. Interstellar travel teaches you not to waste. They don’t want to lose the oxygen that was in here.”

Tabitha nodded, forgetting that Tabitha couldn’t see her.

A moment later the external iris spread open. Genzi stepped out onto the surface of the ship. Tabitha followed awkwardly, unused to the strong attraction between the boots and the ship, but grateful for it so she didn’t fly off into space.

“We’re not sharing air,” Genzi said with a chuckle. “So feel free to fart, it won’t bother me.”
Tabitha had an image of what a spacewalk would be like. There would be long dark shadows along the ship from its irregular features, with a bright, blinding glare from the nearest sun. This was nothing like that. For one thing, the surface of the ship was smooth, a fact she should have remembered, since she had seen it before. It was smooth to minimize the damage and chance of accidental collision with space debris. Very little of space was completely empty.

For another thing, it was dark, nearly pitch. There was no nearby sun. They were far in between stars. There were a very few lights that indicated where view ports were, but none of it illuminated onto the surface of the ship. The only light in their area were the arm-mounted lights on Genzi’s suit.

They took a few strides and then stopped. Genzi turned off her lights. “Shutting off anything that will help them find us,” she explained. “Now we wait.”

It was queer not to feel a sense of down. There was a pull at Tabitha’s legs where her boots attached to the ship’s surface, but she could her body trying to drift away from it. Her inner ear had no idea which way to orient her. It made her more than a little nauseous and she worried about throwing up inside the helmet. She tried to distract herself by looking around.

Tabitha had never imagined herself afraid of the dark before. But she had never been in darkness so absolute. There were stars in view, but far fewer than she had imagined. Mostly what she saw was black. Black nothing. Emptiness. Void. She had never felt so isolated. There was a woman tied to her, she knew, but unless Genzi spoke, Tabitha couldn’t hear her. And she couldn’t see her. She peered into the void and it didn’t peer back. Nothing did, because there was nothing there.

She could feel her heart rate start to increase. Perspiration dripped down her temple. She began looking all round her, back and forth, hoping to see something, anything. Somewhere in her head she could tell she was panicking, but she couldn’t stop herself. The HUD in her helmet started to flash on and off intermittently as her eyes moved frantically. She crouched down into a fetal position. Her boots released from the ship and she started to float away. She felt the tug as her inertia was stopped by the tether to Genzi.

“Honey?” she heard over the radio. Tabitha couldn’t respond.

“Honey,” Genzi said again. “Honey! Listen to me.”

An incoherent whimper was all Tabitha could manage.

“Honey, close your eyes. Close them tight. I’m going to help you, but you have to be able to do what I say.”

Tabitha nodded.

“Honey, I need you to answer.”

“Y… yes…” Tabitha managed.

“You got your eyes closed?”

“Yes.”

“Ok, sit like that for a moment. Imagine you’re in your bunk, tucked up. You got a mom?”

“N… no. Dad raised me… She… d…”

Genzi interrupted. “Ok, your dad. He’s with you, sitting next to you on your bed. He’s got his hand on your hand, he’s keeping you safe.”

Tabitha pictured it, trying to keep it in her mind.

“Ok, hold your breath. Control it. In slowly. Out slowly.”

“Yeah,” Tabitha said, letting her breathing slow. The tugging on the tether stopped and she felt Genzi grab her.

“Ok, honey. Stretch your legs out, let them re-attach to the ship.”

She felt the movement stop, but was glad Genzi didn’t release her. “Ok, eyes still closed?”

Tabitha nodded again, then remembered that Genzi couldn’t see it. “Yes,” she said.

“OK, open your eyes slowly, tell me if the display is on.”

Tabitha opened her eyes, quickly shutting them again. “No, it’s not there.”

“Ok, this is going to be hard. But I want you open your eyes again. Then turn on the display. Right-left-right-left.”

It took her three tries, but at last she managed to control her eyes enough to get it to come on.
She took a strange relief in the appearance of the colored display. It has disoriented her in the ship, but now it was a comfort just to see anything.

“You doing ok now, honey?”

“Tabitha let out a long breath. Yeah, I think I’m alright. Thanks, uh… Ms. Genzi.”

Genzi laughed. “I guess I never introduced myself. I’m Neva. I guess you got my last name. The muscle’s name is Percy, but for obvious reasons we just call him Schwartz. I’m sorry about this. I had no idea you’d be a kenophobe.”

“A what?”

“Kenophobe. Someone frightened of, well, space. It’s not the stuff in space, it’s the nothing in space. It’s not uncommon, I just… wasn’t thinking.”

“It’s ok, I didn’t know either. All of this… is so weird to me.”

“Heh, honey, you ain’t seen nothing. This is a big galaxy, and there’s some bizarre things in it.

“Look, I need to work on something, but we want to keep your mind from wandering off. There’s a help manual in the HUD. Down-up-down-left. That’ll give you something to read. Sorry it’s not more entertaining.”

“What? No romance novels?”

Genzi laughed. “Sorry honey.”

Part IV: Purple Haze

Tabitha read for a long time. It was impossible to tell how long – though the HUD had a clock synced with the ship, she didn’t take note of the time when she started and didn’t know how to access the HUD’s logs. After a while, though, her eyes began to swim and dry out. Her brain had dried out long before, but she kept reading, even though she didn’t understand most of it, because she didn’t want to succumb to her kenophobia again.

She wanted to rub her eyes, and even reached up to do so, and felt sheepish when her gloved hands bumped into the bubble over her head. She laughed nervously.

“Incoming,” Neva said over the suit communicators.

Tabitha looked around but all she could see was the wall of text that covered the inside of her helmet. She bit her tongue before she could cry out in irrational panic. She flipped her eyes from side to side to deactivate the HUD and tried to see what Neva was talking about.

It didn’t take her long to find it. A wide shadow was blocking out stars and shining lights onto the surface of the ship in a search pattern. The black spot grew larger till the reflection of the light it emitted finally gave Tabitha a sense of its shape. It was broad, and seemed to be flat in comparison. It was a diamond shape, with one of the longer sides in the lead, the extended points out to each side. The back end of it had a long triangular tail. As it was nearly on top of them, Tabitha realized the size was sort of an optical illusion. Compared to her it was big, but it was probably only a couple hundred feet from one wing-tip to the other. It was clearly not large enough for interstellar travel, and probably belonged to one of the two ships in conflict.

That was confirmed a moment later when the light shone directly on them with blinding brilliance. The ship stopped moving and narrowcasted to their helmets. “This Sergeant Blod of the Inverness, attached to the cruiser Passagarde. Maintain position. We will pick you up.” The connection snapped off just as quickly. Tabitha relaxed. It was from the good guys and not the pirates.

All the same, she heard Neva curse over the suit comms.

Tabitha held up her hand to block some of the light, but she still couldn’t sense anything. A few moments later a smaller pod landed on the ship’s surface just a few feet away. She could feel the vibrations through her legs and feet.

A square door in the pod opened and two Gen-D’s stepped out. Tabitha thought one might be Schwartz for a moment, but they were too short to be him. Their guns were massive things. Nearly the same size as their body. Impractical for most to use outside of a zero-g environment, but with a Gen-D, it might be what they used all the time. The soldiers motioned for the women to enter the pod with them.

After they did so, the door shut. Tabitha thought it was completely dark at first, and she felt some bile rise in her throat till she realized there was a light dome on the ceiling, and it was just the comparison to the search lights that made it so dark. No one opened their suits, and there was no gravity in the pod. But she felt it move, the ship above, the Inverness, Tabitha supposed, reeling them in at what felt like a rapid pace. A moment later, the door opened again and she had a view of a large area. The pod was in the center of a large room with brown floors, and a huge arching dome over head. Around the edge of the circular room servicemen sat at computers. A man sat in a chair nearby, turned to face them. He must be the commander of the vessel. He lounged comfortably, slouching. His splayed fingers steepled as he regarded them without expression.

The Gen-D that had picked them up removed their helmets, and one held a datapad in front of Tabitha’s face. A dot moved in strange patterns across it. It took her a moment to realize it was the code to unlock her suit. She pushed the “restart” button at the bottom of the pad than dutifully followed the dot. When it finished, she was rewarded with a soft hiss as the seals on the suit released. One of the Gen-D took her helmet before she could even move. She looked over and saw that Neva was being treated the same way. They left the space suits on them.

“I see,” the seated man said finally, looking at Neva. His face twitched once, ever so briefly showing anger or hate or something similar before he restored his stoic appearance. “Contain her,” he said, pointing at Neva. “Don’t let her speak.”

“But, she helped me!” Tabitha said in confusion. Neva didn’t say anything.

“Indeed.” He waved to the Gen-D soldiers and they dragged Neva away.

“What’s going on?” Tabitha asked.

The officer finally stood. He wore a uniform identical to the ones she’d seen on Schwartz and Neva when they’d revived her, except the name and he had decorations on the shoulder. Tabitha assumed the indicated rank or medals. “I’m sorry I can’t be more helpful,” he said. “I’m Commander Tarsak. And as a commander I’m not cleared to explain much. You’ve already seen that pirates have boarded the Passagarde in an attempt to kidnap you. Beyond that, I’m not allowed to explain. I’m sure the chief captain of the Passagarde can help you further. We’re taking you to her now.”

Tabitha tried to think of what to say. Before anything came to mind Commander Tarsak returned to his chair and rotated to face the front of the ship.

Tabitha watched out the dome as the ship propelled itself along the length of the big cruiser. As they moved toward the front she could see the pirate ship disengage and pull away from the Passagarde. It seemed to happen in slow motion as the two huge ships drifted apart silently. Compared to the Inverness, the pirate ship was huge — easily a hundred times as large. Even at that, it was only a quarter the size of the Passagarde.

Every interstellar ship in the galaxy either belonged to a giant conglomerate (which ran their fleets like military), a government (which made them a part of an actually military), or to pirates (which either ran their ships like military or barely controlled anarchy). The Passagarde, while government (and thus military) was not a combat ship, which meant it had very few weapons. So while the pirates looked gutsy, the Passagarde was actually the kind of ship they found ideal to attack.

So why were they retreating? Were they simply incompetent or under armed? Decent pirates could take the ship, or at least enough of it to demand something to get rid of them. And they had that Gen-D on their side. The one with the freakish arms. Something was weird about all that.

But Tabitha couldn’t put the pieces together. So she stared at the pirate ship starting to distance itself from the Passagarde. The Inverness was moving faster, relative to the Passagarde, so they managed to see some details on the pirate vessel before they distanced themselves. There was no name printed on the side like legitimate ships had, but there was a huge, if dirty and faded, emblem on the side. A scorpion with a devil’s face, in what was once a deep red, was painted on the vessel’s metallic hull.

It made Tabitha shiver.

A few moments later and the pirate ship was starting to gain inertia and really separate from the Passagarde. The Inverness slowed as it approached a thick tower jutting from the Passagard’s primarily smooth surface. There was a mechanical whirring and thumps, and the smallest shiver through the hull of the Inverness as it docked.

Tabitha was escorted by the same two Gen-D soldiers back to the Passagarde and through a maze of tunnels. She tried once to speak to them, noticing that the name on one of their uniforms said “Blod,” the sergeant that had hailed her earlier. But the men just grunted. Eventually they arrived at a gold-painted double door with the Earth League’s crest on it, centered over the crack where the doors met.

Sergeant Blod tapped the computer on his wrist and the doors opened. Neither soldier stepped forward but instead saluted by making a fist over their heart.

There stood the coldest looking woman Tabitha had ever seen. A pinched nose, sunken cheeks, pale, nearly translucent skin. But corded muscle evident under the skin and the same skin-tight uniform. She had shaved her head, but not recently, and stark black stubble stood out on her scalp.

That’s when things got very strange. A purple, cloudy haze drifted through Tabitha’s field of vision. “What is that?” she asked, but no one else seemed to react at all to the violet fog. Tabitha’s adrenaline spiked, and she fell back into a ready stance, not sure if she was about to be attacked and ready to flee if she was. The mist grew thicker, obscuring everything, and eventually hiding it entirely. She held up her hand and couldn’t see it until it was mere inches from her eyes.

Then shapes started to form from the purple clouds, making images, new colors. Small actions, like tiny vignettes acted out by players on a stage, but some of the players were people she knew. A vision of Schwartz firing a large gun into a crowd of silhouettes. Her own hands, covered with blood, the woman officer at her feet. Neva being carried away by a mob. The pirate ship trading weapons fire with an unfamiliar ship, swarmed about with fighter craft. Flashes of even shorter scenes she doesn’t have time to make sense of.

Then a flash and the purple haze drifted away faster than it had appeared. Tabitha stumbled in place before catching herself and rubbing her eyes. What the heck had just happened?

She looked up. The woman officer raised an eyebrow. “Are you well?”

Tabitha hesitated then nodded. She wasn’t well, she didn’t think. But she didn’t think it would help to tell this woman that.

“Good.” The officer nodded to the Gen-D soldiers. “I am Chief Captain Talia Zenzoff of the E.L.S. Passagarde. Please come with me, we have much to discuss.” She moved back through the double doors into a small antechamber. Opposite the doors was a large room with screens, computers access panels, and a small crowd of officers. An empty command chair sat perched slightly above the rest of the room.

To Tabitha’s left, between the main ingresses of the antechamber, was a single door emblazoned with the Earth League’s seal. Zenzoff led Tabitha through this door into a small but impressively appointed office. The walls were covered in a fine, burgundy, velvety material. Soft Light emanated along the tops of the walls. Hanging on the wall were pictures featuring the chief captain with various official looking people in and out of uniform, and not a few letters of commendation. In the center of the office there was a desk, which looked to be actual wood – an extreme luxury.

Zenzoff saw Tabitha’s reaction and smiled with co ld pride. “Yes, it’s a family heirloom. For four and a half centuries my family has commanded ships of the Earth League’s fleet. The desk was carved from trees found on our ancestral estate before Earth was evacuated.” She moved around the desk and sat in a high-backed chair. She indicated Tabitha should sit in one of the smaller chairs.

After a moment Zenzoff held up a datapad. “I’ve been reading your files. Trying to see what motivated the pirates to come for you.”

Tabitha caught a glimpse of the contents, wondering what information they kept on her. The heading read “Tabitha Kronopolos.” Unconsciously, she looked down at the name on her ill-fitting borrowed uniform, which also said “Kronopolos.” She felt a chill.

Zenzoff appeared not to notice. “You are a xeno-biologist, specialized with research in arthropod analogs, yes?”

Nerdy Intellectual Exercise

spaces... everywhere

click to embiggen

This is intended to be a representation of a hierarchy of literary genres.

Big concerns? Are the Supernatural/horror and Supers genres seem valid?

So I would like some feedback on this because I’d like to do soem stuff with it. Things I missed? Disagreements? Smart remarks?

note, the final product will have interactive notes to explain things.

jQuery’s Slice (and you didn’t even know it golfed, did you?)

Yes, it’s irritating enough that I’m going to blog about it.

Most programming languages have some version of slice() implemented in their design. The principle for the slice method/function/whatever is self explanatory: It makes a slice of a larger set of data.

HOW it’s implemented varies. It could change the original variable or set of data that you are working on. It could create NEW variable or set of data that copies that subset of the data. Conceivably, it could do both, like a cake: literally take the data out of the original set, leaving it smaller, and making a new object/variable/whatever with the subset you defined.

Every implementation I’ve seen defines the slice it makes using 1 or 2 numbers. The first number is an indication of where to start the slice, and if the second number is there, it indicates where the slice ends, (otherwise, the slice ends when the data slice ends.

Now, before we go on, I have to explain how programming languages and computers number things. If you understand 0-indexing used by most languages, skip a bit to get to my gripe. Otherwise, keep going.

In most computer/programming/scripting languages, counting starts at 0. So let’s say you have an array (an array is a group of things, more specificity in that definition varies from language to language). This array is a list of fruits. In this list we have:
Banana
Apple
Orange
Mango
Grape
Strawberry
Huckleberry
Lemon

That list is longer than we actually need, but it works. If the array has each of those stored in that order, “Banana” has an index of 0. “Apple” is 1, and so forth until we get to “Lemon” which has an index of 7. The LENGTH of the list is 8 objects. And programming languages will tell you it’s 8 objects long. But they’re going to index it 0-7. Banana is the first object, with an index of 0. Lemon is the eighth object, with an index of 7.

It’s not necessarily obvious, but there are good reasons for it which I won’t go into here.

Now, back to slice(). The first number telling you when to start is typically either a) the index number of the object (a range of 0-7 in our example) or the number of the sequence in which it appears (a range of 1-8). You have to know which one to use or you’ll get unexpected results, but once you know you just memorize it.

The second number, if it appears, can also be either the index number or the sequence number. But there’s also a third option! That “end number” might actually be a measure of how long the slice is.

So if you want to get Orange, Mango, and Grape, there are four common sense ways of expressing it.

  • Index method: fruits.slice(2,4) (because Orange is index 2, and Grape is index 4)
  • Sequence method: fruits.slice(3,5) (because Orange is third in the list and Grape is fifth)
  • Index + length method: fruits .slice(2,3) (because Orange is index 2, and you want 3 items from the list)
  • Sequence + length method: fruits.slice(3,3) (because Orange is the third item in the list, and you want 3 items from the list.

Personally, I would prefer it if they’d all just use the Index method, but I don’t get to decide these things.

But what REALLY IRRITATES me is what jQuery does with slice. It uses the index for the start item and the sequence number for the end item. So if we wanted Orange, Mango, and Grape, our expression would be fruits.slice(2,5). It uses to completely distinct numbering systems instead of just one, which makes it look like there are either 4 or 5 items in the slice, when there are only 3.

It’s not consistent, and that’s stupid. Thanks jQuery. I hate you now.

(No I don’t. Come back. Why you gotta make me hurt you, baby?)

Back in the Saddle Again

I said I’m BAAAAAAAAAAAAAAAACK! (Just so you’d realize I was singing an Aerosmith song, not Hank Williams).

I have been neglectful. Today, however, I did much outlining and I know where two of my three in progress novels are going.

Also, I remembered that I could write ANYTHING and not have to work on the novel.

So, expect stuff every day this week.

Reminder: comment this with ideas you have for me or site-wide somethings to say.

Adventures in management

Well, thus far, other than someone commenting that the genius picture looks like someone else, there really hasn’t been any comments. So, no scheduled changes. Again: comment this article with any recommendations you have.

Last week I only wrote once, but I posted a few things. This week I don’t have real plans yet other than to continue to update with old writing and to continue Work on The Fallen and possibly Bloody Waters. I also have a couple essays that I need to write. They may not be essays, and maybe just rambling thoughts. Who knows.

The Final Countdown

No, I’m not listening to Europe.

I’m launching a web site! wooo!

Took me longer than I had hoped, by about a week. But there are some idiosyncrasies to WordPress that I still haven’t worked out, but the crucial ones are worked around. So we good.

Anyway, it’s live. I think I’ve got it all. If you find something that doesn’t work, or a page that looks significantly different from the others, or if you find a specific design flaw that needs fixing* comment on this or whatever blurb is at the top. My plan is to have an article that identifies the week’s changes or plans at all times. I’ll change it each Sunday, so it’s a good place to put comments about things that need fixing.

* = I’m not going to change the fundamental design. I’m not a designer, so I’m sure some of you with more aesthetic sensibilities might be offended. Thing is… I’m happy with it. So it’s staying. However, minor things I will consider correcting.

A Ninja Would…

Could not connect: