This module allows to delegate long-running tasks to external services, such as node.js applications.
Examples of long-running tasks: e-mail notifications for all the users of your site, big data processing, web crawling.
This is API module, you have to create the code for your tasks (both Drupal part and external service).
Welcome to the Gnomecast where we talk with gnomes about gnome things and avoid becoming part of the stew. This might be mandatory to avoid being volunteered as ingredients for the stew. Today we have Ang, John, and myself, Chris. Today we talk about Resurrecting your Campaigns.Links
Three weeks ago I wrote about our quest for performance at the Socialist party. This week we had a follow up sprint and I want to thank you for all the comments on that blog.
During this sprint we have been looking into the direction of the amount of groups (+/- 2.700) and whether the amount of groups slowed down the system. We developed a script for deleting a set of groups from all database tables and we deleted around 2.400 groups from the system and we saw that this had an positive impact on the performance.
Before deleting the groups adding a new group took around 14 seconds. After removing 2.400 groups, adding a new group took around 3 seconds. So that gave us a direction in which we could look for a solution.
We also looked what would happened when we delete all contacts who have not a membership from the database and that also had a positive impact but not as huge as the reducing the amount of groups. The reason we looked into this is that around 200.000 contacts in the system are not members but sympathizers for a specific campaign.
We also had one experienced database guy (who mainly knows Postgres) looking into database tuning; at the moment we don't know what the outcome is of his inspection.
From what we have discover by reducing the groups we have two paths to follow:
- Actually reducing the amount of groups in the system
- Developing an extension which does functional the same thing as groups but with a better structure underneath and developed with preformance in mind. (no civicrm_group_contact_cache; no need for nesting with multiple parents; no need for smart groups).
Both paths are going to be discussed at the socialist party and in two weeks we have another sprint in which we hope to continue the performance improvements.
&quot;Death in a Deathless System&quot;: Finding Solace through Empathic Interactivity within the Pokemon Series - by Timothi Ellim
Today’s Guest Article and art comes from the Owlington, artist and gamer. He talks about random encounters and setting them up in Roll20. Take it away Owlington! – Randomly Assigned John
Random encounters. A lot has been said about this subject and a lot has been created to ease the burden of the time poor Games Master, but what purpose do they actually serve, and how can we use them to inject more into our games?
Generally speaking, getting from point A to point B can be a real pain in the ass, even in our mundane lives (mostly due to the lack of Teleporters available, thanks for getting my hopes up Star Trek). There’s the whole problem of time/space being in the way of where we are, and where we want to be. In our chosen fantasy worlds, we’re also subjected to nasty stuff occupying the same time/space that we’re attempting to cross. Goblin ambushes, orc ambushes, human ambushes, bush ambushes…..you get the idea. Creating interesting things to break up the journey is key to creating an immersive world for your characters to live in, and so we have random encounter tables.Random Encounter Tables
Random encounter tables give us an element of randomness in our games that do a few cool things:
- They give the GM an opportunity to tax the characters resources.
- They add to the ongoing narrative.
Let’s look at number 1. In many games, players have a limited amount of resources that they are able to use within a certain time period; this is true of the majority of RPG systems. This resource management is a key mechanic, but whether it’s HP, spells per day, rations or antimatter fuel, you want to keep pressure on your players and not let them get complacent about when they’ll have a chance to replenish their resources. Random encounters add to this uncertainty and create an atmosphere of tension. Also, there’s the tasty, tasty XP and loot as a return for the players, which they’ll appreciate all the more.
So that’s the mechanical side of it: putting pressure on the characters resources.
The second point has the potential to be way more useful for a GM. Random encounters add to the ongoing narrative by introducing an element of uncertainty to the plot, allowing the DM to manipulate the encounter into either new information for the existing narrative, or as a potential branch of a new narrative. With one roll (more or less, but I’ll get to that) you have either the opportunity for more exposition, or to introduce new weirdness or both.
Let’s take The Hobbit as an example. The journey to Rivendell could have been hand waved and suddenly The Company is chatting to Elrond. With the narrative being as it was, and assuming a GM who likes things neat and tidy, one might assume that the GM would stock the area with level appropriate creatures, so maybe a patrol of elves, or some racist humans or something. Instead the Company encounters a much more interesting threat, and the story is changed dramatically with the appearance of 3 trolls, new information about the monsters in the world (which is almost foreshadowing for the trolls in the Lord of the Rings) and acquisition of the elven blades that help create an interesting encounter between the Dwarves and Elrond. Players like stuff to happen. They want exciting stuff to happen, and by using random encounter tables with a bit of GM ingenuity we can give that to them, and then some.
Random Encounter Table for Improv DMing
They want exciting stuff to happen, and by using random encounter tables with a bit of GM ingenuity we can give that to them, and then some.Random encounters can be fun and engage both the mechanics and the narrative, and by doing so engage the players. I’m going to show you my super simple way of making a Random Encounter Table for improv DMing. You’re going to need a fist full of standard polyhedral dice, and your brown pants.
The first thing you need to do, is work out if there even is an Encounter.
- To do this I roll 1d10.
- On a 10+, the players have a random encounter.
- If you roll a 1, you will encounter terrain that may or may not be fun (keep reading, it will make sense), but no enemies.
- You can add/subtract modifiers to increase the odds, maybe a +2 for night time, or maybe the road is super spooky.
- That’s up to you, Dr DM.
Next, we check for what kind of encounter we have. Let’s check the Disposition.
- roll a d4.
- On a 1, the encounter will be with hostile creatures.
- On a 2, they will be friendly.
- On a 3 or 4, the creature will just act like a normal creature of that type.
Yes, this means the peaceful unicorn might want to murder you, and the hungry vampire just wants someone to talk to, but that’s cool.sometimes it’s cool just to find a cool place, sometimes that place will try to kill you.
So we know who, and maybe why; next we find out where: the Location. Much like the previous roll, we’re going to see if things are going to help or hinder us.
- Roll a d6.
- On a 6, the place where the encounter takes place will be beneficial. Maybe the players have the high ground, or maybe there’s a fountain that heals Good Aligned creatures 1d4 hp per round. Whatever it is, it’s going to be there explicitly for the players.
- On a 1, the terrain will actively hinder the players (but not the opponents). Maybe it’s a dank grotto with poisonous mushroom spores, or maybe it’s a macabre body horror circus.
- 2-5 means that the terrain doesn’t favour either side or it could actively work against both. Remember what I said above about rolling a 1 for an encounter? That’s where this comes in; sometimes it’s cool just to find a cool place, sometimes that place will try to kill you.
- Lava pits that threaten just the players
- An evil temple hinders healing
- Zombies grasp through the walls on either side
- A barking dog thwarts your attempts to hide
- An open field
- A gladiatorial arena
- A glade that heals everyone in it every round (bad guys too)
- A thicket that hinders everyone
- A web infested forest
A friendly location will always benefit the players in some way by providing bonuses to combat or resources if the encounter is non-combat.
- A small, well-kept keep
- A serene glade
- An ancient alter dedicated to a benevolent god
- Higher ground
- A hidden approach
- An ally of the main villain of the campaign
- A new foe that’s been stalking the PCs
- A regional faction that has an interest in the players
- pretty much anything out of the Monster Manual.
- refugees with information
- an injured wizard
Awesome! Cool! You’re so attractive Andy! I hear you, but what about the monsters? What do I put there? Well, this is your last roll. Throw a d12. Here’s where it gets a little tricky, and you need a table.1 2, 3, 4 5, 6, 7, 8 9, 10, 11 12 Inconsequential Easy Medium Hard Deadly This should pose no challenge to the party in combat. Encounter should be dangerous only if the characters mess up. Standard encounter at appropriate level. The encounter has the potential to be deadly, but won’t result in TPK. I hope you brought those spare character sheets you printed. Very possible TPK.
Alright! Now you know that the encounter is happening, where it’s happening and how difficult the players will find the encounter. The question remaining is who are the brave adventurers encountering. It’s the crux of this whole thing, the cornerstone of the mechanic. The answer is; it depends. I don’t know, you’re the DM you work it out.
Harsh, I know, but that’s what it’s all about. What does your game need, what does it demand you to throw in the way of your players. If the characters are in Mirkwood, there’s going to be spiders. If your players are in Alexandria, and the zombie horde has escaped The Quarry, there’s going to be lots and lots of zombies, but maybe even some raiders (seriously, what the heck The Walking Dead?). If your characters are in a dungeon ruled over by a troll lord….well, you know what to do. Sometimes you might want to just go against the flow, and throw something weird at your players, a noble troll paladin, or a insane murderous princess. You know the place, level of difficulty, and the initial disposition of the encounter, the rest is just about using your imagination.Using this in Roll20
The first thing we need to do is set up some tables.
We’re going to need 4 of them. The first one we will call them ENC, DIS, LOC and DIF.
ENC will contain 3 table items, but I like to flesh them out with many more variants. Call one of the items “Encounter”, one will be “Terrain” and the other will be “Nothing”. Set the weight of “Nothing” to be “8” and the weight of “Encounter” and “terrain” to “1”. I personally have 8 distinct items for nothing that say stuff like, “Huh, must have been the wind”, “Your journey continues without incident” and so on. The key here is the there is a 1/10 chance for an encounter to happen.
DIS shows the disposition of the encountered creatures. We’re going to make 3 Items here. “Friendly”, “Neutral” and “Hostile”. Give “Friendly” and “Hostile” a weight of 1, and “Neutral” a weight of 2. Again, you could make a whole heap of synonyms but this one stays hidden from the players, so it’s kind of pointless.
LOC is, I think, another one that you could potentially blow out with a whole heap of additional information, like what sort of location it is (maybe it’s religious, or arcane, or of historical import), but for now, let’s just set it up to have 3 items. Hostile Terrain, Neutral terrain and Friendly terrain. Set the weighting to 1 for hostile and friendly, and 4 for neutral.
DIF is the final one. It will have 4 items; Inconsequential (weight 1), Easy (weight 3), Medium (weight 4), Hard (weight 3), Deadly (weight 1). This table will tell you how difficult the encounter will be.
Now that you have your tables, you’re going to set up your macro for your players to roll on. My macro looks like this:
/em rolls to check for an encounter:
The first line creates an emote macro that says that an encounter roll has been made. It’s flavour text.The second line will tell the players if there’s an encounter or not. Writing this, I can see the potential to create an additional entry that gives a false negative to use for ambushes, but I’ll leave that for another time. The third line sends the results of the tables we made to the GM. Only they know what’s really happening and the amount of trouble the characters are in.
Here’s what the output looks like, and what I might do:This one’s easy. As a gm, nothing has happened. The coast is clear. Yay! An encounter! According to the roll, it will be with friendly creatures, in a friendly location. In this case, maybe the adventuring party meets up with a group of merchants who invite them to stay in the safety of their camp for the night. The PCs get fed and don’t need to keep watch.
This is a great place to give the PCs more information about what to expect later on in the adventure. Use the merchants as foreshadowing for a future encounter, or to reaffirm any ideas that the PCs might have (“Why yes, we too have heard the stories of the Troll-hounds, in fact, I got this scar from one not far from here, but I discovered their weakness, which is……”) Another roll, and another encounter. Hostile creatures tells me that the enemies are specifically targeting the players, so they may have been sent by the BBEG, or they could be an entirely new source of conflict who have taken an interest in the PCs. The location is neutral, so I need to decide if both or neither will be effected by the terrain. Considering that it’s an easy encounter, I would go for the former, maybe a simple roadside encounter.
So there it is. This is how I do encounters. I hope you find something useful in there that’s going to help your game, or at least something that made you raise an eyebrow slightly and go say ”hmmm, interesting”. There is room here for so many variants, and so many tables to describe the minute details of the encounter, but sometimes leaving it vague and giving yourself room to create is better. For me, the method of creating random encounters gives structure from nothing, and the visceral feeling of throwing a handful of dice and seeing what happens is icing on the cake. Just be sure to remember the golden rule: make awesome things, and just roll with it.
Grab some dice, give them a roll and tell us what you concoct in the comments!
Venga Gateway Connect for Drupal is Venga’s integration solution for a fast, efficient, and error free website translation process. Venga Gateway Connect seamlessly integrates with your Drupal Installation to eliminate copy & paste and error prone email transfers. This integration gives your team full access to Venga’s suite of resources including our network of qualified linguists and subject matter experts, knowledge management tools and assets, and our Venga Gateway Client Portal, customized to solve your unique project and budget tracking needs.
Startups and products can move faster than agencies that serve clients as there is no feedback loops and manual QA steps by an external authority that can halt a build going live.
One of the roundtable discussions that popped up this week while we’re all in Minsk is that agencies which practice Agile transparently as SystemSeed do see a common trade-off. CI/CD (Continuous Integration / Continuous Deployment) isn’t quite possible as long as you have manual QA and that lead time baked-in.
Non-Agile (or “Waterfall”) agencies can potentially supply work faster but without any insight by the client, inevitably then needing change requests which I’ve always visualised as the false economy of Waterfall as demonstrated here:
Would the client prefer Waterfall+change requests and being kept in the dark throughout the development but all work is potentially delivered faster (and never in the final state), or would they prefer full transparency, having to check all story details, QA and sign off as well as multi-stakeholder oversight… in short - it can get complicated.
CI and CD isn’t truly possible when a manual review step is mandatory. Today we maintain a thorough manual QA by ourselves and our clients before deploy using a “standard” (feature branch -> dev -> stage -> production) devops process, where manual QA and automated test suites occur both at the feature branch level and just before deployment (Stage). Pantheon provides this hosting infrastructure and makes this simple as visualised below:
This week we brainstormed Blue & Green live environments which may allow for full Continuous Integration whereby deploys are automated whenever scripted tests pass, specifically without manual client sign off. What this does is add a fully live clone of the Production environment to the chain whereby new changes are always deployed out to the clone of live and at any time the system can be switched from pointing at the “Green” production environment, to the “Blue” clone or back again.
Assuming typical rollbacks are simple and databases are either in sync or both Green and Blue codebases link to a single DB, then this theory is well supported and could well be the future of devops. Especially when deploys are best made “immediately” and not the next morning or in times of low traffic.
In this case clients would be approving work already deployed to a production-ready environment which will be switched to as soon as their manual QA step is completed.
One argument made was that our Pantheon standard model allows for this in Stage already, we just need an automated process to push from Stage to Live once QA is passed. We’ll write more on this if our own processes move in this direction.
This module provides ability to migrate your bibliographic data from the Bibliography (biblio) module (Compatible with 6.x and 7.x versions).