All RPGs and Storygames by Tod Foley are now available at DrivethruRPG and RPGnow. Bring these games to your table!
A continuation of last month’s article, where we took some maps, turned the one of Italy and the Mediterranean sideways, and created coastal outlines for a summertime world-building exercise.Next step: Define nations
Geographically, that means establishing borders. You’ll often hear that natural landforms are definitive for borders. In some cases, that is true. Rivers, mountains, deserts — they all can be demarcation lines for nations. That is often the case, if during your world’s history, two diplomats at a negotiation table hammered out peace treaty plans. “You get everything east of the canyon, we’ll take everything west. Sound good? Excellent. Open that bottle of wine and let’s celebrate.”
A map that only has natural landforms as boundaries never quite looks right, however. There’s always more to it than that. Perhaps invading armies went so far, stopped at a defensible point, such as a castle; then either waited for their supply lines to catch up or got pushed back by another army, until finally, someone in charge said, “That’s it, we’re planting the flag here.”
Check out this historical atlas of Europe. The shape and definition of borders are flexible. They ebb and flow as time, climate, and economic and military conditions change. Coalitions and confederations dissolve. Alliances form and reform. Empires of economic might and martial prowess emerge. Domestic politics and economic conditions, not to mention disease, all affect stability. Or, more plainly, governments fall. Dominance, history has proved, is fleeting.
Two things to keep in mind, as your world-building continues, is that regardless of lines on a map, a nation’s “true border” only extends as far as it can 1) project power and reasonably enforce, 2) what neighboring political entities will respect.
Our example map of a peninsula-styled continent, for instance, has many coastal nations. Once we reach the stage of putting dots for cities, I’ll adopt a “points of light” model. Many will be city-states with a maritime flavor, but beyond being able to protect a key trade road, most of the territory beyond the city-state will be wilderness. There might be pockets of organized agriculture — plantations and farming enclaves — but these will be the exception.
For fantasy adventure and exploration to flourish, there needs to be an untamed wilderness. If you need this map for political campaigns — a “game of thrones” game of intrigue and ambition, the wilderness serves as a place from where invading forces coalesce or where armies clash.Reflecting the ‘now’
Rather than let this devolve into geopolitics with a dash of sociology, I’d say there are enough variables at work that there is no “wrong” way to set borders. Its arbitrary. Let your map reflect that. The “now” has history behind it. The location of a river might be more valuable than a network of roads. A national border might simply be the traditional range of grazing cattle or the growing region for a cash crop. The families that are good stewards might end up being kings by virtue of their holdings; feudal systems, ultimately, reward those who manage the land well. Or, perhaps, rulers rise on other factors, such as they are better at raising armies and winning battles than their predecessor. Or maybe, it’s the converse, they are just smart enough to raise defenses that will withstand any attack or seige.
Let these things percolate in your mind as you start carving up your fantasy map and placing nations and city-states here and there.
If you are interested in viewing my keynote, you can download a copy of my slides (256 MB).
Thank you to Design 4 Drupal for having me and happy 10th anniversary!
If you are interested in viewing my keynote, you can download a copy of my slides (256 MB).
Thank you to Design 4 Drupal for having me and happy 10th anniversary!
Greetings, folks! As we head into feature freeze for Drupal 8.6 (the week of July 18), here's a run-down of the various initiatives, and a hit-list of what they're trying to accomplish in the next two weeks. Patch reviews, testing, design, docs, and many more skills are very welcomed!
A couple of caveats here:
1) This is my own personal best understanding of where this stuff is all at, based on reading issue comments, attending meetings, overhearing things from other people who attended meetings, catching the odd Slack snippet of conversation, carrier piegon, etc. And therefore may not be 100% accurate, or even 80% accurate — there's a lot going on! (please clarify in the comments if you see any errors/omissions)
2) Just because something is listed here, there is absolutely no guarantee that it gets reviewed + (truly) RTBCed + committed in time for feature freeze and makes it into 8.6. As you can see, there are lots of issues in the list below, and we're all doing our best to stay on top of them. Worst-case, there's always 8.7. :)
3) This post gets into nitty-gritty "technical audience" details; if you're interested in a more broad overview of initiatives and their aims for 8.6 and beyond, there's the strategic initiatives overview on Drupal.org. I was also recently on a Lullbabot podcast to that effect.
Here are the issues this team has surfaced as important for 8.6:Make Nightwatch testing more generally useful
- Add login/logout commands to nightwatch [#2973879]
- Create nightwatch command to install modules [#2974619]
Seriously, check out the five-digit node IDs on these bad boys! :P
- ajax.js insert command sometimes wraps content in a div, potentially producing invalid HTML and other bugs [#736066]
This team's 8.6 goals are two-fold: 1) stabilizing and filling gaps in the existing REST API, and 2) attempting to add JSON API to core.
TONS of work has been going on in the JSON API contributed module queue to fix a number of outstanding issues to make it core-worthy. So even if this module doesn't make it in time for 8.6, the entire ecosystem will benefit throughout 8.6's lifecycle by using a much more robust and well-tested contributed module. Additionally, a long-standing gap of file upload support has been added. Huzzah!
For the remainder of 8.6, the team would like to focus on the following:Unblockers to API-First in general
- Add DateTimeNormalizer+TimestampNormalizer, deprecate TimestampItemNormalizer: @DataType-level normalizers are reusable by JSON API [#2926508]
- @DataType=map cannot be normalized, affects @FieldType=link, @FieldType=map [#2895532]
- EntityResource should add _entity_access requirement to REST routes [#2869426]
- PATCHing entities validates the entire entity, also unmodified fields, so unmodified fields can throw validation errors [#2821077]
- [PP-1] Work around core's ill-designed @FieldType-level TimestampItemNormalizer normalization until #2926508 lands [#2929932]
- JSON API indicates it supports POST/PATCH/DELETE of config entity types, but that's impossible [#2887313]
- Needs Issue: Module name conflict between contrib/core (what happens when we bring a same-named contrib module to core that sites are actively using?)
- [>=8.5] Remove JSON API's "file URL" field work-around now that Drupal core 8.5 fixed it [#2926463] - Fixed!
These two initiatives overlap in that we're aiming to build the automatic update functionality around improving core's underlying Composer support.
The Composer team has compiled an excellent plan of attack for how to provide Composer support without jeopardizing the site builder experience. Most of that work will take place in 8.7.
However, one of the pre-requisites for Composer to work well, is adding semantic versioning support for contrib. Support for this would also be tremendously helpful to contrib module authors and site builders, regardless if they use Composer to manage their dependencies or not.Unblockers to semver for contrib
- Core version key in module's .info.yml doesn't respect core semantic versioning [#2313917]
- Module version dependency in .info.yml is ineffective for patch releases [#2641658]
This team spent most of the 8.6 cycle forming, brainstorming a list of blockers to configuration awesomeness, and prioritizing those efforts. The hope is for a roadmap to get published after the sprint next week at Drupal Developer Days Lisbon.
One major win in 8.6 is the ability to Allow a site-specific profile to be installed from existing config, which is part of the aim to Allow a site to be installed from existing configuration (basically, moving the capabilities of the Config Installer module into core.)Unblockers of install from existing configuration
- Install a site from config if the config directory is set in settings.php [#2980670]
The Documentation initiative has a lot on the go right now, from designing a top-level landing page for the new docs system, to taking a holistic look at the existing docs and how to refactor the IA around them, and finally creating a repository around "quick start" guides. None of these have a particular deadline around 8.6, because they're happening independently of core.
On the core side, there's work being done on a new experimental module for overhauling the in-app help system and this work has an 8.6 deadline.New topic-based core help system Extended Security Support
For the plan around this initiative to happen, we need to make several adjustments to core's Update Status module, which currently makes several hard-coded assumptions about the last minor release of Drupal expiring immediately once a new minor release is available.Update Status Improvements
- If the next minor version of core has a security release, status still says "Security update required!" even if the site is on an equivalent, secure release already [#2804155]
- Status report should indicate next minor release date (needs issue)
- (other issues TBD)
The Layout team has been hard at work improving upon the experimental Layout Builder functionality that was added to 8.5. The main goal of the team for 8.6 is to gather real-world testing feedback from end users, which they are accomplishing by adding Layout Builder to a new branch of the Lightning distribution. Doing this has uncovered a few holes in the implementation relative to what's possible in contrib right now, and filling those gaps is the focus of the remaining 8.6 time for the team.Layout Builder gaps
- Allow the inline creation of non-reusable Custom Blocks in the layout builder [#2957425]
- Add a validation constraint to check if an entity has a field [#2976356]
- Determine if Layout Builder should replace entity_view_display for all Entity Types [#2936358]
- No ability to control "extra fields" with Layout Builder [#2953656]
- Allow Custom blocks to be set as non-reusable adding access restriction based on where it was used. [#2976334]
- [PP-1] LayoutBuilderEntityViewDisplay::getRuntimeSections() does not delegate to plugins [#2976148]
- Add EntityContextDefinition for the 80% use case [#2932462]
- [meta] Decide how Layout Builder should function with Content Moderation and Workspaces modules [#2973382]
- Layout Builder does not respect translations [#2946333]
- Track Layout override revisions on entities which support revisioning [#2937199]
Next, we need to integrate that media library into the node form, and ideally allow people to add from there as well in a more streamlined fashion.Blockers to media awesomeness
- Create a field widget for the Media library module [#2962525]
- (needs issue) Mark Media Library as beta
- [PP-1] Allow media to be uploaded with the Media Library field widget [#2938116]
- Any AJAX call disregards machine name verification when AJAX is used and leads to a fatal error [#2557299]
The goal of this initiative for 8.6 is to stabilize the migration system which means marking the experimental Migrate Drupal + Migrate UI modules stable. This was also the goal for 8.5. What's making it tricky is multilingual migrations, which are themselves tricky because there are a multitude of ways one might have set up multilingual functionality prior to it being included in core in Drupal 8, which introduces lots of edge cases around making IDs line up and whatnot.
The team is taking a two-pronged approach here:
1) Attempt to close all of the remaining i18n-related issues.
2) Worst-case, split off multilingual migrations to an experimental module, so that the rest of the system that works for 80%+ of sites can be marked stable.
- [policy, no patch] Mark Migrate Drupal as stable [#2905736]
- [policy, no patch] Mark Migrate Drupal UI as stable [#2905491]
- [META] Multilingual migrations meta issue [#2208401]
- Experimental migrate_drupal_multilingual module [#2953360]
The Umami profile was committed (albeit marked hidden) in 8.5, and major efforts have been going on to remove all of the "beta blockers" preventing it from being visible in the UI. The last of these—Install profile in settings.php and mismatch check makes re-installs of Drupal hard [#2975328]—just landed earlier this week!
From here to 8.6, the team is working on stability and accessibility improvements.Umami awesomesaceness
- Un-hide Umami in 8.5 to vastly improve Drupal's evaluator experience [#2957464]
- Improve Umami demo's support for managing field display settings [#2980029]
- Improve Umami Demo's header layout and responsive behaviour [#2980528]
- Umami missing some Media "plumbing" found in Standard profile [#2939594]
Last, but certainly not least, is the Workflow initiative, which aims to add the Workspace contributed module to core in 8.6 to facilitate content staging and full-site previews. The module was already committed to 8.6 awhile back, but must be brought up to "beta" level stability to remain in the tagged + shipped release.
Because Workspaces can only stage content that's revisionable, there's also a parallel effort to add revision-ability to more types of data in Drupal core.Blockers to Workspaces Stability
- WI: Workspace module roadmap [#2732071]
- Add workspace UI in top dialog [#2949991]
- Remove the automatic entity update system [#2976035]
- Convert taxonomy terms to be revisionable [#2880149]
- Convert custom menu links to be revisionable [#2880152]
- Convert comments to be revisionable [#2880154]
Whew! That's QUITE a lot. Are there any issues out there that we're missing that you feel are mission-critical to get into Drupal 8.6? Feel free to suggest them, with the caveat that the longer the list is, the more distributed the community's and core committers' focus is.
Thanks for reading!Tags: drupaldrupal 8drupal 8.6product manager hat
Drupal 8 provides the option to include an Ajax Callback within our applications using the Ajax Framework. There are some existing functions which can be used: Methods to hide/show elements in the html document, attach content to an element, redirect a page after a submit, and so on. Sometimes we need to implement something particular, or a custom JS code. In that case, those out-of-the-box functions are not enough. Fortunately, we can also create our own custom responses. So, let’s start creating a new ajax callback for a custom form submission.mcastillo Thu, 06/28/2018 - 19:37
You have patched your Drupal website, haven't you? If so, then that critical 3-month-old security flaw Drupalgeddon2 can't get exploited on your site. Even so, with the menace of a cryptocurrency mining attack still lurking around the unpatched websites, you legitimately ask yourself: what are some quick and easy ways to secure Drupal?
“Which are the most basic steps to take and the simplest best practices to adopt to harden my Drupal site's security myself?”
The majority of Drupal's underlying code is PHP. As a Drupal developer, the better you know PHP, the better your code will be. In this Acro Media Tech Talk video, Drupal developer Rob Thornton discusses code nesting and how you can optimize your code in order to reduce unnecessary nesting.
Code nesting can basically be described as when a block of code is contained within another block of code. If you're code isn't well thought out, you can potentially end up with deep nesting that is both hard to read and difficult to maintain. Aside from reducing difficult to read code and making your code more maintainable, reducing the amount of nesting helps you find bugs and lets other developers contribute to your code easier. Rob uses a number of examples of common nesting scenarios, walking you through how to find and fix them.
If you liked this video, you might also like these posts too.
- Memory Usage in PHP - Dealing with Arrays
- DrupalCon 2018 Session: How Memory Works in PHP and Its Hidden Costs
- How to decode obfuscated PHP files
- Drupal Commerce 2: A Comprehensive Overview for Drupal Developers and Technical Managers
Distributed systems face incredible challenges — Photo by Dennis van Zuijlekom
With Drupal 8 reaching its maturity and coupling/decoupling from other services — including itself — we have an increasing demand for Drupal sites to shine and make engaged teams thrive with good DevOps practices and resilient Infrastructure. All that done in the biggest Distributed System ever created by humans: the Internet. The biggest challenges of any distributed system are heterogeneity of systems and clients, transparency to the end user, openness to other systems, concurrency to support many users simultaneously, security, scalability on the fly and failure handling in a graceful way. Are we there yet?
We envision, in the DevOps + Infrastructure track, to see solutions from the smallest containers that can grow to millions of services to best practices in the DevOps world that accomplish very specific tasks to support Drupal and teams working on it and save precious human time, by reducing repetitive and automatable tasks.
Questions about container orchestration, virtualization and cloud infrastructure arise every day and we expect answers to come in the track sessions to deal with automation and scaling faster — maybe using applied machine learning or some other forms of prediction or self management. See? We’re really into saving time, by using technology to assist us.
We clearly don’t manage our sites in the same way we did years ago, due to increased complexity of what we manage and how we are managing change in process and culture, therefore it’s our goal at Drupal Europe to bring the best ideas, stories and lessons learned from each industry into the room and share them with the community.What’s your story?
How is your platform scaling? How do you solve automated testing and continuous integrations? How do you keep your team’s happiness with feature velocity and still maintain a healthy platform? How do you make your website’s perceived performance even faster? What chain of tooling is running behind the scenes and what is controlling this chain? Are you using agentless configuration management or are you resorting to an agent. Are you triggering events based on system changes or do you work with command and control.
Be ready to raise, receive and answer some hard questions and but most of all, inspire people to think from a different angle. What works for a high-high traffic website might not be applicable for maintaining a massive amount of smaller sites. We want operations to inspire development on reliability and for development to inspire operations on any kind of automation. We want security to be always top of mind while still have an impact on business value rapidly and efficiently. And that is just the beginning…About industry tracks
Drupal Europe’s 2018 program is focused on industry verticals, which means there are tons of subjects to discuss therefore when you submit your session be sure to choose the correct industry track in order to increase the chance of your session being selected.
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 firstname.lastname@example.org.About the 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.
Drupalcon Nashville — Photo by Amazee Labs