Newsfeeds

David Logan, Akupara Games: Bringing Passion and Creativity to Publishing - by Jessica Paek

Gamasutra.com Blogs - 25 February 2019 - 7:24am
This week on our blog, we talked to David Logan from Akupara Games. He discusses how their team gets creative when marketing the titles they work with and shares some tips for indies looking to partner with a publisher.
Categories: Game Theory & Design

The Interactivity of Reading - by Nikhil Murthy

Gamasutra.com Blogs - 25 February 2019 - 7:24am
Applying game design tools to traditional media.
Categories: Game Theory & Design

Kliuless #24: The New F-Word... Feedback - by Kenneth Liu

Gamasutra.com Blogs - 25 February 2019 - 7:23am
Each week I compile a gaming industry insights newsletter that I share with other Rioters, including Riot’s senior leadership. This edition is the public version that I publish broadly every week as well. Opinions are mine.
Categories: Game Theory & Design

How To Prepare For Your First Game Expo - by Natalie Mikkelson

Gamasutra.com Blogs - 25 February 2019 - 7:15am
A checklist and summary of how to prepare and market your game for an expo.
Categories: Game Theory & Design

Does the world need another mobile collectible card game? - by Nicolas WeberKrebs

Gamasutra.com Blogs - 25 February 2019 - 7:14am
Many independent developers are working on mobile collectible card games. This article analyses gameplay and game universe choices. It evaluates their impact on the potential audience of an already crowded and fast maturing market.
Categories: Game Theory & Design

The unusable usability of ancient Greek punishments - by Pippin Barr

Gamasutra.com Blogs - 25 February 2019 - 7:07am
Reflections of the design and development process of the game Let's Play: Ancient Greek Punishment: UI Edition, focusing on the concept of "usability", and complete with references to the game's code repository and design journal.
Categories: Game Theory & Design

The Soft Power of Word of Mouth - by Michael Heron

Gamasutra.com Blogs - 25 February 2019 - 7:06am
The power of word of mouth in supporting a project is often seen as a polite runner-up to financial support. In this blog I open up some of our stats to show how powerful word of mouth is in a world where Facebook charges for access to your own fans.
Categories: Game Theory & Design

First Video! Persona 5 Game Design Analysis and Review - by Caleb Compton

Gamasutra.com Blogs - 25 February 2019 - 7:06am
For Rempton Games' first video article we dive into the world of Persona 5. In this video I will analyze the UI, music, writing, and budget management of this game, among other aspects.
Categories: Game Theory & Design

Treat Your Indie GameDev Career as a Business - by Tim Beaudet

Gamasutra.com Blogs - 25 February 2019 - 7:05am
The importance of knowing your sustainable cost-of-living and tracking your project time-costs during indie game development.
Categories: Game Theory & Design

Lullabot: Hacking Culture: The Imaginary Band of Drupal Rock Stars at Lullabot

Planet Drupal - 25 February 2019 - 6:54am

Matthew Tift talks with James Sansbury and Matt Westgate about the history of Lullabot, building a team of Drupal experts, and moving away from the phrase "rock star." Ideas about "rock stars" can prevent people from applying to job postings, cause existing team members to feel inadequate, or encourage an attitude that doesn't work well in a client services setting. Rather than criticize past uses of this phrase, we talk about the effects of this phrase on behavior.

Categories: Drupal

Graphql JWT

New Drupal Modules - 25 February 2019 - 5:30am

Allows JWT authentication via GraphQL.

Categories: Drupal

iNotify Live Notifications for Drupal.

New Drupal Modules - 25 February 2019 - 1:50am
Categories: Drupal

The Right Size Table

Gnome Stew - 25 February 2019 - 12:00am

It’s your table. How many people are you comfortable having there?

What is the ideal number of players to have at your table for any given game? Is it three? Four? Five? EIGHT?!? Ask a dozen GMs and you’ll probably get a dozen slightly different answers.

Recently, I was checking my events for an upcoming con and noticed the player limit was five. I panicked slightly, since this was for a game I designed for six players and while I can run it for fewer, the game is about the secrets between the characters and can lose some of its spark if certain characters aren’t in play. Shortly after this panic, a friend asked about my preferred number of players, sparking a conversation about how running games changes depending on the number of players at your table.

When I first started GMing, I thought if you couldn’t run for at least eight players, you were a subpar GM. In part, this was based on my memories of games from the 90’s and some of the oversized groups from my college days. Because of this, many of the early games I brought to cons had eight characters for the players to choose from and I would always accept eight players at the table. Later on, when I started getting into more indie, more story-based games, I was surprised to find many of them advocating for having only four or five players. Heck, I nearly got myself into trouble the first time I ran Headspace, because I put six seats in for the event only to realize the game kind of needs you to run for five or less.

The more I talk to other GMs, the more I realize everyone has their own threshold for what they consider a good or manageable table size. Share1Tweet1+11Reddit1Email

The more I talk to other GMs, the more I realize everyone has their own threshold for what they consider a good or manageable table size. It definitely varies depending on the game being played, but everyone has their own perceptions of what a ‘good’ table looks like. Of course, many folks will speak of their preferences as if they were an absolute and look at anyone who varies from that preference as if they were insane.

Your mileage may vary on what constitutes a small, medium, or large group, but here are *MY* thoughts and advice on various table sizes:

Small Groups
  • I consider a small group one that contains three or fewer players, plus the GM.
  • With a tiny group of players, the GM has to be ‘on’ far more. You get fewer moments where the players carry the action through interactions with one another, allowing you to take a moment to breathe. They look to the GM to fill the void. I tend to find this exhausting, which is why I prefer a larger table.
  • Games tend to finish faster than expected. With fewer players, there are fewer distractions, allowing them to get through any planned material quicker. While the focus the players can have on the game is nice, it can be difficult to fill the standard four-hour time slot at a game convention.
  • A small table allows for a more intimate focus on each character’s story without sacrificing spotlight time from anyone else at the table. With fewer players, you can interweave all their stories into the main story of the game easier.
Medium Groups
  • My medium groups contain four to six players, plus the GM.
  • These are probably the average (ha!) size seen most often for home groups and at cons. My preference usually leans towards this size. There’s enough interplay between the players, but the group is small enough I feel like I can still give everyone the right amount of attention.
  • Many games are designed around the dynamic of four to six players, so going with fewer or more players requires being mindful of any potential changes to the game’s balance. You can generally assume a game is going to run as described in the rules when you fall into this sweet spot. Another benefit is that any modules or other prepared material are designed for this number of players, often making the GM’s job easier.
  • This size group usually offers a good balance for mixing experienced and inexperienced players, or passive and active players. You can still spread your focus equally among the players, but sit back and let some of the active/experienced players take a lead in roleplaying scenes or discussions.

Is a party of eight too much? Or just right for you?

Large Groups
  • I would call any group with seven or more players, in addition to the GM, a large group.
  • Large groups allow getting more people involved in the game and prevent having to leave one or two people out. Occasionally, with a slightly larger group, it can end up being more fun to have one large table than splitting into to two small tables.
  • Certain games will work better for larger groups. The simpler the mechanics are, the less lag time you’ll have as players progress through the game, hopefully keeping everyone focused on the game. Complicated mechanics can often drag the game down. Lighter games focused on humor also tend to work better than more serious games, unless you are prepared to handle the game more like a LARP than a traditional tabletop RPG.
  • The GM has to function like a circus ringmaster, keeping the game moving and shifting the spotlight around the table while making sure everyone gets a chance to do something. This can be taxing on a GM, and it can be harder to reign in dominant players while pulling in quieter players.

We all have our preferences for the style and size of game we prefer to both run and play, but that doesn’t necessarily mean another style and size is going to work for someone else. I generally don’t enjoy larger games, but I appreciate the artistry and efforts of the GMs who somehow make those massive tables work and all their players walk away from the table with smiles on their faces.

What’s your sweet spot for the number of players you run for? Do you have some tips and tricks to offer for running smaller or larger tables? I’d love to hear your advice too.

Categories: Game Theory & Design

Fuzzy Thinking: Dressing for the Occasion

RPGNet - 25 February 2019 - 12:00am
Fuzzy vampires.
Categories: Game Theory & Design

Lullabot: Behind the Screens: Behind the Screens with Suzanne Dergacheva

Planet Drupal - 25 February 2019 - 12:00am

EvolvingWeb Co-Founder Suzanne Dergacheva spills on why she recently joined the Drupal Association, what's happening with Drupal in Montreal, and the Oboe.

Categories: Drupal

OpenSense Labs: Drupal Distributions and Social Impact Platform

Planet Drupal - 24 February 2019 - 10:04pm
Drupal Distributions and Social Impact Platform Vasundhra Mon, 02/25/2019 - 21:50

We all have learned in our biology classes that genes are made up of DNA which gives instructions to the body to grow, develop and live. In other words, it is like a blueprint or like a recipe which guides an individual to do a particular task. 

Just like DNA is important to impact a human body, Drupal distributions are necessary to build and create a social impact platform for your projects and website. 


Social impact is and must be the primary goal and measure for every social initiative. Measuring social impacts urges organizations not to only focus on the economic or financial factor, but to access their influence across the environmental and social dimensions. 

How Building a Social Impact Platform With Drupal Distributions Do Well to a Project?

A distribution packages a set of contributed and custom modules together with Drupal core to optimize Drupal for a specific use and industry. Drupal distribution has evolved from an expensive lead generation tool to something which offers a service at a large scale. Some of the Drupal distributions like:

OpenSocial 

OpenSocial is a free Drupal distribution for constructing private social networks and an out of the box solution for online communities. Open Social is a distribution that is built in Drupal 8 to construct social communities and intranets. It is built in Drupal 8, and it wraps in itself in an array of possibilities leveraging the features of Drupal 8.

In the Drupal community, Open Social is placed as a successor of Drupal Commons. Drupal Commons is a Drupal 7 distribution that is an out of the box community collaboration website.
 

 

  • A case study on Pachamama  

Pachamama approves the inherent people of the Amazon rainforest to protect their lands, culture, educate and inspire people everywhere to bring forth a growing and sustainable world. Drupal was chosen for its flexibility and customizable features.

Drupal was appointed for its versatility and customizable features. For example, Pachamama grants an on- and offline ‘Awakening the Dreamer’ course. In the course module, the user can walk through a step-by-step course program and finish with video, text or an opportunity to keep track of the development and progress. To make this possible within the Pachamama Alliance platform integration of a course module into the Open Social platform was done.
 


Lightning 

A distribution developed and maintained by Acquia. This distribution provides a framework or starting point of Drupal 8 projects that require more advanced layouts.

The developers have been provided with hundreds of embedded automated tests that allow them to implement continual integrations pipelines. It controls major functionality, essentially granting a safe environment to innovate with their own custom code additions to Lightning.

 

  • A case study on Higgidy 

Higgidy is a thriving business, offering incredible high-quality food that is sold in supermarkets. Drupal 8 was chosen for this project based on numerous factors.

The potential for future upgrades to make commerce into the platform was also an engaging benefit, enabling the user to assure that they don’t end up with a fragmented tech stack divided across many platforms. 

Being mobile-driven was a core concern of the platform selection, and Drupal 8 presented with a seamless content experience every time.

One of the primary and most important decisions was to make use of the Lightning. This gave a great head start for a site of this nature, right out of the box, presenting some very important components and assuring that they are able to get going. The site was essentially powered by Views coupled with some custom serialization.
 


Opigno 

This is an Open source e-learning platform based on Drupal that enables the user to accomplish online training, skills of students and employees. Opigno is an open source e-learning platform that is based on Drupal. It allows the user to control online training, and efficiently guarantee that student, employee and partner skills remain up to date.

Opigno LMS is intended for Companies, Corporations, and Universities, looking for an e-learning solution that is flexible and is easily scalable.
 

Drupal Commerce 

Drupal Commerce is an open-source eCommerce software that augments the content management system Drupal. It helps in managing eCommerce websites and applications of all the sizes. 
This distribution also helps in enforcing strict development standards and leveraging the greatest features of Drupal 7 and major modules like Views and Rules for maximum flexibility.
 

 

  • Drupal Commerce helping the community: A case study on Sosense

Sosense supports entrepreneurs who address some of the most challenging social and environmental problems. Drupal was selected for this project because it was one of the most relevant frameworks that build a scalable platform. 

Sosense demand was to rebrand and redevelop their first, custom-developed, platform to develop technical scalability, usability, and interaction design. The project work was simple yet appreciatively challenging. One side it drew from our expertise in creating community- and fundraising solutions. On the other side, Sosense was one of the first complex sites to apply Drupal 7 where many important modules were still in dev status. 

Testing and debugging modules like Organic Groups, Drupal Commerce and i18n, required many unexpected hours of work. The agile project management approach allowed us to tackle some of the unexpected issues with frequent releases and constant client interaction. The project was delivered on time and to the full satisfaction of our client.
 


OpenChurch 

This is the distribution which is for churches and ministries.  A flexible platform with common features of the church helping them streamline development of the website. Some of the features of this distribution are:

  • Blog - It includes a list page and archive page, the blog content type is very easy and this does not use the core blog module.
  • Bulletin - Includes block for downloading latest bulletin, also a list page and content type.
  • Events - Includes an event content, filtered by the ministry and responsive calendar.
  • Gallery - Integrates with ministry content and is an easy way to manage galleries.
  • Giving - Includes list display for featured charities
  • Homepage Rotator - a very nice way to feature content on the homepage in a slideshow which is a very common feature on sites today.
  • Ministry - this represents a church's core ministries (Missions, Youth, etc.) and integrates with other content on the site.
  • Podcast - An out of the box sermon podcast page. Also includes a block for showing the most recent podcast. It is called labeled 'Sermons' but can be used for any kind of podcast.
  • Social - Social integration with Twitter, Facebook, Google+ and more! Enable visitors to share content with their social networks.
  • Staff - Includes staff page and integration with well with ministries.
  • Video - Add 3rd party video from Youtube and Vimeo

Presto

Presto includes pre-configured and ready to use right out-of-the-box functionalities. It consists of an article content type with some pre-configured fields and a basic page content type with a paragraphs-based body field. Some pre-configured paragraph types in this distribution are:

  • Textbox
  • Image
  • Promo bar
  • Divider
  • Carousel

Not only this but it also consists of a block which allows the embedding of Drupal blocks. This distribution has an article listing page which displays a paginated listing of articles, sorted by publish date.

Conclusion  

The advantages of working with a Drupal distribution continue well till date. Maintenance is also a breeze. When you create a website born out of distribution, all modules and features are integrated and tested together. When updates are required, it is a single update, as opposed to hundreds. Thus Drupal distribution for your social impact platform is what you need.

At opensense Labs we purely follow all the functionalities that come with the Drupal distribution. Contact us on hello@opensenselabs.com for more information on the same. Our services would guide you with all the instruction and information, that you require for the same. 

blog banner blog image Drupal Drupal 8 CMS OpenSocial Opigno LMS Drupal Commerce Open Church Lightning Drupal distribution Blog Type Articles Is it a good read ? Off
Categories: Drupal

OpenSense Labs: OpenSocial for your platform? - Buzzinga!

Planet Drupal - 24 February 2019 - 10:04pm
OpenSocial for your platform? - Buzzinga! Vasundhra Mon, 02/25/2019 - 20:58

Click, tap, like, hit, post, tweet, retweet, repost, share, tag, comment - I am sure that you are known to all these terms, use them daily and even promote your business with it. 

We live in a world where the boundaries of work and office space are changing. A new era of transformation has opened up where collaboration and communication within the company is modified into a “Digital System” 

The heart of all this meaningful connection and real-time communication (Which is integral for modern business) is the social intranet.


And nothing beats the performance of OpenSocial, a Drupal distribution that is used for building social communities and intranet. 

OpenSocial is bringing power and the essence of pervasive social capabilities to the web.

You ask how?

Well, Let’s find out

Understand OpenSocial 

OpenSocial is an out-of-the-box solution for the online community. It is used for creating social communities, intranets, portals and any other social project. It appears with a collection of features and functionalities that are useful in constructing a social framework. 

In the Drupal community, Open Social is placed as an heir of Drupal Commons (Drupal Commons is a Drupal 7 distribution that is an out of the box community collaboration website) 


OpenSocial and its out-of-the-box feature 
  • Content types and structure

The user is offered with two content types: events and topics. The architecture lets OpenSocial be lightweight software that can easily be installed and can be used seamlessly by users. Blogs, News etc. are all identical content type as a topic but have separate taxonomy.

  • Media Management 

With the help of Media management, the user can efficiently arrange, resize and add images wherever they want to on a particular website. File System, Images Styles and all other media configurations that are needed to add, resize and adjust images are inbuilt.

  • Responsive and Multi-Lingual Support 

Open Social follows with Drupal 8 “mobile-first” theory and it is responsive “by default”. Not only this but it also consists of “Translation Module” that is used for Multilingual support.

  • SEO Optimization

The SEO strategy is based on a consultative approach. Adverbs, SEO, Social media and conversion optimization is used to generate the traffic. The out-of-the-box feature in OpenSocial helps the user to optimize their website in a way that more people visit it. 

OpenSocial Foundation and W3C Social Web Activity “Social standards are part of the application foundations for the Open Web Platform” 
-Jeff Jaffe 

In other words, they will be used everywhere, in diverse applications that operate on phones, cars, televisions, and e-readers. In terms of OpenSocial, the W3C standard is defined as:

The social web working group which determines the technical standards and API facilitates access to social functionalities as part of Open web platform.
The social interest group coordinates messaging around social at the W3C strategy that enables social business. 

Open source project at Apache Foundation

The Apache Software Foundation hosts two active and ongoing projects in addition to the many commercial enterprise platforms that practice on OpenSocial, it serves as reference implementations for OpenSocial technology:

Apache Shindig: It is the reference implementation of OpenSocial API specifications, versions 1.0.x and 2.0.x. It is the standard set of Social Network APIs that constitutes profiles, relationships, activities etc

Apache Rave: It is a lightweight and open-standards-based extensible platform for managing, combining and hosting OpenSocial and W3C Widget related features, technologies, and services. 

How is OpenSocial contributing to society?

The Developers 

Social platforms are interactive and exercise notifications that are provided with the alerts. Making numerous social software to control social experience takes a lot of time and effort. Building a distribution is the answer to all of it. It allows the developers to build the best things, re-use it, expand and even improve on that. 

Site Owner and Business 

If you are using Opensource Saas offerings, you have the ability to use site codes and data anytime. Social media changed modern society and communications, especially in our private lives. The decentralized nature of social software is a huge opportunity for organizations to reinvent the way they communicate and collaborate

End Users 

End users obsess over user-centered design. Without engaged end users, no projects wouldn’t go anywhere. Thus providing the users with tools that are appealing and easy to use are a must for great user experience.

Why choose OpenSocial over any other software?

Freedom for the clients. If they need to download their SaaS platform and run or extend it as they want, then they can easily do it. 

Getting to this point from scratch takes longer and the core modules give you the functionality you need from the ground up.

The above points clearly say it is better software. With the Drupal community putting extra eyes on the code, making suggestions for design and development improvements, hopefully adding new features word-of-mouth marketing, and possibly some clients.
It provides easy customization options.

OpenSocial giving tough competition to other community software in the market

The pace of digitization is steadily increasing, leaving a lot of old processes behind in the dust. The same applies to traditional methods of innovation. The internet has not just become a hub to share knowledge, but also to create knowledge together through crowd innovation.

Some of the other community software in the market like lithium is being beaten hard by OpenSocial.

How?

Let’s find out 

  Lithium OpenSocial Who uses it? Businesses of all sizes looking to attract new visitors A better way of connecting with your members, volunteers, employees, and customers Free Trail Not Provided  Provided  Free Version Not Provided  Provided  Starting Price $235.00/month It is free Entry Level set up Not Provided  Provided  What does Drupal Community Gain From Open Social? Without Drupal distributions, we won't be able to successfully compete with commercial vendors. Drupal distributions have great potential.
-Dries Buytaert

With the help of Open Social distribution, the Drupal community has been provided with a platform for their social projects. A more sustainable and adopted way of development. OpenSocial is better with Drupal because:

Users can use Open Social for their own projects and clients.
They can give back to the open-source community.
If the user is a Drupal freelancer or professional then they can improve the Drupal.org standing.

Case Study on Youth4Peace 

The UN Security Council acknowledges the positive role played by all young women and men in preserving international security. The task force for Youth, Peace, and Security proposed an updated and expanded Youth4Peace platform. This was done in order to give inspired parties and partners a path to enable consistent and timely information.

The UNDP was already familiar with the features and functionalities of Drupal as the previous site was built on the same. The organization supports open-source mainly because of the reusability feature of modules. 

Moreover, the Drupal 8 community distribution, Open Social equals several goals of the project. Goals like: innovation and the use of technology. The distribution already included most of the needed features for the project, including blogs, events, profiles, information streams, a discussion engine, and moderation tools for community managers.

Therefore, The Youth4Peace portal was developed. It was constructed using an Agile method and mainly focused on:

  • A curated Knowledge Resource Library
  • Moderated e-Discussions & e-Consultations
  • Experts’ Profiles
  • News & Events and their overviews with filters

By being able to produce content for non-community members, the community was able to reach the global platform even at a bigger pace.
 


In The End 

Now we know that OpenSocial has the right blend of features that are needed to build a social community. The distribution proves to be an appropriate platform to start building a community or intranet with immense features.

Opensense Labs understands how important it is for every organization to stay connected with the world. Therefore, we are here to leverage all those facilities and services. Ping us at hello@opensenselabs.com now.

blog banner blog image Drupal Drupal 8 CMS OpenSocial Drupal community Social Media Platforms Drupal distributions Blog Type Articles Is it a good read ? On
Categories: Drupal

Gizra.com: Do-It-Yourself Stress Testing

Planet Drupal - 24 February 2019 - 10:00pm

Earlier we wrote about stress testing, featuring Blazemeter where you could learn how to do crash your site without worrying about the infrastructure. So why did I even bother to write this post about the do-it-yourself approach? We have a complex frontend app, where it would be nearly impossible to simulate all the network activities faithfully during a long period of time. We wanted to use a browser-based testing framework, namely WebdriverI/O with some custom Node.js packages on Blazemeter, and it proved to be quicker to start to manage the infrastructure and have full control of the environment. What happened in the end? Using a public cloud provider (in our case, Linode), we programmatically launched the needed number of machines temporarily, provisioned them to have the proper stack, and the WebdriverI/O test was executed. With Ansible, Linode CLI and WebdriverIO, the whole process is repeatable and scalable, let’s see how!

Infrastructure phase

Any decent cloud provider has an interface to provision and manage cloud machines from code. Given this, if you need an arbitrary number of computers to launch the test, you can have it for 1-2 hours (100 endpoints for a price of a coffee, how does this sound?).

There are many options to dynamically and programmatically create virtual machines for the sake of stress testing. Ansible offers dynamic inventory, however the cloud provider of our choice wasn’t included in the latest stable version of Ansible (2.7) by the the time of this post. Also the solution below makes the infrastructure phase independent, any kind of provisioning (pure shell scripts for instance) is possible with minimal adaptation.

Let’s follow the steps at the guide on the installation of Linode CLI. The key is to have the configuration file at ~/.linode-cli with the credentials and the machine defaults. Afterwards you can create a machine with a one-liner:

linode-cli linodes create --image "linode/ubuntu18.04" --region eu-central --authorized_keys "$(cat ~/.ssh/id_rsa.pub)" --root_pass "$(date +%s | sha256sum | base64 | head -c 32 ; echo)" --group "stress-test"

Given the specified public key, password-less login will be possible. However this is far from enough before the provisioning. Booting takes time, SSH server is not available immediately, also our special situation is that after the stress test, we would like to drop the instances immediately, together with the test execution to minimize costs.

Waiting for machine booting is a slightly longer snippet, the CSV output is robustly parsable:

## Wait for boot, to be able to SSH in. while linode-cli linodes list --group=stress-test --text --delimiter ";" --format 'status' --no-headers | grep -v running do sleep 2 done

However the SSH connection is likely not yet possible, let’s wait for the port to be open:

for IP in $(linode-cli linodes list --group=stress-test --text --delimiter ";" --format 'ipv4' --no-headers); do while ! nc -z $IP 22 < /dev/null > /dev/null 2>&1; do sleep 1 done done

You may realize that this is overlapping with the machine booting wait. The only benefit is that separating the two allows more sophisticated error handling and reporting.

Afterwards, deleting all machines in our group is trivial:

for ID in $(linode-cli linodes list --group=stress-test --text --delimiter ";" --format 'id' --no-headers); do linode-cli linodes delete "$ID" done

So after packing everything in one script, also to put an Ansible invocation in the middle, we end up with stress-test.sh:

#!/bin/bash LINODE_GROUP="stress-test" NUMBER_OF_VISITORS="$1" NUM_RE='^[0-9]+$' if ! [[ $NUMBER_OF_VISITORS =~ $NUM_RE ]] ; then echo "error: Not a number: $NUMBER_OF_VISITORS" >&2; exit 1 fi if (( $NUMBER_OF_VISITORS > 100 )); then echo "warning: Are you sure that you want to create $NUMBER_OF_VISITORS linodes?" >&2; exit 1 fi echo "Reset the inventory file." cat /dev/null > hosts echo "Create the needed linodes, populate the inventory file." for i in $(seq $NUMBER_OF_VISITORS); do linode-cli linodes create --image "linode/ubuntu18.04" --region eu-central --authorized_keys "$(cat ~/.ssh/id_rsa.pub)" --root_pass "$(date +%s | sha256sum | base64 | head -c 32 ; echo)" --group "$LINODE_GROUP" --text --delimiter ";" done ## Wait for boot. while linode-cli linodes list --group="$LINODE_GROUP" --text --delimiter ";" --format 'status' --no-headers | grep -v running do sleep 2 done ## Wait for the SSH port. for IP in $(linode-cli linodes list --group="$LINODE_GROUP" --text --delimiter ";" --format 'ipv4' --no-headers); do while ! nc -z $IP 22 < /dev/null > /dev/null 2>&1; do sleep 1 done ### Collect the IP for the Ansible hosts file. echo "$IP" >> hosts done echo "The SSH servers became available" echo "Execute the playbook" ansible-playbook -e 'ansible_python_interpreter=/usr/bin/python3' -T 300 -i hosts main.yml echo "Cleanup the created linodes." for ID in $(linode-cli linodes list --group="$LINODE_GROUP" --text --delimiter ";" --format 'id' --no-headers); do linode-cli linodes delete "$ID" done Provisioning phase

As written earlier, Ansible is just an option, however a popular option to provision machines. For such a test, even a bunch of shell command would be sufficient to setup the stack for the test. However, after someone tastes working with infrastructure in a declarative way, this becomes the first choice.

If this is your first experience with Ansible, check out the official documentation. In a nutshell, we just declare in YAML how the machine(s) should look, and what packages it should have.

In my opinion, a simple playbook like this below, is readable and understandable as-is, without any prior knowledge. So our main.yml is the following:

- name: WDIO-based stress test hosts: all remote_user: root tasks: - name: Update and upgrade apt packages become: true apt: upgrade: yes update_cache: yes cache_valid_time: 86400 - name: WDIO and Chrome dependencies package: name: "" state: present with_items: - unzip - nodejs - npm - libxss1 - libappindicator1 - libindicator7 - openjdk-8-jre - name: Download Chrome get_url: url: "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" dest: "/tmp/chrome.deb" - name: Install Chrome shell: "apt install -y /tmp/chrome.deb" - name: Get Chromedriver get_url: url: "https://chromedriver.storage.googleapis.com/73.0.3683.20/chromedriver_linux64.zip" dest: "/tmp/chromedriver.zip" - name: Extract Chromedriver unarchive: remote_src: yes src: "/tmp/chromedriver.zip" dest: "/tmp" - name: Start Chromedriver shell: "nohup /tmp/chromedriver &" - name: Sync the source code of the WDIO test copy: src: "wdio" dest: "/root/" - name: Install WDIO shell: "cd /root/wdio && npm install" - name: Start date debug: var=ansible_date_time.iso8601 - name: Execute shell: 'cd /root/wdio && ./node_modules/.bin/wdio wdio.conf.js --spec specs/stream.js' - name: End date debug: var=ansible_date_time.iso8601

We install the dependencies for Chrome, Chrome itself, WDIO, and then we can execute the test. For this simple case, that’s enough. As I referred to earlier:

ansible-playbook -e 'ansible_python_interpreter=/usr/bin/python3' -T 300 -i hosts main.yml

What’s the benefit over the shell scripting? For this particular use-case, mostly that Ansible makes sure that everything can happen in parallel and we have sufficient error-handling and reporting.

Test phase

We love tests. Our starter kit has WebdriverIO tests (among many other type of tests), so we picked it to stress test the full stack. If you are familiar with JavaScript or Node.js the test code will be easy to grasp:

const assert = require('assert'); describe('podcasts', () => { it('should be streamable', () => { browser.url('/'); $('.contact .btn').click(); browser.url('/team'); const menu = $('.header.menu .fa-bars'); menu.waitForDisplayed(); menu.click(); $('a=Jobs').click(); menu.waitForDisplayed(); menu.click(); $('a=Podcast').click(); $('#mep_0 .mejs__controls').waitForDisplayed(); $('#mep_0 .mejs__play button').click(); $('span=00:05').waitForDisplayed(); }); });

This is our spec file, which is the essence, alongside with the configuration.

Could we do it with a bunch of requests in jMeter or Gatling? Almost. The icing on the cake is where we stress test the streaming of the podcast. We simulate a user who listens the podcast for 10 seconds. For for any frontend-heavy app, realistic stress testing requires a real browser, WDIO provides us exactly this.

The WebdriverIO test execution - headless mode deactivated Test execution phase

After making the shell script executable (chmod 750 stress-test.sh), we are able to execute the test either:

  • with one visitor from one virtual machine: ./stress-test.sh 1
  • with 100 visitors from 100 virtual machines for each: ./stress-test.sh 100

with the same simplicity. However, for very large scale tests, you should think about some bottlenecks, such as the capacity of the datacenter on the testing side. It might make sense to randomly pick a datacenter for each testing machine.

The test execution consists of two main parts: bootstrapping the environment and executing the test itself. If bootstrapping the environment takes too high of a percentage, one strategy is to prepare a Docker image, and instead of creating the environment again and again, just use the image. In that case, it’s a great idea to check for a container-specific hosting solution instead of standalone virtual machine.

Would you like to try it out now? Just do a git clone https://github.com/Gizra/diy-stress-test.git!

Result analysis

For such a distributed DIY test, analyzing the results could be challenging. For instance, how would you measure requests/second for a specific browser-based test, like WebdriverI/O?

For our case, the analysis happens on the other side. Almost all hosting solutions we encounter support New Relic, which could help a lot in such an analysis. Our test was DIY, but the result handling was outsourced. The icing on the cake is that it helps to track down the bottlenecks too, so a similar solution for your hosting platform can be applied as well.

However what if you’d like to somehow gather results together after such a distributed test execution?

Without going into detail, you may study the fetch module of Ansible, so you can gather a result log from all the test servers and have it locally in a central place.

Conclusion

It was a great experience that after we faced some difficulty with a hosted stress test platform; in the end, we were able to recreate a solution from scratch without much more development time. If your application also needs special, unusual tools for stress-testing, you might consider this approach. All the chosen components, such as Linode, WebdriverIO or Ansible are easily replaceable with your favorite solution. Geographically distributed stress testing, fully realistic website visitors with heavy frontend logic, low-cost stress testing – it seems now you’re covered!

Continue reading…

Categories: Drupal

Korea Phone

New Drupal Modules - 24 February 2019 - 8:59pm

This module is a Drupal field module that provides Korea's phone number input interface. The telephone number in Korea consists of the network identification number or area code, the base station number, and the serial number.
This module can be used to develop sites that are serviced in Korea. Use in other countries is inappropriate.

Installation

This is the same as a typical installation of the Drupal module.

Categories: Drupal

Video Game Deep Cuts: The Devotion Of An Art Sqool Hades

Social/Online Games - Gamasutra - 24 February 2019 - 8:26pm

This week's highlights include a look at smash hit Taiwanese horror game Devotion, quirky AI art tutoring game Art Sqool, and the latest behind-the-scenes video on Supergiant's Early Access title Hades. ...

Categories: Game Theory & Design

Pages

Subscribe to As If Productions aggregator