Building Culture at Reclaim

I feel like I’ve had writer’s block for weeks now. I’ve been most productive with the monotonous tasks that I had been putting off for some time. Some days I work for hours without moving, while other days I can’t sit still for more than a couple of minutes. There’s no doubt that we all have been coping differently with an anxiety-inducing global pandemic, and I have been no exception. But as the states are slowly starting to introduce phases of reopening, I finally feel hopeful that we’ll return to some sense of normalcy soon enough. And with that feeling, I can sense the writer’s block beginning to lift. I’m getting back to a place where I can reflect on the work that I’m doing and where my thoughts have been since mid-March.

As things start to return to normal, there’s one thing (read: more than a one, but I’d like to keep this blog post short) in particular that I don’t want to forget about how I’ve shifted during this time:

I have been paying more attention to the people I am supporting instead of the tools they have questions about. This is a lesson that I catch myself relearning all the time, and it cannot be overstated no matter how much we may think it goes without saying. This simple shift makes me more understanding and caring in my general correspondence and meetings. It makes me more observant, which as a result helps me anticipate problems and fix them before they even occur. Basically, I just become a much better human being and others benefit from it. It can be very easy to get wrapped up in the technology that we’re using, but it will never hurt to take a step back, breathe, and show grace.

With that in mind, I’ve had a chance to think more broadly about the type of manager I want to be for others at Reclaim Hosting. Where can I tweak and adjust and improve internal workings, and where do I need to sit back and listen more? How can I make sure that I’m ‘visible’ while working remotely? Where should I be showing grace and understanding, and where can I be holding others accountable? These reflections are healthy at any point, though I’m especially stoked to have had more down time to think through this over the last few weeks. Next Tuesday, one of our Customer Support Specialists, Katie Hartraft, will be joining Reclaim Hosting full time as an Account and Support Specialist. Her dual role will be the first of its kind at Reclaim, though not unlike others in the way that she will be wearing many hats. Katie will continue to support the good people of Reclaim Hosting for part of her time by answering tickets, writing documentation, etc., but she’ll slowly move into the account management and sales side of Reclaim for the other half of her time. Katie has plenty of experience with Domain of One’s One as a recent UMW grad, and she’s been killing it at Reclaim this last semester. I’m excited to work closely with her during this next chapter of her career, which also just happens to be a big milestone for Reclaim – a new hire for sales. :)

A full team meeting sans Tim/Jim :)

And on that note: Another noticeable shift at Reclaim has taken shape in the ability for Jim and Tim to slowly back out of the day-to-day and let the ship steer itself. My goal for them is to fully step back and become the Idea Guys while the day-to-day work moves on without them. I do think we’ve been well on our way to meet this goal for a while now, but in the last few weeks in particular the shift has felt real and attainable for the first time. This is most certainly a testament to the well-oiled-machine-of-a-team we’ve got going for us right now. Meredith as Customer Support Manager has beautifully handled growing pains as we’re moving into one of our busiest support years to date. Gordon, an all around workhorse, has been kicking ass on support and currently holds the sought-after lead on number of solved support tickets since the beginning of the year. Chris, meanwhile, is provisioning entire Domain of One’s setups in about 30 minutes. He’s a scripting genius, I tell you, and is no doubt keeping our sh*t secure, efficient and consistent across the board.

Jim and I recently spoke about these culture shifts, amongst other things, in our recent chat on DS106 Radio. He blogged about it here, and I’m attaching the recording below if you want to give it a listen.


whew. take that, writer’s block!

Custom Page Templates in WordPress

In an effort to start unpacking all things WordPress, I decided to start first with understanding how a few basic WP dashboard tools are working on the backend. Today I’m looking at Page Templates.

Now it’s one thing to troubleshoot the WordPress file system in little spurts as tickets present themselves, and another thing entirely to build out your own page template. So while this may seem like basic knowledge to some, is was quite empowering for me!

For this post and likely others, I’m playing with a WordPress install at https://labrumfield.com/custom/. The theme I’m using is called Aileron. (This is a completely random choice, but I did like that it was pretty simple in terms of overall design– I was looking for a blank slate to work with.)

You can use FTP or File Manager for this one. I’ll work in File Manager since this is pretty simple! I started first by navigating to the wp-content folder of my WordPress install, and then going further into my theme folder at themes>aileron.

The first thing I did was create a new file in the theme folder called laurenstemplate.php. I know very little about php, but I do know that every file needs a title. I added the following to my new file:

<?php /* Template Name: Lauren's Template */ ?>

After clicking save, I went back to my WordPress dashboard, created a new Page, and selected Lauren’s Template from the dropdown that now magically existed under Page attributes:

Now the live version of my new page looked like this:

…which makes sense, right? Because my laurenstemplate.php file is completely empty.

I didn’t want to recreate the wheel when adding content, and I know that WordPress is already looking to a template for pages called page.php, so I started by cloning that to my new file.

As shown in the gif above, you’ll want to copy the full page.php content, aside from the top title/description into your new template.php file. Make sure to remove you ?> from your top php opener if you need to, and then click save! Now when I reload my WordPress page using Lauren’s Template, this is what I see:

Woo! Now we’ve have something to work with. (Feel free to stop reading here if you don’t care about design changes for this specific theme.) But let’s say I want to remove the sidebar and center the page content. There’s a section in my code that’s calling the sidebar right here:

By simply removing the highlighted line the sidebar goes away, but the content is still pushed to the left. I’ve added some text (and an awesome gif that inspired our Roadshow) to the page to see the changes a little more clearly:

Upon inspecting the page further (I used right-click>Inspect Element in Google Chrome) I noticed that the content area of my site was pulling in columns, which also explained why simple CSS to make the site width set to 100% wasn’t changing anything:

In the code that I copied over to laurenstemplate.php, this is what I saw next to my content-area class:

I removed the aileron_layout_class so my code looked like this:

After clicking save, those changes to the template are now applied:

February Team Learning: Domains & File Structures

The Reclaim Hosting team has started approaching professional development with a little more intention and as a group. We’ve decided to make each month as its own unit, and February is the month of Domains and File Structures. Obviously there’s a lot of ways to take this topic, so Meredith broke it down for us into three separate sections. The first third of the month was for Domains (i.e. Add-on, Sub, Alias, and general management in cPanel). The second third of the month was centered around File Structures, so think types of directories, understanding .htaccess and error logging, etc. For the final third of the month, we devoted our time to file structures for specific applications to make sure we were familiar with the the standard Scalar files that are installed vs. the standard Drupal files that are installed vs. WordPress vs. Omeka, etc.

Over the course of the month, all Reclaim staff were expected to read about these concepts, write about what they’re learning, apply their knowledge in their work, and update/create support documentation on the subject.

For me, this month led to the following blog posts on these topics:
How to redirect a top-level domain without impacting subfolders; self-taught moment based off of a support ticket I received
What to consider when organizing faculty sites and coursework in cPanel; a conversation that I have with virtually every new DoOO admin during onboarding, and something I’ve been meaning to document for a while
Creating different versions of cPanel for different user groups in WHM; a video tutorial that was desperately needed in our DoOO documentation

Yesterday we met to discuss our findings over the course of the past month and also prepare for March’s topic. Not only did I find this meeting to be helpful for the above listed reasons, but also it was nice to connect for a bit of team bonding. The larger Reclaim Hosting gets, the harder it becomes for us to all be in the same (virtual) room together.

Taking a moment to learn about symlinks from Tim. (Which then led me to realize that I’ve actually worked with symlinks before on my Drupal Multisite post!

Over the month of March we’ll be focusing solely on WordPress. Which should come as no surprise, as over 30% of web is run by WordPress, and as Jim noted during the meeting, about 85-90% of our client base. The itinerary for this month is still evolving, but is meant to be more exploratory and speculative. With a little more freedom on where/how to learn this month, I hope to be blogging even more about where I’m taking it.

One of the immediate areas that comes to mind would be the main Domain of One’s Own homepage design (stateu.org) that we hand out to new DoOO schools as the starting point for end users to log in with SSO and sign up for an account. This site is built on (you guessed it) WordPress, and is currently used as a wrapper for which we have embedded cPanel. There’s no doubt that I love this model for Domain of One’s Own, but I’m constantly wanting to find ways to improve it. Just recently, I sent out a survey to all DoOO admins about this very topic and the responses I received were fascinating. I’ll use a future blog post to go into this further, but there’s plenty of work to be done here, and its already been super cool to watch Jim, Tim and Chris run with it.

OER19 Notes, Thoughts, and Reflections

At the airport, on the way to OER19 in Galway, Ireland

I’m sitting in my home office, staring down at my little, blue notebook full of OER19 scribbles, and a bit in disbelief that the two-day conference has already come and gone. Last week I had the pleasure of returning to OER for the second time to participate in conversations surrounding this year’s theme: Recentering Open. I was also there to help represent Reclaim Hosting with Jim and Meredith, and I will speak more about that in a later blog post, as I really want to take the time now to spell out the various moments, phrases, images, and discussions that have continued to resonate with me over the last few days.

Getting seated on the morning of Day One

Naturally, I will start at the beginning. I really, really admired the way that the Co-Chairs, ALT Team, and NUI Galway framed the opening of the conference. Laura Czerniewicz told us to “…think beyond the easy optimism of open education,” which I thought was wildly refreshing. A representative from NUI Galway spoke about campus and conference values and pointed specifically to Respect, Expertise, Accessibility, and Sustainability. I was just recently nudged to include a Code of Conduct on the Domains 19 website, so having these values reiterated first thing at OER19 was a great way of tying into a personal lesson of mine. Finally, we were encouraged to step beyond our normal cohort of peers and attend sessions that we might not have considered otherwise. (Spoiler alert: I did this, and it paid off.)

“When hosts and guests meet face to face each must decide in that moral moment who he or she will be in relationship to the other.” – Arthur Frank, 2009

My slightly disorganized thoughts/notes from Kate Bowles’ Keynote, A Quilt of Stars: Time, Work and Open Pedagogy:

  • The expanding university means we must constantly perform a forensic analysis of the ‘closed university’.
  • Who writes the resources, and who receives them?
  • OER is currently a northern hemisphere movement- though efforts like Virtually Connecting are helping
  • I need to read The Ladybird Book of the Night Sky
  • The expanding university ‘experts’ communicate using Trade Data— “we are ‘ripe for growth'”
    • Uses trends and charts, which doesn’t capture all open practices
  • Open practice without Ethic of Care becomes an unfair absorption of time
  • Optimism is a discipline, not an emotion.

Feeling charged up from the keynote lecture, I attended the Amaz-Zine workshop hosted by Amy Burvall and Bryan Mathers on the communicative power of creating and sharing zines. After seeing a few examples, we learned how to fold a single piece of paper into a little 8-page booklet that would become our zine, and then began creating on the spot. You can see mine below: (P.S. We were also taught that zine art is a no judgment zone for artistic capabilities so I’ll let that extend to my readership as well, LOL.)

Later that afternoon I listened to Claire McAvinia speak about learning spaces in 2019, and her reflection on design and the use of physical learning spaces impacting how we learn. Does a more open learning space translate into more open practices?

Image via

She referenced this image from the 14th century by Laurentius de Voltolina and argued that our learning spaces still look very similar today compared to the above portrayal. Claire shared that this says something about the way that we’re teaching, and that we need to leave the age of ‘information poverty‘, in which the teacher has all of the information and the students have to ask for it.

While I no longer find myself personally working and learning in a classroom on a daily basis, I am always strategizing with instructional designers and campus administrators that want to think through learning spaces on their own campuses for peer-to-peer tutoring. I found the presentation fascinating for that reason.

Bonnie Stewart, Lawrie Phipps, and Dave Cormier spoke about a pro-social / pro-societal web in which they questioned the ‘pervasive surveillance and predatory practices’ that are normalized during our interactions with technology. They focused on the question, “Open for whom?” and ended with the argument that open is not the same as inclusion.

Lastly, I really enjoyed hearing from the folks at CUNY about their OER initiatives with Commons in a Box and Manifold. There was so much packed into the hour-long presentation, but my notes are as follows:

  • ZTC (Zero Textbook Cost) doesn’t automatically translate to OER, but it is a step in the right direction
  • Faculty have ‘Platform Fatigue’– being aware of this is important when extracting and unbundling data to create open experiences
  • Labor Problems (with Adjuncts, specifically): technologists invest time into adjunct training when there is no guarantee of contract renewal– this ties in with Bowles’ Ethic of Care
  • CUNY’s Commons in a Box OpenLab install sits on openlab.citytech.cuny.edu
    • Ability to clone Faculty Courses within the install for others to use- similar to cloning site templates/SPLOTs
    • Easily view Courses, Projects, Clubs, & Portfolios- a great solution potentially for schools wanting a Community Site
  • Manifold is an open publishing platform for the web that allows the publication of digital books
On our walk to the OER19 Venue in Galway

To say the least, I left OER19 feeling inspired by the conversations and new perspectives I was able to listen to and be apart of last week. I am very appreciative of the key values and themes that the OER19 Team made so readily apparent in every aspect of those two days, and it is my hope to extend them through Domains19 and beyond. Thanks for an awesome conference, OER19. I can’t wait for next year!

Creating a Drupal Multisite

Up until some time last week, I didn’t actually realize that a Drupal Multisite was possible. I received a support ticket asking if Drupal Multisites doable in Reclaim Hosting’s environment, and responded by saying something along the lines of, “well since single Drupal sites are possible within Reclaim, I would imagine a Multisite is as well, though I don’t have much experience with it”. I don’t like responding that way. So I made it my mission to set one up! (Spoiler: Drupal Multisites are, in fact, possible at Reclaim.)

Contents

  • Why Drupal Multisite?
  • Getting Prepared
    • Naming our sites
    • Deciding where our sites will live
    • Set up databases
    • Create subdomains (if applicable)
  • Installing and Configuring Drupal Sites
    • Download Drupal software & upload to account
    • Creating sites.php
    • Making sites directories
    • Copying over & renaming necessary files
    • Creating Files directory
    • Create a symbolic link with cPanel’s directories
  • Drupal Site Setup Wizard
    • Follow the prompts
    • Run a FixPerms script

Why Drupal Multisite?

If you’re familiar with a WordPress Multisite, a Drupal Multisite will sound very familiar. A Drupal Multisite allows single, independent Drupal sites with separate users to run on a singular codebase with shared modules. For more information, head here.

Getting Prepared

  1. Start first by deciding where you want your sites to be called and where you want them to live. I’m going with a fruit theme today, so one of my sites will be called Apple and the other one will be called Orange. Drupal Multisite allows you to set up subdomains (site.drupal.com) or subdirectories (drupal.com/site). I’ve always thought subdomains are a bit cleaner so I’m going to use subdomains off of my brumface.com domain. If you want to use subdirectories, this guide will still apply.
  2. Before even installing Drupal software, I’m going to go ahead and create a database for each site in my cPanel. (For more info, read our guide on database management.)

-For this step, you’ll want to go to cPanel > MySQL Databases, name your database, and click create.

-Repeat this process for your second site. I called mine labrumfi_orange.

-Now we’re going to create a database user that will be assigned to both of these sites. If you go to cPanel > MySQL Databases and scroll down past your current databases, you’ll see a section where you can add new users:

I called my database username labrumfi_drupal. Set a secure password with the Password Generator and click Create User. (P.s. You’ll need these credentials later on!)

-After creating the database user, we need to assign it to our two databases. This can also be found on the cPanel > MySQL Databases page:

^Select the user and database you just created and click Add. On the following page, you’ll be asked to manage user privileges. Select All Privileges, scroll to the bottom, and click Make Changes.

-Repeat this for your second site. So since I just added labrumfi_drupal to my _apple database, I’m going to now add the same user to my _orange database. When complete, your database section should look something like this:

3. Now that that piece is done, we’re going to create our subdomains under cPanel > Subdomains. If you’re using subdirectories, skip this step. This part is pretty self-explanatory, so for the purposes of keeping this particular tutorial as short as possible, I’m going to point you to this guide on creating subdomains in cPanel. The subdomains I created were apple.brumface.com and orange.brumface.com.

^Note that I took public_html out of my document root. I’ve found that the simpler you can make your locations, the better. But that’s just personal preference.

Installing & Configuring Drupal Sites

  1. Head to drupal.org/download and download a .zip file of the latest version of Drupal.
  2. Go to File Manager and create a new folder directly in your /home directory called drupal. Upload the Drupal .zip file and extract it. Your drupal folder should now look like this:

^All of our drupal files are located inside the drupal-8.5.5 folder. We need to pull them out into the main /drupal directory. From there, you can delete the empty drupal-8.5.5 folder.

3. Now that we’ve got our files in the right place, we need to let Drupal know that we’re going to be working with more than one site. We do this by going to drupal > sites and create a sites.php file. For an example of what to add to your sites.php file, open example.sites.php. I’ve also included instructions below:

Create a sites.php file with the following text:

<?php

$sites = array(
//https://apple.brumface.com
'apple.brumface.com' => 'apple', 
//https://orange.brumface.com
'orange.brumface.com' => 'orange'
);

In the above example, replace ‘apple.brumface.com’ with ‘yourfirstsite.domain.com’, and replace ‘apple’ with ‘yourfoldername’. Repeat for the second site.

Note: If you’re using subdirectories (for instance, domain.com/yourfirstsite) the array would look like this:

<?php

$sites = array(
//https://brumface.com/apple
'www.brumface.com.apple' => 'apple',
//https://brumface.com/orange
'www.brumface.com.orange' => 'orange'
);

Make sure to save changes.

4. Ok, hang with me now- we’re going to do a little SSH action. Its simple enough, but if you need a refresher on logging into your account via terminal, I’ve added a screenshot of my login below. (You can also use the terminal function in your cPanel!)

ssh cPanelusername@server.reclaimhosting.com

^when prompted for a Password, enter your cPanel/FTP password.

-Once in terminal, navigate to /drupal/sites

For the commands below, replace ‘apple’ and ‘orange’ with your ‘site1’ and ‘site2’:

mkdir apple
mkdir orange
cp default/default.services.yml apple/services.yml
cp default/default.services.yml orange/services.yml
cp default/default.settings.php apple/settings.php
cp default/default.settings.php orange/settings.php

^With the above commands, we created our apple and orange directories and then copied and renamed the default files (default.services.yml and default.settings.php) into each one. Now when I refresh in file manager, I see the following:

5. We also need to add an empty ‘files’ folder in both in both our apple and orange directories. The ‘files’ folder will be filled during the Drupal Setup Wizard installation process further down. Feel free to create these folders in terminal or in file manager.

6. There’s one final step. When we create a subdomain in cPanel, cPanel creates a folder in File Manager for them by default. (Remember when I set my document root outside of public_html?) But since we just made our own directories within the sites folder, we have to create a symbolic link from cPanel’s default directories with our correct directories. It’s weird, I know.

ln -s drupal apple
ln -s drupal orange

Now when we navigate to apple.brumface.com or orange.brumface.com in our browser, we see the following:

Drupal Site Setup Wizard

If you need assistance with the Drupal Setup Wizard, here is a list of the settings that I used:

Language: English
Profile: Choose Standard Installation
Requirements: Run a Fix Perms script if needed
Database: Choose MySQL, MariaDB, Percona Server, or equivalent; enter the database information that you created earlier
Install:

Configure Site: Set your site information

If you stuck with me this long, congrats!

Troubleshooting Slow Sites

Part of supporting online projects comes with the territory of troubleshooting slow websites. Sometimes it can be hard to know where to turn when you’re met with a “My site is slow!” support ticket– especially if the site is loading quickly on your end.  This post covers tips & tricks for figuring out those red flags that may make a site run slowly. And while the list below may not hit on every issue that will come up, it’s a great checklist to use as a starting point.

Recreate the Speed Issue

Doublecheck that this isn’t an issue with the user’s internet, and that the site is indeed having load issues. (You can always have the user test their internet connection speed here or here.)

WHM: Check the Load

^The green box referenced above. If that load begins with anything less than “5-8.” you’re in the clear and this is likely not a server issue. If the load starts getting into the 14s and 15s or higher, this issue may be greater than the single site.

WHM: Check Apache Status

Search ‘Apache’ in the top, left-hand corner and click Apache Status.

Apache handles all processes on the server and is currently set to handle up to 150 requests at any given point. If the number of processes crosses this threshold and Apache maxes out, that could definitely be the smoking gun for slow-moving sites.

WHM: Check MySQL

Search ‘mysql’ in the top, left-hand corner and then click Show  MySQL Processes.

^This list should generally be pretty small. If you see a full list like the one above where a single database is running a ton of processes, that should be your pointer that this is a site issue, not a server issue.

File Manager: Check Error Logs & Plugins

Every time you install a plugin in your dashboard, you’re asking your site to load another set of processes in your database. So naturally, if you’ve got 20+ plugins installed on your site, chances are that could be leading to slowness.

Likewise, plugin/theme/software conflictions are real, so checking the user’s error_log in their File Manager can be helpful in determining what’s going on.

You can ask the user to turn off all of their plugins, and then activate them one by one to figure out which plugin(s) may be causing the slowness. And if that’s not possible for the user…

phpMyAdmin in cPanel: Plugin Database Tables

If the site has a ton of plugins and you’re trying to figure out which one may be leading to the slowness, have a look at the database tables associated with each plugin.

Note that sites won’t function properly if one table is unusually massive. The rows column is associated with the number of entries on a given table. As you look at the screenshot above, notice that the database table called wp_prli_clicks (part of a Plugin called Pretty Links that can track site clicks) has over 58,000 entries of stored data. Yikes! So sometimes even if the plugin is working correctly and not conflicting, the user’s specific settings can be causing slowness.

phpMyAdmin in cPanel: Transient Rows

Transient Rows are essentially cached database queries that can be found on the last page of the wp_options table in phpMyAdmin. You won’t hurt anything by deleting transient rows. And depending on how many there are, deleting these might actually help speed up your site!

To delete these rows, copy the following SQL commands:

DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient_%');
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_site_transient_%');

Click on the SQL tab in the wp_options table and paste the commands. Click go.

Query Monitor Plugin

And if all else fails, installing the Query Monitor Plugin on the WordPress dashboard has proven to be a helpful troubleshooting method for us in the past. This debugging tool shows you what might be going on by listing the queries on the page that you’ve loaded, and highlights any issues as they occur.