ROW stands for Results Oriented Websites, and it means just what it says. We think that all of our clients – and everyone in the United States! – should have a meaningful web presence, with a website that produces real results and helps them grow their company.
The ROW Roadshow is our way of taking that...Read more
Today GDC Europe officials dive deeper into the results of the 4th annual European State of the Industry Survey to suss out who, exactly, Europe makes games for -- and where European devs believe the best games are being made. ...
Ubisoft posted earnings for its first quarter of the fiscal year today that were a bit better than the company's internal projections, due in large part to sales of digital goods. ...
On our first day as interns at Cheeky Monkey, we (Jared and Jordan) were given the task of exploring the somewhat uncharted waters of using Behat, an open source BDD (Behavior-driven development) testing framework, with Drupal 7.
Why BDD Testing?
We all know that testing is important, but why do we bother with “BDD” testing?
Behavior-driven development testing is exactly what it sounds like, testing the behavior of the site. This makes the tests very different than say a unit test.
This module allows your Drupal site to act as a Name Mapping Authority for ARK (Archival Resource Key) Identifiers. It will resolve ARK identifiers to content on your site which you have designated as ARK (which also produces the identifiers and tells you and others what they are).
In development for Drupal 7. Unfortunately no Drupal 8 plans at this time but would be happy to collaborate.
Maybe you are already grokking Drupal 8's new configuration management system; maybe you've already absorbed D8's embrace of object-oriented code.
But that doesn't mean you should scoff at easy on-ramp introductions to Drupal 8. Solid overviews of Drupal 8 can be tremendously valuable when you're working on a team that includes non-technical members. They also come in handy when you are advocating in-house for D8 adoption.Tags: acquia drupal planet
It’s been almost six months since I started at Zivtech as a Junior Developer, and I could never fit everything I’ve learned into one blog post. That said, one of the best things I’ve learned is how to compress my database and copy it across servers. These two commands are drush sql-dump and scp. If you’re unfamiliar with Drush, you can find some background information here.
I learned how to use drush sql-dump while using Probo.CI, which is our internally-developed continuous integration tool. Since we use Probo.CI on every project, I had to figure out how to set it up. Essentially, you have to upload your database to the Probo.CI app to ensure that your new feature will work on the site when you’re testing your pull request. Here is some helpful documentation. The fourth step in this documentation is:
Step 4: Use Drush to get and compress your database in a sql file.
If you wish to compress your database you’ll need to use gzip. Other zip files won’t work.$ drush sql-dump | gzip > dev.sql.gz
To a new developer, this might look a little intimidating, but it’s just like it sounds; you’re dumping your database into a gzip file, dev.sql.gz, which will then be uploaded. In this example of using Probo, you’re uploading the gzip file with probo-uploader (a command line client for uploading files). Using Probo was a great entry point into learning drush sql-dump which, as you’ll see below, can be used in other capacities.
I’ve also had to use drush sql-dump alongside scp, which means secure copy. So I’ve dumped my database into a .gz file; great, but now what? Somehow I have to get the database to another environment or server. In the previous example, I didn’t need to copy the database to a server; everything could be done either locally or from my virtual machine. There are times when you need to import a database to a particular environment. If you need to copy the database from a remote host to the local host:
If you need to copy it from the local host to a remote host:
Credit for the above examples goes to email@example.com. For more scenarios, go here.
Once you’ve copied the gzip file to the environment it needs to be in, you need to DROP your current database so you can import the new one you just copied. That’s where these commands come in:
For more information, here’s another great resource.
That’s all there is to it. You dumped the database you wanted into a gzip file, secure copied it to the environment, dropped the old database, and then imported the new one. That’s how it works!
The Introduction - What is Holistic SEO?
Holistic SEO is a term used to describe development in which content, marketing, technical best practices, performance, security, user experience and user intent come together to create an ideal URL on the internet, about a certain topic.
Why should we advocate taking a Holistic approach to SEO? As search engine algorithms get more complex and intelligent, we won't be able to control or predict changes, and more importantly, it defines a set of best practices that we can develop upon which helps the content creators ultimately benefit the user.
Today's Google algorithm is putting more value on Topic and User Intent than Keywords. Content pieces that once ranked well for ultra specific keyword terms, are quickly being, or have been replaced by much longer form content that:
- Answers questions the searcher has asked.
- Is deeply informational about a topic.
- Helps the user complete a transaction.
Here is an example, HouseLogic.com's Guide to Hardwood Floor Finishes is listed for the following search terms:
As I’ve been getting pulled farther and farther back into the D&D 5e fold, I’ve taken to running more interesting concept games alongside the longer form mini-series campaigns I like to do. I’ve also been running a lot of games for the group of teens at the Worthington library through the Knights of the Northwest program. Since the teens there are always up for a challenge, I decided to bring out something I’ve always wanted to do in a Dungeons and Dragons game – a fight against the Tarrasque as the end point to an adventure.A Super Quick Primer On The Tarrasque
If you’re not familiar with the Tarrasque, it is an epic monster that has been around since AD&D. Over the various editions it’s been an incredibly formidable foe who only the highest level PCs take on. Forums like Reddit, RPGNet, ENworld, and Giant In The Playground are full of strategies to tackle the monster and forumlas for taking it on at incredibly low levels. In the current edition of D&D (5e) the Tarrasque has fewer of the nastier powers of older editions to bring it in line with the lower magic of the system. So, no major regeneration or requirements of wishes to keep it down. Still, with 676 hit points, advantage on all magic resistance rolls, a reflective carapace that makes all ranged spell attacks USELESS, a frightful presence before making its 5 brutal attacks, and reactionary legendary actions that trigger at the end of the PCs turns… well, it’s still pretty brutal.
My Tarrasque was mostly 5e raw, and no rolls were fudged. I did drop in a bit of old school flavor and mechanics to make it even more challenging. On every 3rd round it rolled a d6 and on a 5 or 6, it regenerated 100 hit points. To keep it dead the group needed to use a wish otherwise it would regenerate within a year. Here’s how it went.15 Rounds Till The End
- Pre-Game – I gave the teens the option to make their own characters at 20th level with no magic items. The tarrasque has a +19 to hit, so it’s likely going to hit even the highest available armor classes on anything but a crit. Only one player remembered to write one up, and he brought a Bard, which ended up being the most useful character of the entire game, but we’ll get to that. I had pregens for the rest of the group, pulled straight from Table Topping because time and prep was limited before the actual game. The starting lineup was
- Bard Level 20
- Barbarian Level 20
- Paladin Level 20
- Warlock Level 20 (Plus imp familiar who got frightened away right at the beginning)/
- Prep – Since this was the culmination of a campaign, we went with the assumption that the PCs had done some prep. They had tracked the tarrasque to an ancient coliseum where it had been lured by many previous adventurers who had failed to kill it. I handed out 3 inspiration points per player and 3 healing potions per player. I was quite proud that they were down with the teamwork and asked if they could pool the inspiration into a group pile so whoever needed it could use it. I went with that, and proceeded to scare them by reading off all of the Tarrasque’s stats that they would likely have learned about during research. They got a full readout and familiarity with the stat block, which led to:
Round 1: “HIDE HIDE HIDE! Nobody alert it!”
The first round began with taking up positions hiding among the various ruined columns and keeping well out of its way. The Tarrasque sniffed at some things and failed its rolls to notice them. It doesn’t have a lot of high stats on the mental side of things. I’d done a great job of scaring them with how easily it could take them on, so they weren’t taking any kind of chances. The Bard decided to cast a Programmed illusion of a Storm Giant picking about in some rubble, noticing the Tarrasque, and then proceeding to attack it for the duration of the spell, as well as dancing to distract it.
Round 2: Let’s set up all the doomed plans
The illusion of the Giant was noticed, and per the rules the Tarrasque didn’t get a save, so it began to engage this weird thing in its territory. Round 2 was spent hiding behind the various rubble, except for the Paladin who decided to trigger divine sense. He located something of heavy divine presence in one of the myriad Dragon and large beast skulls that were laying about. The Barbarian decided to sneak around to try to get closer while the Tarrasque was distracted by the illusion. The illusion began its attack sequence, which the Tarrasque recoiled from. Per the spell stating that the illusion has no physical element, the monster got confused by and then uninterested in the magic. It smelled the Barbarian and began to turn. Now things were starting to get interesting. The Bard summoned up an Earth Elemental to give one more point of distraction, which it served as amiably, for one round.
Round 3: We’re going to need a bigger wall
The Bard cast Prismatic Wall (9th level) to hide behind. The Paladin snuck forward to the skull and searched inside it. He found a holy avenger in the skull and immediately switched out weapons. Since they didn’t have magical anything, I seeded all of the skulls with items that might help them, but trying to get to the far apart skulls meant rounds not engaging the beast which could devour them in a bite. The illusion of the Giant continued to dance and do ninja-like parkour flips around the very empty part of the arena, according to its programming.
Round 4: Earth Elementals are crunchy
The Barbarian kept moving into attack range, the Warlock remained hidden, and the Tarrasque made one reactionary attack against the fairly unsneaky Barbarian, knocking him down about 50 hit points. The Elemental attacked the Tarrasque ineffectively, and then took 190 some points of damage from a full attack, crumbling the summoned creature to dust. The Bard used one of his few teleports to pull the rest of the party behind the wall since they’d taken damage and he was now very, very scared of what the beast could do.
Round 5: Another brick in the wall
The Tarrasque was drawn and enraged by the shiny wall. It also saw the Elemental come at him from that direction, and having an abysmal intelligence, it rushed over to destroy that annoying area. This did not work out well for it. It failed all but 2 of its saves, and I used a legendary save (it chooses not to fail up to 3 times a day) to prevent it being restrained in the wall and continuing to take damage. It still took 120 some damage from fire, acid, poison, lightning, and cold and the party had become emboldened to begin attacking it.
Round 6: Targeting tastier targets
The Tarrasque was not happy, and it used a reaction to move away from the wall that hurt it. It started to maneuver around the wall to get at the annoyances behind it. If it could reach them, I might get the first party death in the next round. The Paladin, Barbarian, and Warlock went out to meet it, sneakily as they could and around the other side of the wall so they weren’t seen. Unfortunately, for them, turning isn’t hard in D&D. The initiative order saved them from taking damage this turn. The Tarrasque got a regen roll, which he failed.
Round 7: Wrong turn at Albuquerque
One Finger of Death later (37 damage despite failing its save) and an enraged monster split its attacks against the Barbarian (instantly swallowing him) and then the Warlock (taking damage that dropped him to around 60 hit points) whose finger was annoyingly powerful. The Paladin tried to move to a place where he could get to the back of the Tarrasque and attack him, while the Bard debated over using his spells to Teleport (last one) the Paladin there or summon bunny rabbits. He summoned 16 bunny rabbits, hoping for more distractions.
Round 8: Going out the way you went int
The Tarrasque continued its attack on the Warlock, who was going to spend inspiration to use advantage on the roll and prevent being grappled, then swallowed, until he realized that he would avoid 4 more attacks and only take acid damage from joining the Barbarian inside. He decided on the stomach. The Barbarian was shortly joined by his friend and the Paladin continued his attacks and attempts to get on the back of the beast. A tail swipe dealt him damage but put in him range he forwent his attacks to grab the tail.Inside the belly, the Barbarian asked if he could spend inspiration to use Intimidating Presence to attempt to get puked up. I let him attempt it, the Tarrasque failed the save, and the Barbarian and Warlock got spit out onto the ground. They took a second round of acid damage (79 points to them both) due to the jostling and extra bile. This dropped them both below 0. The illusion of the parkour ninja Giant went into “distracting dance mode” according to its programming, which it was performing for no one. The Bard was trying to cover the distance between the beast, which had moved, and kept forgetting that ranged spells were highly ineffective as he tried to cast them.
Round 9: Shine on, you crazy paladin
Lying bloody and bruised on the ground, the Warlock and Barbarian made and failed their death saves, respectively. The Paladin climbed up on the spiny back and used every Divine Smite and attack he could muster. We’d been forgetting to roll for the rabbits, which were realistically going to be ineffective against the massive hit points of the Tarrasque, but I told the group that they could roll a d20 once per round and on a natural 20 the rabbits would attack and deal a d4 of damage. Collateral damage had taken many of the rabbits out, but there were still 8 or 9 bouncing and bitey bunnies doing their best. I was reminded of how old I was when my Monty Python rabbit jokes were met with looks of confusion. It was round 9 so time for a regeneration roll. The Tarrasque got a 4, which was not quite enough to trigger an extra hundred hit points.
Round 10: Substitution on the field
On Round 10, the fight was looking to go for a while. Running this high level and with more mechanical accuracy than I usually strive for (plus stops to look up spells and verify how they would work), we’d been at it about an hour and a half. The Tarrasque was at 252 hit points, 2 characters were dying, the Bard had gotten wise to the fact that skulls contained helpful items and was trying to get to one to search it, but the field was big and he was slow. The Paladin was on the back, valiantly attacking and being attacked by tail whips and claws, but he was positioned so he couldn’t be swallowed. Athletics checks to hold onto the spikes kept him from being dropped to the ground. The Warlock failed a death save and the Barbarian decided to let his candle be snuffed out to take a pick from the backup characters I had on hand. According to my setup for this scenario, a first death means re-entry with lower level character. The player picked the 12th level Paladin and came riding in on its celestial steed (from the Find A Steed spell). He provided healing to get the Warlock back up and running.
Round 11: Staying alive
On Round 11, more healing came to the barely alive Warlock by drinking healing potions and the Bard finally made it to a skull, but he’d used up all of his actions and couldn’t take the time to search it thoroughly. The 20th level Paladin continued his attacks and got clawed quite savagely. The 12th level Paladin used compelled duel to get the Tarrasque to focus on him while riding fervently to get behind the Prismatic Wall. The Bard found a potion, and decided to gulp it down. The Warlock was not keen on dying again, and his options for effective spells were minimal without getting in close range. The Bard teleported the Warlock behind the wall and he continued to chug healing potions.
Round 12: Flight and a little bit of luck
The Bard was in the air and buzzing around thanks to the potion. He readied a crossbow bolt and an enchantment to do more than the measly 8 damage, but it wasn’t that effective. The Tarrasque was still at ~200 hit points and every member of the party but the Bard had taken nearly debilitating damage. The Tarrasque caught up to the 12th level Paladin and decimated the steed with one hit. The 12th level Paladin dropped the compelled duel as he flew through the air and landed near a skull. He searched around and grabbed whatever it was that he could find.He pulled from the skull a small dagger with jewels turned out to be a Luck Blade, the workings of which he did not know anything about. I had kept this in a skull that I expected to be far away from the battle, and hoped would be found at the end. One player knew exactly what it was and announced that it probably still had wishes in it. A small out of game debate and a few Arcana rolls to see if this OOC knowledge would be known in character, and the 12th level Paladin became fully aware of what he now held thanks to the Warlock explaining the basics. He scrambled behind the wall while the 20th level Paladin kept attacking the Tarrasque from his perch and the Bard used a spell to do a little damage. One more regen roll! It came up a 2, so no great recovery yet.
Round 13: Two steps back
Diligently beating away at whatever weaknesses he could find in the Tararsque’s back and being targeted with every reactionary attack I could viably make against him, the 20th level Paladin was nearly down. He did some quick healing. The 12th level Paladin and Warlock were safely behind the wall and knew what they had, but they also knew I’d enjoy making their lives hell with misspoken wishes. I rolled to see how many wishes were in the blade and they had 3. Dangit. They didn’t know that, but then the 12th level Paladin came up with the idea of wishing to know the most effective way they could use the luck blade to defeat the Tarrasque. Pretty smart, so I let him read how wish worked, told him that there were 3 wishes in the blade (stupid roll), and informed him that the Tarrasque would regenerate if they didn’t save one wish to keep it down. The Bard came through again and got as close as he could. He had very few spells left, but the Tarrasque was close to the Prismatic Wall trying to get the annoying 20th level Paladin off of its back. The Bard cast Thunderwave at his highest available spell slot. That did 30 or so damage, but the Tarrasque failed the save… and got knocked back 10 feet into the wall. Another blast of being trapped by the wall and some bad saves and the Tarrasque was down to 109 hit points. The Bard got a reactionary tail lash and was targeted by the Tarrasque from here on out.
Round 14: And the giant dances on
The Warlock was healing as much as he could and rushed out to use a spell now. He cast Evrard’s black tentacles which didn’t work well, and caused the Tarrasque to move away from the VERY ANNOYING WALL which had been its bane this entire time. The 20th level Paladin continued to attack while the 12th level Paladin healed and kept trying to come up with a wish that might turn the tide for them. Debates over healing the party with the wish and ideas that got rejected like “Make me an unkillable god that can destory the Tarrasque!” when I rebutted with “Ok, you’ll be a godly mega-tarrasque that eats and replaces this one but has no intelligence.” occurred and finally the 12th level Paladin sat down to think on it some more. The party had nearly exhausted their potions staying alive and had two inspiration points left as they kept re-rolling saves or necessary rolls to avoid being swallowed. The illusion of the Giant kept dancing/fighting in the background.
Round 15: Stuck between a wall and another wall
Finally, a regen roll! I picked up the d6 and held it menacingly in my hand. The 12th level Paladin considered using the wish to turn off the Tarrasqye’s regeneration ability, but decided not to. I dropped the dice and it clattered around the table, landing on a 1. Thanks 33% odds, you did me no good. The 20th level Paladin exhausted every last thing he had and did a bit more damage, whittling it down consistently. He nearly been swallowed, but made an athletics roll to keep a tight hold on the head and not get bucked off into the waiting mouth. I had a video of a dog eating a treat off of its nosed queued up in case he failed.The Bard took some damage and flew far away, while the Warlock tried some more spells that the Tarrasque’s reflective carapice bounced away. The 12th level Paladin couldn’t make up his mind, so he finally just said “I wish we had another Prismatic Wall!” and I allowed it. While it is a 9th level spell, the wish to know how to effectively use the wishes made me feel like I should have some leeway, so I let him bring it into existence for one round only. He placed it right alongside the Tarrasque who bumped into it while trying to buck off the 20th level Paladin and eat him. Decent saves, bad damage rolls, and finally triggering the last legendary save kept the Tarrasque alive. The Paladin was at 4 hit points, the Bard was nearly dead, the Warlock was in attack range and only had about 30 hit points, and the 12th level Paladin would take a round or two to get out from behind the Prismatic walls (even though he could run right through them without damage, which I wasn’t about to tell him). The Tarrasque was trapped between two of the walls and he had just savaged most of the group. The next attack from the Tarrasque would take out a majority of the PCs and the Tarrasque acted first on the next round. While it only had 3 hit points left, it could probably take most of the group out and retreat for some hopeful regeneration.
The Killing Blow: It always comes down to a lucky roll
This was when the Warlock asked “What about the rabbits?”, which we’d all forgotten completely about. There were little white slips of paper all over the base of the 3d printed Tarrasque miniature, and I ruled that the rabbits could take some bites. I let each player roll one die, and only a 20 would succeed. 11, 2, 15, … and 20. The 12th Level Paladin rolled a 20 and I let the rabbit attack. I had earlier ruled that its bite would be a d4 since it was representative of multiple rabbits making the attacks and there were still 3 around. I asked who wanted to roll it. One player grabbed a D4…and rolled a 4! The Tarrasque was felled by a rabbit jumping up to get into its wounds and bite a sensitive area. Blood spurted everywhere and my Monty Python jokes were still met with blank faces. The players rejoiced, the final wish was used to keep it down for good, and a successful conclusion was had to the campaign.
The players had a great time, and I probably could have used the Tarrasque in even more deadly ways, but I was aiming for a fun, brutal, and semi-logical session. Where and when the Tarrasque decided to attack was based on what was making itself the biggest threat. Having backup characters made it so that the group could probably outlast the Tarrasque, but a 20th level group of adventurers preparing to face down something epic like this would have done research and brought backup or an army. For the context of the one-shot concept of taking on the Tarrasque, this was great. I rewarded interesting player ideas, pulled no punches, and it came down to the last minute. Prismatic Wall is a darn brutal spell meant for a foe like this. If the Tarrasque had been a more intelligent creature, it might have avoided that area at all costs and waited out the other attacks until it could heal. All in all, the players had a great time and the teens really loved this as an endcap. I think I’ll do a better paint job on the mini and make a convention game out of this scenario with pregens more geared to the encounter. It fits well into a short slot, and a four hour convention game would be perfect for this sort of thing. Super hard mode could have one or two cultists of the Tarrasque buffing and healing it.
It’s great fun to watch players jump into the concept and have a very pure experience of the game side of roleplaying games. The play aspect and building up of characters is an incredible part of the fun for a campaign, but rarely do you get the chance to build up to an encounter of this epic of a level without playing for a solid chunk of time in a very dedicated way. I would recommend whipping out a concept game like this every so often for something fun and quick. It’s satisfying in a completely different way, and really how often do you get to run a Tarrasque and kill the characters with abandon?
What do you think of concept games like this? How would you have defeated the Tarrasque? How would you have made it more deadly? Have you ever been in a game like this?
In Drupal Views, you can wrap a field in a basic element (such as div, span, H1, H2, p, strong). But sometimes you are going to need to wrap a field in an HTML element that is not available in the list. For example, if you have an image field that and need to wrap in a <figure> element (this is the example we will use for this tutorial). This can be pretty confusing at first, but fortunately there are a few methods available to get the job done.
As you may already heard a big free software conference, Open camps happened at the United nations headquarters in New York last week. As part of the NYC Drupal camp, which was just one of the many camps that happened during it, a week-long Drupal 8 media sprint was held.
Media team had great time there and I would like to share our impressions with you.
Open camps conference happened for the first time this year. It is a mission-driven free software event that grew out of the NYC Drupal camp. Open camps is a week-long, community organized, non-profit conference as part of which more than 20 camps were taking place. Python, Node.js, Elixir, React, Go, Drupal, Wordpress and many others. All in one place. Pure love!
More photos available in the official Flickr group.
NYC Drupal camp has been one of the strongest supporters of the Drupal 8 Media Initiative for years. They helped us to kick the initiative off and have been supporting us in many ways since then. This year was no exception to that. Along with many media-related sessions as part of the general conference days and a dedicated media summit they also helped us organise a week-long media sprint.Did we spend the week drinking most of the time?
Of course! Socialisation is one of the most important parts of any community. OK, that's it. Stay tuned!
I am just joking... hope you were not taking me to seriously. We spent most of the week working hard to get closer to beta releases of our most important contributed modules. A lot of extremely cool features were introduced to our browsing component, which is now much more aware of the world around it, it is able to validate your actions much more confidently and it is much easier to use it as part of your custom code.
One of our favourite modules, File entity browser, seen a lot of improvements too. It was chasing changes in the Entity browser and trying to make the most out of new features that are provided. A lot has been done in the area of UX too.
Besides all new features that people were asking for we made a big step forward when it comes to stabilisation of the ecosystem. We feel quite confident that we reached the state when we are really confident to release the ecosystem to the wider public.
Our plan is to release last new release of all affected modules this week. We will make sure that changes that we did are chased in all of them, which means you will be able to get latest versions and be confident that they work together. This will include last alpha versions of Entity embed and Entity browser modules. If no critical bugs are found in the two weeks time after that we will release first beta versions. This will be a huge step forward for the Drupal 8 media ecosystem, as it will result in the stabilisation of the most important and biggest modules we provide.
This will result in life of our users being much simpler. You will be able to rely on the ecosystem to just work. There will be no more changes or updates that could potentially break the sites using them.What are the next steps?
As the ecosystem is entering more stable state we're switching our focus a bit. While developing new features and refactoring were our main focus until now we'll spend most of our energy with fixing bugs, providing support and writing documentation in the next weeks and months. We will also spend more time working on solution modules that will be much more convenient for ordinary users to start with (check File entity browser, Content browser, Media and Lightning distribution).
I'd like to thank to everyone that contributed to the Drupal 8 media ecosystem. What we achieve would not be possible without those numerous contributions. I'd also like to thank to the NYC camp. A lot of things that happened in the last two years wouldn't be possible without their support.Want to get involved?
Hop on to IRC and poke us on #drupal-media. We also re-started our weekly meetings, which are happening every Wednesday at 16:00 on our IRC channel. Join us!