Tomorrow is another free day for Sleight of Mind #1: Crashing the Party. Remember to go get it and, when you're done reading it, remember to take this short survey.
If you downloaded Sleight of Mind #1 before I added Daniel's field notes, be sure to snag the latest version tomorrow because you can get it for free and, hopefully, without having to involve Amazon support.
Friday, August 31, 2012
An Example of What BitmapCompare Can Do
Here's a little taste of what BitmapCompare can do for you. No only can it do slightly fuzzy comparisons that filter out the noise introduced by, say, a lossy compression algorithm. It can also tell you what is wrong with an image.
Expected:
Actual:
Actual marked up with errors (different kinds of mark up):
So when you are using it in a test, you assert on whether or not the images are equal and you report the marked up actual to cue you in on what's wrong.
Thursday, August 30, 2012
Slowing Down the Pace
I've obtained some feedback on Sleight of Mind #1: Crashing the Party and have acted on that feedback.
One of the things people asked for was a slower pace. That always pisses me off when I'm reading or watching a show. I want people to get to the point and then move on to the next one. On the other hand, I'm not reading these stories; I'm writing them.
Another thing that people asked for was a clearer sense of transition between scenes and the passage of time between scenes. That I can understand. I'm trying to write these stories in kind of a Hollywood style - short scenes with frequent breaks. However, Hollywood has something on me: you can see when the setting has changed dramatically, whether it's a change in scenery or the time of day, it's immediately visible to you when there's a new scene.
I've entered a new edition of the first episode into the Kindle store. The story text is exactly the same. The only difference to the text in edition 1 is that I've corrected some formatting issues that appear on the original Kindle and I've deleted the trio of asterisks that indicate a scene cut.
In the place of the scene cut markers, I have added some of Daniel's field notes. Of course, it would be cumbersome to saddle the story with an entire field journal, so these are just a few choice entries indexed at times in between scenes. It should be pretty obvious how they work.
To give you a feel for how the field notes work, here is a sample:
As always, I'm interested in what anyone has to say about these and don't forget to fill out this five-question survey when you're done reading.
Thank you.
One of the things people asked for was a slower pace. That always pisses me off when I'm reading or watching a show. I want people to get to the point and then move on to the next one. On the other hand, I'm not reading these stories; I'm writing them.
Another thing that people asked for was a clearer sense of transition between scenes and the passage of time between scenes. That I can understand. I'm trying to write these stories in kind of a Hollywood style - short scenes with frequent breaks. However, Hollywood has something on me: you can see when the setting has changed dramatically, whether it's a change in scenery or the time of day, it's immediately visible to you when there's a new scene.
I've entered a new edition of the first episode into the Kindle store. The story text is exactly the same. The only difference to the text in edition 1 is that I've corrected some formatting issues that appear on the original Kindle and I've deleted the trio of asterisks that indicate a scene cut.
In the place of the scene cut markers, I have added some of Daniel's field notes. Of course, it would be cumbersome to saddle the story with an entire field journal, so these are just a few choice entries indexed at times in between scenes. It should be pretty obvious how they work.
To give you a feel for how the field notes work, here is a sample:
They aren't meant to be the story. They are just meant to slow the story down and facilitate the transition between two scenes.02.07.2012 1644Chopper landing now.- Col. Baker- doesn’t want me to know 1st name- Frank Hansen-big guyCouldn’t get everyone’s name... too loud & group not forthcoming. Would have been nice to know.Jerry fucked up - looks like we have to run.
As always, I'm interested in what anyone has to say about these and don't forget to fill out this five-question survey when you're done reading.
Thank you.
Wednesday, August 29, 2012
Looking for BitmapCompare Beta Testers
Quite some time ago, I wrote a utility I called "BitmapCompare." My intent was to enable test-driven graphics. That is, I wanted a compositor to be able to produce a picture specifying how something (a web page, a GUI control... it doesn't really matter) should look. Then I want to be able to turn that into a test.
The last version of BitmapCompare was marginally inflexible and I was trying to release it as a commercial product.
I may eventually want to go commercial but I don't have the time to put into it right now, so I'm going open source/redistributable for the time being. I'm using the MIT license. This version and anything I do in the immediate future will probably stay under the MIT license.
The new version is a lot more flexible than its predecessor. You can swap in how pixels are measured and how they are compared, in addition to how they are marked right or wrong (as you always could). There are some basic fuzzy measurement and comparison tools that let you do things like blend together neighboring pictures and define a radius within the color space for determining equivalence.
Before I figure out where and how to deliver BitmapCompare, I was hoping to get a few people to try it out and let me know how they ended up using it, what the problems were, etc. If you are interested, let me know.
The last version of BitmapCompare was marginally inflexible and I was trying to release it as a commercial product.
I may eventually want to go commercial but I don't have the time to put into it right now, so I'm going open source/redistributable for the time being. I'm using the MIT license. This version and anything I do in the immediate future will probably stay under the MIT license.
The new version is a lot more flexible than its predecessor. You can swap in how pixels are measured and how they are compared, in addition to how they are marked right or wrong (as you always could). There are some basic fuzzy measurement and comparison tools that let you do things like blend together neighboring pictures and define a radius within the color space for determining equivalence.
Before I figure out where and how to deliver BitmapCompare, I was hoping to get a few people to try it out and let me know how they ended up using it, what the problems were, etc. If you are interested, let me know.
Tuesday, August 28, 2012
What Do You Think?
Would it give away too much if I filled in the fields on Sleight of Mind #1's shelfari page?
I wonder if there's a way to do that without spoiling the story.
I wonder if there's a way to do that without spoiling the story.
Monday, August 27, 2012
Where to Go Next?
Well, I've received my first piece of actionable advice. It gave me a really good impression of where the weaknesses in
episode #1 of the Sleight of Mind series lie. What I don't have a good handle on, yet, is the severity of those weaknesses.
Now I have to decide whether to go back and improve the first episode or use the data to strengthen the series as I add #2. Without that measure of severity, it's a tough choice to make. The answer probably lives in a rich body of net promoter score survey results.
To that end, if you've read "Crashing the Party," please do me the favor of answering this five question survey. Only the first question is required to help me make my decision but the other four will help strengthen the story line and delivery mechanisms as a whole.
Thanks,
Max
Sunday, August 26, 2012
Ancient Adapters: The Expression Statement
What is the nature of the adapter pattern? Simply put, it's to take a thing that does the right stuff but fulfills the wrong interface and give it a way to fulfill the right interface without changing it at all. This is typically accomplished by introducing an intermediate entity.
In an object-oriented design, you would typically run into a problem that screams "adapter!" when you have a class that consumes interface X and another class (Y) that does a similar job as all variants of X but which does not adhere to said interface. A common way of addressing this problem would be to introduce a new class, Z, that is a variant of abstraction X and delegates to Y.
As with all patterns, traces of this wisdom can be followed into what we software developers would consider to be antiquity: the seventies. It probably goes way farther back than that. In the case of mechanics, it's been around for as long as complex machines.
Compilers tend to have rigid concepts surrounding the syntax they process. For instance, in C, a block can only have as its children a certain number of things: statements, declarations of variables, etc. Inside a statement, you can do all sorts of things. For instance: you can assign an expression to a variable.
Let's imagine we have a grammar something like the following:
method:
"method" identifier "{" {statement} "}";
statement:
(variable_declaration | assignment | return);
variable_declaration:
"var" identifier ";";
assignment:
identifier "=" expression ";";
return:
"return" expression ";";
expression:
(identifier "(" ")" | identifier | expression "+" expression |
identifier "+=" expression | "(" expression ")" );
In this case, an expression allows you to do a lot of things. It allows you to invoke a method, sum two things together, reference a variable, increment a variable by some amount, or logically group a sub-expression.
Sometimes, however, an expression is not a means but an end unto itself. For instance, you may want to invoke a method in order to create a side-effect. In those cases, the expression is really doing the same job as a statement: it is a unit that declares a single step in an algorithm. The fact that we already have a way of describing such actions that we call "expression" is incidental.
Enter the "expression statement" - a very common feature in almost any language. An expression statement allows you to leverage all the expressiveness built into however you allowed expressions to be codified when building a first-class statement in an algorithm. Let's look at that in pseudo-grammar:
expression_statement:
expression ";";
So simple. So powerful. Now an expression can be used as a statement. As we expand the variation behind the "expression" interface, we automatically gain the ability to treat new variants as statements. In essence, this is a very early adapter pattern and evidence that patterns have been with us since the beginning.
Let's imagine we have a grammar something like the following:
method:
"method" identifier "{" {statement} "}";
statement:
(variable_declaration | assignment | return);
variable_declaration:
"var" identifier ";";
assignment:
identifier "=" expression ";";
return:
"return" expression ";";
expression:
(identifier "(" ")" | identifier | expression "+" expression |
identifier "+=" expression | "(" expression ")" );
In this case, an expression allows you to do a lot of things. It allows you to invoke a method, sum two things together, reference a variable, increment a variable by some amount, or logically group a sub-expression.
Sometimes, however, an expression is not a means but an end unto itself. For instance, you may want to invoke a method in order to create a side-effect. In those cases, the expression is really doing the same job as a statement: it is a unit that declares a single step in an algorithm. The fact that we already have a way of describing such actions that we call "expression" is incidental.
Enter the "expression statement" - a very common feature in almost any language. An expression statement allows you to leverage all the expressiveness built into however you allowed expressions to be codified when building a first-class statement in an algorithm. Let's look at that in pseudo-grammar:
expression_statement:
expression ";";
So simple. So powerful. Now an expression can be used as a statement. As we expand the variation behind the "expression" interface, we automatically gain the ability to treat new variants as statements. In essence, this is a very early adapter pattern and evidence that patterns have been with us since the beginning.
Well that Went Well
Yesterday, I got quite a few downloads of Sleight of Mind #1: Crashing the Party. That's good. That's the goal of a free day.
If you were one of the people who downloaded and read the story, I'd love to know what you think of it. I know it's hard to tell someone to their face what you thought, so here's an anonymous survey you can use instead:
Sleight of Mind #1 NPS Survey
If you're the sort of person who doesn't like giving negative feedback to someone's face, you can feel super secure using that link. I've distributed it via so many different channels, I can't even keep it straight, so there's no way I'd be able to trace a critique back to a particular person.
Sleight of Mind #1 NPS Survey
If you're the sort of person who doesn't like giving negative feedback to someone's face, you can feel super secure using that link. I've distributed it via so many different channels, I can't even keep it straight, so there's no way I'd be able to trace a critique back to a particular person.
Saturday, August 25, 2012
Why Mystical Science Fiction? Part 3: I Like to Challenge Others
In Part 2 of this trilogy, I explored how I think the mystical science fiction genre chosen for Sleight of Mind is more challenging, for me personally, than plain science fiction. In this segment, I'll outline reason #3: why I think it might be more challenging for you, the reader.
I'm sure a lot of people who know me think this ought to be the number one reason I chose.
I think we've completely tipped the scales in the other direction. I think we are now sufficiently advanced that we would assume magic is actually just futuristic technology.
So the third reason - and maybe this really is the most compelling reason but it is still my tertiary driver - I chose this format is so that I can try to expand the minds of my readers. I want to find that edge... the place were you can't decide if a character is grappling with an extremely advanced mechanism or the product of an ancient rite.
We're so full of ourselves, now. I see self-proclaimed scientists resting on some assertion he's made with the claim "there are things we really do understand about the universe." As a species, we've rounded up whole groups of nerds, placed them in ivory towers, and given them license to play around with mathematics and prescribe how things supposedly work.
...and most people just accept it...
I want to take that edge between "well governed reality" and "that's just got to be magic" and make us all look at it in the hopes that we can take a step back from the certitude of science or religion and admit that we can't really know how or why anything works. We can only keep making better tools that predict which responses will be generated by which stimuli.
Duck Typing and the Timeliness of Type Checking
Listen. You like duck typing (implicit typing). I get it. I kind of like it, too. At least, it's growing on me.
That doesn't mean you have to give up a compiler. Imagine this scenario. You have a language. That language allows you to define a class thusly:
Then you have some other classes, of which instances are passed into the method defined above:
That doesn't mean you have to give up a compiler. Imagine this scenario. You have a language. That language allows you to define a class thusly:
class Runner
method RunSynchronously(z)
z.Start()
return z.Stop();
end
end
Then you have some other classes, of which instances are passed into the method defined above:
class A # null object pattern
method Start()
end
method Stop()
return true
end
end
class B # normal implementation
method Start()
workReceipt = ThreadPool.StartWorking(someBehavior)
end
method Stop()
return ThreadPool.WaitForComplete(workReceipt)
end
end
class C # asynchronous no matter what implementation
method Start()
ThreadPool.StartWorking(someBehavior)
end
method Stop()
return false;
end
end
How could that be compiled? How could it be statically type checked? Nobody defined an abstraction, right? Wrong.
An abstraction was defined implicitly and those objects do conform to it. The Runner class expects its z parameter for RunSynchronously to have a Start method and a Stop method. That is a de facto interface. There is no reason it cannot be enforced by a compiler. There are lots of reasons why it should.
Maybe when I get some more free time, I'll look into it.
Friday, August 24, 2012
Why Mystical Science Fiction? Part 2: I Like a Challenge
In Part 1 of this little trilogy, I outlined the three reasons why I chose mystical science fiction as the genre for the Sleight of Mind
series instead of "just" science fiction and I expanded on the first reason. In this segment, I'll explore reason #2: because interspersing mysticism and technology is more challenging for me.
Ordinary science fiction is about stuff that is easier for me to grasp and understand: technology, mechanisms, rules, and learning.
Of course, there are interesting decisions. Do you extrapolate from modern scientific understanding or do you stipulate a paradigm shift? Do you roll time forward, backward, or weave your story into history? Are humans more advanced or less? How has society changed as a result of these changes? How much has society shaped technology?
Those are the same basic questions you have to answer in any book, story, or series. They're good questions to answer and can produce a fun read. I like to write at least as much as I like to read, though, so I want the story to be fun for me to create.
For me, a world in which things cannot always be codified scientifically is one that is far more challenging to imagine than one in which our species or another has just churned out another five thousand generations worth of improvements on various gizmos.
For me, a world in which things cannot always be codified scientifically is one that is far more challenging to imagine than one in which our species or another has just churned out another five thousand generations worth of improvements on various gizmos.
That challenge makes the story more fun to write. How do I balance these two different kinds of forces? That's hard. How do I reconcile them? That's even harder.
Like I said, I am not betting the farm on people buying this book. I'm mostly writing it for me and I'm hoping other people enjoy it. For that reason, I embrace the big challenge of this genre choice along with some other challenges that I have typically skirted; namely developing personal relationships between characters and exploring character's feelings.
Stay tuned, tomorrow is the first day you will be able to get Sleight of Mind for free on your kindle and also the day I explain why I think this subject is more challenging for you, the reader.
Stay tuned, tomorrow is the first day you will be able to get Sleight of Mind for free on your kindle and also the day I explain why I think this subject is more challenging for you, the reader.
Thursday, August 23, 2012
Why Mystical Science Fiction? Part 1: It's a Big Universe
Why is Sleight of Mind
a "mystical" science fiction series? I could have done it as regular science fiction and probably tapped in to a wider audience.
There are three reasons:
- It's a big universe.
- I like a challenge.
- I like to challenge others.
In this segment, I'll start by exploring the first reason. Tomorrow, the second and, on Saturday, I'll deal with the last one.
I like technology. I also like the idea that the universe works in ways we haven't even begun to perceive, let alone measure and understand.
Science fiction is often about a distant time in which one of the key species has garnered an understanding of the universe that allows them to do things we cannot do today. Not always, but pretty frequently. What if the advanced understanding ends up actually being that we cannot possibly understand the universe? What if there's another way of doing things that our fairly scientific minds just tune out?
It's not like I think nobody has ever had an idea like this before. It's more probable that my non-fiction writings are original than these works of fiction and, even then, the chances that someone, somewhere hasn't already at least toyed with my ideas are pretty slim. Ideas are only original a maximum of one times and the probability that said time was inside any given person's head is almost nil.
It's just that I think the idea of technology and mystical forces interacting is interesting for me to explore. If it's interesting for me to explore as an author, it might be interesting for you to explore as a reader too. So, even though the oddness of the story might be off-putting for a lot of readers at first, I'm hoping that it will ultimately develop into more of an appeal than a detractor.
Since I make a good living as a software developer, I can afford to wait and find out.
Stay tuned. In part 2, I'll tell you how I think this is a more challenging subject for me than ordinary science fiction.
It's just that I think the idea of technology and mystical forces interacting is interesting for me to explore. If it's interesting for me to explore as an author, it might be interesting for you to explore as a reader too. So, even though the oddness of the story might be off-putting for a lot of readers at first, I'm hoping that it will ultimately develop into more of an appeal than a detractor.
Since I make a good living as a software developer, I can afford to wait and find out.
Stay tuned. In part 2, I'll tell you how I think this is a more challenging subject for me than ordinary science fiction.
Tuesday, August 21, 2012
Why Is "Crashing the Party" Only 53 Pages Long?
There are a lot of e-books out there. A lot. There are Kindle books that are six-hundred pages long that only cost 99 cents. So why do I think I can make it with a book one tenth as long for the same price?
I'd like to think that part of it is because I can write. Maybe I'm full of shit on that. If so, the market will tell me. There's another, deeper meaning to this trial for me.
Anyone who knows me - who really knows me - knows that Lean Thinking is really important to me. Some have even called it my religion. The core principal in lean thinking, as far as I interpret it, is value. Understanding what value is to your customer is absolutely critical to the success of a product.
A tool we use to zero in on value is market feedback and that's the first place that the structure of Sleight of Mind series and lean thinking tie together: by releasing part of the story and getting feedback, I'll have a chance to improve the product before I release subsequent portions.
Shaping the product this way also ties in with the flow and pull principles as well. I'm sure a particular friend will tell me that, if I think about it long enough, I'll be able to stretch the value stream and perfection principles over this idea as well.
That doesn't mean I'm a total douche bag - although it doesn't mean I am not either. I don't intend to let the market tell me how the story should go, who should live or die, who should win or lose, or which characters should change their nature. I'm already pretty confident in my abilities to make those decisions on my own.
What I do want to learn from the market is the weight it places on the following things:
I'd like to think that part of it is because I can write. Maybe I'm full of shit on that. If so, the market will tell me. There's another, deeper meaning to this trial for me.
Anyone who knows me - who really knows me - knows that Lean Thinking is really important to me. Some have even called it my religion. The core principal in lean thinking, as far as I interpret it, is value. Understanding what value is to your customer is absolutely critical to the success of a product.
A tool we use to zero in on value is market feedback and that's the first place that the structure of Sleight of Mind series and lean thinking tie together: by releasing part of the story and getting feedback, I'll have a chance to improve the product before I release subsequent portions.
Shaping the product this way also ties in with the flow and pull principles as well. I'm sure a particular friend will tell me that, if I think about it long enough, I'll be able to stretch the value stream and perfection principles over this idea as well.
That doesn't mean I'm a total douche bag - although it doesn't mean I am not either. I don't intend to let the market tell me how the story should go, who should live or die, who should win or lose, or which characters should change their nature. I'm already pretty confident in my abilities to make those decisions on my own.
What I do want to learn from the market is the weight it places on the following things:
- Descriptions of people
- Descriptions of scenery
- Unveiling of motivations
- Connecting the plot dots for you
- Making you connect the dots on your own
- Etc.
This is an experiment. Maybe it will work. Maybe it won't. It only costs my time for me to find out at this point.
Sunday, August 19, 2012
Sleight of Mind #01: Crashing the Party
I've released my first work of fiction as a Kindle e-book.
Sleight of Mind is a series of short stories staring Daniel Vaughn. In the first episode, he accompanies a group of soldiers on a mission to kill an enemy of the United States. His role is to interpret cuneiform writings in which instructions on how to proceed are encoded.
As time passes, it becomes apparent that this is more than just a covert mission to kill a terrorist and the group realizes they are up against something they don't really understand.
The current plan is for it to be free every Saturday for the next five weeks and 0.99 USD the rest of the time. It is also available for free to Amazon Prime users by way of the Kindle lending library.
Subscribe to:
Posts (Atom)