Category: Knowledgebase

  • OSI Model

    LayerProtocol data unit (PDU)FunctionCommon Protocols
    Host layers  7Application  Data  High-level protocols such as for resource sharing or remote file access, e.g. HTTP. DNS, HTTP, HTTPS, FTP, POP, IMAP, SMTP, SNMP
    6PresentationTranslation of data between a networking service and an application; including character encoding, data compression and encryption/decryptionMIME, SSL/TLS, XDR
    5SessionManaging communication sessions, i.e., continuous exchange of information in the form of multiple back-and-forth transmissions between two nodes Named pipe, NetBIOS, SAP, PPTP, RTP, SOCKS, X.225, Domain Name Sytem, Remote Procedure Call, Network File System
    4TransportSegment, DatagramReliable transmission of data segments between points on a network, including segmentation, acknowledgement, and multiplexingTCP, UDP, SCTP, DCCP, SPX
    Media layers3NetworkPacketStructuring and managing a multi-node network, including addressing, routing and traffic controlIP (IPv4Internet Protocol version 4 (IPv4) IPv4 address classes Predefined ranges of IP addresses (Classes A, B, C, D, and E) designed to allocate addresses based on network size, with Class A for large networks, Class B for medium-sized networks, Class C for small networks, Class D for multicast, and Class E reserved for experimental use.PublicClassRangeSubnet MaskCIDR notationA0. 0.0.0 – 126.255.255.255255.0.0.0 B128.0.0.0 – 191.255.255.255255.255.0.0 C192. 0.0.0 – 223.255.255.255255.255.255.0 D224.0.0.0 – 239.255.255.255  E240.0.0.0 – 255.255.255.255  PrivateClassRangeSubnet MaskCIDR notationA10. 0.0.0 – 10.255.255.255255.0.0.010.0.0.0/8B172.16.0.0 – 172.31.255.255255.255.0.0172.16.0.0/16C192.168.0.0 – 192.168.255.255255.255.255.0192.168.0.0/24Loopback RangeRangeSubnet maskCIDR notation127.0.0.0–127.255.255.255255.0.0.0127.0.0.0/8127.0.0.1Automatic Private IP Addressing (APIPA; aka Link-Local address)RangeSubnet maskCIDR notation169.254.0.0 – 169.254.255.255255.255.0.0169.254.0.0/16Internetwork Broadcast Address255.255.255.255Network Broadcast Addressx.x.x.255, IPv6), ICMP, IPsec, IGMP, IPX, IS-IS, AppleTalk, X.25, PLP, RIP
    2DatalinkFrameTransmission of data frames between two nodes connected by a physical layerATM, ARP, Synchronous Data Link Control, High-Level Data Link Control, CSLIP, Serial Line Interface Protocol, GFP, PLIP, IEEE 802.2, LLC, MAC, L2TP, IEEE 802.3, Frame Relay, ITU-T G.hn DLL, Point-to-Point Protocol, X.25 LAPB, Q.922 Link Access Procedure, STP
    1PhysicalBit, SymbolTransmission and reception of raw bit streams over a physical medium RS-232, RS-449, ITU-T V-Series, I.430, I.431, PDH, SONET/SDH, PON, OTN, DSL, IEEE 802.3, IEEE 802.11, IEEE 802.15, IEEE 802.16, IEEE 1394, ITU-T G.hn PHY, USB, Bluetooth

  • Do VLANs, Routers, and Switches Forward ARP Requests?

    Short answer: No, VLANs and router by default don’t forward broadcast or ARP Requests to devices outside of their network. Yes, Layer 2 switches, do forward broadcast and ARP Requests.

    Explanation: VLANs and router create and represent separate broadcast domains. A broadcast domain is a logical division of a computer network where all devices can communicate with each other by sending broadcast messages at the data link layer (Layer 2 of the OSI model). This means that any broadcast sent by a device within this domain is received by all other devices in the same domain, but not by devices in different broadcast domains. Typically, all devices connected to the same Ethernet switch or hub are part of the same broadcast domain, while routers separate different broadcast domains to manage traffic and reduce congestion.

  • How To Remove WordPress Generator Meta Tags?

    Add the following code to the functions.php file in your child theme’s directory.

    Remove WordPress ‘Generator’ Tag

    remove_action(‘wp_head’, ‘wc_generator’);

    Remove WooCommerce ‘Generator’ Tag

    remove_action(‘wp_head’, ‘wp_generator’);

    Remove Performance Labs ‘Generator’ Tag

    remove_action(‘wp_head’, ‘perflab_render_generator’);

  • How-to install Drupal in root instead of web directory?

    For security purposes, you should ensure that sensitive directories like /vendor are not exposed by properly configuring your web server.

    Likely, the best method for making your Drupal site accessible via the root directory (/) is by pointing your domain to the /web directory, i.e. making the /web directory the root directory.

    Another method to install Drupal in the root directory is to modify the composer.json file before running composer install.

    To install drupal in root (/) directory instead of web (/web) directory, you must:

    1. Move contents from cms and web directory to root directory,
    2. Edit composer.json file section, replacing the web setting to ./ at the drupal-scaffold and installer-paths directives.

    If you need more help, follow the instructions in our tutorial: Install Drupal CMS in Root Directory.

  • Where Are iptables-persistent/iptables-services Rules Files Located in cPanel/WHM?

    Location of IPv4Internet Protocol version 4 (IPv4) IPv4 address classes Predefined ranges of IP addresses (Classes A, B, C, D, and E) designed to allocate addresses based on network size, with Class A for large networks, Class B for medium-sized networks, Class C for small networks, Class D for multicast, and Class E reserved for experimental use.PublicClassRangeSubnet MaskCIDR notationA0. 0.0.0 – 126.255.255.255255.0.0.0 B128.0.0.0 – 191.255.255.255255.255.0.0 C192. 0.0.0 – 223.255.255.255255.255.255.0 D224.0.0.0 – 239.255.255.255  E240.0.0.0 – 255.255.255.255  PrivateClassRangeSubnet MaskCIDR notationA10. 0.0.0 – 10.255.255.255255.0.0.010.0.0.0/8B172.16.0.0 – 172.31.255.255255.255.0.0172.16.0.0/16C192.168.0.0 – 192.168.255.255255.255.255.0192.168.0.0/24Loopback RangeRangeSubnet maskCIDR notation127.0.0.0–127.255.255.255255.0.0.0127.0.0.0/8127.0.0.1Automatic Private IP Addressing (APIPA; aka Link-Local address)RangeSubnet maskCIDR notation169.254.0.0 – 169.254.255.255255.255.0.0169.254.0.0/16Internetwork Broadcast Address255.255.255.255Network Broadcast Addressx.x.x.255 file: /etc/sysconfig/iptables

    Location of IPv6 file: /etc/sysconfig/ip6tables

    Linux Command to Access Them Directly

    1. In the terminal,
    2. Type (or paste) vi /etc/sysconfig/ip6tables for IPv6 file, or
    3. vi /etc/sysconfig/iptables for IPv4 file

    Linux Command to Get to Directory

    1. In the terminal,
    2. Type (or paste) cd /etc/sysconfig to navigate to the sysconfig directory, or
    3. ls /etc/sysconfig to list items in the sysconfig directory.
  • Can VLANs Communicate with Other VLANs?

    By default, separate VLANs cannot communicate with other VLANs. In order to communicate with other VLANs or networks, a layer 3 device, such as a router or layer-3 switch is required to connect the VLANs using InterVLAN Routing. This is similar to any network or subnet.

  • WordPress error: Unable to determine if Ghostscript is installed

    Description

    WordPress Site Health showing “Ghostscript version: Unable to determine if Ghostscript is installed”

    Solutions

    1. From my research, Ghostscript require the PHP function exec(). To fix this problem,
      1. Edit your php.ini file,
      2. Find the disable_functions directive,
      3. Remove the exec function from the list,
      4. Save the edited php.ini configuration.
    2. Alternatively, if you have Imagick installed, it can be configured to support Ghostscript.
  • Install Drupal CMS in Root Directory

    Using Composer

    Access Your Server via SSH and Navigate to the Directory where Drupal Will be Installed

    1. In Command Line Interface, type: ssh username@serverip -p yourportnumber, replacing username, serverip, and yourportnumber with your specific credentials for your server,
    2. Once prompted for your password, type it or paste it,
    3. Once your SSH session has been authenticated, navigate to the directory where Drupal will be installed by using a command similar to the following: cd path/to/your/drupal/directory, or
    4. Make the directory with command: mkdir directorynamehere.

    Using a web browser

    1. Go to drupal.org/download and copy the provided composer command,
    2. Add the --no-install option,
    3. Your command should look similar to this: composer create-project --no-install drupal/cms,
    4. Paste the command into your SSH command line interface.

    Move the ‘web’ directory to the root directory

    1. There should be a directory named, “cms” with some files and a folder called “web”,
    2. Move all files and directories from “cms” folder to root directory: mv cms/* ./,
    3. Delete “cms” folder: rmdir cms,
    4. Move all files and directories from web folder to root directory: mv web/* ./,
    5. Delete web folder: rmdir web.

    Edit composer.json File

    1. Type: vi composer.json,
    2. Type: i to enable insert mode,
    3. Find and change web-root and installer-paths directives from web directory to root directory.
    "drupal-scaffold": {
                "locations": {
                    "web-root": "web/"
                }
            },       
     "installer-paths": {
                " web/core": ["type:drupal-core"],
                " web/libraries/{$name}": ["type:drupal-library"],
                " web/modules/contrib/{$name}": ["type:drupal-module"],
                " web/profiles/contrib/{$name}": ["type:drupal-profile"],
                " web/themes/contrib/{$name}": ["type:drupal-theme"],
                "./drush/Commands/contrib/{$name}": ["type:drupal-drush"],
                " web/modules/custom/{$name}": ["type:drupal-custom-module"],
                " web/profiles/custom/{$name}": ["type:drupal-custom-profile"],
                "./recipes/{$name}": ["type:drupal-recipe"],
                "web/themes/custom/{$name}": ["type:drupal-custom-theme"]
            },
    1. Change the above to:
    "drupal-scaffold": {
                "locations": {
                    "web-root": "./"
                }
            },       
     "installer-paths": {
                "./core": ["type:drupal-core"],
                "./libraries/{$name}": ["type:drupal-library"],
                "./modules/contrib/{$name}": ["type:drupal-module"],
                "./profiles/contrib/{$name}": ["type:drupal-profile"],
                "./themes/contrib/{$name}": ["type:drupal-theme"],
                "./drush/Commands/contrib/{$name}": ["type:drupal-drush"],
                "./modules/custom/{$name}": ["type:drupal-custom-module"],
                "./profiles/custom/{$name}": ["type:drupal-custom-profile"],
                "./recipes/{$name}": ["type:drupal-recipe"],
                "./themes/custom/{$name}": ["type:drupal-custom-theme"]
            },
    1. Press Esc key to exit insert mode,
    2. Type: :wq to save file and exit.

    Install Drupal

    1. For developer site, type: composer install.
    2. For production site, type: composer install --no-dev.
    3. Create your database.
    4. Run the interactive installer via a web browser.
    5. Follow the steps provided in the INSTALL.txt file located in the core directory to complete your setup and secure your site.
  • Add Custom Structured Data to Invision Community Pages Database

    Table of content shortcode can be used only once on a page, this page is using the shortcode more than once. Please remove the extra table of content shortcodes for this warning to go away.

    Notice: This article is for providing insight on how to add custom schema markup to “Databases” in Invision Community’s Pages application.

    There are a few ways to structured data an Invision Community Pages’ Database:

    1. Implement Microdata, RDFa, or JSON-LD into a Database template and custom fields,
    2. Create a custom field that allows authors to create customized JSON-LD schema markup,
    3. Use a custom field to implement JSON-LD and map variables to properties.

    Basic Implementation: Create a custom field where static JSON-LD structured data can be added

    This is the simplest method and will require post authors to create custom JSON-LD structured markup for each post. See Moderate Implementation below for automatically generating structured markup.

    1. In your Invision Community AdminCP, navigate to “Pages” menu item and click the “fields” menu item for your database.
    2. Create a new field and give a title, such as “Schema Markup” or whatever you’d like.
    3. For the “Type”, select “Code”.
    4. Optional: If you are to generated forum topics for posts in your database, you can include this schema markup to help search engine understand what the topic is and about.
      • You can add <script type="application/jd+json">{value}</script> to the “Topic Format” field box.
    5. Toggle the Accept HTML option.
    6. In the “Display Options” tab, you can give the field any template key name you want as in will not specifically be called to display it on a post page, i.e., visitors will not see it or know it is on the page.
    7. Optional: As with forum topics, you can include JSON-LD structured data in the listings pages of your database. This can be beneficial for search engines to understand the data on the listing pages as their in no schema markup including on these pages by default. Keep in mind that adding this data to each post can affect the performance of your website, which can affect SEO.
      • To add JSON-LD structured data to listing post:
      • Make sure the “show in listing template” option is toggled to on,
      • Listing View Format: Custom,
      • Enter: {{if $formValue}}<script type="application/jd+json">{$value|raw}</script>{{endif}} into the editor box.
    8. Display View section:
      • Make sure the “show in display template” option is toggled to on,
      • Display View Format: Custom,
      • Enter: {{if $formValue}}<script type="application/jd+json">{$value}</script>{{endif}} into the editor box.

    Congrats, you can now enter custom JSON-LD structured data into your posts. To learn more about constructing JSON-LD schema, visit Schema.org vocabulary website.

    Moderate Implementation: Create a custom field that dynamically calls and maps variables and properties

    This is a more advanced method for dynamically embedded values into JSON-LD structured data. This is likely the best way to implement custom data because once setup, markup is added to each post automatically based on custom fields values.

    Necessary Variables

    VariableTitleDescription
    {$record->_title}Record Title
    {$record->truncated()|raw}Record Content
    {$record->container()->url()}

    {$record->container()->_title}
    Record Container/Category
    {$record->fieldValues()['field_{id#}']}fieldValuesAccessing $values for Text fields or the key (rather than value) for Selectbox and Checkbox Set.
    {$record->customFieldDisplayByKey('{Template Key}')}customFieldDisplayByKeyAccessing the formatted input from the Display View Format option.

    Note: For fields that will be displayed with any format other than just the value of the field, the ID of those fields are required to populate JSON-LD data with just the field value without the formatting data. The ID will be used with the {$record->fieldValues()[‘field_{id#}’]} variable, replacing {id#} with the ID number, e.g. {$record->fieldValues()[‘field_123’]}.

    Note: For Select box and Checkbox Set fields with multiple options, the fieldValues variable will pull the key of the individual option(s). So, it is important to give the options a key that comply with the format of your structured data type from the Schema.org vocabulary. For example, if you are making a “Books” database, and you want to populate the bookFormat property with options from a Checkbox set. In order to have valid schema markup, you have to comply with the Schema.org enumeration members for the enumeration type: BookFormatType, which are limited to: AudiobookFormat, EBook, GraphicNovel, Hardcover, Paperback. enumeration will be the key for your options even if your options value is in another language.

    Schema.org Properties and DB Field Types

    Schema.org PropertiesDatabase Field TypeNotes
    genreSelect box or Checkbox Set
    isbnText or Number
    inLanguageSelect box or Checkbox Set
    authorText
    editorText
    illustratorText
    contributorText
    publisherSelect box or Checkbox Set
    publisherImprintSelect box or Checkbox Set
    isPartOfSelect box or Checkbox SetUsed with the BookSeries schema.org type.
    abridgedCheckbox, Radio, or Yes/No
    bookFormatSelect box or Checkbox Set
    bookEditionText

    Basic Instructions

    1. Create a Database,
    2. Add your custom fields, including any of the above that will be mapped to Schema.org Properties.
    3. Create the field that will hold the JSON-LD structured data.
      • “General Options” tab:
        • Title: your choice,
        • Type: Checkbox or Radio,
        • Default Value: 1.
      • “Display options” tab:
        • Template Key: your choice; if you leave this blank, it will be generated automatically when you save the field,
        • List View section: If you want the structured data to be included on listing pages, you can follow and use the steps below:
        • Display View section:
          • Display View Format: Custom,
          • Display: your choice; If you select Under the item content and there are no other fields are there will be a horizontal line with a nothing under it.

    Display Custom Format

    {{if $formValue}}
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@graph": {
        "@type": "Book",
        "name": "{$record->_title}",
        {{if $record->customFieldDisplayByKey('pages', 'display')}}
        "numberOfPages": "{$record->fieldValues()['field_123']}",
        {{endif}}
        {{if $record->customFieldDisplayByKey('genre', 'display')}}
        "genre": "{$record->fieldValues()['field_123']}",
        {{endif}}
        {{if $record->customFieldDisplayByKey('isbn', 'display')}}
        "isbn": "{$record->fieldValues()['field_11']}",
        {{endif}}
        "description": "{$record->truncated()|raw}",
        {{if $record->customFieldDisplayByKey('date', 'display')}}
        "datePublished": "{$record->fieldValues()['field_123']}",
        {{endif}}
        {{if $record->customFieldDisplayByKey('language', 'display')}}
        "inLanguage": {
          "@type": "Language",
          "name": "{$record->fieldValues()['field_123']}"
        },
        {{endif}}
        "url": "{$record->url()}",
        "discussionUrl": "{$record->url()?&tab=comments}",
        {{if $record->customFieldDisplayByKey('author', 'display')}}
        "author": {
          "@type": "Person",
          "name": "{$record->fieldValues()['field_123']}"
        },
       {{endif}}
       {{if $record->customFieldDisplayByKey('editor', 'display')}}
       "editor": {
          "@type": "Person",
          "name": "{$record->fieldValues()['field_123']}"
        },
       {{endif}}
       {{if $record->customFieldDisplayByKey('illustrator', 'display')}}
       "illustrator": {
          "@type": "Person",
          "name": "{$record->fieldValues()['field_123']}"
        },
      {{endif}}
      {{if $record->customFieldDisplayByKey('contributor', 'display')}}
      "contributor": {
          "@type": "Person",
          "name": "{$record->fieldValues()['field_123']}"
        },
      {{endif}}
      {{if $record->record_image}}
      "thumbnail": {
          "@type": "ImageObject",
          "url": "{file="$record->_record_image_thumb" extension="cms_Records"}"
        },
      {{endif}}
      {{if $record->customFieldDisplayByKey('publisher', 'display')}}
        "publisher": {
          "@type": "Organization",
          "name": "{$record->fieldValues()['field_123']}"
        },
      "copyrightHolder": {
          "@type": "Organization",
          "name": "{$record->fieldValues()['field_123']}"
        },
      {{endif}}
      {{if $record->customFieldDisplayByKey('imprint', 'display')}}
      "publisherImprint": {
          "@type": "Organization",
          "name": "{$record->fieldValues()['field_123']}"
        },
      {{endif}}
      {{if $record->customFieldDisplayByKey('series', 'display')}}
      "isPartOf": {
          "@type": "BookSeries",
          "name": "{$record->fieldValues()['field_123']}"
        },
      {{endif}}
      {{if $record->customFieldDisplayByKey('abridged', 'display')}}
      "abridged": "http://schema.org/True",
      {{endif}}
      {{if $record->customFieldDisplayByKey('format', 'display')}}
      "bookFormat": "{$record->fieldValues()['field_123']}",
      {{endif}}
      {{if $record->customFieldDisplayByKey('edition', 'display')}}
     "bookEdition": "{$record->fieldValues()['field_123']}",
     {{endif}}
        "awards": "{$record->fieldValues()['field_123']}"
      }
    }
    </script>
    {{endif}}

    Frequently Asked Questions

    According to Google, it is recommended to place JSON-LD in the <head>, but it is okay and valid to place it in the <body>.

    yes, you can ass property values in other languages, but at this time, Im not sure that the actually JSON-LD language has been translated to other languages. This means that you would have to use the JSON-LD language in English and structure it with values in your language.