<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.tinkernet.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grant</id>
	<title>The TinkerNet Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tinkernet.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grant"/>
	<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php/Special:Contributions/Grant"/>
	<updated>2026-04-13T12:03:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1662</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1662"/>
		<updated>2021-08-02T05:28:55Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Use case code at end of file. Submitted by somebody that probably shouldn't be coding so fix it if it's borked...'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***********************************************************************************************************************&lt;br /&gt;
Code Suggestion:&lt;br /&gt;
// I/O - Setup the I/O PINS HERE&lt;br /&gt;
	PushButton BTN1_TRIGGER	= { 23 };// Creates PushButton instance for buttons.h class to work with&lt;br /&gt;
	PushButton BTN2_TRIGGER = { 14 }; //Etc...&lt;br /&gt;
	PushButton BTN3_TRIGGER	= { 21 }; //Etc...&lt;br /&gt;
	PushButton BTN4_TRIGGER	= { 19 }; //Etc...&lt;br /&gt;
	PushButton BTN5_TRIGGER	= { 18 }; //Etc...&lt;br /&gt;
	PushButton BTN6_TRIGGER	= { 17 }; //Etc...&lt;br /&gt;
//These are initialized as part of the class and don't require initialization in 'void setup{}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop{};&lt;br /&gt;
	uint16_t button_function = button_0;&lt;br /&gt;
&lt;br /&gt;
	if (BTN1_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_1;&lt;br /&gt;
	} &lt;br /&gt;
	else if (BTN2_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_2;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN3_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_3;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN4_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_4;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN5_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_5;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN6_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_6;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
switch (button_function) {&lt;br /&gt;
		default:&lt;br /&gt;
		case button_0:&lt;br /&gt;
		case button_1: &lt;br /&gt;
                //Do something&lt;br /&gt;
		break;&lt;br /&gt;
		case button_2:&lt;br /&gt;
                // Do something else&lt;br /&gt;
		break;&lt;br /&gt;
		case button_3:&lt;br /&gt;
                // Doing something totally different&lt;br /&gt;
		break;&lt;br /&gt;
		case button_4:&lt;br /&gt;
                // Wish I could do something&lt;br /&gt;
		break;&lt;br /&gt;
		case button_5: &lt;br /&gt;
                // Stop doing that, please for the love of all that is holy!&lt;br /&gt;
		break;&lt;br /&gt;
		case button_6: &lt;br /&gt;
                // Never mind... I will do this instead&lt;br /&gt;
		break;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1661</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1661"/>
		<updated>2021-08-02T05:28:05Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;//Use case code at end of file&lt;br /&gt;
//Submitted by somebody that probably shouldn't be coding so fix it if it's borked...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***********************************************************************************************************************&lt;br /&gt;
Code Suggestion:&lt;br /&gt;
// I/O - Setup the I/O PINS HERE&lt;br /&gt;
	PushButton BTN1_TRIGGER	= { 23 };// Creates PushButton instance for buttons.h class to work with&lt;br /&gt;
	PushButton BTN2_TRIGGER = { 14 }; //Etc...&lt;br /&gt;
	PushButton BTN3_TRIGGER	= { 21 }; //Etc...&lt;br /&gt;
	PushButton BTN4_TRIGGER	= { 19 }; //Etc...&lt;br /&gt;
	PushButton BTN5_TRIGGER	= { 18 }; //Etc...&lt;br /&gt;
	PushButton BTN6_TRIGGER	= { 17 }; //Etc...&lt;br /&gt;
//These are initialized as part of the class and don't require initialization in 'void setup{}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop{};&lt;br /&gt;
	uint16_t button_function = button_0;&lt;br /&gt;
&lt;br /&gt;
	if (BTN1_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_1;&lt;br /&gt;
	} &lt;br /&gt;
	else if (BTN2_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_2;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN3_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_3;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN4_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_4;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN5_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_5;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN6_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_6;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
switch (button_function) {&lt;br /&gt;
		default:&lt;br /&gt;
		case button_0:&lt;br /&gt;
		case button_1: &lt;br /&gt;
                //Do something&lt;br /&gt;
		break;&lt;br /&gt;
		case button_2:&lt;br /&gt;
                // Do something else&lt;br /&gt;
		break;&lt;br /&gt;
		case button_3:&lt;br /&gt;
                // Doing something totally different&lt;br /&gt;
		break;&lt;br /&gt;
		case button_4:&lt;br /&gt;
                // Wish I could do something&lt;br /&gt;
		break;&lt;br /&gt;
		case button_5: &lt;br /&gt;
                // Stop doing that, please for the love of all that is holy!&lt;br /&gt;
		break;&lt;br /&gt;
		case button_6: &lt;br /&gt;
                // Never mind... I will do this instead&lt;br /&gt;
		break;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1660</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1660"/>
		<updated>2021-08-02T05:26:32Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;//Use case code at end of file&lt;br /&gt;
//Submitted by somebody that probably shouldn't be coding so fix it if it's borked...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//***********************************************************************************************************************&lt;br /&gt;
Code Suggestion:&lt;br /&gt;
// I/O - Setup the I/O PINS HERE&lt;br /&gt;
	PushButton BTN1_TRIGGER	= { 23 };// Creates PushButton instance for buttons.h class to work with&lt;br /&gt;
	PushButton BTN2_TRIGGER = { 14 }; //Etc...&lt;br /&gt;
	PushButton BTN3_TRIGGER	= { 21 }; //Etc...&lt;br /&gt;
	PushButton BTN4_TRIGGER	= { 19 }; //Etc...&lt;br /&gt;
	PushButton BTN5_TRIGGER	= { 18 }; //Etc...&lt;br /&gt;
	PushButton BTN6_TRIGGER	= { 17 }; //Etc...&lt;br /&gt;
//These are initialized as part of the class and don't require initialization in 'void setup{}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop{};&lt;br /&gt;
	uint16_t button_function = button_0;&lt;br /&gt;
&lt;br /&gt;
	if (BTN1_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_1;&lt;br /&gt;
	} &lt;br /&gt;
	else if (BTN2_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_2;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN3_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_3;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN4_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_4;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN5_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_5;&lt;br /&gt;
	}&lt;br /&gt;
	else if (BTN6_TRIGGER.isPressed()) {&lt;br /&gt;
		button_function = button_6;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
switch (button_function) {&lt;br /&gt;
		default:&lt;br /&gt;
		case button_0:&lt;br /&gt;
		case button_1: &lt;br /&gt;
                //Do something&lt;br /&gt;
		break;&lt;br /&gt;
		case button_2:&lt;br /&gt;
                // Do something else&lt;br /&gt;
		break;&lt;br /&gt;
		case button_3:&lt;br /&gt;
                // Doing something totally different&lt;br /&gt;
		break;&lt;br /&gt;
		case button_4:&lt;br /&gt;
                // Wish I could do something&lt;br /&gt;
		break;&lt;br /&gt;
		case button_5: &lt;br /&gt;
                // Stop doing that, please for the love of all that is holy!&lt;br /&gt;
		break;&lt;br /&gt;
		case button_6: &lt;br /&gt;
                // Never mind... I will do this instead&lt;br /&gt;
		break;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1659</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1659"/>
		<updated>2021-08-02T05:02:59Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1658</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1658"/>
		<updated>2021-08-02T05:02:34Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt; pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1657</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1657"/>
		<updated>2021-08-02T05:01:51Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt; pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1656</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1656"/>
		<updated>2021-08-02T05:01:25Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt; pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1655</id>
		<title>IoT - Modular - Buttons.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_Buttons.h&amp;diff=1655"/>
		<updated>2021-08-02T04:59:45Z</updated>

		<summary type="html">&lt;p&gt;Grant: Created page with &amp;quot;class PushButton {  public:  PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)  &amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt; pin(pin) { // remember the push button p...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;class PushButton {&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
PushButton(uint8_t pin) // Constructor (executes when a PushButton object is created)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt; pin(pin) { // remember the push button pin&lt;br /&gt;
&lt;br /&gt;
pinMode(pin, INPUT_PULLUP); // enable the internal pull-up resistor&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool isPressed() // read the button state check if the button has been pressed, debounce the button as well&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
bool pressed = false;&lt;br /&gt;
&lt;br /&gt;
bool state = digitalRead(pin);               // read the button's state&lt;br /&gt;
&lt;br /&gt;
int8_t stateChange = state - previousState;  // calculate the state change since last time&lt;br /&gt;
&lt;br /&gt;
if (stateChange == rising) { // If the button is pressed (went from high to low)&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousBounceTime &amp;gt; debounceTime) { // check if the time since the last bounce is higher than the threshold&lt;br /&gt;
&lt;br /&gt;
pressed = true; // the button is pressed&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (stateChange == falling) { // if the button is released or bounces&lt;br /&gt;
&lt;br /&gt;
previousBounceTime = millis(); // remember when this happened&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
previousState = state; // remember the current state&lt;br /&gt;
&lt;br /&gt;
return pressed; // return true if the button was pressed and didn't bounce&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
uint8_t pin;&lt;br /&gt;
&lt;br /&gt;
bool previousState = HIGH;&lt;br /&gt;
&lt;br /&gt;
unsigned long previousBounceTime = 0;&lt;br /&gt;
&lt;br /&gt;
const static unsigned long debounceTime = 1000;&lt;br /&gt;
&lt;br /&gt;
const static int8_t rising = HIGH - LOW;&lt;br /&gt;
&lt;br /&gt;
const static int8_t falling = LOW - HIGH;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Install_EVEN_NEWER&amp;diff=1639</id>
		<title>WikiServer - Install EVEN NEWER</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Install_EVEN_NEWER&amp;diff=1639"/>
		<updated>2021-05-30T06:30:08Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:DarkViolet&amp;quot;&amp;gt;'''NEW Version!'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Now with more VirtualHosts...'''&lt;br /&gt;
&lt;br /&gt;
'''And an attempt at running a Development release'''&lt;br /&gt;
&lt;br /&gt;
*Proven on Mint 20 ... (Gets MySQL 8.0)&lt;br /&gt;
*Proven on SparkyLinux 5.11 ... (You'll have to [https://tecadmin.net/install-mysql-server-on-debian9-stretch/ fix the missing MySQL] thing &amp;amp; install vim first)&lt;br /&gt;
**[[Getting MySQL onto SparkyLinux|Getting MySQL onto SparkyLinux]]&lt;br /&gt;
*Proven on LMDE 4 ... (You'll have to [https://linuxize.com/post/how-to-install-mysql-on-debian-10/ fix the missing MySQL] thing &amp;amp; install vim first)&lt;br /&gt;
&lt;br /&gt;
===Install the LAMP Stack===&lt;br /&gt;
&lt;br /&gt;
[[WebServer - Basic LAMP Stack Install|Basic LAMP Stack Install]]&lt;br /&gt;
&lt;br /&gt;
===Install MediaWiki===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/mediawiki/1.35/mediawiki-1.35.0-rc.1.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**(Check the '''[[mediawikiwiki:Download|download page]]''' for latest version)&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xvzf mediawiki-1.35.0-rc.1.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
**(adjust for version...)&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mkdir /var/www/wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mkdir /var/www/labnotes&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo cp -r mediawiki-1.35.0-rc.1/* /var/www/wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo cp -r mediawiki-1.35.0-rc.1/* /var/www/labnotes&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CREATE DATABASE my_wiki;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON my_wiki.* TO 'someone'@'localhost';&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 CREATE DATABASE my_notes;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON my_notes.* TO 'someone'@'localhost';&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 EXIT;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/php/7.4/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
**(this may be in a slightly different location depending on version of php installed...)&lt;br /&gt;
**increase &amp;lt;code&amp;gt;upload_max_filesize&amp;lt;/code&amp;gt; to 200M&lt;br /&gt;
**increase &amp;lt;code&amp;gt;post_max_size&amp;lt;/code&amp;gt; to 200M&lt;br /&gt;
*Fix upload directories:&lt;br /&gt;
**&amp;lt;code&amp;gt;sudo chmod -R ugo+rwX /var/www/wiki/images&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;sudo chmod -R ugo+rwX /var/www/labnotes/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure your webserver with [[WebServer - Name-based Virtual Host Support|VirtualHosts]] for the Wiki &amp;amp; LabNotes&lt;br /&gt;
&lt;br /&gt;
*Wiki&lt;br /&gt;
**&amp;lt;code&amp;gt;ServerName WikiServer.Domain.TLD&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;DocumentRoot &amp;quot;/var/www/wiki&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*LabNotes&lt;br /&gt;
**&amp;lt;code&amp;gt;ServerName LabNotesServer.Domain.TLD&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;DocumentRoot &amp;quot;/var/www/labnotes&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browse to '''&amp;lt;nowiki&amp;gt;http://WikiServer.Domain.TLD/&amp;lt;/nowiki&amp;gt;''' &amp;amp; follow the steps presented.&lt;br /&gt;
&lt;br /&gt;
Set it as '''Authorised editors only'''.&lt;br /&gt;
&lt;br /&gt;
Browse to '''&amp;lt;nowiki&amp;gt;http://LabNotesServer.Domain.TLD/&amp;lt;/nowiki&amp;gt;''' &amp;amp; follow the steps presented.&lt;br /&gt;
&lt;br /&gt;
Set as '''Private Wiki'''&lt;br /&gt;
&lt;br /&gt;
===Adding another Wiki to an existing Wiki Server===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mkdir /var/www/anudderwiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo cp -r mediawiki-*/* /var/www/anudderwiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;CREATE DATABASE anudder_wiki;&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON anudder_wiki.* TO 'someone'@'localhost';&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;EXIT;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo chmod -R ugo+rwX /var/www/anudderwiki/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure your webserver with VirtualHosts for the new Wiki&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;ServerName AnudderWikiServer.Domain.TLD&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;DocumentRoot &amp;quot;/var/www/anudderwiki&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browse to '''&amp;lt;nowiki&amp;gt;http://AnudderWikiServer.Domain.TLD/&amp;lt;/nowiki&amp;gt;''' &amp;amp; follow the steps presented.&lt;br /&gt;
&lt;br /&gt;
Set as '''Authorised editors only''' or '''Private Wiki'''&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
'''Note:''' With MySQL 8, there is some possibility that it will default to the wrong authentication method.&lt;br /&gt;
&lt;br /&gt;
*If Mediawiki has problems connecting &amp;amp; gives you &amp;quot;'''The server requested authentication method unknown to the client.'''&amp;quot; as part of the error message, sign back into MySQL &amp;amp; adjust the user being assigned in the wiki install:&lt;br /&gt;
**&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;ALTER USER 'someone'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WebServer_-_Basic_LAMP_Stack_Install&amp;diff=1424</id>
		<title>WebServer - Basic LAMP Stack Install</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WebServer_-_Basic_LAMP_Stack_Install&amp;diff=1424"/>
		<updated>2021-01-31T03:19:29Z</updated>

		<summary type="html">&lt;p&gt;Grant: Undo revision 1423 by Grant (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Proven on Mint 19.3 ... (Seems to get MySQL 5.7)&lt;br /&gt;
*Proven on Mint 20 ... (Gets MySQL 8.0)&lt;br /&gt;
*Proven on SparkyLinux 5.11 ... (You'll have to [https://tecadmin.net/install-mysql-server-on-debian9-stretch/ fix the missing MySQL] thing &amp;amp; install vim first)&lt;br /&gt;
**[[Getting MySQL onto SparkyLinux]]&lt;br /&gt;
&lt;br /&gt;
===Install the LAMP Stack===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#c0392b&amp;quot;&amp;gt;'''Note:'''  On Mint 19.3, this installs php 7.2.24. On Mint 20, this installs php 7.4.3.  This ''MIGHT'' be an important point to keep in mind for later...&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you expect to need php newer than 7.2.24 on a Mint 19.3 server, force it to upgrade before you move on to installing the packages:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo add-apt-repository ppa:ondrej/php # Press enter to confirm.&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;php -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Verify that it's showing a suitable version of php. I'm seeing 7.4.10 in testing...)&lt;br /&gt;
&lt;br /&gt;
====Install the packages====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apache2 libapache2-mod-php php-xml php-mbstring php-apcu php-intl imagemagick inkscape php-gd php-cli php-cgi php mysql-server mysql-client php-mysql&amp;lt;/code&amp;gt;&lt;br /&gt;
**Say Yes to Continue&lt;br /&gt;
**&amp;lt;u&amp;gt;Configuring mysql-community-server&amp;lt;/u&amp;gt; (Doesn't happen on Mint)&lt;br /&gt;
***Pick a good '''root''' password...&lt;br /&gt;
***I tend to select '''Use Legacy Authentication Method''' because '''Use Strong Password Encryption''' is annoying as hell.  (Your choice here...)&lt;br /&gt;
&lt;br /&gt;
====Configure MySQL====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql_secure_installation&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;u&amp;gt;Would you like to setup VALIDATE PASSWORD component?&amp;lt;/u&amp;gt;&lt;br /&gt;
***I select No (because I'd rather manage my own password policies, thanks...)&lt;br /&gt;
**'''''root password'''''&lt;br /&gt;
***&amp;lt;u&amp;gt;Please set the password for root here.&amp;lt;/u&amp;gt;&lt;br /&gt;
****Pick a good '''root''' password...&lt;br /&gt;
**or... (depends on install...)&lt;br /&gt;
***&amp;lt;u&amp;gt;Using existing password for root.&amp;lt;/u&amp;gt;&lt;br /&gt;
****Say No&lt;br /&gt;
**&amp;lt;u&amp;gt;Remove anonymous users?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Duh... Yes&lt;br /&gt;
**&amp;lt;u&amp;gt;Disallow root login remotely?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Your choice, but I tend to say No.&lt;br /&gt;
**&amp;lt;u&amp;gt;Remove test database and access to it?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Duh... Yes again.&lt;br /&gt;
**&amp;lt;u&amp;gt;Reload privilege tables now?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Yes&lt;br /&gt;
*([[WebServer - MySQL Notes|Extra Instructions if you've never configured MySQL before]])&lt;br /&gt;
&lt;br /&gt;
====&amp;amp; Test it====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vi /var/www/html/info.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php &lt;br /&gt;
 phpinfo();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Browse to http://ServerAddress/ &amp;amp; you should see the default page.&lt;br /&gt;
&lt;br /&gt;
Browse to [http://ServerAddress/ http://ServerAddress/info.php] &amp;amp; you should see a whole bunch of info about your PHP subsystem.&lt;br /&gt;
&lt;br /&gt;
====Set up at least one user in mysql====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'someone'@'localhost' IDENTIFIED BY 'password';&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 EXIT;&lt;br /&gt;
('''Hint:'''  This'd be a good time to create yourself as that user with your non-admin password of choice...)&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WebServer_-_Basic_LAMP_Stack_Install&amp;diff=1423</id>
		<title>WebServer - Basic LAMP Stack Install</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WebServer_-_Basic_LAMP_Stack_Install&amp;diff=1423"/>
		<updated>2021-01-31T03:18:26Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Install the packages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This part stolen fair and square from Tinkernet Wiki... https://wiki.tinkernet.ca&lt;br /&gt;
&lt;br /&gt;
*Proven on Mint 19.3 ... (Seems to get MySQL 5.7)&lt;br /&gt;
*Proven on Mint 20 ... (Gets MySQL 8.0)&lt;br /&gt;
&lt;br /&gt;
===Install the LAMP Stack===&lt;br /&gt;
====Install the packages====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apache2 libapache2-mod-php php-xml php-mbstring php-apcu php-intl imagemagick inkscape php-gd php-cli php-cgi php mysql-server mysql-client php-mysql&amp;lt;/code&amp;gt;&lt;br /&gt;
**Say Yes to Continue&lt;br /&gt;
&lt;br /&gt;
====Configure MySQL====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql_secure_installation&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;u&amp;gt;Would you like to setup VALIDATE PASSWORD component?&amp;lt;/u&amp;gt;&lt;br /&gt;
***I select No (because I'd rather manage my own password policies, thanks...)&lt;br /&gt;
**'''''root password'''''&lt;br /&gt;
***&amp;lt;u&amp;gt;Please set the password for root here.&amp;lt;/u&amp;gt;&lt;br /&gt;
****Pick a good '''root''' password...&lt;br /&gt;
**or... (depends on install...)&lt;br /&gt;
***&amp;lt;u&amp;gt;Using existing password for root.&amp;lt;/u&amp;gt;&lt;br /&gt;
****Say No&lt;br /&gt;
**&amp;lt;u&amp;gt;Remove anonymous users?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Duh... Yes&lt;br /&gt;
**&amp;lt;u&amp;gt;Disallow root login remotely?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Your choice, but I tend to say No.&lt;br /&gt;
**&amp;lt;u&amp;gt;Remove test database and access to it?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Duh... Yes again.&lt;br /&gt;
**&amp;lt;u&amp;gt;Reload privilege tables now?&amp;lt;/u&amp;gt;&lt;br /&gt;
***Yes&lt;br /&gt;
&lt;br /&gt;
====&amp;amp; Test it====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vi /var/www/html/info.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php &lt;br /&gt;
 phpinfo();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Browse to http://ServerAddress/ &amp;amp; you should see the default page.&lt;br /&gt;
&lt;br /&gt;
Browse to [http://ServerAddress/ http://ServerAddress/info.php] &amp;amp; you should see a whole bunch of info about your PHP subsystem.&lt;br /&gt;
&lt;br /&gt;
====Set up at least one user in mysql====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'someone'@'localhost' IDENTIFIED BY 'password';&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 EXIT;&lt;br /&gt;
('''Hint:'''  This'd be a good time to create yourself as that user with your non-admin password of choice...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now. go back to the list... [[WEB_SERVER_FROM_A_TO_Z]]&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1416</id>
		<title>MQTT Bridging</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1416"/>
		<updated>2021-01-25T01:44:34Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Bridged MQTT Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bridged MQTT Setup==&lt;br /&gt;
&lt;br /&gt;
==='''&amp;lt;u&amp;gt;Prerequisites&amp;lt;/u&amp;gt;''' -&amp;gt; [[http://wingsquare.com/blog/setting-up-mqtt-mosquitto-broker-in-ubuntu-linux/|Installing Mosquitto Broker]] .===&lt;br /&gt;
Submitted by Guru of Nothing&lt;br /&gt;
&lt;br /&gt;
If you are using MQTT for your automation backbone, you may need to have more than one MQTT broker. In my case, I have a main broker that the majority of my devices connect to in the local network (Skynet, a VM on an enterprise server locally) and I have a secondary broker (PiBridge, an rPi) that is located in the node cabinet at my gate. There are a number of devices at the gate that are critical and if the power goes out to the property, these are powered by 12v battery. Skynet will go down and the gate devices MUST have a broker. So a bridged setup is vital. I installed a Lite version of Raspi OS (previously called Raspbian) on a rPi 3b+ and enabled SSH. I then installed Mosquitto. The rPi is powered from the battery that all the other devices there use for backup power. &lt;br /&gt;
&lt;br /&gt;
The basic bridge is pretty simple. There are lots of options for this and it gets pretty complicated rather quickly. Take a trip over to [http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's place] if you want more info and additional options and use cases. I am sticking with a simple relay between the two. At the most basic, you need to set up ONE (and only one) of your brokers to be the bridge. For this 'relay' connection DO NOT do the following to both or you will create a messaging loop that will bork both of your brokers and make your devices want to commit suicide. Let's set up the bridge. These are Linux instructions, though the Windblows instructions are the same. &lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
Find the location of your mosquitto.conf file in the primary broker. In my case its in the /etc/mosquitto folder. Use whatever editor applies to your tastes, but I like vim. You must have admin access to modify this file&lt;br /&gt;
 sudo vim /etc/mosquitto/mosquitto.conf&lt;br /&gt;
In the file you will need to add the lines that create a bridge. Add in the following:&lt;br /&gt;
&lt;br /&gt;
 #External MQTT Broker&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 connection &amp;lt;your_second_broker_name&amp;gt;&lt;br /&gt;
 address other_broker_IP:1883&lt;br /&gt;
 topic # out 0&lt;br /&gt;
 topic # in 0&lt;br /&gt;
&lt;br /&gt;
Save the file and restart your broker (More than likely by restarting the computer in Windblows)&lt;br /&gt;
&lt;br /&gt;
 sudo service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important Notes # &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'allow anonymous true'&amp;lt;/code&amp;gt; is required if you '''DON'T''' use name and password for your broker communications. Additional lines are required if you '''DO''' use authentication.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;&amp;lt;your_second_broker_name&amp;gt;&amp;lt;/code&amp;gt; with whatever you want your other broker named internally. You must have this line but you can call it anything you'd like. I use DNS in my network so I named the same as the devices hostname.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;other_broker_IP&amp;lt;/code&amp;gt; with the IP (or name if you have DNS set up in your network) of your second broker. If you use non-default or secured port numbers, change 1883 to the correct number of your broker&lt;br /&gt;
*The topic in and out lines tell the broker to subscribe to every message broadcast from the second broker and to broadcast out every message received directly on the first TO the second. This is why you don't want to do this to BOTH brokers. They will sub and publish to each other until their little brains fall out. Besides, it angers the IT folks in the matrix... just saying.&lt;br /&gt;
*BONUS NOTE: If you want to restrict what is sent between them, i.e. to not send STAT messages back and forth, you can change the '#' to specific topic and only that one will be rebroadcast... Refer to [http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's tutorial] for more of that mind numbing configuration.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
To make sure that you have it set up correctly, use your visual client of choice (I use [http://workswithweb.com/html/mqttbox/downloads.html MQTT Box]) and open two instances. One needs to be connected to each of the brokers. Pick a topic and sub to it in each window... let's use 'broker/testing' for giggles. Then open a publish screen in both windows. Publish the payload &amp;quot;Hello World&amp;quot; to 'broker/testing' topic on one and make sure that in your sub screen &amp;quot;Hello World&amp;quot; shows up on BOTH brokers sub screens. If it does, good. If not, you did something wrong (like probably not restarting the broker you made the .conf file mods to). This tests that you have communication in one direction, broker to broker. Now, publish the same message to the same topic in your other window and make sure the message shows up in the subscribe screens of both brokers. This tests communications going the other way. Worked? Great! No? You need to troubleshoot...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1415</id>
		<title>MQTT Bridging</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1415"/>
		<updated>2021-01-25T01:36:23Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Bridged MQTT Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bridged MQTT Setup==&lt;br /&gt;
&lt;br /&gt;
==='''&amp;lt;u&amp;gt;Prerequisites&amp;lt;/u&amp;gt;''' -&amp;gt; [[http://wingsquare.com/blog/setting-up-mqtt-mosquitto-broker-in-ubuntu-linux/|Installing Mosquitto Broker]] .===&lt;br /&gt;
Submitted by Guru of Nothing&lt;br /&gt;
&lt;br /&gt;
If you are using MQTT for your automation backbone, you may need to have more than one MQTT broker. In my case, I have a main broker that the majority of my devices connect to in the local network (Skynet, a VM on an enterprise server locally) and I have a secondary broker (PiBridge, an rPi) that is located in the node cabinet at my gate. There are a number of devices at the gate that are critical and if the power goes out to the property, these are powered by 12v battery. Skynet will go down and the gate devices MUST have a broker. So a bridged setup is vital. I installed a Lite version of Raspi OS (previously called Raspbian) on a rPi 3b+ and enabled SSH. I then installed Mosquitto. The rPi is powered from the battery that all the other devices there use for backup power. &lt;br /&gt;
&lt;br /&gt;
The basic bridge is pretty simple. There are lots of options for this and it gets pretty complicated rather quickly. Take a trip over to [http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's place] if you want more info and additional options and use cases. I am sticking with a simple relay between the two. At the most basic, you need to set up ONE (and only one) of your brokers to be the bridge. For this 'relay' connection DO NOT do the following to both or you will create a messaging loop that will bork both of your brokers and make your devices want to commit suicide. Let's set up the bridge. These are Linux instructions, though the Windblows instructions are the same. &lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
Find the location of your mosquitto.conf file in the primary broker. In my case its in the /etc/mosquitto folder. Use whatever editor applies to your tastes, but I like vim. You must have admin access to modify this file&lt;br /&gt;
 sudo vim /etc/mosquitto/mosquitto.conf&lt;br /&gt;
In the file you will need to add the lines that create a bridge. Add in the following:&lt;br /&gt;
&lt;br /&gt;
 #External MQTT Broker&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 connection &amp;lt;your_second_broker_name&amp;gt;&lt;br /&gt;
 address other_broker_IP:1883&lt;br /&gt;
 topic # out 0&lt;br /&gt;
 topic # in 0&lt;br /&gt;
&lt;br /&gt;
Save the file and restart your broker (More than likely by restarting the computer)&lt;br /&gt;
&lt;br /&gt;
Important Notes # &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'allow anonymous true'&amp;lt;/code&amp;gt; is required if you '''DON'T''' use name and password for your broker communications. Additional lines are required if you '''DO''' use authentication.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;&amp;lt;your_second_broker_name&amp;gt;&amp;lt;/code&amp;gt; with whatever you want your other broker named internally. You must have this line but you can call it anything you'd like. I use DNS in my network so I named the same as the devices hostname.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;other_broker_IP&amp;lt;/code&amp;gt; with the IP (or name if you have DNS set up in your network) of your second broker. If you use non-default or secured port numbers, change 1883 to the correct number of your broker&lt;br /&gt;
*The topic in and out lines tell the broker to subscribe to every message broadcast from the second broker and to broadcast out every message received directly on the first TO the second. This is why you don't want to do this to BOTH brokers. They will sub and publish to each other until their little brains fall out. Besides, it angers the IT folks in the matrix... just saying.&lt;br /&gt;
*BONUS NOTE: If you want to restrict what is sent between them, i.e. to not send STAT messages back and forth, you can change the '#' to specific topic and only that one will be rebroadcast... Refer to [http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's tutorial] for more of that mind numbing configuration.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
To make sure that you have it set up correctly, use your visual client of choice (I use [http://workswithweb.com/html/mqttbox/downloads.html MQTT Box]) and open two instances. One needs to be connected to each of the brokers. Pick a topic and sub to it in each window... let's use 'broker/testing' for giggles. Then open a publish screen in both windows. Publish the payload &amp;quot;Hello World&amp;quot; to 'broker/testing' topic on one and make sure that in your sub screen &amp;quot;Hello World&amp;quot; shows up on BOTH brokers sub screens. If it does, good. If not, you did something wrong (like probably not restarting the broker you made the .conf file mods to). This tests that you have communication in one direction, broker to broker. Now, publish the same message to the same topic in your other window and make sure the message shows up in the subscribe screens of both brokers. This tests communications going the other way. Worked? Great! No? You need to troubleshoot...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1414</id>
		<title>MQTT Bridging</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1414"/>
		<updated>2021-01-25T01:31:21Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bridged MQTT Setup==&lt;br /&gt;
&lt;br /&gt;
==='''&amp;lt;u&amp;gt;Prerequisites&amp;lt;/u&amp;gt;''' -&amp;gt; [[http://wingsquare.com/blog/setting-up-mqtt-mosquitto-broker-in-ubuntu-linux/|Installing Mosquitto Broker]] .===&lt;br /&gt;
Submitted by Guru of Nothing&lt;br /&gt;
&lt;br /&gt;
If you are using MQTT for your automation backbone, you may need to have more than one MQTT broker. In my case, I have a main broker that the majority of my devices connect to in the local network (Skynet, a VM on an enterprise server locally) and I have a secondary broker (PiBridge, an rPi) that is located in the node cabinet at my gate. There are a number of devices at the gate that are critical and if the power goes out to the property, these are powered by 12v battery. Skynet will go down and the gate devices MUST have a broker. So a bridged setup is vital. I installed a Lite version of Raspi OS (previously called Raspbian) on a rPi 3b+ and enabled SSH. I then installed Mosquitto. The rPi is powered from the battery that all the other devices there use for backup power. &lt;br /&gt;
&lt;br /&gt;
The basic bridge is pretty simple. There are lots of options for this and it gets pretty complicated rather quickly. Take a trip over to[http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's place] if you want more info and additional options and use cases. I am sticking with a simple relay between the two. At the most basic, you need to set up ONE (and only one) of your brokers to be the bridge. For this 'relay' connection DO NOT do the following to both or you will create a messaging loop that will bork both of your brokers and make your devices want to commit suicide. Let's set up the bridge. These are Linux instructions, though the Windblows instructions are the same. &lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
Find the location of your mosquitto.conf file in the primary broker. In my case its in the /etc/mosquitto folder. Use whatever editor applies to your tastes, but I like vim. You must have admin access to modify this file&lt;br /&gt;
 sudo vim /etc/mosquitto/mosquitto.conf&lt;br /&gt;
In the file you will need to add the lines that create a bridge. Add in the following:&lt;br /&gt;
&lt;br /&gt;
 #External MQTT Broker&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 connection &amp;lt;your_second_broker_name&amp;gt;&lt;br /&gt;
 address other_broker_IP:1883&lt;br /&gt;
 topic # out 0&lt;br /&gt;
 topic # in 0&lt;br /&gt;
&lt;br /&gt;
Save the file and restart your broker (More than likely by restarting the computer)&lt;br /&gt;
&lt;br /&gt;
Important Notes # &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'allow anonymous true'&amp;lt;/code&amp;gt; is required if you '''DON'T''' use name and password for your broker communications. Additional lines are required if you '''DO''' use authentication.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;&amp;lt;your_second_broker_name&amp;gt;&amp;lt;/code&amp;gt; with whatever you want your other broker named internally. You must have this line but you can call it anything you'd like. I use DNS in my network so I named the same as the devices hostname.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;other_broker_IP&amp;lt;/code&amp;gt; with the IP (or name if you have DNS set up in your network) of your second broker. If you use non-default or secured port numbers, change 1883 to the correct number of your broker&lt;br /&gt;
*The topic in and out lines tell the broker to subscribe to every message broadcast from the second broker and to broadcast out every message received directly on the first TO the second. This is why you don't want to do this to BOTH brokers. They will sub and publish to each other until their little brains fall out. Besides, it angers the IT folks in the matrix... just saying.&lt;br /&gt;
*BONUS NOTE: If you want to restrict what is sent between them, i.e. to not send STAT messages back and forth, you can change the '#' to specific topic and only that one will be rebroadcast... Refer to [http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's tutorial] for more of that mind numbing configuration.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
To make sure that you have it set up correctly, use your visual client of choice (I use [http://workswithweb.com/html/mqttbox/downloads.html MQTT Box]) and open two instances. One needs to be connected to each of the brokers. Pick a topic and sub to it in each window... let's use 'broker/testing' for giggles. Then open a publish screen in both windows. Publish the payload &amp;quot;Hello World&amp;quot; to 'broker/testing' topic on one and make sure that in your sub screen &amp;quot;Hello World&amp;quot; shows up on BOTH brokers sub screens. If it does, good. If not, you did something wrong (like probably not restarting the broker you made the .conf file mods to). This tests that you have communication in one direction, broker to broker. Now, publish the same message to the same topic in your other window and make sure the message shows up in the subscribe screens of both brokers. This tests communications going the other way. Worked? Great! No? You need to troubleshoot...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1413</id>
		<title>MQTT Bridging</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=MQTT_Bridging&amp;diff=1413"/>
		<updated>2021-01-25T01:29:43Z</updated>

		<summary type="html">&lt;p&gt;Grant: Created page with &amp;quot;==Bridged MQTT Setup==  ==='''&amp;lt;u&amp;gt;Prerequisites&amp;lt;/u&amp;gt;''' -&amp;gt; Installing Mosquitto Broker .=== Submitted by Guru of Nothing  If you are using MQTT for you...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bridged MQTT Setup==&lt;br /&gt;
&lt;br /&gt;
==='''&amp;lt;u&amp;gt;Prerequisites&amp;lt;/u&amp;gt;''' -&amp;gt; [[Mosquitto MQTT Broker|Installing Mosquitto Broker]] .===&lt;br /&gt;
Submitted by Guru of Nothing&lt;br /&gt;
&lt;br /&gt;
If you are using MQTT for your automation backbone, you may need to have more than one MQTT broker. In my case, I have a main broker that the majority of my devices connect to in the local network (Skynet, a VM on an enterprise server locally) and I have a secondary broker (PiBridge, an rPi) that is located in the node cabinet at my gate. There are a number of devices at the gate that are critical and if the power goes out to the property, these are powered by 12v battery. Skynet will go down and the gate devices MUST have a broker. So a bridged setup is vital. I installed a Lite version of Raspi OS (previously called Raspbian) on a rPi 3b+ and enabled SSH. I then installed Mosquitto. The rPi is powered from the battery that all the other devices there use for backup power. &lt;br /&gt;
&lt;br /&gt;
The basic bridge is pretty simple. There are lots of options for this and it gets pretty complicated rather quickly. Take a trip over to[http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's place] if you want more info and additional options and use cases. I am sticking with a simple relay between the two. At the most basic, you need to set up ONE (and only one) of your brokers to be the bridge. For this 'relay' connection DO NOT do the following to both or you will create a messaging loop that will bork both of your brokers and make your devices want to commit suicide. Let's set up the bridge. These are Linux instructions, though the Windblows instructions are the same. &lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
Find the location of your mosquitto.conf file in the primary broker. In my case its in the /etc/mosquitto folder. Use whatever editor applies to your tastes, but I like vim. You must have admin access to modify this file&lt;br /&gt;
 sudo vim /etc/mosquitto/mosquitto.conf&lt;br /&gt;
In the file you will need to add the lines that create a bridge. Add in the following:&lt;br /&gt;
&lt;br /&gt;
 #External MQTT Broker&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 connection &amp;lt;your_second_broker_name&amp;gt;&lt;br /&gt;
 address other_broker_IP:1883&lt;br /&gt;
 topic # out 0&lt;br /&gt;
 topic # in 0&lt;br /&gt;
&lt;br /&gt;
Save the file and restart your broker (More than likely by restarting the computer)&lt;br /&gt;
&lt;br /&gt;
Important Notes # &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'allow anonymous true'&amp;lt;/code&amp;gt; is required if you '''DON'T''' use name and password for your broker communications. Additional lines are required if you '''DO''' use authentication.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;&amp;lt;your_second_broker_name&amp;gt;&amp;lt;/code&amp;gt; with whatever you want your other broker named internally. You must have this line but you can call it anything you'd like. I use DNS in my network so I named the same as the devices hostname.&lt;br /&gt;
*Replace &amp;lt;code&amp;gt;other_broker_IP&amp;lt;/code&amp;gt; with the IP (or name if you have DNS set up in your network) of your second broker. If you use non-default or secured port numbers, change 1883 to the correct number of your broker&lt;br /&gt;
*The topic in and out lines tell the broker to subscribe to every message broadcast from the second broker and to broadcast out every message received directly on the first TO the second. This is why you don't want to do this to BOTH brokers. They will sub and publish to each other until their little brains fall out. Besides, it angers the IT folks in the matrix... just saying.&lt;br /&gt;
*BONUS NOTE: If you want to restrict what is sent between them, i.e. to not send STAT messages back and forth, you can change the '#' to specific topic and only that one will be rebroadcast... Refer to [http://www.steves-internet-guide.com/mosquitto-bridge-configuration/ Steve's tutorial] for more of that mind numbing configuration.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
To make sure that you have it set up correctly, use your visual client of choice (I use [http://workswithweb.com/html/mqttbox/downloads.html MQTT Box]) and open two instances. One needs to be connected to each of the brokers. Pick a topic and sub to it in each window... let's use 'broker/testing' for giggles. Then open a publish screen in both windows. Publish the payload &amp;quot;Hello World&amp;quot; to 'broker/testing' topic on one and make sure that in your sub screen &amp;quot;Hello World&amp;quot; shows up on BOTH brokers sub screens. If it does, good. If not, you did something wrong (like probably not restarting the broker you made the .conf file mods to). This tests that you have communication in one direction, broker to broker. Now, publish the same message to the same topic in your other window and make sure the message shows up in the subscribe screens of both brokers. This tests communications going the other way. Worked? Great! No? You need to troubleshoot...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_MQTT&amp;diff=1412</id>
		<title>IoT - MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_MQTT&amp;diff=1412"/>
		<updated>2021-01-25T01:28:56Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* MQTT - Topics and Wildcards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mosquitto==&lt;br /&gt;
[https://mosquitto.org/ MosQuiTTo Web Site]&lt;br /&gt;
&lt;br /&gt;
*[https://mosquitto.org/man/mosquitto-conf-5.html mosquitto.conf — the configuration file for mosquitto]&lt;br /&gt;
*[https://github.com/guibom/WebMQonttrol WebMQonttrol]&lt;br /&gt;
*[http://mqtt-explorer.com/ MQTT Explorer]&lt;br /&gt;
**[https://github.com/thomasnordquist/MQTT-Explorer On GIThub]&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
&lt;br /&gt;
*[https://mqtt-explorer.com/ MQTT Explorer]&lt;br /&gt;
*[https://mqttfx.jensd.de/ MQTT.fx]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
*[https://mosquitto.org/documentation/ Documentation]&lt;br /&gt;
*[http://wingsquare.com/blog/setting-up-mqtt-mosquitto-broker-in-ubuntu-linux/ Setting up MQTT Mosquitto broker in Ubuntu Linux]&lt;br /&gt;
*[https://www.google.ca/search?q=mqtt+and+google+home&amp;amp;gws_rd=cr&amp;amp;dcr=0&amp;amp;ei=YA9TWtfuDcKE8gXAh4z4Aw '''''SEARCH:''''' mqtt and google home]&lt;br /&gt;
*[https://www.google.ca/search?q=sonoff+mqtt&amp;amp;gws_rd=cr&amp;amp;dcr=0&amp;amp;ei=xGtVWtKPKpO9jwSx_K54 '''''SEARCH:''''' sonoff mqtt]&lt;br /&gt;
*&amp;lt;span style=&amp;quot;font-size:medium&amp;quot;&amp;gt;[https://github.com/krvarma/sonoff-mqtt &amp;lt;span style=&amp;quot;background-color:#FFA07A&amp;quot;&amp;gt;A simple proof of concept home automation using Sonoff WiFi Switch, MQTT and Google Assistant platform.&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
*[https://www.hivemq.com/blog/mqtt-essentials/ MQTT Essentials]&lt;br /&gt;
&amp;lt;ol style=&amp;quot;margin-left: 40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt Introducing MQTT]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part2-publish-subscribe Publish &amp;amp; Subscribe]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment Client, Broker and Connection Establishment]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe MQTT Publish, Subscribe &amp;amp; Unsubscribe]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices MQTT Topics &amp;amp; Best Practices]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels Quality of Service 0, 1 &amp;amp; 2]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-7-persistent-session-queuing-messages Persistent Session and Queuing Messages]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages Retained Messages]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-9-last-will-and-testament Last Will and Testament]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over Keep Alive and Client Take-Over]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul style=&amp;quot;margin-left: 40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-special-mqtt-over-websockets MQTT Essentials Special: MQTT over WebSockets]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.hivemq.com/blog/mqtt-essentials-wrap-up MQTT Essentials Wrap-Up]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[https://www.hivemq.com/mqtt-security-fundamentals/ MQTT Security Fundamentals]&lt;br /&gt;
*[https://www.mysensors.org/build/mqtt_gateway Building a MQTT Gateway (Arduino &amp;amp; W5100)]&lt;br /&gt;
*[https://github.com/esp8266/Arduino/issues/2839 ESP8266 as mqtt broker] &lt;br /&gt;
**[https://github.com/martin-ger/uMQTTBroker &amp;lt;span class=&amp;quot;text-gray-dark mr-2&amp;quot; itemprop=&amp;quot;about&amp;quot;&amp;gt;MQTT Broker library for ESP8266 Arduino&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
===[http://patriot-geek.blogspot.com/2017/03/mqtt-topics-and-wildcards.html MQTT - Topics and Wildcards]===&lt;br /&gt;
&lt;br /&gt;
=== [[MQTT Bridging]] ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=Grafana&amp;diff=1194</id>
		<title>Grafana</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=Grafana&amp;diff=1194"/>
		<updated>2020-12-01T18:41:41Z</updated>

		<summary type="html">&lt;p&gt;Grant: Created page with &amp;quot;==How To Install Grafana on Linux Mint 20== https://grafana.com/docs/grafana/latest/installation/debian/  Installation was tested on a fresh VM of Mint 20 so if i screwed some...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==How To Install Grafana on Linux Mint 20==&lt;br /&gt;
https://grafana.com/docs/grafana/latest/installation/debian/&lt;br /&gt;
&lt;br /&gt;
Installation was tested on a fresh VM of Mint 20 so if i screwed something up, it wasn't going to be my Automation server&lt;br /&gt;
&lt;br /&gt;
There are 2 versions that could be installed -OSS and Enterprise. It is suggested by Grafana to install the Enterprise version for stability. We will be installing the latest version in this setup. Run the following in a teminal window that is local or SSH'd into your system that will host it...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -y apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -y software-properties-common wget&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -q -O - &amp;lt;nowiki&amp;gt;https://packages.grafana.com/gpg.key&amp;lt;/nowiki&amp;gt; | sudo apt-key add -&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add the repository to the list and install===&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://packages.grafana.com/enterprise/deb&amp;lt;/nowiki&amp;gt; stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/grafana.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install grafana-enterprise&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Start the Server===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl daemon-reload&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start grafana-server&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verify that its running properly===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl status grafana-server&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Now configure it to start at boot===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable grafana-server.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Package details===&lt;br /&gt;
&lt;br /&gt;
*Installs binary to &amp;lt;code&amp;gt;/usr/sbin/grafana-server&amp;lt;/code&amp;gt;&lt;br /&gt;
*Installs Init.d script to &amp;lt;code&amp;gt;/etc/init.d/grafana-server&amp;lt;/code&amp;gt;&lt;br /&gt;
*Creates default file (environment vars) to &amp;lt;code&amp;gt;/etc/default/grafana-server&amp;lt;/code&amp;gt;&lt;br /&gt;
*Installs configuration file to &amp;lt;code&amp;gt;/etc/grafana/grafana.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
*Installs systemd service (if systemd is available) name &amp;lt;code&amp;gt;grafana-server.service&amp;lt;/code&amp;gt;&lt;br /&gt;
*The default configuration sets the log file at &amp;lt;code&amp;gt;/var/log/grafana/grafana.log&amp;lt;/code&amp;gt;&lt;br /&gt;
*The default configuration specifies a SQLite3 db at &amp;lt;code&amp;gt;/var/lib/grafana/grafana.db&amp;lt;/code&amp;gt;&lt;br /&gt;
*Installs HTML/JS/CSS and other Grafana files at &amp;lt;code&amp;gt;/usr/share/grafana&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting Started with Grafana==&lt;br /&gt;
The home for this information is here:&lt;br /&gt;
&lt;br /&gt;
https://grafana.com/docs/grafana/latest/getting-started/getting-started/&lt;br /&gt;
&lt;br /&gt;
Open a browser to your new Grafana install, in my case its '''''192.168.1.139:3000'''''&lt;br /&gt;
&lt;br /&gt;
Default user is admin/admin and it will make you change the password&lt;br /&gt;
&lt;br /&gt;
The test install login is admin/Fiddlehead&lt;br /&gt;
&lt;br /&gt;
==Connecting with InfluxDB==&lt;br /&gt;
https://grafana.com/docs/grafana/latest/datasources/influxdb/&lt;br /&gt;
&lt;br /&gt;
Open up the GUI for Grafana on your host machine. Log in and click on  the little icon that looks like 4  boxes on the left tab. This is the '&amp;lt;nowiki/&amp;gt;'''Dashboards'''&amp;lt;nowiki/&amp;gt;' button. One of the options will be '&amp;lt;nowiki/&amp;gt;'''Data Sources'''&amp;lt;nowiki/&amp;gt;'. Click that and select ''''Add Data Source'''&amp;lt;nowiki/&amp;gt;'.&lt;br /&gt;
&lt;br /&gt;
Give the data source a meaningful name. I gave mine 'InfluxDB'. Select the query language 'InfluxQL'. &lt;br /&gt;
&lt;br /&gt;
My databases are not set up for authorization or credentials since this setup will not be allowed to go play in the streets so all auth is turned off.&lt;br /&gt;
&lt;br /&gt;
Scroll down to '&amp;lt;nowiki/&amp;gt;'''InfluxDB Details'''&amp;lt;nowiki/&amp;gt;'. Put in the name of your new database if this is the first one being added, or the name of the additional database you want in the system. Put in the username and password. Select the type of http access you want. The simple version is '&amp;lt;nowiki/&amp;gt;'''GET'''&amp;lt;nowiki/&amp;gt;'. If you are going to be doing long requests then select ''''POST'''&amp;lt;nowiki/&amp;gt;'. Hit 'Save and Test'. You should get a green bar that says you are connected to the proper database and all is well.&lt;br /&gt;
&lt;br /&gt;
== Adding in a data stream from Node Red ==&lt;br /&gt;
Presumably, you went through all this trouble so you could graph and map the giant amount of data you are creating in your IoT gear around your home. Open Node Red and go to '''Manage Pallete.''' Chances are you installed the v2.0 of Influx DB so you will need the ''''NodeRed - Contrib - Stackhero- InfluxDB - v2'''&amp;lt;nowiki/&amp;gt;' pallette. &lt;br /&gt;
&lt;br /&gt;
Utilizing that pallete........ Dunno yet&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=InfluxDB&amp;diff=1193</id>
		<title>InfluxDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=InfluxDB&amp;diff=1193"/>
		<updated>2020-12-01T18:39:32Z</updated>

		<summary type="html">&lt;p&gt;Grant: Created page with &amp;quot;==Installing InfluxDB on Mint 19.3 and 20==  ===Start by adding it to the repository=== &amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://repos.influxdata.com/debian&amp;lt;/nowiki&amp;gt; stretch stable&amp;quot; |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installing InfluxDB on Mint 19.3 and 20==&lt;br /&gt;
&lt;br /&gt;
===Start by adding it to the repository===&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://repos.influxdata.com/debian&amp;lt;/nowiki&amp;gt; stretch stable&amp;quot; | sudo tee /etc/apt/sources.list.d/influxdb.list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install GPG Key===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo curl -sL &amp;lt;nowiki&amp;gt;https://repos.influxdata.com/influxdb.key&amp;lt;/nowiki&amp;gt; | sudo apt-key add -&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Update the index and INSTALL===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -y influxdb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Start, Enable and Verify it is running===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start influxdb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable influxdb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status influxdb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting up a Database==&lt;br /&gt;
This will set up an initial database to start with. This gets really deep, really fast if you are not familiar with databases or the coding behind the system. The guide for this can be found at https://docs.influxdata.com/influxdb/v1.8/introduction/get-started/ Good luck with that.&lt;br /&gt;
&lt;br /&gt;
You need to access InfluxDB so open a terminal on the machine it is hosted on (or SSH into it if that is your thing)... type in the terminal&lt;br /&gt;
 influx&lt;br /&gt;
You should see a message like this:&lt;br /&gt;
&lt;br /&gt;
 $ influx -precision rfc3339&lt;br /&gt;
 Connected to &amp;lt;nowiki&amp;gt;http://localhost:8086&amp;lt;/nowiki&amp;gt; version 1.8.x&lt;br /&gt;
 InfluxDB shell 1.8.x&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
A fresh install of if InfluxDB has no useable databases outside of the default internal one. So type this at the prompt, replacing &amp;lt;db-name&amp;gt; with the name you want&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CREATE DATABASE &amp;lt;db-name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all went properly, you won't see any additional info, just the prompt again. Now let's make sure that the database is good just for giggles&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SHOW DATABASES&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see your database listed. If not, something borked and I can't help you with that. &lt;br /&gt;
&lt;br /&gt;
Are you planning to use this with Grafana? You will need to set up a datasource in Grafana then. &lt;br /&gt;
&lt;br /&gt;
==Using this with Grafana==&lt;br /&gt;
Set up your database in Grafana by going here... [[Grafana#Connecting with InfluxDB|Connecting with InfluxDB]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_ESP-M3_Everything!&amp;diff=1103</id>
		<title>IoT - ESP-M3 Everything!</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_ESP-M3_Everything!&amp;diff=1103"/>
		<updated>2020-11-05T21:35:38Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ESP-M3 Everything.png|none|thumb|alt=|This is the one that started it all...]]&lt;br /&gt;
&lt;br /&gt;
This board carries the [[ESP-M3]] module.&lt;br /&gt;
&lt;br /&gt;
[[:File:ESP-M3 Everything (KiCAD).tar.gz|The KiCAD files]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Esp-M3 Everything (gerbers).zip|The Gerbers]] (Yup... you can get your own boards pretty quick &amp;amp; cheap)&lt;br /&gt;
&lt;br /&gt;
NOTE: If using PCBWAY for production, the size for these boards needs to be input as 61mm x 36.6. If you use a slightly different (slightly rounder) number, they will charge you a dollar to change it. Just so you know.&lt;br /&gt;
&lt;br /&gt;
W00t!  Boards are here!&lt;br /&gt;
&lt;br /&gt;
[[File:ESP-M3 Everything (Physical)(Front).jpg|none|thumb]]&lt;br /&gt;
[[File:ESP-M3 Everything (Physical)(Back).jpg|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:WTF was I thinking.jpg|none|thumb|alt=|This is gonna be a little bit fiddly...]]&lt;br /&gt;
&lt;br /&gt;
[[File:Finger Crossing Time.jpg|none|thumb|alt=|Here's the first attempt at the truly fiddly bits...]]&lt;br /&gt;
&lt;br /&gt;
[[File:Ready, set.jpg|none|thumb|alt=|Shall we see if it lives?]]&lt;br /&gt;
&lt;br /&gt;
[[File:Nope.jpg|none|thumb|alt=|Nope :(]]&lt;br /&gt;
0.17V on Vcc seems wrong...&lt;br /&gt;
&lt;br /&gt;
Think I'll go ahead and suspect the connector isn't on there quite right.  Real bitch to hand solder.&lt;br /&gt;
&lt;br /&gt;
[[File:Semi-w00t.jpg|none|thumb|alt=|Semi-w00t...]]&lt;br /&gt;
Feeding it 5V directly works just fine...&lt;br /&gt;
&lt;br /&gt;
[[File:Full-w00t.jpg|none|thumb|alt=|Full-w00t...]]&lt;br /&gt;
Just had to add flux &amp;amp; stick the tip of my iron under there to carefully reflow pin 1 of the USB connector.&lt;br /&gt;
&lt;br /&gt;
[[File:Teeny Parts - Non-teeny Tip.jpg|none|thumb|alt=|It '''IS''', in fact, possible to do SMT work with normal gear...]]&lt;br /&gt;
&lt;br /&gt;
Notice that I had to take that picture with lots of shade so the LED would show up...  :(&lt;br /&gt;
&lt;br /&gt;
(10K at R2 may be a little bit of over-reaction to typical Chinese indicator LEDs...)&lt;br /&gt;
[[File:Proper Power LED Brightness.jpg|none|thumb|alt=|Much better.  4K7 it is...]]&lt;br /&gt;
In fact, I tried 2K2 on the second board.  This is also good...&lt;br /&gt;
&lt;br /&gt;
[[File:Chinese vs Good.jpg|none|thumb|alt=|Comparing it to a typical Chinese power LED.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Ready for Next test.jpg|none|thumb|alt=|Ready for the next test.]]&lt;br /&gt;
&lt;br /&gt;
At this point, the board is fully populated.&lt;br /&gt;
&lt;br /&gt;
[[File:It Lives!!!.jpg|none|thumb|alt=|'''It's Alive!!!''']]&lt;br /&gt;
&lt;br /&gt;
Not enough hands to catch the bootup blink of the M3 in the picture, but it did flash.&lt;br /&gt;
[[File:Pogo Pins.jpg|none|thumb]]&lt;br /&gt;
At this point, tomorrow evenings project is to mount this with a CH340 or CP2102 module to a protoboard &amp;amp; finish testing.&lt;br /&gt;
&lt;br /&gt;
Well... Off by a day, but I built [[IoT - ESP-Everything Programming adaptor|the programming adaptor]].&lt;br /&gt;
&lt;br /&gt;
[[File:Adaptor Usage.jpg|none|thumb|alt=|And tested the board using esptool.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Success.png|none|thumb|alt=|'''Yee Haw!'''  Success!]]Tho...  I suppose it'd be an idea to actually flash something to it &amp;amp; fully prove the point.&lt;br /&gt;
&lt;br /&gt;
So:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;esptool.py erase_flash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;esptool.py write_flash -fs 1MB -fm dout 0x0 tasmota.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and...&lt;br /&gt;
[[File:Tasmotized.png|none|thumb|Yup...  It's Tasmota]]&lt;br /&gt;
&lt;br /&gt;
[[File:Updated.png|none|thumb|Even managed an OTA update with no drama.]]At this point...&lt;br /&gt;
&lt;br /&gt;
I do believe the appropriate expression is:&lt;br /&gt;
&lt;br /&gt;
'''''&amp;lt;big&amp;gt;YIPPEE!&amp;lt;/big&amp;gt;'''''&lt;br /&gt;
[[File:Populated M3 Testbed.jpg|none|thumb|Fully populated as a testbed]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=AutomationServer_-_TasmoAdmin&amp;diff=842</id>
		<title>AutomationServer - TasmoAdmin</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=AutomationServer_-_TasmoAdmin&amp;diff=842"/>
		<updated>2020-09-12T08:08:43Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://github.com/reloxx13/TasmoAdmin TasmoAdmin]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
There are a couple items in the instructions for installing under Linux that are just plain wrong when running an up-to-date Mint-based server.  But now you can just copy-pasta from this page...  :)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install apache2 php libapache2-mod-php php7.2-curl php7.2-zip git vim&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo git clone &amp;lt;nowiki&amp;gt;https://github.com/reloxx13/TasmoAdmin.git&amp;lt;/nowiki&amp;gt; /var/www/tasmoadmin&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo chown -R www-data:www-data /var/www/tasmoadmin&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo chmod 777 /var/www/tasmoadmin/tasmoadmin/tmp &amp;amp;&amp;amp; sudo chmod 777 /var/www/tasmoadmin/tasmoadmin/data&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rm /etc/php/7.2/apache2/conf.d/10-opcache.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/apache2/sites-available/tasmoadmin.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apacheconf&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:9999&amp;gt;&lt;br /&gt;
	ServerName tasmoadmin&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /var/www/tasmoadmin/tasmoadmin&lt;br /&gt;
	&amp;lt;Directory /var/www/tasmoadmin/tasmoadmin&amp;gt;&lt;br /&gt;
	AllowOverride All&lt;br /&gt;
	Order allow,deny&lt;br /&gt;
	allow from all&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
	ErrorLog /var/log/apache2/error.log&lt;br /&gt;
	LogLevel warn&lt;br /&gt;
	CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
	ServerSignature On&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/apache2/ports.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IN &amp;quot;Listen 9999&amp;quot; to the ports.conf file like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apacheconf&amp;quot;&amp;gt;&lt;br /&gt;
# If you just change the port or add more ports here, you will likely also&lt;br /&gt;
# have to change the VirtualHost statement in&lt;br /&gt;
# /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&lt;br /&gt;
Listen 80&lt;br /&gt;
Listen 9999&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
	Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
	Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo a2ensite tasmoadmin&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo a2enmod rewrite&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service apache2 restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
===Problem===&lt;br /&gt;
On opening the start page all i was presented with was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;array(3) { [0]=&amp;gt; array(7) { [&amp;quot;file&amp;quot;]=&amp;gt; string(50)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;string(12) &amp;quot;include_once&amp;quot; } } could not read MyConfig.json in read&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Screen full of gibberish...)&lt;br /&gt;
&lt;br /&gt;
====Fix====&lt;br /&gt;
SSH into the server &amp;amp; check the '''MyConfig.json''' file:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;ls -l /var/www/tasmoadmin/tasmoadmin/data/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it is zero-length, delete it.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rm /var/www/tasmoadmin/tasmoadmin/data/MyConfig.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refresh the webpage.&lt;br /&gt;
[[Category:IoT]]&lt;br /&gt;
[[Category:AutomationServer]]&lt;br /&gt;
[[Category:TasmOTA]]&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Install_EVEN_NEWER&amp;diff=834</id>
		<title>WikiServer - Install EVEN NEWER</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Install_EVEN_NEWER&amp;diff=834"/>
		<updated>2020-08-15T08:38:08Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:DarkViolet&amp;quot;&amp;gt;'''NEW Version!'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Now with more VirtualHosts...'''&lt;br /&gt;
&lt;br /&gt;
'''And an attempt at running a Development release'''&lt;br /&gt;
&lt;br /&gt;
*Proven on Mint 20 ... (Gets MySQL 8.0)&lt;br /&gt;
*Proven on SparkyLinux 5.11 ... (You'll have to [https://tecadmin.net/install-mysql-server-on-debian9-stretch/ fix the missing MySQL] thing &amp;amp; install vim first)&lt;br /&gt;
**[[Getting MySQL onto SparkyLinux|Getting MySQL onto SparkyLinux]]&lt;br /&gt;
&lt;br /&gt;
===Install the LAMP Stack===&lt;br /&gt;
&lt;br /&gt;
[[WebServer - Basic LAMP Stack Install|Basic LAMP Stack Install]]&lt;br /&gt;
&lt;br /&gt;
===Install MediaWiki===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/mediawiki/1.35/mediawiki-1.35.0-rc.1.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xvzf mediawiki-1.35.0-rc.1.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mkdir /var/www/wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mkdir /var/www/labnotes&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo cp -r mediawiki-1.35.0-rc.1/* /var/www/wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo cp -r mediawiki-1.35.0-rc.1/* /var/www/labnotes&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CREATE DATABASE my_wiki;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON my_wiki.* TO 'someone'@'localhost';&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 CREATE DATABASE my_notes;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON my_notes.* TO 'someone'@'localhost';&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 EXIT;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/php/7.4/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
**(this may be in a slightly different location depending on version of php installed...)&lt;br /&gt;
**increase &amp;lt;code&amp;gt;upload_max_filesize&amp;lt;/code&amp;gt; to 200M&lt;br /&gt;
*Fix upload directories:&lt;br /&gt;
**&amp;lt;code&amp;gt;sudo chmod -R ugo+rwX /var/www/wiki/images&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;sudo chmod -R ugo+rwX /var/www/labnotes/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure your webserver with [[WebServer - Name-based Virtual Host Support|VirtualHosts]] for the Wiki &amp;amp; LabNotes&lt;br /&gt;
&lt;br /&gt;
*Wiki&lt;br /&gt;
**&amp;lt;code&amp;gt;ServerName WikiServer.Domain.TLD&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;DocumentRoot &amp;quot;/var/www/wiki&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*LabNotes&lt;br /&gt;
**&amp;lt;code&amp;gt;ServerName LabNotesServer.Domain.TLD&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;DocumentRoot &amp;quot;/var/www/labnotes&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browse to '''&amp;lt;nowiki&amp;gt;http://WikiServer.Domain.TLD/&amp;lt;/nowiki&amp;gt;''' &amp;amp; follow the steps presented.&lt;br /&gt;
&lt;br /&gt;
Set it as '''Authorised editors only'''.&lt;br /&gt;
&lt;br /&gt;
Browse to '''&amp;lt;nowiki&amp;gt;http://LabNotesServer.Domain.TLD/&amp;lt;/nowiki&amp;gt;''' &amp;amp; follow the steps presented.&lt;br /&gt;
&lt;br /&gt;
Set as '''Private Wiki'''&lt;br /&gt;
&lt;br /&gt;
===Adding another Wiki to an existing Wiki Server===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mkdir /var/www/anudderwiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo cp -r mediawiki-*/* /var/www/anudderwiki&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;CREATE DATABASE anudder_wiki;&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON anudder_wiki.* TO 'someone'@'localhost';&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;EXIT;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo chmod -R ugo+rwX /var/www/anudderwiki/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure your webserver with VirtualHosts for the new Wiki&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;ServerName AnudderWikiServer.Domain.TLD&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;DocumentRoot &amp;quot;/var/www/anudderwiki&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browse to '''&amp;lt;nowiki&amp;gt;http://AnudderWikiServer.Domain.TLD/&amp;lt;/nowiki&amp;gt;''' &amp;amp; follow the steps presented.&lt;br /&gt;
&lt;br /&gt;
Set as '''Authorised editors only''' or '''Private Wiki'''&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
'''Note:''' With MySQL 8, there is some possibility that it will default to the wrong authentication method.&lt;br /&gt;
&lt;br /&gt;
*If Mediawiki has problems connecting &amp;amp; gives you &amp;quot;'''The server requested authentication method unknown to the client.'''&amp;quot; as part of the error message, sign back into MySQL &amp;amp; adjust the user being assigned in the wiki install:&lt;br /&gt;
**&amp;lt;code&amp;gt;sudo mysql -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;ALTER USER 'someone'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=788</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=788"/>
		<updated>2020-08-02T23:27:34Z</updated>

		<summary type="html">&lt;p&gt;Grant: Undo revision 787 by Grant (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
 #       'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
        'forwardCookies' =&amp;gt; true&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#*For version 1.34&lt;br /&gt;
#**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*For version 1.35&lt;br /&gt;
#**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-*.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=787</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=787"/>
		<updated>2020-08-02T23:25:44Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#*For version 1.34&lt;br /&gt;
#**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*For version 1.35&lt;br /&gt;
#**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-*.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=784</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=784"/>
		<updated>2020-08-02T06:38:30Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Enabling VisualEditor on a Private Wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
 #       'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
        'forwardCookies' =&amp;gt; true&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#*For version 1.34&lt;br /&gt;
#**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*For version 1.35&lt;br /&gt;
#**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-*.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=783</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=783"/>
		<updated>2020-08-02T06:36:06Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Enabling VisualEditor on a Private Wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
 #       'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
        'forwardCookies' =&amp;gt; true&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#*For version 1.34&lt;br /&gt;
#**&amp;lt;code&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
#*For version 1.35&lt;br /&gt;
#**&amp;lt;code&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#***On MediaWiki 1.34:&lt;br /&gt;
#***&amp;lt;code&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-*.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=782</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=782"/>
		<updated>2020-08-02T06:33:37Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
 #       'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
        'forwardCookies' =&amp;gt; true&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#*For version 1.35&lt;br /&gt;
#**&amp;lt;code&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
#*For version 1.34&lt;br /&gt;
#**&amp;lt;code&amp;gt;wget https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#***On MediaWiki 1.34:&lt;br /&gt;
#***&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-*.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=781</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=781"/>
		<updated>2020-08-02T06:31:22Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
 #       'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
        'forwardCookies' =&amp;gt; true&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#**&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/nowiki&amp;gt;  for version 1.35&amp;lt;/code&amp;gt;&lt;br /&gt;
#**&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#***On MediaWiki 1.34:&lt;br /&gt;
#***&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_34-68393b9.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-*.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=779</id>
		<title>WikiServer - Getting VisualEditor working properly</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Getting_VisualEditor_working_properly&amp;diff=779"/>
		<updated>2020-08-02T03:41:46Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Multiple Wiki Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;[[mediawikiwiki:Parsing/Parser_Unification|'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''&amp;lt;big&amp;gt;  Apparently, This is being rolled into WikiMedia 1.35 by default.  '''w00t!!!'''&amp;lt;/big&amp;gt;]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing VisualEditor (MediaWiki 1.34 or earlier...)==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#e74c3c&amp;quot;&amp;gt;'''&amp;lt;big&amp;gt;Note:&amp;lt;/big&amp;gt;'''  This is still a work in progress...  Multi-Wiki is a bit of a fail.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[mediawikiwiki:Extension:VisualEditor|Extension:VisualEditor]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''VisualEditor does not currently work with private wikis.  Supposedly, there are workarounds, but more research is needed.'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&lt;br /&gt;
*Parsoid 0.11.0&lt;br /&gt;
*Node.js 12&lt;br /&gt;
&lt;br /&gt;
====Parsoid Install====&lt;br /&gt;
https://www.mediawiki.org/wiki/Parsoid/Setup&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install dirmngr&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;echo &amp;quot;deb &amp;lt;nowiki&amp;gt;https://releases.wikimedia.org/debian&amp;lt;/nowiki&amp;gt; jessie-mediawiki main&amp;quot; | sudo tee /etc/apt/sources.list.d/parsoid.list&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt install apt-transport-https&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install parsoid&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''''This will require further fuckery for the multi-wiki setup with private wiki!'''''&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====VisualEditor Install====&lt;br /&gt;
&lt;br /&gt;
Find the current version via: [[mediawikiwiki:Special:ExtensionDistributor/VisualEditor|Download MediaWiki extension]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**'''This URL will change!'''&lt;br /&gt;
*&amp;lt;code&amp;gt;tar -xzf VisualEditor-REL1_34-74116a7.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo rsync -av VisualEditor /var/www/html/wiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        // URL to the Parsoid instance&lt;br /&gt;
        // Use port 8142 if you use the Debian package&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        // Parsoid &amp;quot;domain&amp;quot;, see below (optional)&lt;br /&gt;
        'domain' =&amp;gt; 'localhost',&lt;br /&gt;
        // Parsoid &amp;quot;prefix&amp;quot;, see below (optional)&lt;br /&gt;
        'prefix' =&amp;gt; 'localhost'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
===Multiple Wiki Configuration===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Repeat the parts above where stuff is done in the /wiki/ folder&lt;br /&gt;
&lt;br /&gt;
(but use the folder for your second wiki... duh...)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /etc/mediawiki/parsoid/config.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mwApis:&lt;br /&gt;
     - # This is the only required parameter,&lt;br /&gt;
       # the URL of you MediaWiki API endpoint.&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'wiki'&lt;br /&gt;
       prefix: 'wiki'&lt;br /&gt;
     - # and another MediaWiki&lt;br /&gt;
       uri: '&amp;lt;nowiki&amp;gt;http://labnotes.tinkernow.net/api.php'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
       domain: 'notes'&lt;br /&gt;
       prefix: 'notes'&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo service parsoid restart&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
 #       'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://wiki.tinkernow.net:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'wiki',&lt;br /&gt;
        'prefix' =&amp;gt; 'wiki'&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/html/notes/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 wfLoadExtension( 'VisualEditor' );&lt;br /&gt;
 &lt;br /&gt;
 // Enable by default for everybody&lt;br /&gt;
 $wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 // Optional: Set VisualEditor as the default for anonymous users&lt;br /&gt;
 // otherwise they will have to switch to VE&lt;br /&gt;
 // $wgDefaultUserOptions['visualeditor-editor'] = &amp;quot;visualeditor&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 // Don't allow users to disable it&lt;br /&gt;
 $wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
 &lt;br /&gt;
 // OPTIONAL: Enable VisualEditor's experimental code features&lt;br /&gt;
 #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;&lt;br /&gt;
 &lt;br /&gt;
 #$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;&lt;br /&gt;
 &lt;br /&gt;
 $wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
        'url' =&amp;gt; '&amp;lt;nowiki&amp;gt;http://localhost:8142'&amp;lt;/nowiki&amp;gt;,&lt;br /&gt;
        'domain' =&amp;gt; 'notes',&lt;br /&gt;
        'prefix' =&amp;gt; 'notes',&lt;br /&gt;
        'forwardCookies' =&amp;gt; true&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
==VisualEditor on MediaWiki 1.35 or newer==&lt;br /&gt;
Why yes...  It '''IS''' rolled in.&lt;br /&gt;
&lt;br /&gt;
Either enable it during setup or add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;WfLoadExtension( 'VisualEditor' );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the list in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Enabling VisualEditor on a Private Wiki===&lt;br /&gt;
&lt;br /&gt;
#Install the [[mediawikiwiki:Extension:NetworkAuth|NetworkAuth extension]]&lt;br /&gt;
#*(details coming...)&lt;br /&gt;
#*Download the extension (do this ON the server...):&lt;br /&gt;
#**&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://extdist.wmflabs.org/dist/extensions/NetworkAuth-REL1_35-9f2e881.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(You may need to find the latest or possibly correct version at some point...)&lt;br /&gt;
#*Copy it into your Private Wiki:&lt;br /&gt;
#**&amp;lt;code&amp;gt;tar -xzf NetworkAuth-REL1_35-9f2e881.tar.gz -C /var/www/privatewiki/extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
#**(do adjust for the ACTUAL root of your wiki...)&lt;br /&gt;
#Create a user named &amp;quot;'''parsoid'''&amp;quot; on your wiki.&lt;br /&gt;
#Add the following to &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; on your Private Wiki:&lt;br /&gt;
#*replace '''127.0.0.1''' with the actual IP address of your Wiki Server&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/NetworkAuth/NetworkAuth.php&amp;quot;;&lt;br /&gt;
  $wgNetworkAuthUsers[] = [&lt;br /&gt;
         'iprange' =&amp;gt; [ '127.0.0.1' ],&lt;br /&gt;
         'user'    =&amp;gt; 'parsoid'&lt;br /&gt;
  ];&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;'''&amp;lt;big&amp;gt;enjoy&amp;lt;/big&amp;gt;'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=760</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=760"/>
		<updated>2020-07-28T07:46:36Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
Internal links will always open in parent window. If you want to change that, follow the next setup instruction...&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]], [[or this one]], [[this one either]]&amp;lt;/span&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=759</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=759"/>
		<updated>2020-07-28T07:45:13Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Open external links in new window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
Internal links will always open in parent window. If you want to change that, follow the next setup instruction...&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=758</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=758"/>
		<updated>2020-07-28T07:44:20Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Open external links in new window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
Internal links will always open in parent window. If you want to change that, follow the next setup instruction...&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=757</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=757"/>
		<updated>2020-07-28T07:42:40Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=756</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=756"/>
		<updated>2020-07-28T07:41:44Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=755</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=755"/>
		<updated>2020-07-28T07:41:21Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
 [[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=754</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=754"/>
		<updated>2020-07-28T07:40:57Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering. Place the following below that:&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all INTERNAL links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=753</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=753"/>
		<updated>2020-07-28T07:38:23Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
The above will default all local links to open in a new window unless specified like below...In the wiki:&lt;br /&gt;
&lt;br /&gt;
[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can change the the default behavior by changing '_self' to '_blank' or vice-versa.&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=752</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=752"/>
		<updated>2020-07-28T07:33:44Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
In the wiki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[This link]] will open in a new window, but not &amp;lt;span class=&amp;quot;foo&amp;quot;&amp;gt;[[this one]]&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=751</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=751"/>
		<updated>2020-07-28T07:33:18Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file below the default installed code:&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
This defaults all EXTERNAL links to a new page, all internal links&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=750</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=750"/>
		<updated>2020-07-28T07:29:06Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
This sets up the extension and creates classes for filtering&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=749</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=749"/>
		<updated>2020-07-28T07:28:08Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
If you would like to have some links open in the parent window ( '_self' ) and some open in a new window ( '_blank' ), you can identify a link as part of a group (foo or bar in this case) and tell the wiki how the group is to be treated.&lt;br /&gt;
&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=748</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=748"/>
		<updated>2020-07-28T07:25:09Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=747</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=747"/>
		<updated>2020-07-28T07:24:35Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
 $wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
 $wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
 $wgLinkTargetDefault = '_self';&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=746</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=746"/>
		<updated>2020-07-28T07:23:18Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Assign how links are opened by 'groups' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
$wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
$wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
&lt;br /&gt;
$wgLinkTargetDefault = '_self';&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=745</id>
		<title>WikiServer - Configuring the Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=WikiServer_-_Configuring_the_Wiki&amp;diff=745"/>
		<updated>2020-07-28T07:22:45Z</updated>

		<summary type="html">&lt;p&gt;Grant: /* Open external links in new window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Little snippets of configuration to add to LocalSettings.php...&lt;br /&gt;
&lt;br /&gt;
To add any of them:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo vim /var/www/wiki/LocalSettings.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uploadable File Types==&lt;br /&gt;
search for $wgFileExtensions&lt;br /&gt;
&lt;br /&gt;
If you don't find it, you can add it.&lt;br /&gt;
&lt;br /&gt;
on my wiki, it looks like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Uploadable File Types&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#########################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf', 'epub', 'ino', 'c', 'cpp', 'h', 'zip', 'gz', 'mp3', 'txt' );&lt;br /&gt;
&lt;br /&gt;
You likely don't want ino, c, cpp, h&lt;br /&gt;
&lt;br /&gt;
==Open external links in new window==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # Open external links in new window.&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 $wgExternalLinkTarget = '_blank';&lt;br /&gt;
&lt;br /&gt;
==Assign how links are opened by 'groups'==&lt;br /&gt;
Install [[mediawikiwiki:Extension:LinkTarget|Extension:LinkTarget]] by first [[mediawikiwiki:Special:ExtensionDistributor/LinkTarget|downloading]] the file and pasting it into your Extensions folder of your wiki install. Then paste the following into your LocalSettings.php file:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;require_once &amp;quot;$IP/extensions/LinkTarget/LinkTarget.php&amp;quot;;&lt;br /&gt;
$wgLinkTargetParentClasses = ' /*ENTER SOME CLASSES HERE*/ ';&lt;br /&gt;
&lt;br /&gt;
$wgExternalLinkTarget = '_blank';&lt;br /&gt;
$wgLinkTargetParentClasses = array( 'foo', 'bar' );&lt;br /&gt;
$wgLinkTargetDefault = '_self';&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==InterWiki Links==&lt;br /&gt;
&lt;br /&gt;
 #########################################&lt;br /&gt;
 # InterWiki configuration&lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 // To grant sysops permissions to edit interwiki data&lt;br /&gt;
 $wgGroupPermissions['sysop']['interwiki'] = true;&lt;br /&gt;
 &lt;br /&gt;
 // To create a new user group that may edit interwiki data&lt;br /&gt;
 // (bureaucrats can add users to this group)&lt;br /&gt;
 # $wgGroupPermissions['developer']['interwiki'] = true; // delete the comment indicator # as appropriate&lt;br /&gt;
See [[WikiServer - InterWiki Linking|InterWiki Linking]] for a little bit more detail&lt;br /&gt;
&lt;br /&gt;
==There was gonna be a VisualEditor thing here, but wait a month... May be a moot point...==&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=Ramp&amp;diff=652</id>
		<title>Ramp</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=Ramp&amp;diff=652"/>
		<updated>2020-07-17T05:45:27Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A ramp is an angled surface...&lt;br /&gt;
&lt;br /&gt;
This page is a Ramp Page...&lt;br /&gt;
&lt;br /&gt;
Yer welcome Grant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Thank you. I was wondering how I'd get over it.&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=Ramp&amp;diff=651</id>
		<title>Ramp</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=Ramp&amp;diff=651"/>
		<updated>2020-07-17T05:13:22Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A ramp is an angled surface...&lt;br /&gt;
&lt;br /&gt;
This page is a Ramp Page...&lt;br /&gt;
&lt;br /&gt;
Yer welcome Grant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;b&amp;gt;Thank you. I was wondering how I'd get over it.&amp;lt;/b&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=SSL_-_ESXi&amp;diff=510</id>
		<title>SSL - ESXi</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=SSL_-_ESXi&amp;diff=510"/>
		<updated>2020-07-02T09:13:13Z</updated>

		<summary type="html">&lt;p&gt;Grant: removed an &amp;quot;either&amp;quot; from the sentence as there is only one in this instance&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installing manual certs on an ESXi server==&lt;br /&gt;
PIKEDOM.COM has some very good [https://pikedom.com/replace-self-signed-certificate-on-esxi-6-7-host/ instructions].&lt;br /&gt;
&lt;br /&gt;
Something to know if you got your certs from certbot:&lt;br /&gt;
&lt;br /&gt;
*The file you're replacing &amp;lt;code&amp;gt;rui.crt&amp;lt;/code&amp;gt; with is either &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt; (depending on whether you've set up with one or more than one domain in your certs.&lt;br /&gt;
*The file you're replacing &amp;lt;code&amp;gt;rui.key&amp;lt;/code&amp;gt; with is &amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Both of the files from certbot may have a number attached to the end of the filename itself.&lt;br /&gt;
&lt;br /&gt;
So...&lt;br /&gt;
&lt;br /&gt;
SSH into the server...&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;cd /etc/vmware/ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;mv rui.crt orig.rui.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;mv rui.key orig.rui.key&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;vi rui.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
**Paste in the content of &amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;vi rui.key&amp;lt;/code&amp;gt;&lt;br /&gt;
**Paste in the content of &amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using SCP to install the certs==&lt;br /&gt;
You should be able directly install certs on your ESXi server thanks to vmWares bad habit of allowing SSH as root...&lt;br /&gt;
&lt;br /&gt;
'''''&amp;lt;big&amp;gt;&amp;lt;u&amp;gt;THIS HAS NOT YET BEEN FULLY TESTED!&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;'''''&lt;br /&gt;
&lt;br /&gt;
'''You have been warned.'''&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;scp /etc/letsencrypt/live/NAME.DOMAIN.TLD/fullchain.pem root@NAME.DOMAIN.TLD:/etc/vmware/ssl/rui.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;scp /etc/letsencrypt/live/NAME.DOMAIN.TLD/privkey.pem root@NAME.DOMAIN.TLD:/etc/vmware/ssl/rui.key&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;ssh root@NAME.DOMAIN.TLD reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course, you'll replace '''NAME.DOMAIN.TLD''' with the actual name of your server...&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=OpenVPN_Autoconnect_-_Using_NordVPN&amp;diff=70</id>
		<title>OpenVPN Autoconnect - Using NordVPN</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=OpenVPN_Autoconnect_-_Using_NordVPN&amp;diff=70"/>
		<updated>2020-06-04T04:55:29Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up NordVPN in Linux - Mint specifically ==&lt;br /&gt;
This is the basics, there is more info at the NordVPN site, [https://support.nordvpn.com/Connectivity/Linux/1325531132/Installing-and-using-NordVPN-on-Debian-Ubuntu-Elementary-OS-and-Linux-Mint.htm Installing in Debian]&lt;br /&gt;
To install NordVPN to run in the background of your Linux install, you can either go to their [https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb download page] OR follow the following steps:&lt;br /&gt;
&lt;br /&gt;
1. Open a terminal window and download the appropriate file-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo wget -qnc &amp;lt;nowiki&amp;gt;https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Install the package you just downloaded-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo dpkg -i /pathToFile/nordvpn-release_1.0.0_all.deb&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure to replace /pathToFile/ with the path to your Downloads folder (or other location where the NordVPN file was downloaded).&lt;br /&gt;
&lt;br /&gt;
Example: sudo dpkg -i ~/Downloads/nordvpn-release_1.0.0_all.deb&lt;br /&gt;
&lt;br /&gt;
You will be asked to enter your root password. Enter it, wait for the package installation to finish, and proceed to the next step.&lt;br /&gt;
&lt;br /&gt;
3. Update the package list-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo apt update (or sudo apt-get update)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install the NordVPN app-&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=OpenVPN_Autoconnect_-_Using_NordVPN&amp;diff=69</id>
		<title>OpenVPN Autoconnect - Using NordVPN</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=OpenVPN_Autoconnect_-_Using_NordVPN&amp;diff=69"/>
		<updated>2020-06-04T04:54:36Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up NordVPN in Linux - Mint specifically ==&lt;br /&gt;
This is the basics, there is more info at the NordVPN site, [https://support.nordvpn.com/Connectivity/Linux/1325531132/Installing-and-using-NordVPN-on-Debian-Ubuntu-Elementary-OS-and-Linux-Mint.htm Installing in Debian]&lt;br /&gt;
To install NordVPN to run in the background of your Linux install, you can either go to their [https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb download page] OR follow the following steps:&lt;br /&gt;
&lt;br /&gt;
1. Open a terminal window and download the appropriate file-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo wget -qnc &amp;lt;nowiki&amp;gt;https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Install the package you just downloaded-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;nowiki&amp;gt;sudo dpkg -i /pathToFile/nordvpn-release_1.0.0_all.deb&amp;lt;/nowiki&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure to replace /pathToFile/ with the path to your Downloads folder (or other location where the NordVPN file was downloaded).&lt;br /&gt;
&lt;br /&gt;
Example: sudo dpkg -i ~/Downloads/nordvpn-release_1.0.0_all.deb&lt;br /&gt;
&lt;br /&gt;
You will be asked to enter your root password. Enter it, wait for the package installation to finish, and proceed to the next step.&lt;br /&gt;
&lt;br /&gt;
3. Update the package list-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;nowiki&amp;gt;sudo apt update (or sudo apt-get update)&amp;lt;/nowiki&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install the NordVPN app-&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=OpenVPN_Autoconnect_-_Using_NordVPN&amp;diff=68</id>
		<title>OpenVPN Autoconnect - Using NordVPN</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=OpenVPN_Autoconnect_-_Using_NordVPN&amp;diff=68"/>
		<updated>2020-06-04T04:54:15Z</updated>

		<summary type="html">&lt;p&gt;Grant: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up NordVPN in Linux - Mint specifically ==&lt;br /&gt;
This is the basics, there is more info at the NordVPN site, [https://support.nordvpn.com/Connectivity/Linux/1325531132/Installing-and-using-NordVPN-on-Debian-Ubuntu-Elementary-OS-and-Linux-Mint.htm Installing in Debian]&lt;br /&gt;
To install NordVPN to run in the background of your Linux install, you can either go to their [https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb download page] OR follow the following steps:&lt;br /&gt;
&lt;br /&gt;
1. Open a terminal window and download the appropriate file-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo wget -qnc &amp;lt;nowiki&amp;gt;https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Install the package you just downloaded-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;nowiki&amp;gt;sudo dpkg -i /pathToFile/nordvpn-release_1.0.0_all.deb&amp;lt;/nowiki&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure to replace /pathToFile/ with the path to your Downloads folder (or other location where the NordVPN file was downloaded).&lt;br /&gt;
&lt;br /&gt;
Example: sudo dpkg -i ~/Downloads/nordvpn-release_1.0.0_all.deb&lt;br /&gt;
&lt;br /&gt;
You will be asked to enter your root password. Enter it, wait for the package installation to finish, and proceed to the next step.&lt;br /&gt;
&lt;br /&gt;
3. Update the package list-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;nowiki&amp;gt;sudo apt update (or sudo apt-get update)&amp;lt;/nowiki&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install the NordVPN app-&lt;/div&gt;</summary>
		<author><name>Grant</name></author>
		
	</entry>
</feed>