All RPGs and Storygames by Tod Foley are now available at DrivethruRPG and RPGnow. Bring these games to your table!
This module helps to prevent the "File not Found"-Error.
It mostly appears when setting up a local instance of a live page via Git.
This module gets the files from the Remote-Server for you without downloading. Therefore you just need to configure your Live-URL in the Configuration Form.Dependencies
to make the module work, you need to add the below block to your sites/default/files/.htaccess.
Usain Bolt, in his last appearance at the World Track and Field Championships in 2017, stood third by a narrow defeat in the 100m race leaving behind a yawning gulf. Bolt finished the race just a hundredth of a second later than his fellow competitors.Every (nano)second counts!
Such is the importance of speed that even a three-time Olympic gold medallist, Usain Bolt, had to bear the brunt of those nanoseconds. Someone might ask “How do I get started learning about web performance?”
Visualise that it is the Mega Book Sale Day and the bookworms are thronging the best performing online stores that are selling the books of renowned authors. Coping with such a colossal turn-up, a site with much faster page load speed would be preferred over the ones that are a bit sluggish. Drupal offers a superb platform for an effective website performance optimisation thereby making it faster and user-friendly.The Significance of Website Performance Optimisation
Web performance optimisation involves monitoring the performance of web application analysing and assessing it, and identifying the best practices to improve it.
Web applications are a combination of server-side and client-side code. To improve the web performance, both the sides need to be optimised.
The server-side optimisation relates to database queries and other application dependencies to check how long it takes to run on the server for executing requests.
Performance optimisation is significant because of the following factors:User retention
BBC found that they are losing out of 10% of users for every extra second their website took to load. Also, DoubleClick by Google found that if the web page took more than 3 seconds to load, 53% of mobile site visitors tend to abandon the page.
We all strive to make our users engage in a meaningful interaction with what we have built for the web.
So, if it is an online store, you would like to see a prospective audience turning into buyers. Or if it is a social networking web application, you would want your online visitors to get ensconced in an arresting interaction with one another. High performing sites play a vital role in engaging and retaining users.An increase in user retention by 5% can result in increased profits by up to 95%.
It costs 5 to 25 times more to attract new customers. So, even a 5% enhancement in customer retention can lead to increased profits of 25%-95%.
By redesigning their web pages, Pinterest combated a 40% reduction in perceived wait times and witnessed a 15% increase in their search engine traffic and sign-ups.
COOK, a provider of high-quality frozen meals, was able to address the average page load time and cut it down by 850 milliseconds which resulted in 7% in conversions, 10% increase in pages per session and 7% decrease in bounce rate.Improved Conversions
User retention ultimately leads to better conversion rates. Slow sites can have huge repercussions on the business revenues. Better performance of sites can be highly profitable to shore up revenues.Source: Hubspot
According to 2016 Q2 Mobile Insights Report by Mobify, 1.11% increase in session-based conversion was seen for every 100ms decrease in homepage load speed. Moreover, a 1.55% increase in session-based conversion was noticed for every 100ms decrease in checkout page load time. The outcome was an increase in the average annual revenue by approximately $530,000.
Also, AutoAnything revved up their sales by 12-13% after decreasing their page load time by half.User experience
When sites ship tons of code, underwhelming performance persists as the browsers chew through megabytes of it on snail-paced networks.Source: Impactbnd
Even the devices with limited processing power and memory can find it hard to cope up with the modest amount of unoptimised code. With poor performance taking centre stage, application responsiveness and availability diminishes.
Better optimised code lead to high functioning and better-performing sites which in return alleviate the digital user experience.Strategising the web performance
Formulation of strategies to improve web performance can be done in two ways:Bottom-up strategy
Also known as performance-by-design, the bottom-up strategy is the preferred approach to integrate performance as a core development principle. In this strategy, the performance optimisation principles are framed, applied and maintained. This is done right from the application design phase.
The key stages that are involved in this approach are stated below:
- Performance principles are laid out.
- The key pages/transactions are identified, optimised accordingly, and then performance principles are executed.
- Performance SLAs (Service Level Agreement) are monitored and maintained.
Here's a chart by Infosys which explains it best:Key stages involved in bottom-up strategyTop-down strategy
If an existing application needs to be optimised for performance, top-down strategy comes into play. This is a preferred option only when the legacy applications are being optimised for high performance. Also, this is not cost effective and the optimisation options are limited.
Steps involved in this strategy are as follows:
- Factors that are contributing to the page performance are assessed using tools like PageSpeed Insights, WebPageTest etc.
- Activities that would lead to maximum performance improvements are optimised.
- Other optimisations with subsequent releases are iteratively implemented.
In addition to these strategies, one must consider an important methodology called ‘Performance Budgeting’. It means setting a performance threshold that you aim to stay within. You can safeguard your site speed and detect any regression in the performance by setting up a performance budget to ensure continual eye on performance.
This is how we do it!
Expected load time and Google page speed score, as shown below, is the core of our perpetual and iterative development process.
The above chart shows that, while applying performance budgeting methodology, we take note of:
- Average load time of 2 seconds or less
- Defined maximum limit on page size and number of HTTP requests
- Verification of all server site tuning for an efficient and responsive site
- Google page speed performance grade of above 90
- Implementing performance optimisation
How to speed up my Drupal website performance? Drupal is loaded with an enormous amount of features which, when implemented smartly, can lead to superfast page loads. There are several techniques to make your website faster by leveraging the amazing features of Drupal.Keeping your site and modules updated
Outmoded modules can deter your efforts in speeding up your website. Thus, it is important to update every module enabled on your Drupal site.Uninstalling unused modules
Like those outdated modules, it is significant to keep a tab on least used or no longer used modules. The number of Drupal modules installed on the site is directly proportional to the time taken for code execution which affects page load time. Uninstalling unwanted modules can alleviate execution time.
Moreover disabling the modules also adds to the execution time of the code. So, a complete removal by uninstalling the unused modules can speed up the Drupal site.
Optimisation of native cache system ensures that all the web page components are stored in an easily accessible location after a user visits your site for the very time. So, whenever the user visits your site again, the page elements are loaded from the cache which leads to increased page load speed.
Drupal has the provision of advanced caching with a great set of modules:
- Internal Page Cache module helps in caching the web pages for anonymous users to increase the speed for subsequent users.
- Dynamic Page Cache module caches web pages for the anonymous and authenticated users and is recommended for the websites of all screen sizes.
- BigPipe module allows your users to quickly see the unchanged, cacheable page elements while the personalised content is exhibited next. This technology was inspired by Facebook. Drupal 8’s much improved render pipeline and render API is of huge help.
- Redis module helps in integrating Drupal with Redis key-value store thereby providing a robust cache system for static pages.
- Varnish module lets you integrate Drupal sites with an advanced and fast reverse-proxy system - Varnish cache - to serve static files and unknown page-views quicker and at high volumes.
Website coding is not the sole thing that can be optimised. Optimising database by regularly cleaning up the data and removing the unwanted piece of information.
Memcache API and Integration module, help in the integration of Drupal and Memcached. It stores your data in active memory for a limited period of time thereby making it faster to access.
So, instead of making queries to the database constantly, the information is readily available. Such a system also works on the shared web hosting plans.Incorporating a Content Delivery Network (CDN)
Drupal 8 core is loaded with image optimisation feature to set the compression ratio of the images and fine-tune the page performance.
Moreover, the size of the images for screen sizes of different devices can be optimised in Drupal 8 to enhance the page load speed.Handling 404 errors
Lazy or on-demand loading is a perfect way to optimise your site’s performance. In this method, you split your code at logical breakpoints and then load it once the user has done something that requires a new block of code.
Basically, in traditional websites, all the images and content are preloaded into the web browser when someone accesses the site. Lazy loading loads these elements as soon as a user scrolls to view a content.
Blazy, Drupal module, provides the functionalities of lazy loading and multi-serving the images to save bandwidth and server requests.Better web hosting
It is of consummate importance that, while implementing every possible tips and trick and utilising the Drupal’s amazing features, you chose the best web hosting provider that will decide your site’s ultimate speed, stability and security.Case Study
The Drupal website of the Farm Journal’s MILK was optimised for high performance and better search engine rankings with a help of carefully drafted audit report by Opensense Labs.
In this section, we will focus on how we used our Drupal expertise to resolve the performance issues.Project highlights
Previously segregated CSS and JS files cached separately which escalated the page load time. We aggregated all these files and put them in one place which assuaged the page load time.
Moreover, we used Advanced CSS/JS Aggregation Drupal module to minify CSS, JS and HTML and reduce load time.
In addition to these, we enabled Redis, used as a database, cache and message broker, so that it can be used as the backend instead of MySQL. This allowed cached items to be retrieved swiftly and improved performance.Project outcome
On testing the performance metrics on tools like PageSpeed Insights and Pingdom, we witnessed significant improvement.
- Result on handheld devices
Post-implementation (Live Instance)
- Result on Desktop
Post-implementation (Live Instance)
PingdomPre-implementation Pingdom Score (Live Environment)
Post-implementation Pingdom Score (Live Environment)
Speed can be the determining factor in the amount of time an online user spends on your website. It’s important that you remove the sluggishness from your website and inculcate betterments in its performance. Drupal 8 can help by incorporating wonderful features to make your site a high performing space.
Feel free to reach us at firstname.lastname@example.org for developing a high performing Drupal website.blog banner blog image Performance Optimisation Web Performance Performance Budgeting Website Performance Optimisation User Retention Conversion Rate User experience Page Load Speed Page Load time Blog Type Articles Is it a good read ? On
The platform service was optimized and adapted continuously besides other projects of the company, until Manuel Pistner, CEO of Bright Solutions, decided to form a team for this project, that already counted important customers.
Drupal Planet Drupal Business announcements
Provides advanced number formatting and rounding options for
Integer would also work but doesn't make sense from my point of view, because the core formatters already provide everything needed for integers, I think. No rounding is needed.
This module provides integration between SMSFactor and SMS Framework.
Maintainers of this module are not affiliated with the SMSFactor company.Installation composer require drupal/sms composer require drupal/sms_smsfactor
This module provides integration between OVH and SMS Framework.
Maintainers of this module are not affiliated with the OVH Group.Installation composer require drupal/sms composer require drupal/sms_ovh
An interesting RPG related convergence happened this week. The incident brought into alignment the burgeoning spotlight of Actual Play entertainment, the continuing specter of character death, and the rising levels of toxic fan behavior. Yeah, I’m going to talk about some spoilers for a recent episode of Critical Role and the reaction it received, so spoiler warnings for any Critical Role fans that aren’t up-to-date.
In full disclosure, I do not regularly watch or listen to Critical Role. I’ve taken in some of their one-off episodes, but I haven’t had the time to take in the full series, either of the original Vox Machina campaign or the new Mighty Nein campaign. I do, though, have several friends who follow the show at varying levels of devotion, so I am peripherally aware of the show’s current events. I do know that I admire Matthew Mercer’s abilities as a GM and how he brings the game world around the players to life.
So, those that aren’t in the know are probably wondering what I’m going on about. Critical Role’s episode that dropped on July 12th included the death of one of the player characters. Most fans took to Twitter in shock and grief at the loss of a beloved character, but a large enough segment of the fan base decided this character death was justification to declare war on Mercer and the guest player, Ashly Burch. Thankfully, most of those attacks seem to have been drowned out by the support of fans, but it was enough of a problem that several cast members asked people to chill out and Mercer himself even commented on it from his own Twitter account.
Actual Play podcasts and streams are an interesting development in the hobby and Critical Role is probably the farthest-reaching example of the medium. For those unfamiliar, Actual Play refers to live or recorded game sessions that are then served up as entertainment. I’m sure that game sessions have been recorded as long as gamers have had access to video recording equipment, but it’s only in the last few years that this particular type of entertainment has started rising in popularity. The level of editing on Actual Play shows can vary from show to show, with some going for the authenticity of the game play to others editing down to just the narrative. Our very own Senda and Chris are both involved in Actual Play podcasts, with Chris being part of the Wednesday Evening Podcast All-Stars, while Senda is one half of She’s a Super Geek (where you can listen to the session of Masks I ran for the show last year).
Critical Role has been running since 2015 and the GM and the players are all professional actors, so the quality of roleplay and improvisation takes the entertainment to a different level. Their episodes are aired live, so get no editing, but with the level of acting talent the cast has, that almost doesn’t matter. As of their 100th episode last summer, the show had hit 68 million views. Whatever you think of the show, it’s done a great deal to spread awareness and interest in 5th edition D&D and RPGs in general. It’s brought the hobby to a far wider audience than I could have possibly imagined ten years ago.
Of course, the growing popularity of Critical Role and Actual Play podcasts brings up an interesting dilemma as strangers are invited to ‘watch’ a game being played as if it were a scripted show or movie. As much as I love being true to the narrative and leaning into the cinematic qualities of roleplaying games, we all know that games don’t always work out as neatly as a scripted show can. But if you’re recording your game as entertainment, your audience has expectations and that’s where things took a turn for the ugly for some of the fans of the show.
Character death, especially when it’s dramatic and tense, can be tough to deal with. Back in the day, I saw immature players have total meltdowns when a character unexpectedly died, and I’m sure others have similar stories. Even if you are mature enough to deal with it, it can still knock the wind out of you as you say goodbye to a beloved character you’d carried through so many other adventures.
Now take those emotions and give them to thousands upon thousands of fans watching/listening as the scene is being played out. They’ve become just as invested in that character as the player. If you want to see how deeply this affected fans, just take a Twitter stroll through #mollymauk and you’ll see the mourning of fans through both words and amazing artwork.
But add in a dash of toxic fandom. Take that sense of ownership fans develop for their favorite properties and combine that with the anonymity of the internet, creating the freedom to be a troll. You end up with a small, but not insignificant, portion of the fans attacking the very GM that has guided something they’ve loved for hundreds of episodes. Or attacking the guest player of the character they felt screwed up and didn’t do enough. Welcome to the internet age and the way toxic fans destroy that which they love.
Fandom devotion to the things they love is nothing new and doesn’t have to be destructive. At the dawn of the last century, letters from devoted fans helped convince Sir Arthur Conan Doyle to write Sherlock Holmes out of his previously established death and into more stories. In the late 1960’s to the early to mid 1970’s, Star Trek was saved by fans creating a thriving community around a canceled TV show, eventually convincing Hollywood the property might still have life left in it. In May of 2007, concerned fans sent 20 tons of various nuts to CBS in an attempt to save Jericho from cancellation. The studio begged fans to stop sending them nuts and renewed the show. I don’t think it had anything to do with peanut allergies, but who knows.It’s as if a whole wave of people saw or read Stephen King’s Misery and decided Annie Wilkes should be their role model on how fans treat the creators of their favorite thing. Share414Tweet73+11Reddit1Email
Entitled and obnoxious fans have always existed among the hordes, but the digital age of social media that we live in now has given these jerks an opportunity to have their vitriol heard in ways they never had before. Now we end up with things like Ghostbuster ‘fans’ forcing Leslie Jones to leave Twitter after a barrage of attacks. Or Kelly Marie Tran and Daisy Ridley from Star Wars both deleting their Instagram accounts because dealing with the trolls was getting to be too much. Or the whole Szechuan sauce debacle from Rick and Morty fans. It’s as if a whole wave of people saw or read Stephen King’s Misery and decided Annie Wilkes should be their role model on how fans treat the creators of their favorite thing.
While we definitely have some problematic corners of the RPG hobby, it’s weird seeing this particular type of problem of toxic entitlement happening here. Thankfully, this particular incident has been drowned out by waves of support from fans. You have to really dig to find some of the nastier tweets or posts about the topic, so most of what you’ll find are the cast or fan reactions to the hate.
It’s a weird place to be in, where a roleplaying game’s character death created a backlash from people who weren’t even playing the game. My final takeaway from this is to just remind people to not let your friends be this toxic type of fan. Remind them that ‘We don’t do that here’. And even if you’re upset at the direction something you love is going, don’t be that jerk. Don’t be an Annie Wilkes.
The timestamp range field what stores start and end datetime values as unix timestamps.
The work is in progress.
It's been 12 months since my last progress report on Drupal core's API-first initiative. Over the past year, we've made a lot of important progress, so I wanted to provide another update.
Two and a half years ago, we shipped Drupal 8.0 with a built-in REST API. It marked the start of Drupal's evolution to an API-first platform. Since then, each of the five new releases of Drupal 8 introduced significant web service API improvements.
In fact, I believe that this functionality is so crucial to the success of Drupal, that for several years now, Acquia has sponsored one or more full-time software developers to contribute to Drupal's web service APIs, in addition to funding different community contributors. Today, two Acquia developers work on Drupal web service APIs full time.Drupal core's REST API
While Drupal 8.0 shipped with a basic REST API, the community has worked hard to improve its capabilities, robustness and test coverage. Drupal 8.5 shipped 5 months ago and included new REST API features and significant improvements. Drupal 8.6 will ship in September with a new batch of improvements.
One Drupal 8.6 improvement is the move of the API-first code to the individual modules, instead of the REST module providing it on their behalf. This might not seem like a significant change, but it is. In the long term, all Drupal modules should ship with web service APIs rather than depending on a central API module to provide their APIs — that forces them to consider the impact on REST API clients when making changes.
Another improvement we've made to the REST API in Drupal 8.6 is support for file uploads. If you want to understand how much thought and care went into REST support for file uploads, check out Wim Leers' blog post: API-first Drupal: file uploads!. It's hard work to make file uploads secure, support large files, optimize for performance, and provide a good developer experience.JSON API
We had originally planned to add JSON API to Drupal 8.3, which didn't happen. When that plan was originally conceived, we were only beginning to discover the extent to which Drupal's Routing, Entity, Field and Typed Data subsystems were insufficiently prepared for an API-first world. It's taken until the end of 2017 to prepare and solidify those foundational subsystems.
The same shortcomings that prevented the REST API to mature also manifested themselves in JSON API, GraphQL and other API-first modules. Properly solving them at the root rather than adding workarounds takes time. However, this approach will make for a stronger API-first ecosystem and increasingly faster progress!
Despite the delay, the JSON API team has been making incredible strides. In just the last six months, they have released 15 versions of their module. They have delivered improvements at a breathtaking pace, including comprehensive test coverage, better compliance with the JSON API specification, and numerous stability improvements.
The Drupal community has been eager for these improvements, and the usage of the JSON API module has grown 50% in the first half of 2018. The fact that module usage has increased while the total number of open issues has gone down is proof that the JSON API module has become stable and mature.
As excited as I am about this growth in adoption, the rapid pace of development, and the maturity of the JSON API module, we have decided not to add JSON API as an experimental module to Drupal 8.6. Instead, we plan to commit it to Drupal core early in the Drupal 8.7 development cycle and ship it as stable in Drupal 8.7.GraphQL
For more than two years I've advocated that we consider adding GraphQL to Drupal core.
While core committers and core contributors haven't made GraphQL a priority yet, a lot of great progress has been made on the contributed GraphQL module, which has been getting closer to its first stable release. Despite not having a stable release, its adoption has grown an impressive 200% in the first six months of 2018 (though its usage is still measured in the hundreds of sites rather than thousands).
I'm also excited that the GraphQL specification has finally seen a new edition that is no longer encumbered by licensing concerns. This is great news for the Open Source community, and can only benefit GraphQL's adoption.
Admittedly, I don't know yet if the GraphQL module maintainers are on board with my recommendation to add GraphQL to core. We purposely postponed these conversations until we stabilized the REST API and added JSON API support. I'd still love to see the GraphQL module added to a future release of Drupal 8. Regardless of what we decide, GraphQL is an important component to an API-first Drupal, and I'm excited about its progress.OAuth 2.0
A web services API update would not be complete without touching on the topic of authentication. Last year, I explained how the OAuth 2.0 module would be another logical addition to Drupal core.
Since then, the OAuth 2.0 module was revised to exclude its own OAuth 2.0 implementation, and to adopt The PHP League's OAuth 2.0 Server instead. That implementation is widely used, with over 5 million installs. Instead of having a separate Drupal-specific implementation that we have to maintain, we can leverage a de facto standard implementation maintained by others.API-first ecosystem
While I've personally been most focused on the REST API and JSON API work, with GraphQL a close second, it's also encouraging to see that many other API-first modules are being developed:
- OpenAPI, for standards-based API documentation, now at beta 1
- JSON API Extras, for shaping JSON API to your site's specific needs (aliasing fields, removing fields, etc)
- JSON-RPC, for help with executing common Drupal site administration actions, for example clearing the cache
- … and many more
Hopefully, you are as excited for the upcoming release of Drupal 8.6 as I am, and all of the web service improvements that it will bring. I am very thankful for all of the contributions that have been made in our continued efforts to make Drupal API-first, and for the incredible momentum these projects and initiatives have achieved.
Special thanks to Wim Leers (Acquia) and Gabe Sullice (Acquia) for contributions to this blog post and to Mark Winberry (Acquia) and Jeff Beeman (Acquia) for their feedback during the writing process.