Writing, publishing, geekdom, and errata.

Determining Who Is Home Based on DD-WRT Connections

No comments
One of the more ambitious things you can do with your phone is to have your home systems start doing things both when you leave and when you get close to home again. The most obvious ones are things like start automatic backups, change audio outputs from local speakers to streaming, and the like. I've also seen where people have mentioned being able to use their home routers to see when others are home as well.

You can use tools like Tasker (for Android) to do this, but there's a whole string of comments about how location awareness can be buggy as hell.... and I'm sure this also leaves iPhone users in the dust.

So here's how you start with this, my droogs.

First, I'm presuming that you're running DD-WRT on your router, or something very similar. I'm also assuming that you've correctly set up passwordless SSH as well. (Guides are here and here; please note that some builds of DD-WRT are flaky when it comes to SSH.)

The fun bit is that all of this happens on a computer you leave at home - whether it's a CHIP, Raspberry Pi, your old machine that runs Kodi for you, or whatever, the magic happens outside the router, and inside the LAN. So make sure that "Allow any IP" is set to off and you've got the "allowed IP" set up properly.

Now, swing over to GitHub and my repository

There's only three scripts in there - and one of them is awfully small.  They should work for both Linux and OSX. 

In short, the scripts have the router run a few simple commands and then parse the output. You'll need to manually change the names of the computers:

from where that dash is over to the / symbol.

The output is both echoed to the terminal at the end and more importantly to a file at $HOME/client_ips.txt (edit line 14 or pass it as the first commandline argument). You can then shift that file out to a webserver or use it to determine if some other action needs to be taken. For example, if my phone's IP is no longer active or reachable, the server knows it's okay to start the online backup, since I am not home and don't need the bandwidth.

There's an script in there that actually goes through all this, and could just be a drop-in way to do this if you don't mind putting all the variables on the command line.

The great thing about this instead of using location services of any kind is that it's based on a pretty simple and empirical connection. GPS satellites not visible? Who cares? We're simply testing if my phone is connected to the router or not!

You can find the whole shebang over at GitHub:

No comments :

Review: Cathedrals of Summer by Robyn Stone-Kraft

No comments
I'm not a big poetry person, even though I publish a journal that is half poetry (that's why I have editors who *are* big poetry people). But it was suggested that I take a look at Cathedrals of Summer by Robyn Stone-Kraft (Smashwords, iTunes) and give it a go. So please forgive me if I misuse terms for types of poetry.

The first part of the chapbook's poems - "Eating a Lemon", "Summer Psalms", and so on, are poems about a particular sensation. They're focused on trying to bring you into a kind of emotional state. I typically am not fond of this kind of poem; they often come across as a little too ... well, "foo-foo". They're static moments, not dynamic changes of state. Yet though these are not really my cup of tea, I could still recognize that they're well-crafted examples of the type.

Then halfway through the chapbook, we get to "Fields of White Clover", which begins like another of the same type, but has allusions to something changing.

"Weave a flower crown,/be the June queen,/but don't fall back/without looking first."

This poem serves as our "turn" for the work, bringing us to "Roles on a Sandy Field" and "Allure on the Breeze". These last two poems refer to *events*, where a dynamic moment or change is occuring. These types of poems are the kind I connect with, and are excellent examples of the form. Perhaps it is a shortcoming in myself, but when there is an event described, I am more able to empathize and be present with the work.

Aside from the individual poems, as I hinted above, there is a larger arc in the entirety of the chapbook, hinged around "Fields of White Clover". We start with innocence and just experiencing sensation, but with the foreshadowing at the end of "Fields", we are drawn out of innocence and into the choices that take all of us, eventually, into the wonderful and tragic world beyond.

It's this arrangement and subtle arc that elevates the whole above its constituent parts.

A few technical notes: I read this as an ePub, and as I've mentioned before, formatting poetry in eBooks is a tricky thing. It is, however, well done here. The chapbook's cover is sadly uninspiring, which is a disservice to the actual writing within. One hopes that another edition is forthcoming with a better cover.

Overall, quite recommended.

No comments :

Review: Daughters of Freyja (negative stars, really)

No comments
I don't have a thing against self-pubbed authors (or vertically integrated, or whatever the appropriate term is these days). What I do have a problem with is a book that proports to be a genre (and erotica) novel that doesn't pass even the most basic "smell test" of worldbuilding.

Let's cut to the chase: If you want to see how to do romance and excellent fantasy worldbuilding, you want Elizabeth Vaughan's "Chronicles of the Warlands" or her "Epic of Palins" series. Those books have excellent worldbuilding, making the strange familiar and the familiar strange, while keeping everything consistent and the story compelling.

But let's pretend that you make the mistake of ignoring my suggestion above, and instead come to Daughters of Frejya, the first of the "Welcome to Valkyria" series.

As an aside to my pagan friends: Yeah, if you haven't already guessed, just keep walking.

I was asked to review this book by a friend, who, to his credit, forewarned me. If he hadn't, the rather long author's note on the Amazon page defending the book would have. And if I ignored both of those, the cover's WordArt style lettering would have. It's not quite Lousy Book Covers level, but definitely not the work of someone who has done a lot of graphic design.

If it seems like I'm spending a lot of time on the cover, that's because I could only make it five chapters into this hot mess of a book. The freaking thing starts with a seventy-nine word long sentence. And what's worse, it's exposition. We get lots of irrelevant details about how our protagonist bought this house, and a completely trite comparison between "Valarie" and "Valkyria".

So, worldbuilding. We establish early on that Val knows geography, and her friend doesn't. Yet Val doesn't blink an eye at her friend's suggestion that they vacation in a location that Val has never heard of.  And of course, they only have air service from Oslo, Reykjavik, and Miami.

Yeah, you fans of Norse religions, you caught that spelling of Valar in our protagonist's name, but for some freaking reason they're headed to somewhere in the Bahamas. Or Bermuda Triangle.

As our protagonist boards the plane, she gets hints that clothes are not exactly a welcome thing in Valkyria (which would, of course, surprise both the Valar and the Valkyries), and that men are at best second class citizens.

There's five things that bother me about this bit (which seriously takes up chapters two through the beginning of five):

1. It's stated that men tried to have a revolution a while back. If you have a mystically isolated area (like, oh, Avalon), the idea that this escaped the notice of Fox News and the MRA/men's rights asshats makes sense. If, instead, you set up an active tourism industry, there'd be fedora-wearing jerks complaining all the time about the restrictions to men.... which would have brought all of this to Val's attention.

2. As is revealed by chapter five, all these women are exceptionally old, but look young. But nobody notices. The biggest problem interacting with the mundane world is that the naked passengers on the plane have to cover up in Miami. Again, there's apparently diplomatic relations, because our protagonist has to get a passport and the like. Sooooooooooooooo... what the hell? Nobody in the mundane world clued in to that?

3. Val is repeatedly shocked - SHOCKED I tell you - that there's nudity. It got kind of old kind of quick. Nudity in the brochure! Oh my! Nudity on the plane! Oh dear! Nudity of the woman in front of me! My stars! ::eyeroll::

4. Apparently the best way the whole place of Valkyria could figure out to deal with the "men's uprising" was to make it law that everyone doesn't wear pants and expose their genitals. We will come back to this.

5. It is freaking infuriating that it's not only implied but expressly written into the plot that naked women means lots of lesbian sex. While I can suspend disbelief enough to get by an individual's awakening of sexual urges they never admitted before, this is that fantasy writ large to encompass (apparently) all women. It's just... it reads like a straight person who is titillated by the idea of being bi-curious trying to write erotica. Sexual orientation just doesn't work like that, and even writing erotica that pretends otherwise is frustrating at best.

Again, this book - or at least as far as I could tolerate reading it - sounds like the writings of a straight person who has never actually talked to LGBT people, let alone been in a LGBT relationship. Further, the bits about the "men's uprising" is not only sexist, it's out-and-out anti-feminist and definitely anti-trans. To quote:
While the bulk of these laws restricted the freedoms of men, they in turn would have the greatest impact on the women of Valkyria by technically being the opposite of restrictive. In order to make sure that men would never again be able to dress up as women in public to carry out their nefarious plans, the Mandatory Public Exposure Laws were enacted.
Yes, that's right, women. You're free by being forced to leave your genitals exposed. (Hint: SocImages has a post for you)

All women may no longer restrict visual sight of their Blessings of Womanhood. The blessed wombs and supple breasts that clearly separate women from men may no longer be concealed in public by any means, be they by clothing, hair, contraption, or otherwise.
Did I not mention that? Oh, yeah, you totally have to shave your nethers. And if you're not clearly identified as a female, I guess you're the second-class citizen that is "male", even if you're trans, intersexed, and so on.

Again, do I have anything against a bit of erotica where a person experiences an "awakening" of their latent but repressed urges, regardless what those urges are? Hell no.

Do I have a problem with a book that is casually homophobic, transphobic, anti-feminist, and just does a horrible job of world-building in service of a typically straight sexual fantasy?

Oh yeah.

Maybe, somehow, this book manages to correct course after I stopped reading it. I'm simply glad that it was discounted to free; that way I'm only out the time I spent reading as far as I could.

No comments :

Whole House Audio with MPC and PulseAudio RTP multicast

No comments
Setting up whole house and synchronized audio with pulseaudio was both simpler and more complicated than I anticipated.

If you decide to take on this task, let me save you some googling and give you a couple of relevant links, including a script that I created in order to turn things on and off again.

I started with this post about using MPD and whole-house audio. I already used MPD (and am very glad for it), so the problematic parts almost entirely involved Pulseaudio RTP multicast and firewalls. I also referred to this post from danplanet and this post from  Here's the important bits:

In ~/.config/pulse/, make the following changes in the server:

.include /etc/pulse/
### Load the RTP receiver module (also configured via paprefs, see above)
load-module module-rtp-recv

### Load the RTP sender module (also configured via paprefs, see above)
load-module module-null-sink sink_name=rtp format=s16le channels=1 rate=44100 sink_properties="device.description='RTP default'"

### Need to specify port and add loop=1 to broadcast locally as well.
load-module module-rtp-send source=rtp.monitor port=5004 loop=1

### If you're not playing through local speakers as well, use this instead.
#load-module module-rtp-send source=rtp.monitor port=5004

and in ~/.mpd/mpd.conf make the following addition:
audio_output {
type "pulse"
name "MPD RTP"
sink "rtp"
mixer_type "software"

In your receiving PC(s), make sure that you allow PulseAudio to take in multicast by editing ~/.config/pulse/ to include:

### Load the RTP receiver module (also configured via paprefs, see above)
load-module module-rtp-recv

Then the only problem is ensuring that your firewall will allow multicast, which you can do with my UFW script or by following the directions in my RTP switcher script.

If you're considering this, you really ought to look at the switcher script, as PulseAudio multicast currently clobbers the crap out of anything connected to the network via WiFi, and there's a fix in there for it.

Also, multicast means that your network has 100-200K constantly being used, even if nothing's playing. That's why the RTP switcher script exists at all. It's there to allow you to be able to turn RTP multicast on and off again with minimal fuss.  (Do RTFM, though.))

Being able to play music from one source and have it be in sync throughout my home LAN is pretty freaking awesome. If you're using PulseAudio and MPD, you could be doing it too!

No comments :

Review: The Logitech Wireless Touch Keyboard K400 Plus

No comments
I used Kodi to turn my old laptop into a media server attached to my television. It's a really nice setup, and well worth it. It doesn't require a new top-of-the-line system, either; this eBay search should show some systems that will work well enough in the $50-$150 range, and you can use Linux as an operating system (or just use Kodibuntu) if you'd rather.  Some other guides are here, here, here, and here; that last has a guide for building your own PC as well.

Which isn't really the point; it's just the setup for what I want to review: The Logitech Wireless Touch Keyboard K400 Plus ( Logitech | Amazon | Best Buy | Staples).

One of the few frustrations I had with the PC-as-Media-Center was simply trying to work the keyboard and mouse. While many interfaces were optimized for one, other tasks were simply easier for the other. And using a mouse on the arm of a couch is both difficult and makes you look like a fool. Add to that the mouse pointer showing up onscreen every time the table it was on got nudged, and I was ready for this product when it went on sale.

This keyboard solves those problems simply and easily. The touchpad is responsive, the form factor is small enough that it's not in the way and sits comfortably on the edge of an end table, and since there's no "real" mouse, I can easily move the pointer where I need it to go, when I need it.

It is probably not the best keyboard for any kind of extended typing work (like I'm doing right now), especially if your hands are large. But perhaps you'll have better luck with that if you like smaller keyboards. Regardless, it's not so small that I can't type on it; I'd just rather use my large ergonomic one.

But for the purpose of being the keyboard/mouse to control an old PC running my television? It's dang near perfect.

Note: I do run linux, and so some of the fancier touchpad options don't work at all, or don't work as well. Of course, I'm the kind of guy who often disables those options, so I barely noticed and haven't looked to see if there's a way to enable them.

No comments :

Just a quick status update: I'm probably depressed. (READ THE POST, NOT JUST THE HEADLINE)

This post is just a recognition that I'm about to hit a point where I've crossed of most of the criteria for major depression. 

It's not - repeat FREAKING NOT - a cry for help, a request for sympathy, or anything of the sort. If you feel it's absolutely necessary to say something in the comments or Facebook or whatever, that's great. But it's not needed, and probably won't make a difference.

It is, however, an acknowledgement of where I'm at, and a request that when - not if, but when - I screw up, don't act myself, seem disinterested, blow a deadline, or the like, that folks know what's going on and don't think it's because I'm just... I dunno, a flake.

I'm taking care of myself, I'm not in danger, it's not being left alone.

But since I work and interact with so many people, and I've had so many wonderful - wonderful - people rally for me when things have gone south in the past, I thought it worth mentioning now so that people don't get unnecessarily concerned or upset.

Thank you, and have a wonderful day.


Review: TaoTronics LED Light Bulbs

No comments
There's a number of household things that I've discovered recently that have made a very significant change in my life. Some are simple, some are big, but they're all things that I've been really, really happy with.

Or in other words, it's review week!

I was an early convert to CFLs, and quickly found that the quality varied wildly between brands. Some were bluish, some were warm, some just kind of sucked. But regardless, they were all better than old incandescent bulbs - more energy efficient and not nearly as warm.

I purchased the TaoTronics LED Bulbs E26 Light Bulbs when they went on sale at Amazon (I've not seen this particular brand elsewhere, and given my experiences with CFLs, I'm hesitant to point to other brands).

These lightbulbs are supposed to be equivalent to 60W incandescents, but seem quite a bit brighter to me. The light is definitely clearer and, while not blue, it has more blue in it than the CFLs they replaced.

I've had these bulbs for about a month and a half, and they've made a huge change in the way the rooms they're in feel. No warm-up time like some CFLs have, clear light, and with the frosted top there are no uncomfortably bright spots either. And considering that the sale is still ongoing (at least as I'm writing this), you get 6 bulbs for just over $20. Well worth the cost of replacement.

No comments :

Review: Libman Wonder Mop and Zwipes Microfiber Cloths

No comments
There's a number of household things that I've discovered recently that have made a very significant change in my life. Some are simple, some are big, but they're all things that I've been really, really happy with.

Or in other words, it's review week!

So I've always disliked cleaning. I don't get a huge sense of satisfaction from it, largely because it's always been so much freaking work. Especially when you've always had multiple pets.

Which is why the Libman Wonder Mop and Zwipes microfiber cloths have made such a difference for me.

I've always hated mopping. It never seemed like it did anything, and managed to both hurt my back and make a mess in the process. The Libman Wonder Mop (Amazon | Find a Retailer) doesn't look like it should be much of anything... but it totally changed my opinion of mopping.

With little more than water and about as much elbow grease as it takes to sweep, this mop got stuff off my kitchen floor I would have otherwise had to get down and scrub by hand. It's super easy to squeeze the dirty water out, and just impressed the heck out of me all the way around. It is well worth the bit extra to make the job so much easier.

Dusting is another chore that I tend to ... intensely dislike. I'd learned a while back that using Swiffer-style pads made dusting much easier, but you end up running through a lot of the pads quickly, which is both expensive and crappy for the environment.

Enter the Zwipes (Amazon | WalMart | Home Depot).

These are about as thick as a cheap washcloth or thin handtowel, or about as thick as a really good paper towel. But oh my goodness are they a lot more useful.

To give you an idea, you can use one of these with just water to get a clean, streak-free mirror. When wiping down walls and cabinets, I saw results that compared to my experience with Magic Erasers... but without crumbling, and lasting a lot longer.

Additionally, all you need to do is throw them in the wash to clean and reuse them. I've used about a third of my 24-pack... and then washed them, and used the same third of a pack again, and done it again, and.... you get the idea. Contrast this to trying to clean with a sponge or paper towel, and it's no contest at all.

Keep in mind folks, I still dislike doing housework. These don't make the job fun or anything. But I found that these tools made the job go a lot quicker, and a lot easier.  And that's very important for me.

No comments :

Aaaaaaaaaaaaaand a little musical silliness to bring us into the end of the week

No comments
Hey, you thought I'd leave you to the weekend with something serious?

Um, no.

Enjoy "The Deadpool Shoop", produced by Voicedude. Like the DP himself, very, very, very NSFW. You can snag the audio from where Voicedude uploaded it: right here. Or watch the video below:

No comments :

The Positive Point Of Being Able To Be Hurt

No comments
Earlier this week, I got hurt.

It was a very specific kind of hurt. While it resembled garden-variety hurt that happens to nearly everyone, nearly all the time, this hurt was tailored. Due to specific circumstances, it was very clear, and very obvious that it was intended to hurt, that the person doing the action wanted it to hurt, and knew just how to make it hurt on many different levels.

This isn't about that person. This isn't, really, about me getting hurt.

I'm just telling you all this, because I wanted to share a thing a friend said to me.

Many people pointed out the (obvious, in retrospect) nature of how we can allow ourselves to be hurt. How the actions and attitudes we take, especially with specific people, can make getting hurt as simple as just existing.

And while their point is absolutely correct, it also can lead to self-judgment and recrimination about how "weak" or [insert term here] you were to allow yourself to be hurt. Taken too far - and many of us, when hurt or upset, will take an idea too far - the idea that you allow others to hurt you can become akin to blaming the victim.

To balance it, then, I want to draw attention to what Marian Allen said, which draws attention to the other side of what happens when you're hurt:
You can only be hurt because you refuse to let the hurtful one force you to build a protective, isolating wall around yourself. If you can't be hurt anymore, it means part of you is dead. If you can still be hurt, it means you win.
I think the two concepts - that you must be mindful of how you can allow others to hurt you, and that vulnerability is a good thing - are equally important.

And thank you all for reminding me of them.

No comments :

Getting Tasker to Pass Network Configuration to Minimalistic Text (and other apps)

No comments
I've got a cool little banner on my homescreen of my Android, consisting of the time and the current network settings - whether it's on wifi, cell data, or even if it's on a VPN. It also displays the current IP address on the LAN and out to the internet.

It does this with the power of Tasker and the shell in Android (which you can access without root).

In short, it runs netcfg when you connect (or disconnect) to a network, then parses that input until it finds out what kind of connection you're on. It also finds the SSID of the network (if applicable) and the IP addresses by calling out to and parsing that output. It then stores it all and puts it in variables for Minimalistic Text.

You can find the project as wifi.prj.xml (if you're on your phone now, you should be able to click that link directly and import it) on my GitHub collection of Tasker tasks. I bundled this as a project, so you should be able to just import it.

If you don't know how to import a project into Tasker, there's a HOWTO right here:

No comments :

Updating Clauses In My Contract Templates

No comments
It's been a little while since I've talked about contracts, and since I just made a system-wide change to my templates, I thought I'd mention it.

If you've not seen them already, I highly recommend that you take a look at my "Looking at Your Contracts" compendium post, as well as "The Strange Stuff You Find in Contracts" and "Publishers Will Fix Their Contracts If You Call Them On It". They provide a bunch of background to the tweak I just made.

There are three changes that I made. All of these reflect what I meant or intended, but the wording was unclear or contradictory.

Yes, folks, that means if you already have a prior contract with me, this is the understanding that I had then. If you want an addendum, e-mail me, but presume this is what was meant. My contracts are supposed to protect authors as well as myself.

First, I added the words "the author will instruct" to this clause: 
The Author agrees that at such time as the Work is included in any book, whether or not it be entirely composed of the Author's own work, the author will instruct that *Alliteration Ink* will be given credit as a publisher of the Work and the Work will be cited with its full title(s) as it appears in **ANTHOLOGY**.  
It was pointed out, quite reasonably, that authors cannot always control what publishers do, and the language should reflect that. 

Second, I added "Separate from the author's personal electronic copy" to this clause:

Separate from the author's personal electronic copy, electronic versions of the Work may be made available at the discretion of the Publisher or Author for reviewers and other marketing and promotional purposes.
This removes any hint of contradiction between the promotional electronic copy, which an author can distribute for promotional purposes, and the author's personal electronic copy, which they cannot.

Finally, I added the final sentence to this paragraph:
The Author agrees to be available for publicity and promotion as reasonably requested by the Publisher and subject to the Author's employment and personal obligations. The Author reserves the right to decline any requests for appearances.
Mostly because I had an author whom I bought a flash work from ask where they were going to have to travel to in order to promote recompose. Um, no. Not my intent at all. In fact, I'm mostly leaving that clause in at all in order to provide a template for others in case they need it.

As always, you can browse my contract templates at They are under an MIT license, so you can use them as templates for your own work, suggest them to new publishers as a starting point, or compare the contracts you're getting to them. 

Also, because they're on GitHub, you can actually go back and see the changes I've made to them:  


No comments :