Achievements 7.x-1.2 released

Achievements 7.x-1.2 has been released:

  • Achievement unlock notifications are now JS fadeins and offline-able.
    • We no longer use drupal_set_message() to inform of an unlock.
    • A new achievement-notification.tpl.php controls the appearance.
    • Unlock notifications now fade in and out at the window's bottom right.
    • We now track whether a user has seen an achievement unlock notification.
    • If they haven't, they will the next time they login or access the site.
  • Leaderboard top rank counts can now be tweaked in the relevant configs.
    • This is in preparation for "relative leaderboards" planned for 7.x-1.3.
  • Unlocked achievements on user/#/achievements can now be unsorted.
    • That is, instead of "move to top" they can remain "as defined in code".
    • Defaults to "move to top". Config at admin/config/people/achievements.
  • Block 'achievements-leaderboard' renamed with underscores not dashes.
    • If you're using this block, you'll need to place it again upon upgrade.
  • Fixed a few PHP warnings when a user has yet to unlock any achievements.
  • Achievement unlocks are now logged in watchdog.
  • Variables are now properly deleted on uninstall.

Achievements 7.x-1.1 released

Achievements 7.x-1.1 has been released (with screenshots for installer trepidation):

  • Achievements can now be categorized into groups.
    • Grouped achievements will be displayed within jQuery UI tabs.
    • If groups exist, ungrouped achievements "upgrade" automatically.
    • See achievements.api.php for more on how to define achievement groups.
  • Achievements can now have images.
    • Three possible display states: locked, unlocked, and hidden.
    • Admins may set the default images at admin/config/people/achievements.
    • An 'images' array has been added to hook_achievements_info() definitions.
    • Per-achievement images can override the default on a per-state basis.
    • CSS tweaks were made for a more flexible achievement display.
    • Default images have been provided for each of the three states.
    • Administrators can now manually give and take achievements from users.
      • It's problematic on progression-based achievements and internal statistics.
      • hook_achievements_info() gets 'storage' to define where statistics are kept.
      • If 'storage' is not specified, assume it exists under the achievement ID.
      • See admin/config/people/achievements for the disclaimer text on usage.
      • See achievements.api.php for more on 'storage' and a revised HOWTO.
    • A new permission, "Earn achievements", has been added.
      • It is REQUIRED and NECESSARY for all roles that can unlock achievements.
      • Core functions check for it so you shouldn't need it in your own code.
      • If you think you need to check, use achievements_user_is_achiever().
      • Removing this permission from a role does NOT delete data or ranks.
      • It does stop, however, the collection of new data, points, or unlocks.
    • achievements/leaderboard/NONEXISTENT now returns a 404.
    • Locked achievements are now displayed on a user's achievements tab.
    • No more warnings when viewing a user with no achievement unlocks.
    • 'id' is no longer duplicated in hook_achievements_info() definitions.
    • achievements.tpl.php has had its PHP moved to template_preprocess_hook().
      • New variables have been added to streamline the display code.

    Achievements 7.x-1.0 released

    The first "official" version of my Achievements module is now available for Drupal 7.x. Achievements originated as a Drupal 6 module from 2008 which I just never got around to properly supporting with a Drupal project - it has lived the past three years as a tarball attached to an issue. Due to some recent interest from others, however, I've since finalized a new 1.0 with lots of incremental improvements, with a particular eye toward supporting very large installations. These same interested parties will be satisfying a number of new features and improvements over the coming weeks, including:

    • Per-achievement images and the ability to categorize your milestones.
    • Manual/administrative granting/removing of achievements.
    • A JavaScript popup, ala Xbox 360 or World of Warcraft, instead of drupal_set_message().
    • Progress meters for grindish achievements.

    ...and a healthy bit more.

    Link Dumpage for 2011-03-23

    Notable links enjoyed today:

    • "The Life of Gargantua and of Pantagruel (in French, La vie de Gargantua et de Pantagruel) is a connected series of five novels written in the 16th century by François Rabelais. It is the story of two giants, a father (Gargantua) and his son (Pantagruel) and their adventures, written in an amusing, extravagant, satirical vein. The text features much crudity, scatological humor, and violence. Lists of explicit or vulgar insults fill several chapters. The censors of the Sorbonne stigmatized it as obscene, and in a social climate of increasing religious oppression, it was dealt with suspicion, and contemporaries avoided mentioning it. According to Rabelais, the philosophy of his giant Pantagruel, "Pantagruelism", is rooted in "a certain gaiety of mind pickled in the scorn of fortuitous things" (French: "une certaine gaîté d'esprit confite dans le mépris des choses fortuites")."
    • Delicious tags: biology science nature death ants
      "This is one of my favorite things about ants -- the ant death spiral. Actually, it's a circular mill, first described in army ants by Schneirla (1944). A circle of army ants, each one following the ant in front, becomes locked into a circular mill. They will continue to circle each other until they all die. How crazy is that? Sometimes they escape, though. Beebe (1921) described a circular mill he witnessed in Guyana. It measured 1200 feet in circumference and had a 2.5 hour circuit time per ant. The mill persisted for two days, "with ever increasing numbers of dead bodies littering the route as exhaustion took its toll, but eventually a few workers straggled from the trail thus breaking the cycle, and the raid marched off into the forest."
    • Delicious tags: wikipedia games
      "These are games where the rules are intentionally concealed from new players, either because their discovery is part of the game itself, or because the game is a hoax and the rules do not exist. In fiction, the counterpart of the first category are games that supposedly do have a rule set, but that rule set is not disclosed." Includes discovery games, hoax or joke games, and games in works of fiction.
    • Delicious tags: zombies culture science
      "Let's pretend for a moment that zombies are real (as if half of you weren't already daydreaming about that very thing). Have you noticed how most zombie movies take place only after the apocalypse is in full-swing? By the time we join our survivors, the military and government are already wiped out, and none of the streets are safe. There's a reason the movie starts there, and not earlier. It's because the early part, where we go from one zombie to millions, doesn't make any sense. If you let the creeping buzzkill of logic into the zombie party, you realize the zombies would all be re-dead long before you even got a chance to fire up that chainsaw motorcycle you've been working on. Why?"
    • Delicious tags: nature wikipedia india rats
      Mautam (Mizo, ’bamboo death’; also spelt mautaam) is a cyclic ecological phenomenon that occurs every 48 years in the northeastern Indian states of Mizoram and Manipur, which are thirty percent covered by wild bamboo forests, as well as Chin State in Burma, particularly Hakha, Thantlang, Falam, Paletwa and Matupi Townships, creating a widespread famine in those areas … This event is followed invariably by a plague of Black Rats in what is called a rat flood. This occurs as the rats multiply in response to the temporary windfall of seeds and leave the forests to forage on stored grain when the bamboo seeds are exhausted, which in turn causes devastating famine."


    Link Dumpage for 2011-03-22

    Notable links enjoyed today:

    • Delicious tags: television games culture
      "In thirty-eight years, The Price is Right never had a contestant guess the exact value of prizes in the Showcase showdown. Until Terry Kniess outsmarted everyone — and changed everything … He looked into the audience for a moment, leaned into his microphone, and said his bid as though he were reading it from a slip of paper: $23,743. … "Wow," Drew Carey said. "That's a very exact bid. We'll be right back, folks," Carey said. "Don't go away." And then the show just stopped."
    • Delicious tags: args viral marketing games
      "The goal for marketing types in the Internet age is a "viral" ad campaign. You pull off some publicity stunt, there's tons of coverage on the internet, you wind up with millions of eyeballs for virtually no cost. But viral campaigns are all about pushing the envelope. You have to shock people to get their attention, and this is where the potential for disaster lies. Awful, hilarious disaster."
    • Delicious tags: games history culture language
      "I periodically post about “games and names,” or etymologies and explanations of names and words that appear in video games. Over time, I’ve come across various bits of information that I didn’t feel deserved their own post but that might be interesting to readers. I began collecting these bits in what was at one point a short list of odds and ends but which now exists as a bigger-than-planned list of name etymologies, translation oddities, and my own geek theories — with footnotes, no less." Includes the Legend of Zelda, Mario, Donkey Kong, Wario, Sonic the Hedgehog, Street Fighter and other Capcon titles, Final Fantasy, Metroid, Kid Icarus, Castlevania, Earthbound, Chrono Trigger, Secret of Mana, Mega Man, and more.
    • Delicious tags: wikipedia art roman greek history
      The Venus Kallipygos, also known as the Callipygean Venus, all literally meaning "Venus (or Aphrodite) of the beautiful buttocks",[1] is an Ancient Roman marble statue, thought to be a copy of an older Greek original. In an example of anasyrma, it depicts a partially draped woman, raising her light peplos to uncover her hips and buttocks, and looking back and down over her shoulder, perhaps to evaluate them."
    • Delicious tags: games code design
      "Humans have a tendency to anthropomorphize AI opponents. We think the computer is going through a thought process just like a human would do in a similar situation. When we see the ball end up in an advantageous position, we think the computer must have intended that to happen. The effect is magnified here by the computer's ability to pot a ball from any position, so for the computer, all positions are equally advantageous. Hence, it can pot ball after ball, without having to worry about positional play. Because sinking a ball on every single shot would be impossible for a human, the player assumes that the computer is using positional play."
    • Delicious tags: movies mindfuck
      "Mindfuckers aren’t just Dadaism by another name—there has to be some rationale for the mayhem, even if it’s far-fetched (orbiting hallucination-inducing lasers!) or lame (it was all a dream!). And they are not those movies where the audience (and the characters) think they know what’s happening, only to discover in the final moments some key twist that turns everything on its head. (Bruce Willis was balding the whole time?!) ... In Mindfuck Movies you know that Something Is Going On. It’s just not clear what." Covers Spellbound, Rashômon, La Jetée, 2001: A Space Odyssey, Solyaris, Videodrome, The Quiet Earth, Jacob’s Ladder, The Game, Abre los ojos, Cube, Dark City, Memento, Mulholland Dr., Donnie Darko, and Primer. 
    • "Some of the characters we know and love were recycled from other TV shows and commercials Jim Henson worked on, while others were invented by using whatever materials were around." Covers Cookie Monster, Elmo, Telly Monster, Count von Count, Kermit, Swedish Chef, Missy Piggy, Rowlf the Dog, Oscar the Grouch, Gonzo, Statler and Waldorf, Beaker, Fozzier Bear, Bert and Ernie, Grover, Sweetums, Rizzo the Rat, Pepe the King Prawn, and Herry Monster.
    • Delicious tags: wikipedia reference tricks cons
      "Confidence tricks and scams are difficult to classify, because they change often and often contain elements of more than one type. Throughout this list, the perpetrator of the confidence trick is called the “con artist” or simply “artist”, and the intended victim is the “mark”."
    • Delicious tags: puzzles games adventure design
      "In this article, I will be taking a closer look at the various types of adventure game puzzles, how they relate to the gameplay, and even how some of these basic forms relate to other game genres." Creates a classification of self-contained puzzles (interaction, mini-game, and riddle puzzles) and key puzzles (inventory, pattern, and implicit information puzzles).


    Bot 7.x-1.3 released

    My Drupal IRC bot.module received a new release today, bringing it to 7.x-1.3:

    • #273116: bot_auth.module added (thanks snufkin, RobLoach).
    • scripts/bot_start.php: the new location of bot_start.php.
    • scripts/ added: restarts the bot if it's not running.
    • #524218: Drush integration added (thanks jonhattan, q0rban, sirkitree).
    • is now a text column (required for large installations).
    • All incoming messages are forced to UTF-8 (thanks bellHead, nick_vh).
    • #918966: New Net_SmartIRC wrapper; hook_irc_access added (thanks Bevan).
    • All forgotten strlens()s have been changed to drupal_strlen().
    • All forgotten substr()s have been changed to drupal_substr().
    • First release for Drupal 7.x; based on 6.x-1.2 release.


    Comic Vineyard 1.1 released

    [Original post on Comic Vine]

    Comic Vineyard is a way of tracking your comic book collection using Comic Vine's functionality and data. You maintain your public collection of comics in a Comic Vine "list" and then use Comic Vineyard to take that data and turn it into a display of your choice. Comic Vineyard exists to address two of the most troubling aspects of tracking your comic book collection: getting all your data in, and getting better looking data out in a way you'd like. Without further hesitation:

    The goal of Comic Vineyard v1.2 will be theme improvements: I've got a lot of incremental tweaks there that should be easy to do but, because of the Cataclysm, I don't have an immediate idea of when the next release will be. Don't fret, however: keep your comments, suggestions, complaints, etc., coming, and I'll address them regardless.


    Bot 6.x-1.2 released

    My Drupal IRC bot.module received a new release today, bringing it to 6.x-1.2:

    • #937836 and #937820: PostgreSQL and E_STRICT fixes (thanks Shiny).
    • #477596: Fixed regexp error in bot_seen.module (thanks Gurpartap).
    • bot_tell.module can now remind you of things: "BOTNAME: help Reminders?"
    • bot_potpourri.module added (thanks ae1): "BOTNAME: help Timezones?"
    • bot_aggregator.module added (thanks cwgordon7/snufkin). Additions:
      • Configuration has been moved to the feed config form, not our own.
      • Different feeds can now be sent to different channels, based on config.
    • If we receive an error containing "flood", we slow down our sends.
    • If the server or client library receives an error, we'll watchdog it.
    • If a channel bans us, it is now permanently removed from the join list.
    • #648606: Chinese "ni hao" is mis-spelled in greetings (thanks JohnAlbin).
    • Advanced/debugging option added: whether to use real sockets or not.
    • bot_project: fixed broken Trac metadata from ticket/revision exports.
    • bot_project: function lookups now allow dashes in the branch name.
    • irc_bot_cron_faster (one minute) and _fastest (15 seconds) are available.
    • #564524: bot_project now reports comment counts on d.o URLs (thanks killes).
    • bot_tell now accepts :;, after a told nick (thanks webchick).
    • Channels are now joined every 15 seconds instead of at initial connection.
    • Logging checks for channels are now case-insensitive (thanks mozillamonks).
    • #362661: Attempt to GHOST and IDENTIFY on nick clashes (thanks seutje).
    • #380330: Added perms for factoids, karma, and project (thanks lut4rp).
    • #391916: bot_log needed another index for speedier table SELECTs.


    Link Dumpage for 2010-10-13

    Notable links enjoyed today:


    MediaWiki 1.16, jQuery, and MediaWiki:Common.js

    Now that MediaWiki ships with jQuery, the most obvious desire is to use jQuery within MediaWiki:Common.js to control aspects of your wiki. Unfortunately, 1.16's support seems to have only been intended for MediaWiki extensions, not end-users. Thanks to some help in the #mediawiki IRC channel, there's a simple workaround. Add the following to the bottom of your LocalSettings.php:

    // required for 1.16 - what about 1.17?
    $wgExtensionFunctions[] = 'efAddJquery';
    function efAddJquery() {
      global $wgOut;

    And you're done: now you can add jQuery to MediaWiki:Common.js. To avoid conflicts, MediaWiki renames the standard jQuery $ to $j, so you'll have to watch out for that in any scripts you write. I've not done anything huge or complicated yet, but the following snippet worked just fine for me:

    $j(document).ready( function() {
      $j(".spoiler-click").click(function () {

    You can see it in use by clicking "Show/hide guide" on


    Subscribe to RSS