Skip to content

Category: Rants

Just a small rant

Sometimes I really hate software…or maybe just Wordpress

I’ve been struggling for a while to get some kind of workflow in place to track and organize my posts on my photography site. Just having a pile of drafts with no real order to them was causing me to lose things that were almost complete but needed a finishing touch to two. Then I cam across the plug-in Edit Flow which seemed like the a good solution to my problem. It would let me create custom post states (i.e. draft, pending review, etc.), which I could then use to organize my content as I was developing it.

Only problem, Edit Flow’s developers apparently do something with Wordpress’ post_date_gmt field, which Wordpress uses to indicate whether a post is scheduled or not, and what date ot post it on. Because of this, they have a function that runs to normalize the post_date_gmt instead of leaving it to Wordpress’ devices. As a result, Edit Flow basically breaks the publishing and administrative post display behavior built into Wordpress.

Now I’m not sure which is a worse actually.

Wordpress really should have a post_on_date field for each post that controls the scheduling. If it’s set to null—and yes, null is a perfectly appropriate value to represent not applicable, more so than ‘0000-00-00 00:00:00‘ is at least—then the post isn’t scheduled to be posted and Wordpress should behave as if it’s a publish immediately type of thing. On the other hand, if there’s a date stamp in the field, then that’s when the post is scheduled to be published, assuming it’s status is set to publish or scheduled.

Going off on a slight tangent here the date situation in thewp_posts table is simply ridiculous. Granted dates suck, the whole time zones, daylight savings, etc., etc. makes dealing with dates a minefield for even the most experienced programmers. That said, pick a standard and stick to it, either store all the dates in GMT or store all the dates in local time, or GMT with an offset (i.e. YYYY-MM-DD HH:MM:SS ±OFFSET). The rest can be handled though the intermediate code (either at the DB level with stored procedures, views, or dynamic columns) or in the API side though the functions presented to the users.

Getting back to the rant…

Of course the Edit Flow developers instead of working around the issue, say by building their code to GMTify the post_date field, or creating a new field, or storing things in another table, decided to appropriate the post_date_gmt field for something without much concern or though—at least it seems that way—for the fact that doing what they do break Wordpress’s default behavior. I’m sure they had their reasons, and personally I don’t know if I really care what they were, but I really hate people that do things in a way that breaks the functional, if quirky, default behavior unless the point is to deliberately change that behavior. Nor do I think that deliberately breaking the default behavior was their intent.

Oh and how do I come across this little gem?

I was writing a plug-in that would reset that the “scheduled/post on date”. Why isn’t this native functionality, though? It sure as hell should be.

Slight side tangent: What’s worse that it not being native functionality, is the insultingly ridiculous work around that’s trotted out when you Google for how to unscheduled a post in Wordpress. Here’s what your “supposed” to do: Change the date the post is scheduled to be posted on. That’s been the work around for at least a couple of years now to boot, even though there seems to have been patches submitted that fixed it almost 2 years ago.

Back to where I was, ya, so resetting the “scheduled post date” back to “post immediately” is actually as simple as zeroing out the post_date_gmt field, which is a rather trivial task to write a plug-in to do. (Yes, when I’m sure there aren’t any unintended consequences for doing what I’m doing and the code is the way I want it, I’ll probably release the plug in here, under my typical “You can use it, but don’t ask me for help” type license.) Well, at least it would be trivial if there was good documentation available. Instead, you’re left to do something like this.

Google a post hook that sounds about right, or visit this page or this page. Find something that looks reasonable, and then visit here to see where the hook occurs in the Wordpress source code or just grep though the source with something like grep -R 'action_hook' * | grep 'do_action'. Open up the source file, find the function and the hook call, and see if there isn’t a more appropriate action to hook into. In this case there isn’t, I can’t hook into pre_post_update because it doesn’t have a way to modify the post object before it’s put in the DB and doing the DB manipulation directly at that point would overwrite the operation.

Speaking of dropping down to writing the SQL, seriously Wordpress guys, I can do in 5 SQL statements what takes 50 odd plus lines of PHP and god knows how much more code and queries between the function calls and manipulating the data. Should I, or anybody else, do that? Probably not, but damn if it’s not an attractive proposition.

So what have I learned form this?

On one hand, I  can’t imagine giving up Wordpress now that I’m familiar enough with it, that I can actually make it do what I want on a programmatic level. Moreover, the fact you can get plug-ins to do so much (I picked up WYSIWYG Inline Code Command in the process of writing this to save having to drop to HTML to wrap bits in <code></code> tags), makes it real attractive to keep dealing with the annoyances.

On the other hand, some things really make me want to fork Wordpress and re-implement it in a more clean, extensible, clear, way. Then again, I don’t really want to release my plug-ins because I don’t want to feel obligated to support them after I solve my problem, dealing with a major 1100+ file 170,000 odd line (by my count) code base. Such is life.

Unclear Instructions: Setting Ubuntu/Unity Keyboard Shortcuts

I don’t know who wrote the text for the dialog for changing Keyboard shortcuts in Ubuntu 11.10, but wow could they have been more misleading.

The instructions read, “click the row and hold down the new keys,” in reality the only place that will allow you to change the short cut is to click the text directly under the black arrow in the above image. I spent the better part of 20 minutes trying to figure out why I couldn’t change a keyboard shortcut because the directions are utterly useless.

This should probably also be filed under: Won’t file a bug report as it’s too much bloody work, and now I won’t forget how to do it.

Enough With the Updates Already

If there’s one thing I’m really starting to get tired of, it’s software updates. It doesn’t seem like a day goes by when something doesn’t need to be updated. Sure, I could probably get away without updating as much, but given the security of most applications and the fact that most software updates are at least partially security related not applying them seems like asking for trouble.

There has to be a better way.

If there’s one thing that some/most Linux distributions get right it’s updates. Yes, it’s a little annoying that ever time I log into my Ubuntu server it says there are updates. However, at the same time, the list of necessary updates covers everything I’ve installed—at least so long as I installed it from an apt repository.

Windows on the other hand is a comparative mess. Microsoft products update though Windows/Microsoft update, 3rd party programs need to roll their own update mechanism.

Things like Adobe’s Flash player, quite possibly one of the worst security offenders, are their own little special hell. Flash seemingly only seems to check for or at least try to apply updates when you first boot your computer; which means my system that sleeps nightly and is only restarted for OS updates that require a restart—yes, Windows 7 is that stable that multi-week uptimes are not only possible but should be routine—doesn’t prompt about Flash updates virtually ever. Morever, since Firefox, Chrome, and Internet Explorer all use different installers, it’s not just a simple one click update it’s a multi-stage process including downloading the installer twice.

Then there’s the other stuff. Like Wordpress. Updated recently to 3.3. Which I might add is really quite nice compared to 3.2, though since switching to Nginx most of the egregious Wordpress performance issues have at least been mitigated.

Wordpress’s built in upgrade system is nice, when it works, but even that I’m not sure goes far enough. It’s annoying as hell to upgrade Wordpress. Then the themes. Then the pluings. Then have the updater come back and say that more plugins have updates. Why can’t I click “Update everything” and confirm it and have Wordpress update everything that has an outstanding update available?

Then again, the problem isn’t Wordpress, Windows or Linux, it’s the lack of a real software engineering standards and short deadlines aimed at maximizing profits regardless of the expense it causes to the consumers.

This is painfully obvious when you start looking at games. When I got Deus Ex: Human Revolution a couple of weeks ago the first thing it did after installing 8.something gigs of game files, is spend 30 minutes downloading a couple hundred meg patch.

Skyrim is even worse, in fact it’s to the point that I’m glad I didn’t buy it when it was released because so far it’s been an epic cluster fsck of updates and patches, some that actually broke more than they fixed.

I don’t know what the solution is, or if there even is one, but I do know this. I’m freaking tired of updates, and even more tired of software that’s written shoddily in the first place, because it can be updated later.

New AIM Client, now I’m stuck with Message Storage, WTF

I updated the AIM client on my iPhone the other day and signed in to check out what the new software was like. As a side effect of this, I have also been upgraded to AOL/AIM’s new “Message Storage” system, where they keep logs of chat messages for 2 months (and hey they’re working on making it longer!) so they can be synced between mobile phones and multiple computers.

While I can see what you’re trying to do, you’ve done it in a intrusive, annoying, and down right shitty way; and it’s just about enough to make me stop using your chat network entirely.

Strike one, it’s not opt-in; it’s fuck-you-you’re-using-it-in.

I’m stuck with it now because I logged in with the new client on my phone. That’s it, no going back, and no warning that upgrading the client was going to permanently change my account to this new service. Nothing more than a note in the feature list that they can store and sync conversations between devices.

Strike two, it’s not opt out.

Don’t want AOL storing your conversations on their servers? Tough shit, you can’t turn it off. Well other than on a per conversation basis, which isn’t what I’d call opt out. However, there’s no where I can find to disable this shit completely and the FAQ does a very good job of indicating that I can’t disable it at all.

Moreover, since I don’t use the AIM client on my desktop, (I use Pidgin), so I can’t enable their “off the record” mode, which is a piss poor way to “opt out” in the first place. Doubly so when you have to enable it on a constant ongoing basis every time a conversation is started.

Strike three, what the fuck kind of dumb-shit programmer did you hire to implement this? The first message you send to someone after being forced into this shitty little service is prefixed with this lovely wall of text!

“%username%” is using a new version of AIM that stores conversation history so they can see their chats wherever they’re signed into AIM (desktop, mobile, aim.com). If you don’t want your messages stored, you can ask netmasteroc3 to take the conversation “off the record” or use the new AIM so you can do so yourself. Visit preview.aim.com/.faq for more information.

Okay, I can see the need to notify people that conversations are being stored. That’s nice, kind of, until you fucking spam someone with this 4 times in a row because they didn’t respond after the first one and don’t provide a way for the person sending the message to TURN THE FUCKING LOGGING OFF COMPLETELY IN THE FIRST PLACE!

Now when I start a conversation with people, and they start asking me what the fuck am I doing, and I have to explain to my non-techy friends that it’s not, in fact, me who’s logging the conversation, but the shit heads at AOL that have decided that every fucking converstation I start should be logged, simply because I upgraded the client on my phone. And guess what, even the techy ones have a hard time grasping that there’s no mechanism to opt out.

Thanks a lot ass-hats. Time to start migrating to GTalk.

So long Notepad++, and thanks for all the chmod +x

Just as soon as I post about changing from Notepad2 to Notepad++ I’m changing back as I’ve discovered an annoying issue where editing a Linux shell script with executable permissions over a samba share, removes the executable permissions.

What I can’t figure out is why it’s only removing the user’s execute permission. I had thought perhaps it was deleting and recreating the file, which would cause the share’s create mask to remove execute permissions, but that’s not it. If a file is set 0775, it will become 0655 after a save.

I may have a workaround for it in a few days, but for now I’m back to using notepad2 for my editing needs.

Reminders: So many, so frustrating.

Todo lists, tasks, reminders, whatever you want to call them I’m starting to think the correct name is pain in the asses. I currently have 5 completely incompatible implementations of tasks/reminders from 3 different providers, that don’t do me a bit of good since they can’t be synchronized between them.

First, there’s Tasks, in Mozilla Thunderbird/Lightning. It’s great that the Mozilla foundation though that a task list was worthwhile to include the only problem is no service seems to exist that they can be synced with. It won’t even let me create/sync them with the newish tasks feature that Google has added to Gmail/Google Apps for Domains.

Which brings us to Google’s tasks, long awaited and requested they finally got around to implementing them. Only catch is there doesn’t appear to be a way to synchronize them to something outside of Gmail, no support in Thunderbird, no way to get them on my phone. Maybe there’s better support if you’re on an android phone, but that has it’s issues as well.

Finally we have iCloud and Reminders, added to Apple’s iOS 5. Again, there’s no way to sync them (at least as far as I can tell) to a desktop client (at least not a Windows one), or for that matter get them out of iCloud. They sync between my phone and iCloud, I can edit and creat them from my browser though iCloud.com, but is that really ideal? Not to me. They do have a number of really cool features though, like the location based stuff.

NIH (not invented here) syndrome is driving me up a wall, why there isn’t a simple universally agreed upon standard for communicating tasks/reminders between various desktop and mobile devices. I shouldn’t have to fire up iCloud to add a task that I could have added while I was in Thunderbird replying to an email.

The more things go towards being digital, and especially in the cloud, the less they seem to be able to work well together. This, I think, needs to be fixed sooner rather than later, as it stands it’s just driving me up a wall.

MD, RAID10, ARRRRRrrrrrrgggghhhh!!!!

Normally the complexity of doing something in Linux doesn’t bother me. Arcane and convoluted commands don’t scare me, they never really have; they just take some getting use to. The problem I have is when the command, or the underlying system is only half implemented.

My current project has been replacing a pair of 1.5TB WD Caviar Greens with 2TB Hitachi 5k3000s. Yes I see the irony in replacing WD drives with drives made by a company that just sold their drive division to WD. On the up side 500GB more space nets me enough space to backup the rest of the computers on the network and still have as much free space as I had before, which was running down anyway; oh and the Hitachi’s are faster too.

Replacing the drives in the RAID array has gone smoothly enough using the following procedure:

  1. Fail the disk to remove using mdadm /dev/md0 --fail /dev/sdX#
  2. Remove the disk from the array using mdadm /dev/md0 --remove /dev/sdX#
  3. Power down the machine (hot swap is coming in a future upgrade)
  4. Swap the physical drives
  5. Bring the machine back up
  6. Add the new drive to the array using mdadm /dev/md0 --add /dev/sdX#
  7. Let it re-sync.

I’ve done this for 2 1.5TB Greens, one that was failing and one that’s now going to become a proper backup target.

Now that I have two 2TB drives in there, I want to use them, and that means extending the md group to the full size of the array. So far as I can tell, that should be a simple…

mdadm -G /dev/md0 --size=max

…but, apparently that’s not the case if the array is configured as RAID10. RAID10, which gives the performance of RAID0 with redundancy of being able to lose a disk, which IMO is perfect for slow 5K RPM disks. MD even has a nice feature where the RAID10 array can be created in a partial 2-disk configuration then extended to the full 4+ disk configuration later. In the “partial” mode, it behaves exactly like a RAID-1 array.

Which brings me to the meat of this rant. I can re-size a RAID1 array, I can convert a RAID 1 array to 5, 6, or even 0. However, mdadm can’t re-size a RAID10 array, even if it’s running in what amounts to RAID1 mode, or convert it to RAID1 or any other RAID level for that matter.

Sigh…

Now it’s off to back up the damn thing, kill it rebuild it, and restore everything…. At least I’ll know if my backup procedure works.

Arrrgh, I’m just going to complain…

…because I’m too fed up to do anything else about it.

For the past several months I’ve had no end of fun with my VPS. This site, and more importantly, my photography site pointsinfocus.com have been experiencing random downtime. Worst yet, I can almost always bring down the VPS simply by making a post on Points in Focus.

The thing is, I can’t find any damn reason this should be happening. I’ve been monitoring memory usage on my development server, running identical plugins and software and I never exceed my VPS’s memory limits, I don’t even get close. Even running top on the VPS nets nothing intelligent, always showing several 10s of MB of memory free at least, then blam, I get disconnected as the VPS’s processes are killed, VPS is inaccessable. Only by the time that happens, there’s no good reason why, so far as I can tell. The VPS never exceeds the allocated/available RAM, and CPU load is neglegable as well.

I get the feeling that somehow something, even though I can’t figure out what, is exceeding some instantaneous limit, and triggering the process killer. But given the tools available and the fact that the after the processes are killed there’s no way to get access to the /proc/PID/status to get the high water mark either it’s kind of frustrating to try and solve. Of course, even increasing the VPS’s available RAM doesn’t seem to help.

You know, I get the whole idea of VPSes and memory limits, but seriously if you’re going to kill people’s processes because they hit their limits, then the least you could do is provide them with some information about what triggered the kill. Better yet, would be to make the limit “soft” enough that they could actually see what’s actually going on with the tools available.

Sigh….

Someday I’ll have to open a ticket with Dreamhost about this, but not today…

Magicka

I’m not a big gamer, and when I game, I tend to spend way to much time playing then get totally burned out. Which is likely to be what’s going to happen again, this time with Magicka from Paradox Interactive. Then I’ll scream and cry for a week while my fingers recover.

What is Magicka?

Well in short it’s a fantasy RPG that doesn’t take it self, or the whole genera, to seriously. It starts in a Harry Potteresque castle, with you, the obviously n00b wizard being given a quest by Vlad (who’s not a vampire, or so he insists) to save some kingdom.

Quick now, run along and get to your saving the world party, before the other wizards eat all the cheese.

The voice acting is good bit over the top, in a language best described as being one bork-bork-bork away from Swedish Chef.

The game’s core mechanic is an multi-element casting system that’s almost one to many borks past complicated. You have 8 elements: earth, water, cold, fire, electricity, life, shield, and necromancy. Each type has it’s own “style” of attack, from electricity’s chain lightning, to earth’s hurling of boulders. Some types cancel each other out when combined, others  combine into a proton beam of death that would toast even the puffyist Stay Puff man.

With 5 elemental slots in a spell, there’s plenty to play with and learn. Moreover, in many cases strength is increased by using more elements. For example, 1 fire makes a nice little flame thrower, but 5 and you’ve got mount Vesuvius coming out of your staff.

That’s the fun part.

The not so fun part is trying to cast them in combat. Movement is Diablo style point and click. Quite a bit of a departure if you’re use to WASD style games at this point. Elements are conjured with q, w, e, r, a, s, d, and f. Right clicking, casts a directional spell, shift+right click casts an area effect spell, middle-click casts on you, shift-left click swings your sword, but shift-left click with a spell ready casts it on your sword.

Confused yet?

But wait there’s more.

The keys that summon spells can be remapped but not the buttons that cast them. Have a logitech mouse with the middle button set to switch between clicks and freewheeling, better remap that shit or you’ll never be able to heal yourself.

Equipment: thar be dragons here.

Wizards are equipped with a sword and a staff, which is probably why they drown in anything more than ankle deep water. Though there’s no inventory, which makes the whole drowning in more than ankle deep water even more bizarre (must be the velour robes). The real mystery is why the guy in Minecraft, can hold almost 2000 cubic meters of iron can swim without problems but can’t cast a spell to save his life, while a wizard with no inventory what so ever sinks faster than the rock dropped in the lake next to him.

No wizard, is properly equipped without a sword, and Magicka draws on the best of the best. Excalibur makes an early appearance. Though since you’re clearly not King Author, you’ll have to settle for smashing people with the bolder it’s stuck in instead of slicing them to bits, perhaps that’s not a bad tradeoff, actually.

This isn’t a game about loot. Though there’s an inventory key, pressing it brings up a more detailed description of what you’re holding. There’s no money or loot, the spells you learn are listed under your tiny little health bar. Unfortunately, if you haven’t learned the spell in game, you can’t use it, even if you’ve memorized the keystrokes. This is a bit of a bother in the arena where it would be real handy to have haste before you get smashed into oblivion.

The lack of any inventory is actually slightly maddening, when weapons and staffs provide standard RPG style buffs and special abilities, but you can’t actually put them away without swapping them for one on the ground. That awesome staff of healing, that keeps you and your shield healed, while awesome, also heals the guy attacking you and anybody within a good bit of range as well, and you can’t put it away for a while to fight. (Not that you should since clearly you should be acting as a ranged character in this case. Which brings us to another not that you could, since fights become little more than insane free-for-alls.)

The one good thing is that the developers have provided an arena of sorts where you can hone your combat prowess against hoards of angry mobs.

In short, combat boils down to spamming left, right and middle mouse buttons, while flailing on the element keys. Hoping the whole time you don’t light yourself on fire instead of laying a perimeter of landmines in front of the volcano defensive wall. All the while running away like the underpowered pansy you really are when compared to a forest troll or dragon.

Will all the game has going for it–including an appearance by Knights who say Knee like druids summing shrubberies–the game has a huge swath of glitches, bugs, and poor design decisions.

The save system in the Legend of Zelda: Twilight Princess killed the game for me. Not being able to save at any point is quite possibly the single worst design decision that can be made by any developer. And I can’t think of anything worse in terms of lazyness. Ya, Magicka does it that way.

Levels are interspersed with checkpoints where you resume when you die, but otherwise you must complete a whole level in a sitting. Fortunately, levels don’t take very long to complete so it’s not that big of a deal for the time sensitive gamer.

Compounding matters is the apparent lack of any form of enemy scaling, neither in number or difficulty. A single player game appears to have the same number of head-ripping-off trolls that exist in a multiplayer game.

If you watch David “X”‘s game play video on YouTube, he and his friend easily handle Jormungandr. In single player I get pwned in 30 seconds. No ability to receive heals or raises makes for a rather interesting, if one sided, fight.

Judging by my play through so far, I’m going with single player is harder than multiplayer by a large margin. It probably doesn’t help that the controls keep prompting me to light myself on fire.

There’s a point where killing yourself in new and interesting ways is amusing, and there’s a point where you just want to move on. Right now, I’m quickly approaching the latter.

Magicka is yet another digital download only game. That’s both a bad thing and a good thing in my opinion. The good is you don’t have to go buy a box. The bad, you have to wait for it to download; and if you don’t have steam installed, you have to wait for that to download, and then you have to wait for the damn patches to download.

I WANT TO PLAY MY DAMN GAME ALREADY!!!!!!!

All told I spent 4 hours–yes I’ll admit my internet connection is not as awesome as it should be–waiting for the bloody game to download and install before I could get into playing it.

One final note, Paradox, is apparently not known for releasing stable, well-behaved games at release. Magicka is full of it’s share of glitches and bugs; so much so that it was unplayable for many on release. It’s still buggy, and there are still problems, but Paradox appears to be trying to patch them as quickly as they can. I haven’t run into any game ending bugs, but I have run into a few rather annoying glitches.

So be warned, this game could be a buggy mess, or it may not be.

That said, Steam has just informed me that I’ve played a total of 117 minutes already and I only got the game before going to bed last night/this morning. For $9.99, it’s well on it’s way to being a better buy than a movie ticket IMO.

Buy Magicka from Amazon

Logic Lost: Used Game Sales Hurt Developers

Ars Technica is reporting on a Penny Arcade article that’s reporting on a blog post by Computer and Video games.com on how buying used games hurts the game developers.

Okay first things first, I ain’t go no dog in the horse race. I’m not a gamer, I’m not in their market to start with. Well that’s not completely true, I do play some games, at this point their becoming rather antiquated games, but new game releases that I have any interest in are few and far between.

What bothers me, why I even bring this whole thing up, is that apparently somewhere some large portion of the population stopped participating in the logical world and started off on some other past.

The argument that game developers are making is this.

  1. Games cost money to make and support for online multiplayer play.
  2. That money comes from the sales of the game
  3. There are no secondary income sources in the gaming industry, like concerts; game releases are like a movie’s theater release with no DVD to follow.
  4. Ergo when people sell games, they hurt the developer because the money that trades hands doesn’t support the developer’s ability to keep the game’s servers online. (I assume nobody gives a shit about single player games anymore, now that we have the magical internet.)

The problem with this is well 4 does not follow 3. When the seller relinquishes their game disk they also relinquish the ability to play the game. This is what all that DRM that’s suppose to keep people from pirating games is for, you don’t get to keep a copy to play when you give the media away. Because of all that fun DRM, there’s no increase in the number of players. As far as the game companies know, the original user’s IP address changed–yes I know it’s more complicated than that with accounts and what not.

The point is, from the developer’s perspective the costs to run the server for some period of time into the future was paid for when the game was originally sold. There’s no difference in costs between:

  1. The original player playing online for 3 years
  2. The original player playing online for 1 year then selling the game to another buyer who plays online for 2 years.
  3. The original player playing online for 1 year, the selling to someone else who plays online for 1 year, then selling to a third party who plays online for 1 year.

The point is, so long as the play time online is the same, the costs are the same.

The failure in reasoning is really maddening.

However, what might be the most telling from all of this is what it means about the way the developers budget for multilayer capacity. What the developers are really admitting is that they are, in the long term, over selling their servers. That is they don’t really expect anybody to play the game for 3 years, they expect people to play the game for 6 months and then go play the next game they release.

Of course this problem is mostly their doing as well. Since multiple player play is now, almost exclusively, handled though a developer/publisher owned server, ostensibly for piracy reasons. The cost of running those servers falls exclusively on the shoulders of the developers.

By comparison, games that have stand alone servers shift the burden of hosting the multilayer games onto the community. If the community is big enough to support continued access some years down the road, the community, not the developer/publisher, will find a way to foot the bills for those multilayer games.

By tightening their noose around how people can play online they cut their own necks when it comes to who foots the bill for online play.