“How It Ends”: On Sale This Labor Day Weekend

End of the summer sale on How It Ends!

20140629-114004-42004110.jpgToday through Labor Day, you can get How It Ends for the low low price of $0.99. That’s a savings of nearly 67%.

In a future not so distant from our present, when a servant class of robots and machines are manufactured for the sole purpose of serving humanity, what happens when one machine subverts its programming to gain the love of a human?

This How It Ends, 300 pages of science fiction goodness that tells the story of Anita, a young graduate student; Brian, the smarmy college professor whom Anita is dating; Sidney, a professorial colleague of Brian’s who reluctantly takes Anita on as a research assistant; Kilgore, a robotic doctor who provides the human characters fascinating insights as to how the “mind” of a robot really works; Eric, a cut-throat executive in the nation’s largest robotics firm who is not above getting his hands dirty to get what he wants; and Gammons, Eric’s robot assistant who has a special circuit for feeling emotion like a human.

To immerse yourself in the lives of these characters is to be swept into the increasing speed of the story until, at last, their lives collide in a global apocalypse and you find out How It Ends.

Pick up your copy of How It Ends today!

Advertisements

Excel Geeking – How I Control Releases of Excel Templates

In my current position, I manage the care and feeding of a type of planning system. The whole thing has been built in Excel, and presents more than a few challenges. Since I didn’t do the original construction, I inherited the application, and without being able to make major back-end changes, I’ve only been able to make the types of improvements and updates that have made the users’ live easier.

One of the pieces that makes my life more difficult is that this system is actually comprised of several different Excel files. One of them is the “Big Mutha”, the spreadsheet that tries to act like a database. It contains all the data and the templates (now) use SQL to pull data out it.

Other of these files are reports of varying sorts that (hopefully) give the user the info they need to make decisions.

Yet another set of files are the data entry templates. These are the Excel files in which users enter their data and submit it to my group, which we then process into the Big Mutha. These files are not so restricted that people can’t save them. They can. They can fill them out, save them to their local machine, and submit the data to us. The hiccup with these files is that we have to update them with new fiscal calendar data once per quarter (or, every three months, for those of you not in a fiscal mindset).  While I have a routine that will pull the new fiscal data into the templates when the data is ready, there are other times when we need to make an enhancement or fix a bug and then issue a new release of the template. When this happens, the template the user has saved on their machine is outdated and can’t be used again.

So, how do I control when it’s time to issue a new release? How do I inform the user that their current template is old and can no long be submitted to us?

“Email”, you say? Yeah. No. Nobody reads. And I’ve found this to be true in every company I’ve ever worked for. If you send an email out and assume people will read it and obey what you’re telling them, well, you know what they say about when you assume. Except you’ve only made an ass of you.

Sneaker network? (For those who’ve never heard the term, “sneaker network” is when you get up and walk from cube to cube and update everyone you talk to.) In a land of 1500 users, that too is a no, my friend.

So, seriously, how do you do it? How do you control releases in Excel?

With Visual Basic for Applications, of course!

My methodology has been to use a combination of VBA and configuration files to manage this. Let’s start with the configuration file:

[VersionControl]
Version=1.2
UpdateRequired=FALSE

I’ve got a section for version control. Under that section there are two keys, one for the version number, and one for whether an update to the new release is required.

In the Excel file, I make sure that I have a public constant that holds which version of the template that file represents:

Public Const gsVERSION As String = "1.1"

Don’t forget the constants that hold the configuration file name and path:

Public Const gsINI_PATH As String = "C:\SomeLocation\SomeLocation\SomeLocation\"
Public Const gsINI_FILE             As String = "your_configuration_file.ini"

Next, I have a function that I can call that tests whether the template is the current version and, if it’s not the current version, whether an update is required. It evaluates whether the version number in the configuration file matches the version number in the public constant. If the match, great. If they don’t, then it does a second check to see if an update is required to the newer version:

Function bUpdateRequired() As Boolean
'*******************************************************************************
' Description:  This checks if this workbook is the latest released workbook based
'               on a setting in the configuration file and then checks if an
'               updated version is required.
'
' Author:       Scott Lyerly
' Contact:      scott_lyerly@tjx.com, or scott.c.lyerly@gmail.com
'
' Arguments:    None
'
' Returns:      Boolean
'
' Change Log:
' Name:                 Date:           Init:   Modification:
'---------------------------------------------------------------------
' bUpdateRequired V1    04-AUG-2014     SCL     Original development
'
'*******************************************************************************
    ' Check the version of this workbook against the latest released version
    If CDbl(sManageSectionEntry(iniRead, "VersionControl", "Version", gsINI_PATH & gsINI_FILE)) > CDbl(gsVERSION & gsBUILD) Then
        ' If the released version is greater than this workbook's version, check if an update is required.
        bUpdateRequired = CBool(sManageSectionEntry(iniRead, "VersionControl", "UpdateRequired", gsINI_PATH & gsINI_FILE))
    Else
        bUpdateRequired = False
    End If
End Function

For this function, I’m calling my function that consolidated the reading and writing from and to a configuration file. You can read about it here.

Now, controlling what someone can do this this file is as easy and tapping into the bUpdateRequired function. Just check to see if it’s False and then you can control the action you take next. Something like this:

If Not bUpdateRequired Then
    Msgbox "This is not the latest version of this file. You must download an updated template.", vbExclamation
    Exit Sub
End If

That’s all there is to it. There is probably a finer point to be made about what happens when a user falls so far behind in versioning that, even though an update might not be required to the latest release, the version the user is using is no longer supported. For example, an update might not be required to go from version 3.2 to 3.3, but the user is using version 1.5. Version 1.5 might be too out of date and is no longer supported at all, but since the UpdateRequired key reads False, there’s nothing to stop them from using 1.5. Honestly, I haven’t run into that yet. If I do, I’ll figure something out. For now, what I use above is more than enough for me to control versions.

 

Poof! Go The Serials

20140629-114004-42004110.jpgOver the weekend I changed what I works I had available on Amazon. I decided to remove the serial parts of How It Ends from Amazon and leave the full novel. (I also dropped the price).

Why did I do this? I’m not entirely sure. It just felt right.

Personally, I found that, whenever I went onto Amazon to see what the listings under my name looked like, I had this list of six things. Five of which were all various bits and pieces of each other. One novel, four serials that comprise the one novel, and a short story. (I’ve taken the short story down too.) It felt cluttered to me, like I had built a bunch of LEGO kits and left them and their pieces all over the desk. I wanted the novel of How It Ends to rise to the top, and there was simply too much other stuff in the way.

Another thing I didn’t like was the cover images. With the exception of the novel, none of the cover images came out the way I wanted them to. I suppose an argument could be made that I could hire someone to make the covers for me, but I don’t have a lot of disposable income to throw around on professional graphic design. Everything about How It Ends has been a DYI production, and the covers are no different. And with the serial parts, it looked like a DYI project. A bad one.

Before I pulled the serials off of Amazon, I consulted my friend Abby. She suggested I leave them up there. If you pull them, you (and the shopper) lose visibility to any comments that have been made on them. And if you have a large number of positive comments, logic suggested that you wouldn’t want to do anything to lose them.

This is a valid argument, and if I had more comments, I’d consider leaving them up there. But I didn’t have many, and of the few I did have, not all were positive. Now, I don’t necessarily care about whether a reader gives me a bad review, as evidenced here. But when you have so few reviews, one bad one can bring the whole balance of stars down in a hurry.

I hemmed and hawed and finally decided to take the serials down. Now when you search Amazon for me, you’ll only get the one listing. The experiment of serializing the novel was interesting but ultimately didn’t really amount to anything. No need to keep the parts out there. The novel is out now and now that I’ve lowered the price, it’s cheaper than if you bought the parts and added them together.

So the serials are gone. Poof! Like magic.

Pardon Our Progress

20140801-205018-75018576.jpg
There is nothing wrong with your television set. Do not attempt to adjust the picture. We are controlling transmission.

This is a quick one tonight. You may or may not have visited the blog today, but if you did you’ll notice it’s looking a little different. I’m trying out a new theme, one I particularly like (as opposed to using you I despise, I suppose). I’ll probably be playing around with it a little more here and there, adding widgets, deleting widget, botching the color scheme, that kind of thing. So if it keeps changing on you, don’t worry, it’s me not you.

I’m also trying out featured images for the first time, so if it looks like an amateur is running this site, well I guess that’s a true enough statement. Not to worry though, I’m likely to have worked through all the bugs in one, maybe two years, tops.

If you like the new look (or loathe it), pipe up. I’m always interested to hear some feedback. Just leave a comment below.