Newsfeeds

Career Guide: How to Become a Game Designer? - by Matt Rowen

Gamasutra.com Blogs - 18 June 2018 - 7:05am
Love Games? You can also be a part of it by choosing Game Design as career. Here's a comprehensive infographic on How to become a Graphic Designer, how it is like to be one and the key skills required for it.
Categories: Game Theory & Design

Part 1: Unity ECS - briefly about ecs - by Tomasz Piowczyk

Gamasutra.com Blogs - 18 June 2018 - 7:05am
Some thoughts about Unity's ECS
Categories: Game Theory & Design

Paizo Previews Conditions in Pathfinder 2.0

Tabletop Gaming News - 18 June 2018 - 7:00am
I gotta find out what condition my condition is in. Weakened. Sickened. Poisoned. Restrained. Prone. And on and on. Pathfinder has a lot of conditions you can find your characters in. But how will these change in the new edition that’s coming out. In this preview, we get a look at just that. From the […]
Categories: Game Theory & Design

Axelerant Blog: Enterprise Digital Transformation (DX) + Outsourcing

Planet Drupal - 18 June 2018 - 6:05am

Can you outsource Digital Transformation (DX)?

Let's set this off in the right direction. What people think digital transformation is, often isn’t. Adopting the latest feature is not digital transformation, and neither is a basic migration or new functional enhancements made to a site.

Categories: Drupal

Games Workshop Taking Orders for New Edition of Age of Sigmar

Tabletop Gaming News - 18 June 2018 - 6:00am
While it might feel like it’s still brand new, Age of Sigmar has actually been out for quite a few years. And, in that time, it’s gone through a few changes. But now, it’s getting an entirely new edition. Pre-orders for box sets, rule books, accessories, new units, and more are all available on Games […]
Categories: Game Theory & Design

JWPlayer Report

New Drupal Modules - 18 June 2018 - 5:38am

The JWPlayer Report module help us to get analytical data of videos based on media ids.
Using this you can download all the analytical data in the report format. Also you can see this data in list format if you don't want to download.

Categories: Drupal

Image Base64 Formatter (8.5.x)

New Drupal Modules - 18 June 2018 - 5:31am

This module adds an FieldFormatter for an Image field,
which let's you implement base64 of an image directly.

While most of the code comes from the core module image's
ImageFormatter.php, some rewriting with templating has
been done. Should be stable.

Categories: Drupal

multiselect_sorting

New Drupal Modules - 18 June 2018 - 5:19am

This is a fork of the module https://www.drupal.org/project/multiselect
It enables the feature of sorting, so you can sort the selected items before submitting the form.

Categories: Drupal

When It’s Time To Say Goodbye

Gnome Stew - 18 June 2018 - 5:00am

My favorite gaming groups are, at their best, a place that feels like home. They are filled with the gaming versions of younger siblings, crazy relatives, loving friends, and supportive people. Each meeting is a chance to tell new stories and deepen friendships. They aren’t perfect but they are honestly valuable in my life. Everyone’s best gaming group looks a little different but they are all equally important and fulfilling.

The problem is that some gaming groups don’t live up to that ideal. Sometimes I am playing with great folks, in a setting or system that I love, but the pieces don’t fit together in the way that’s right for me. It can also be that life gets in the way of playing pretend with my friends and I have to make tough choices. No matter the reason, there might come a day where I need to say goodbye to my gaming group.

Looking at the big picture

Figuring out the style of game and gaming group that best suits your needs can take some trial and error. I signed up for a regular Pathfinder game without knowing the playstyle of the group and ended up in a miserable situation. I’ve invited folks to my game without looking at the big picture of their wants in an adventure and they end up not having a good time.
I’m always excited before the start of a new game and I will often rush in without giving any of the above a single thought. In a perfect world I would always consider the overall goals that I have for games before I start, but nothing about me is perfect. Understanding exactly what I want, what I have to offer, and what the other people you’ll be gaming with are looking for sets everyone up for success. It’s never too late to step back and look at everything.

Complain, listen, act

I don’t like the idea of complaining, of feeling that I’m a whiner or a burden to the group. That has a lot to do with how I was raised. I’ve had those moments as a player where I’ve started to get upset during a game because of the actions of another player. I’ve had times where I’ve nodded off at a table because we were too busy doing math to have an adventure. Those were terrible experiences but I often said nothing.  Those were terrible experiences but I often said nothing. Share39Tweet8+11Reddit1Email In my brain there is a huge difference between advocating for someone else and speaking up for myself.

When I like the people that I’m gaming with on a personal level but I am struggling with the game, it’s time for me to initiate an honest conversation. It has taken me many years and many mistakes to learn this lesson. I’ve stayed in uncomfortable situations because I didn’t feel like I had any other options. I ended up dreading every game and started resenting the people involved, all because I didn’t want to hurt anyone’s feelings. That always ended up with me getting so upset that I walked away from the group in a rage without trying to work anything out. I imagine that hurt a lot more feelings than an honest conversation would have. Over the years I’ve grown and changed to better support myself and the people around me.

Maybe the right person to start talking with is the host of the group. I’ll contact the host, outside of our normal meeting time, and talk about any logistical or personal problems that I’m having with the game. It gives me a chance to tell them about my struggles and hear their struggles with me as well. If it’s only a specific player that I’m struggling with I’ll reach out to them individually in as nonthreatening a way as possible. Just like in any healthy relationship it’s possible to talk through many of these issues and find a common ground that works for everyone. Other times I need to draw a firm line and say, “No.”

Listening is where the answer between those two situations becomes clear to me. If they are unwilling to listen to me and make compromises, then my experience at the table is not being valued. If I’m not of value then there is no reason for me to stay.

When they say goodbye to you

 Like any healthy relationship, the group needs to work for everyone involved. Share39Tweet8+11Reddit1Email What do I do when I’m the problem and the other gamers are coming to me with complaints? I treat them in the way that I hope that they would treat me. I listen with an open mind, consider what adjustments I can make, and then act on that information. If the problem isn’t something that I’m willing or able to adjust then I leave graciously.

It’s difficult for me to not take those moments personally despite my understanding of the real reasons that it didn’t work out. That said, I can appreciate the trust and honesty that it took to have that difficult conversation even if my feelings are hurt. The problem might be something as simple but insurmountable as my work schedule affecting my ability to attend regularly. Like any healthy relationship, the group needs to work for everyone involved.

People have come to me with blame, toxicity, and anger at who I am. That was a red flag telling me that it was time to walk away immediately. Personal attacks aren’t about honest conversation or finding common ground. Don’t stay in a group that belittles you, your characters, or your ideas. Listening with an open mind doesn’t give permission or excuse people victimizing or abusing you.

Awkward moments

After I’ve made the decision to leave I will probably run into folks from my old group again. I might see them happily gaming with my replacement or have to tell them all about my new gaming relationship. That can be an uncomfortable moment confirming that we’ve all moved on. I try not to let those meetings affect my desire to see my friends. I don’t want 5 minutes of discomfort to ruin the next 20 years of friendship so I push through. Finding a perfect gaming group can be a lot like dating. Seeing each other after breaking up is just as awkward too. If things ended on a positive note then stay friendly and don’t lose important people in your life just because it didn’t work out at the game.

Why you’re important enough to leave

Are you ready to hear some basic truths about yourself?

You matter. You’re a worthwhile human being and you deserve to be happy, appreciated, and respected. The stories that you have to tell are important and you should feel safe sharing them with your group. You’re not perfect and you still deserve kindness, joy, and support.

Time is such a finite resource that I do my best not to waste it. Every person that takes time to play a game with me has given me an irreplaceable gift.  Every person that takes time to play a game with me has given me an irreplaceable gift. Share39Tweet8+11Reddit1EmailIt’s not ideal for any of us to throw that gift away by not taking the opportunity to find our best chance at joyful gaming.

When you take the time to complain you are making gaming better and safer for yourself and those around you. If you don’t feel safe talking to your group about your issues I would invite you to ask yourself why you’re returning to what feels like an unsafe situation. You deserve better than that.

Walk away when it becomes clear that you’re not heading towards your best gaming life.

Finding something new

There are many options out there when it comes time to try again. Websites like Meetup.com, LookingForGM.com, and HeroMuster.com offer options to connect with gamers in your area. Facebook, G+ groups, and Roll20.net can be a great resource to find online games if you live somewhere that local gaming is a struggle to find or completely unavailable. Online gaming communities like The Gauntlet offer a chance to connect with like-minded gamers to increase your chances of getting what you’re looking for. If it doesn’t work out the first time then please keep looking. You’re worth the effort.

What would your perfect gaming group look like? Who would you invite and why? Have you ever had a tough gaming group breakup?

Categories: Game Theory & Design

DrupalEasy: DrupalEasy Podcast 210 - Stefanie Gray - DKAN Open Data Platform

Planet Drupal - 18 June 2018 - 4:26am

Direct .mp3 file download.

Stefanie Gray, (stefaniegray), Engineer and Open Data Specialist for CivicActions joins Mike Anello to discuss all things DKAN.

Interview DrupalEasy News News Sponsors
  • Drupal Aid - Drupal support and maintenance services. Get unlimited support, monthly maintenance, and unlimited small jobs starting at $99/mo.
  • WebEnabled.com - devPanel.
Follow us on Twitter Subscribe

Subscribe to our podcast on iTunes, Google Play or Miro. Listen to our podcast on Stitcher.

If you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our contact page.

Categories: Drupal

Enforce User Fields

New Drupal Modules - 18 June 2018 - 3:54am

Force users to fill any required user account fields at login.

When enabled, every time a user login it checks if any required fields in his account still need to be filled. User is not allowed to login unless he fills the required fields.

Supported Multiple Registration module.

Useful when

Categories: Drupal

Drupal Europe: Community at Drupal Europe

Planet Drupal - 18 June 2018 - 1:52am
Amazee labs @flickr

Drupal Europe brings a unique opportunity to connect, share and learn from the Drupal community and to talk about what holds us together. We grew to be the biggest open source community under the tagline “Come for the code and stay for the community” which we strive to uphold.

Join us on September 10–14, 2018 in Darmstadt, Germany to discuss and learn about growing and strengthening communities and the challenges that come with that.

Drupal has been a historic example of how Open Source communities can thrive and to maintain this leading position we need to learn from each other, include others and inspire everybody to be an active contributor. This might bring its challenges from time to time, so please come and share your stories, expertise and lessons learned with us. This is the only way to keep our community strong, diverse and open minded.

Who should attend?

You! This vertical topic will be the meeting place for everyone in Drupal and other communities.

Whether you want to organise events, you’re new to the community and want to know where you can get involved, or you want to share a success story from your community, you are welcome.

Target groups:

  • Members of the Drupal community
  • Other open source communities
  • Organisations and those interested in how communities work and prosper

Example talks:

  • Being Human
  • Challenges of contribution
  • Community help
  • Community retention
  • Growing leaders & influencers (by empowering, enabling and adding trust)
  • Growing the Drupal Community
  • Improving diversity
  • Mentorship, sponsorship and allies
  • Organizing events
  • Succession planning for organizers and leaders

As you’ve probably read in one of our previous blog posts, industry verticals are a new concept being introduced at Drupal Europe and replace the summits, which typically took place on Monday. At Drupal Europe. These industry verticals are integrated with the rest of the conference — same location, same ticket and provide more opportunities to learn and exchange within the industry verticals throughout three days.

Industry vertical icons by @sixeleven

Now is the perfect time to buy your ticket for Drupal Europe. Session submission is already open so please submit your sessions and encourage others who have great ideas.

Please help us to spread the word about this awesome conference. Our hashtag is #drupaleurope.

To recommend speakers or topics please get in touch at program@drupaleurope.org.

About Drupal Europe Conference

Drupal is one of the leading open source technologies empowering digital solutions in the government space around the world.

Drupal Europe 2018 brings over 2,000 creators, innovators, and users of digital technologies from all over Europe and the rest of the world together for three days of intense and inspiring interaction.

Location & Dates

Drupal Europe will be held in Darmstadtium in Darmstadt, Germany — which has a direct connection to Frankfurt International Airport. Drupal Europe will take place 10–14 September 2018 with Drupal contribution opportunities every day. Keynotes, sessions, workshops and BoFs will be from Tuesday to Thursday.

Categories: Drupal

Amazee Labs: So, you want to run a Drupal Camp. Here's what you should know.

Planet Drupal - 18 June 2018 - 1:18am
So, you want to run a Drupal Camp. Here's what you should know.

I’ve been running events since college, for work and for fun, and for groups of 3 to 3,000. You’d think there’d be a difference, but the amount of energy it takes to run an event, surprisingly, is the same. It’s crazy how well these things scale.

Stephanie El-Hajj Mon, 06/18/2018 - 10:18

Regardless of size, an event planner goes through a very predictable flow from event conception to event end.

We started planning Texas Camp in September of 2017. Knowing we were going to organize the event again for 2018, we scrambled to finalize the venue and update the sticker. By the time BADCamp rolled around, we had shiny new Texas Camp stickers to distribute at the nation’s largest gathering of Drupal people - all potential camp attendees.  

Because we knew when companies do their budget planning, we were ready with a brand new sponsor prospectus by December. By the second week, a cheerful call to sponsor was in many Drupal company inboxes.  

We worked to get the bestie launched in January, so attendees could plan ahead and to get everyone excited. Let me tell you this when building a spankin’ new React + Drupal site, plan for extra time.

By the time we did launch in February, we had missed a few big camps, but still had plenty of time to get the word out on the call for sessions.

From February to April, we worked hard to get the word out about all the different ways people could get involved with camp. Sponsorship, speaking, volunteering, or simply just attending. Early-bird tickets were on sale and the sessions submissions were trickling in.

Texas Camp organizers attended DrupalCon Nashville and spread the good word of Texas Camp to anyone who would spare a few minutes. Those who promised to submit sessions were gifted a Texas Camp sticker, along with lavish promises of fame and glory.

Because we want Texas Camp to be known as an inclusive camp, we reached out to different groups, including the Drupal Diversity and Inclusion group, to help get the word out to a broader, and more diverse, audience. I’d like to think our efforts here helped us pick up more diverse speakers than we might have gotten through our usual channels.

At the end of April, the craziness began. Although I am a seasoned session selection overseer, this was my first time actively participating in the selection as a team. It’s not an easy task, not just considering the length of time it takes to read sessions!

We had a few mandates: no repeat speakers, diverse topics, variety in experience levels, and oh yeah, the selection was done fully blind to the presenter. All personally identifiable information (pronouns, speaker names, company names, etc) was all painstakingly struck from the submission pile.

At the end of the two-week selection process, the team gathered and made the final selection. Some speakers with multiple sessions had been ranked high enough to make the session cut, so the better of the two, or the session with most topical conflict with other highly ranked sessions, were made into backups.

After session selection, things started moving really fast. We had one week to confirm speakers and another week to make a schedule. Once that newsletter went out announcing the final schedule, the official countdown to Texas Camp had begun.

Week 4: Guess what you’ll need and order everything. This gives you enough time to re-order if anything goes wrong. It’s too early for real attendance numbers, so any amount you order is the best guess.

Week 3: Things will start to arrive. Your office will be filled with an insane number of soda flats and bizarre equipment. We had a silver 4-foot metal trough we had to explain on a few client calls. Speakers will begin canceling. New sponsors will appear out of the woodwork - which is a GREAT thing. Last minute sponsors allowed us to blow the budget on breakfast tacos!

Week 2: You’ve printed everything you can think to print and pray the sizes match and the colors turn out right. The final “Texas Camp is next week!” notice has gone out to attendees. Speakers are thoroughly annoyed at the number of reminders to RSVP we’ve sent.

Week 1: The blessed “eye of the storm”. The week before the event. It’s too late to do anything meaningful. All you can do is hope you’ve done enough ahead of time and remembered everything. Especially if the week of ends in a 3-day weekend for Memorial Day. An unexplained spike in registrations. It looks like we’ll hit 150!

The week of: It’s time for final inventory audits, calling and confirming with all the venues and updating catering counts with vendors. Always add more vegan meals than you have data for! Rally the organizing team and caravan the soda flats and registration supplies to the venue.

Make eye contact and remind each other that you can do it and that there will be coffee in the morning. Charge the iPads. Remember to print the special diet food tents for the morning.  

During camp: Have a stupid amount of fun. See people you haven’t seen in a year. Celebrate the CMS that drew us all together. So many people, at Texas Camp we nearly hit 200! Eat an inordinate amount of food. Watch some amazing talks. Sing karaoke.

After camp: Go home. Swear to never do it again. Take a vacation. Get a sunburn. Reconsider.

The week after camp: Begin researching venues for the next year.  

Categories: Drupal

Game Design in Real Life: Gamification - by Caleb Compton

Gamasutra.com Blogs - 18 June 2018 - 12:29am
For years, companies have been trying to use game design principles to change user behavior or get them to buy more products. In this article I look at some of the techniques used, why they don't usually work, and how they can possibly be done better.
Categories: Game Theory & Design

Fuzzy Thinking: Set Phasers to ...

RPGNet - 18 June 2018 - 12:00am
Fuzzy jokes.
Categories: Game Theory & Design

PreviousNext: How to create and expose computed properties to the REST API in Drupal 8

Planet Drupal - 17 June 2018 - 9:51pm

In Drupal 8.5.0, the "processed" property of text fields is available in REST which means that REST apps can render the HTML output of a textarea without worrying about the filter formats.

In this post, I will show you how you can add your own processed fields to be output via the REST API.

by Jibran Ijaz / 18 June 2018

The "processed" property mentioned above is what is known as a computed property on the textarea field.

The ability to make the computed properties available for the REST API like this can be very helpful. For example, when the user inputs the raw value and Drupal performs some complex logical operations on it before showing the output.

Drupal fieldable entities can also have computed properties and those properties can also be exposed via REST. I used the following solution to expose the data of an entity field which takes raw data from the users and perform some complex calculations on it.

First of all, we need to write hook_entity_bundle_field_info to add the property and because it is a computed field we don't need to implement hook_entity_field_storage_info.


<?php // my_module/my_module.module /** * @file * Module file for my_module. */ use Drupal\my_module\FieldStorageDefinition; use Drupal\my_module\Plugin\Field\MyComputedItemList /** * Implements hook_entity_bundle_field_info(). */ function my_module_entity_bundle_field_info(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) { $fields = []; // Add a property only to nodes of the 'my_bundle' bundle. if ($entity_type->id() === 'node' && $bundle === 'my_bundle') { // It is not a basefield so we need a custom field storage definition see // https://www.drupal.org/project/drupal/issues/2346347#comment-12206126 $fields['my_computed_property'] = FieldStorageDefinition::create('string') ->setLabel(t('My computed property')) ->setDescription(t('This is my computed property.')) ->setComputed(TRUE) ->setClass(MyComputedItemList::class) ->setReadOnly(FALSE) ->setInternal(FALSE) ->setDisplayOptions('view', [ 'label' => 'hidden', 'region' => 'hidden', 'weight' => -5, ]) ->setDisplayOptions('form', [ 'label' => 'hidden', 'region' => 'hidden', 'weight' => -5, ]) ->setTargetEntityTypeId($entity_type->id()) ->setTargetBundle($bundle) ->setName('my_computed_property') ->setDisplayConfigurable('form', FALSE) ->setDisplayConfigurable('view', FALSE); } return $fields; }

Then we need the MyComputedItemList class to perform some magic. This class will allow us to set the computed field value.


<?php // my_module/src/Plugin/Field/MyComputedItemList.php namespace Drupal\my_module\Plugin\Field; use Drupal\Core\Field\FieldItemList; use Drupal\Core\TypedData\ComputedItemListTrait; /** * My computed item list class. */ class MyComputedItemList extends FieldItemList { use ComputedItemListTrait; /** * {@inheritdoc} */ protected function computeValue() { $entity = $this->getEntity(); if ($entity->getEntityTypeId() !== 'node' || $entity->bundle() !== 'my_bundle' || $entity->my_some_other_field->isEmpty()) { return; } $some_string = some_magic($entity->my_some_other_field); $this->list[0] = $this->createItem(0, $some_string); }

The field we add is not a base field so we can't use \Drupal\Core\Field\BaseFieldDefinition. There is an open core issue to address that https://www.drupal.org/project/drupal/issues/2346347 but in tests there is a workaround using a copy of \Drupal\entity_test\FieldStorageDefinition:


<?php // my_module/src/FieldStorageDefinition.php namespace Drupal\my_module; use Drupal\Core\Field\BaseFieldDefinition; /** * A custom field storage definition class. * * For convenience we extend from BaseFieldDefinition although this should not * implement FieldDefinitionInterface. * * @todo Provide and make use of a proper FieldStorageDefinition class instead: * https://www.drupal.org/node/2280639. */ class FieldStorageDefinition extends BaseFieldDefinition { /** * {@inheritdoc} */ public function isBaseField() { return FALSE; } }

Last but not least we need to announce our property definition to the entity system so that it can keep track of it. As it is an existing bundle we can write an update hook. Otherwise, we'd need to implement hook_entity_bundle_create.


<?php // my_module/my_module.install /** * @file * Install file for my module. */ use Drupal\my_module\FieldStorageDefinition; use Drupal\my_module\Plugin\Field\MyComputedItemList; /** * Adds my computed property. */ function my_module_update_8001() { $fields['my_computed_property'] = FieldStorageDefinition::create('string') ->setLabel(t('My computed property')) ->setDescription(t('This is my computed property.')) ->setComputed(TRUE) ->setClass(MyComputedItemList::class) ->setReadOnly(FALSE) ->setInternal(FALSE) ->setDisplayOptions('view', [ 'label' => 'hidden', 'region' => 'hidden', 'weight' => -5, ]) ->setDisplayOptions('form', [ 'label' => 'hidden', 'region' => 'hidden', 'weight' => -5, ]) ->setTargetEntityTypeId('node') ->setTargetBundle('my_bundle') ->setName('my_computed_property') ->setDisplayConfigurable('form', FALSE) ->setDisplayConfigurable('view', FALSE); // Notify the storage about the new field. \Drupal::service('field_definition.listener')->onFieldDefinitionCreate($fields['my_computed_property']); }

The beauty of this solution is that I don't have to write a custom serializer to normalize the output. Drupal Typed Data API is doing all the heavy lifting.

Related Drupal core issues: Tagged jsonapi, REST, XML, JSON, hal_json, Normalizers
Categories: Drupal

Video Game Deep Cuts: Another Grim E3 World

Social/Online Games - Gamasutra - 17 June 2018 - 9:06pm

This week's highlights include lots of E3 news, a Grim Fandango reading to remember, and a stellar analysis of Another World/Out Of This World. ...

Categories: Game Theory & Design

Tome

New Drupal Modules - 17 June 2018 - 5:42pm

Tome is a static site generator, and a static storage system for content.

When Tome is enabled, any changes to config, content, or files will be automatically synced to your local filesystem. These exports can be used to fully rebuild the site from scratch, which removes the need for a persistent SQL database or filesystem. Long story short, you can use Drupal in the same way you would use other static site generators like Jekyll or Hugo - everything lives in one repository, and Drupal only runs on your local machine.

Categories: Drupal

Finalist Drupal Blog: Load testing in Drupal (part 1)

Planet Drupal - 17 June 2018 - 3:00pm

So, we are building this great community portal for all the world to see. We thought about all aspects that would make this project a huge success. We are heavily in control. And finally the day has come: our portal hits the worldwide web. And so it seems, the website is well received! A little too well received. Soon traffic rates hit the ceiling. And so does our carefully configured web server. End of this little story. We’ve become the victim of our own success.

Performance testing is all about being prepared

OK, so perhaps this tale is a little bit over dramatized. Still, in my daily work I see this kind of misery happening a lot. To be honest… we tend to step into this pitfall as well from time to time. And we shouldn’t have to.

Testing the performance of your site means that you can actually prepare for large amounts of traffic on your site. You can be predictable.

If we really wanted this site to be a success, we might have had to prepare better for that success.

This is where performance testing comes in. We simply want to know how our website is performing once it hits higher traffic rates.

What are we testing anyway?

But what do we actually test? What about busy periods? Does the caching do its job? Or have we configured things incorrectly? And when we really tighten the screw, what will happen? Will it bring down our site? What about peak times, just after our project went viral? And are we fully utilizing the server capacity?

We use a load test to closely monitor the use of the site. This way we can make statements about the performance.

But… it comes down to the same problems anyway?

Without performance testing we can look at common causes that can give rise to performance problems. Wrongly deployed caching is obvious. And perhaps you simply load too much data on a page, stressing the database. If you are an experienced Drupal developer, there is a fair chance that guess right we can and sleep peacefully again. In many cases, the real problem is something you did not think of.

Performance tests

There are many different types of performance tests. We will discuss some.

Load testing

With a load test we mainly look at the expected load on the site. So: if we build an intranet, we want to know what happens when, for example, 60% of the company simultaneously uses the intranet intensively.

Stress testing

With stress testing we look more at deviant situations. An exceptional load. In the example of our fansite: we appear in the news and therefore suddenly have a multitude of visitors. Our example is of course exaggerated. It is difficult to anticipate an unexpected and absurdly high number of visitors. But what we do want to know: where is the border?

Endurance testing

With an endurance test, we test the site measured over a longer period, to investigate whether the site will perform worse over time, for example due to the increase of logged-in users or content.

Peak testing

With peak testing we mainly look at intensity peaks. In the example of the intranet you can think of a peak in the morning when everyone arrives at the office.

Load testing: 5 steps

Because we want to know if our site can handle the desired number of visitors, and we also want to know how far we can go, we focus on load and stress testing.

The steps are the following.

1. Analysis of any existing data

Simply retrieve from existing statistics, for example visitor numbers. This helps to create realistic scenarios in our test preparation. In the analysis we can fall back on tools such as Google Analytics. But … if the site is new, we have to make statements about traffic in a different way. Often the customer can share some insights about this. And you might be building a new version of the same site so you can still say a lot about expected visits.

2. Think of some scenarios

Make sure you will test with realistic scenarios. Prepare the test well! One scenario is not enough. We want to simulate that a large number of visitors, simultaneously, click on several pages, download documents, log in, send forms, etc. Therefore, make sure you have enough CPU on your machine to perform the tests. And … determine limit values ​​for the test, to assign a score to the performance.

APDEX

The APDEX may be of help here. The APDEX is an industry standard to make statements about satisfaction with performance based on tests. Actually, we can thus determine whether the performance meets the expectations! Response times alone do not say much. We can interpret this with the APDEX. The APDEX is a score based on satisfaction surrounding the performance. A lot of tools, such as New Relic and Jmeter, therefore use the APDEX.

The APDEX calculates a score based on measurements: Satisfying, Tolerating and Frustrating. We will apply a time aspect here, for example: Satisfying: 0-1.5 seconds; Tolerating: 1.5-6 seconds; Frustrating: 6 seconds or more.

  • Satisfying results count for 100% (this is great)
  • Tolerating results count for 50% (this is ok)
  • Frustrating results do not yield a score (this is not good)

And then it is time to do some calculations.

APDEX = Satisfied + (Tolerated / 2) / Total samples 3. Pick the right tool

Determine which tooling we can use to carry out the test. And, well ok, there is a lot to be found out there. Let’s try to highlight some.

  • AB - Apache Bench - What can we say, this is very easy. It proves some low level local testing is not that hard.
  • Gatling - A paid (and great) alternative for powerful open source tooling like JMeter. Check out this extensive comparison.
  • Locust: Define user behavior with Python code.
  • Siege - Similar to AB, but more extensive, useful to perform a quick load test.
  • Blazemeter - Simple characterization: a hosted version of Jmeter. Less simple characterization: testing on steroids. Offering A LOT when it comes to testing. Test from all over the world, very large numbers, hosted Selenium, Gatling, Locust and more…
  • Jmeter - Open source, many possibilities, the old, the proven solution. Still goin’ strong.

We should point out that Blazemeter stands out as a modern, versatile cloud test platform (not only load testing!).

Some pros: - Easy / quick boarding - Drupal (D7 + D8) stable module available - Important advantages with respect to JMeter: geography is not limited to your own local environment and processing is not limited to your own machine.

Yes, a con: It is a commercial solution, it will cost you money…

4. Carry out the test

In part 2 of this series we will actually carry out a test in Siege and Jmeter.

5. Analyze

After running the test we will analyze the results. Do we learn more about problems in our application? In part 3 of this series, we will look at profiling and analyzing.

Coming up in Load testing in Drupal (part 2):
  • Performing load tests to your Drupal application in Siege and JMeter.
Coming up in Load testing in Drupal (part 3):
  • Profiling and monitoring your Drupal application with XHProf / XHGui and New Relic.
Categories: Drupal

Lightning Media Video File

New Drupal Modules - 16 June 2018 - 9:25pm

Adds local video file support to the Lightning Media project.

Categories: Drupal

Pages

Subscribe to As If Productions aggregator