server config progress

main
iOS 3 years ago
parent f61c9d669d
commit aae243a515

@ -95,6 +95,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.13942430628338096,
"scale": 0.18361961954247044,
"close": true
}

@ -2739,6 +2739,17 @@ function vallidatePublishFrontmatter(frontMatter) {
return true;
}
// constants.ts
var seedling = `<g style="pointer-events:all"><title style="pointer-events: none" opacity="0.33">Layer 1</title><g id="hair" style="pointer-events: none" opacity="0.33"></g><g id="skin" style="pointer-events: none" opacity="0.33"></g><g id="skin-shadow" style="pointer-events: none" opacity="0.33"></g><g id="line"><path fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M47.71119,35.9247" id="svg_3"></path><polyline fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" points="49.813106536865234,93.05191133916378 49.813106536865234,69.57996462285519 40.03312683105469,26.548054680228233 " id="svg_4"></polyline><line x1="49.81311" x2="59.59309" y1="69.57996" y2="50.02" fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" id="svg_5"></line><path fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M27.99666,14.21103C35.9517,16.94766 39.92393,26.36911 39.92393,26.36911S30.99696,31.3526 23.04075,28.61655S11.11348,16.45847 11.11348,16.45847S20.04456,11.4789 27.99666,14.21103z" id="svg_6"></path><path fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M76.46266698455811,45.61669603088379 C84.67706698455811,47.43146603088379 89.6945869845581,56.34024603088379 89.6945869845581,56.34024603088379 S81.3917769845581,62.30603603088379 73.17639698455811,60.492046030883785 S59.94447698455811,49.768496030883796 59.94447698455811,49.768496030883796 S68.2515869845581,43.80622603088379 76.46266698455811,45.61669603088379 z" id="svg_7"></path></g></g>`;
var excaliDrawBundle = `<style>
.container {font-family: sans-serif; text-align: center;}
.button-wrapper button {z-index: 1;height: 40px; width: 100px; margin: 10px;padding: 5px;}
.excalidraw .App-menu_top .buttonList { display: flex;}
.excalidraw-wrapper { height: 800px; margin: 50px; position: relative;}
:root[dir="ltr"] .excalidraw .layer-ui__wrapper .zen-mode-transition.App-menu_bottom--transition-left {transform: none;}
</style><script src="https://unpkg.com/react@17/umd/react.production.min.js"><\/script><script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"><\/script><script type="text/javascript" src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.production.min.js"><\/script>`;
var excalidraw = (excaliDrawJson, drawingId) => `<div id="${drawingId}"></div><script>(function(){const InitialData=${excaliDrawJson};InitialData.scrollToContent=true;App=()=>{const e=React.useRef(null),t=React.useRef(null),[n,i]=React.useState({width:void 0,height:void 0});return React.useEffect(()=>{i({width:t.current.getBoundingClientRect().width,height:t.current.getBoundingClientRect().height});const e=()=>{i({width:t.current.getBoundingClientRect().width,height:t.current.getBoundingClientRect().height})};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[t]),React.createElement(React.Fragment,null,React.createElement("div",{className:"excalidraw-wrapper",ref:t},React.createElement(Excalidraw.default,{ref:e,width:n.width,height:n.height,initialData:InitialData,viewModeEnabled:!0,zenModeEnabled:!0,gridModeEnabled:!1})))},excalidrawWrapper=document.getElementById("${drawingId}");ReactDOM.render(React.createElement(App),excalidrawWrapper);})();<\/script>`;
// Publisher.ts
var Publisher = class {
constructor(vault, metadataCache, settings) {
@ -2762,6 +2773,51 @@ var Publisher = class {
return filesToPublish;
});
}
delete(vaultFilePath) {
return __async(this, null, function* () {
if (!this.settings.githubRepo) {
new import_obsidian2.Notice("Config error: You need to define a GitHub repo in the plugin settings");
throw {};
}
if (!this.settings.githubUserName) {
new import_obsidian2.Notice("Config error: You need to define a GitHub Username in the plugin settings");
throw {};
}
if (!this.settings.githubToken) {
new import_obsidian2.Notice("Config error: You need to define a GitHub Token in the plugin settings");
throw {};
}
const octokit = new Octokit({ auth: this.settings.githubToken });
const path = `src/site/notes/${vaultFilePath}`;
const payload = {
owner: this.settings.githubUserName,
repo: this.settings.githubRepo,
path,
message: `Delete note ${vaultFilePath}`,
sha: ""
};
try {
const response = yield octokit.request("GET /repos/{owner}/{repo}/contents/{path}", {
owner: this.settings.githubUserName,
repo: this.settings.githubRepo,
path
});
if (response.status === 200 && response.data.type === "file") {
payload.sha = response.data.sha;
}
} catch (e) {
console.log(e);
return false;
}
try {
const response = yield octokit.request("DELETE /repos/{owner}/{repo}/contents/{path}", payload);
} catch (e) {
console.log(e);
return false;
}
return true;
});
}
publish(file) {
return __async(this, null, function* () {
if (!vallidatePublishFrontmatter(this.metadataCache.getCache(file.path).frontmatter)) {
@ -2831,35 +2887,34 @@ var Publisher = class {
return __async(this, null, function* () {
const cachedFrontMatter = this.metadataCache.getCache(path).frontmatter;
const frontMatter = __spreadValues({}, cachedFrontMatter);
const publishedFrontMatter = { "dg-publish": true };
if (frontMatter && frontMatter["dg-permalink"]) {
frontMatter["permalink"] = frontMatter["dg-permalink"];
if (!frontMatter["permalink"].endsWith("/")) {
frontMatter["permalink"] += "/";
publishedFrontMatter["dg-permalink"] = frontMatter["dg-permalink"];
publishedFrontMatter["permalink"] = frontMatter["dg-permalink"];
if (!publishedFrontMatter["permalink"].endsWith("/")) {
publishedFrontMatter["permalink"] += "/";
}
if (!frontMatter["permalink"].startsWith("/")) {
frontMatter["permalink"] = "/" + frontMatter["permalink"];
if (!publishedFrontMatter["permalink"].startsWith("/")) {
publishedFrontMatter["permalink"] = "/" + publishedFrontMatter["permalink"];
}
} else {
const noteUrlPath = generateUrlPath(path);
frontMatter["permalink"] = "/" + noteUrlPath;
publishedFrontMatter["permalink"] = "/" + noteUrlPath;
}
if (frontMatter && frontMatter["dg-home"]) {
const tags = frontMatter["tags"];
if (tags) {
if (typeof tags === "string") {
frontMatter["tags"] = [tags, "gardenEntry"];
publishedFrontMatter["tags"] = [tags, "gardenEntry"];
} else {
frontMatter["tags"] = [...tags, "gardenEntry"];
publishedFrontMatter["tags"] = [...tags, "gardenEntry"];
}
} else {
frontMatter["tags"] = "gardenEntry";
publishedFrontMatter["tags"] = "gardenEntry";
}
}
const replaced = text.replace(/^---\n([\s\S]*?)\n---/g, (match, p1) => {
const copy = __spreadValues({}, frontMatter);
delete copy["position"];
delete copy["end"];
const frontMatterString = JSON.stringify(copy);
const frontMatterString = JSON.stringify(publishedFrontMatter);
return `---
${frontMatterString}
---`;
@ -2901,6 +2956,7 @@ ${frontMatterString}
let transcludedText = text;
const transcludedRegex = /!\[\[(.*?)\]\]/g;
const transclusionMatches = text.match(transcludedRegex);
let numberOfExcaliDraws = 0;
if (transclusionMatches) {
for (let i = 0; i < transclusionMatches.length; i++) {
try {
@ -2908,19 +2964,30 @@ ${frontMatterString}
let [tranclusionFileName, headerName] = transclusionMatch.substring(transclusionMatch.indexOf("[") + 2, transclusionMatch.indexOf("]")).split("|");
const tranclusionFilePath = (0, import_obsidian2.getLinkpath)(tranclusionFileName);
const linkedFile = this.metadataCache.getFirstLinkpathDest(tranclusionFilePath, filePath);
if (linkedFile.extension !== "md") {
continue;
}
let fileText = yield this.vault.cachedRead(linkedFile);
fileText = fileText.replace(/^---\n([\s\S]*?)\n---/g, "");
const header = this.generateTransclusionHeader(headerName, linkedFile);
const headerSection = header ? `${header}
if (linkedFile.name.endsWith(".excalidraw.md")) {
let fileText = yield this.vault.cachedRead(linkedFile);
const start = fileText.indexOf("```json") + "```json".length;
const end = fileText.lastIndexOf("```");
const excaliDrawJson = JSON.parse(fileText.slice(start, end));
const drawingId = linkedFile.name.split(" ").join("_").replace(".", "") + numberOfExcaliDraws;
let excaliDrawCode = "";
if (++numberOfExcaliDraws === 1) {
excaliDrawCode += excaliDrawBundle;
}
excaliDrawCode += excalidraw(JSON.stringify(excaliDrawJson), drawingId);
transcludedText = transcludedText.replace(transclusionMatch, excaliDrawCode);
} else if (linkedFile.extension === "md") {
let fileText = yield this.vault.cachedRead(linkedFile);
fileText = fileText.replace(/^---\n([\s\S]*?)\n---/g, "");
const header = this.generateTransclusionHeader(headerName, linkedFile);
const headerSection = header ? `${header}
` : "";
fileText = `
<div class="transclusion">
fileText = `
<div class="transclusion internal-embed is-loaded">
` + headerSection + fileText + "\n</div>\n";
transcludedText = transcludedText.replace(transclusionMatch, fileText);
transcludedText = transcludedText.replace(transclusionMatch, fileText);
}
} catch (e) {
continue;
}
@ -2932,18 +2999,19 @@ ${frontMatterString}
createBase64Images(text, filePath) {
return __async(this, null, function* () {
let imageText = text;
const imageRegex = /!\[\[(.*?)(\.(png|jpg|jpeg|gif))\]\]/g;
const imageRegex = /!\[\[(.*?)(\.(png|jpg|jpeg|gif))\|(.*?)\]\]|!\[\[(.*?)(\.(png|jpg|jpeg|gif))\]\]/g;
const imageMatches = text.match(imageRegex);
if (imageMatches) {
for (let i = 0; i < imageMatches.length; i++) {
try {
const imageMatch = imageMatches[i];
const imageName = imageMatch.substring(imageMatch.indexOf("[") + 2, imageMatch.indexOf("]"));
let [imageName, size] = imageMatch.substring(imageMatch.indexOf("[") + 2, imageMatch.indexOf("]")).split("|");
const imagePath = (0, import_obsidian2.getLinkpath)(imageName);
const linkedFile = this.metadataCache.getFirstLinkpathDest(imagePath, filePath);
const image = yield this.vault.readBinary(linkedFile);
const imageBase64 = arrayBufferToBase64(image);
const imageMarkdown = `![${imageName}](data:image/${linkedFile.extension};base64,${imageBase64})`;
const name = size ? `${imageName}|${size}` : imageName;
const imageMarkdown = `![${name}](data:image/${linkedFile.extension};base64,${imageBase64})`;
imageText = imageText.replace(imageMatch, imageMarkdown);
} catch (e) {
continue;
@ -2994,7 +3062,7 @@ var DigitalGardenSiteManager = class {
getNoteHashes() {
return __async(this, null, function* () {
const octokit = new Octokit({ auth: this.settings.githubToken });
const response = yield octokit.request("GET /repos/{owner}/{repo}/git/trees/{tree_sha}?recursive=true", {
const response = yield octokit.request(`GET /repos/{owner}/{repo}/git/trees/{tree_sha}?recursive=${Math.ceil(Math.random() * 1e3)}`, {
owner: this.settings.githubUserName,
repo: this.settings.githubRepo,
tree_sha: "main"
@ -3309,31 +3377,36 @@ var PublishStatusBar = class {
}
};
// icons.ts
var seedling = `<g style="pointer-events:all"><title style="pointer-events: none" opacity="0.33">Layer 1</title><g id="hair" style="pointer-events: none" opacity="0.33"></g><g id="skin" style="pointer-events: none" opacity="0.33"></g><g id="skin-shadow" style="pointer-events: none" opacity="0.33"></g><g id="line"><path fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M47.71119,35.9247" id="svg_3"></path><polyline fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" points="49.813106536865234,93.05191133916378 49.813106536865234,69.57996462285519 40.03312683105469,26.548054680228233 " id="svg_4"></polyline><line x1="49.81311" x2="59.59309" y1="69.57996" y2="50.02" fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" id="svg_5"></line><path fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M27.99666,14.21103C35.9517,16.94766 39.92393,26.36911 39.92393,26.36911S30.99696,31.3526 23.04075,28.61655S11.11348,16.45847 11.11348,16.45847S20.04456,11.4789 27.99666,14.21103z" id="svg_6"></path><path fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M76.46266698455811,45.61669603088379 C84.67706698455811,47.43146603088379 89.6945869845581,56.34024603088379 89.6945869845581,56.34024603088379 S81.3917769845581,62.30603603088379 73.17639698455811,60.492046030883785 S59.94447698455811,49.768496030883796 59.94447698455811,49.768496030883796 S68.2515869845581,43.80622603088379 76.46266698455811,45.61669603088379 z" id="svg_7"></path></g></g>`;
// PublishModal.ts
var import_obsidian4 = __toModule(require("obsidian"));
var PublishModal = class {
constructor(app, siteManager, publisher, settings) {
constructor(app, publishStatusManager, publisher, settings) {
this.modal = new import_obsidian4.Modal(app);
this.siteManager = siteManager;
this.settings = settings;
this.publishStatusManager = publishStatusManager;
this.publisher = publisher;
this.initialize();
}
createCollapsable(title) {
const toggleHeader = this.modal.contentEl.createEl("h3", { text: `\u27A1\uFE0F\uFE0F ${title}`, attr: { class: "collapsable collapsed" } });
createCollapsable(title, buttonText, buttonCallback) {
const headerContainer = this.modal.contentEl.createEl("div", { attr: { style: "display: flex; justify-content: space-between; margin-bottom: 10px; align-items:center" } });
const toggleHeader = headerContainer.createEl("h3", { text: `\u2795\uFE0F ${title}`, attr: { class: "collapsable collapsed" } });
if (buttonText && buttonCallback) {
const button = new import_obsidian4.ButtonComponent(headerContainer).setButtonText(buttonText).onClick(() => __async(this, null, function* () {
button.setDisabled(true);
yield buttonCallback();
button.setDisabled(false);
}));
}
const toggledList = this.modal.contentEl.createEl("ul");
toggledList.hide();
toggleHeader.onClickEvent(() => {
headerContainer.onClickEvent(() => {
if (toggledList.isShown()) {
toggleHeader.textContent = `\u27A1\uFE0F\uFE0F ${title}`;
toggleHeader.textContent = `\u2795\uFE0F ${title}`;
toggledList.hide();
toggleHeader.removeClass("open");
toggleHeader.addClass("collapsed");
} else {
toggleHeader.textContent = `\u2B07\uFE0F ${title}`;
toggleHeader.textContent = `\u2796 ${title}`;
toggledList.show();
toggleHeader.removeClass("collapsed");
toggleHeader.addClass("open");
@ -3346,37 +3419,125 @@ var PublishModal = class {
this.modal.titleEl.innerText = "\u{1F331} Digital Garden";
this.modal.contentEl.addClass("digital-garden-publish-status-view");
this.modal.contentEl.createEl("h2", { text: "Publication Status" });
this.publishedContainer = this.createCollapsable("Published");
this.changedContainer = this.createCollapsable("Changed");
this.deletedContainer = this.createCollapsable("Deleted from vault");
this.unpublishedContainer = this.createCollapsable("Unpublished");
this.modal.onOpen = () => this.populateWithNotes();
this.progressContainer = this.modal.contentEl.createEl("div", { attr: { style: "height: 30px;" } });
this.publishedContainer = this.createCollapsable("Published", null, null);
this.changedContainer = this.createCollapsable("Changed", "Update changed files", () => __async(this, null, function* () {
const publishStatus = yield this.publishStatusManager.getPublishStatus();
const changed = publishStatus.changedNotes;
let counter = 0;
for (const note of changed) {
this.progressContainer.innerText = `\u231BPublishing changed notes: ${++counter}/${changed.length}`;
yield this.publisher.publish(note);
}
const publishedText = `\u2705 Published all changed notes: ${counter}/${changed.length}`;
this.progressContainer.innerText = publishedText;
setTimeout(() => {
if (this.progressContainer.innerText === publishedText) {
this.progressContainer.innerText = "";
}
}, 5e3);
yield this.refreshView();
}));
this.deletedContainer = this.createCollapsable("Deleted from vault", "Delete notes from garden", () => __async(this, null, function* () {
const deletedNotes = yield this.publishStatusManager.getDeletedNotePaths();
let counter = 0;
for (const note of deletedNotes) {
this.progressContainer.innerText = `\u231BDeleting Notes: ${++counter}/${deletedNotes.length}`;
yield this.publisher.delete(note);
}
const deleteDoneText = `\u2705 Deleted all notes: ${counter}/${deletedNotes.length}`;
this.progressContainer.innerText = deleteDoneText;
setTimeout(() => {
if (this.progressContainer.innerText === deleteDoneText) {
this.progressContainer.innerText = "";
}
}, 5e3);
yield this.refreshView();
}));
this.unpublishedContainer = this.createCollapsable("Unpublished", "Publish unpublished notes", () => __async(this, null, function* () {
const publishStatus = yield this.publishStatusManager.getPublishStatus();
const unpublished = publishStatus.unpublishedNotes;
let counter = 0;
for (const note of unpublished) {
this.progressContainer.innerText = `\u231BPublishing unpublished notes: ${++counter}/${unpublished.length}`;
yield this.publisher.publish(note);
}
const publishDoneText = `\u2705 Published all unpublished notes: ${counter}/${unpublished.length}`;
this.progressContainer.innerText = publishDoneText;
setTimeout(() => {
if (this.progressContainer.innerText === publishDoneText) {
this.progressContainer.innerText = "";
}
}, 5e3);
yield this.refreshView();
}));
this.modal.onOpen = () => this.refreshView();
this.modal.onClose = () => this.clearView();
});
}
clearView() {
return __async(this, null, function* () {
this.publishedContainer.childNodes.forEach((node) => node.remove());
this.changedContainer.childNodes.forEach((node) => node.remove());
this.deletedContainer.childNodes.forEach((node) => node.remove());
this.unpublishedContainer.childNodes.forEach((node) => node.remove());
while (this.publishedContainer.lastElementChild) {
this.publishedContainer.removeChild(this.publishedContainer.lastElementChild);
}
while (this.changedContainer.lastElementChild) {
this.changedContainer.removeChild(this.changedContainer.lastElementChild);
}
while (this.deletedContainer.lastElementChild) {
this.deletedContainer.removeChild(this.deletedContainer.lastElementChild);
}
while (this.unpublishedContainer.lastElementChild) {
this.unpublishedContainer.removeChild(this.unpublishedContainer.lastElementChild);
}
});
}
populateWithNotes() {
return __async(this, null, function* () {
const publishStatus = yield this.buildPublishStatus();
const publishStatus = yield this.publishStatusManager.getPublishStatus();
publishStatus.publishedNotes.map((file) => this.publishedContainer.createEl("li", { text: file.path }));
publishStatus.unpublishedNotes.map((file) => this.unpublishedContainer.createEl("li", { text: file.path }));
publishStatus.changedNotes.map((file) => this.changedContainer.createEl("li", { text: file.path }));
publishStatus.deletedNotePaths.map((path) => this.deletedContainer.createEl("li", { text: path }));
});
}
buildPublishStatus() {
refreshView() {
return __async(this, null, function* () {
this.clearView();
yield this.populateWithNotes();
});
}
open() {
this.modal.open();
}
};
// PublishStatusManager.ts
var PublishStatusManager = class {
constructor(siteManager, publisher) {
this.siteManager = siteManager;
this.publisher = publisher;
}
getDeletedNotePaths() {
return __async(this, null, function* () {
const remoteNoteHashes = yield this.siteManager.getNoteHashes();
const marked = yield this.publisher.getFilesMarkedForPublishing();
return this.generateDeletedNotePaths(remoteNoteHashes, marked);
});
}
generateDeletedNotePaths(remoteNoteHashes, marked) {
const deletedNotePaths = [];
Object.keys(remoteNoteHashes).forEach((key) => {
if (!marked.find((f) => f.path === key)) {
deletedNotePaths.push(key);
}
});
return deletedNotePaths;
}
getPublishStatus() {
return __async(this, null, function* () {
const unpublishedNotes = [];
const publishedNotes = [];
const changedNotes = [];
const deletedNotePaths = [];
const remoteNoteHashes = yield this.siteManager.getNoteHashes();
const marked = yield this.publisher.getFilesMarkedForPublishing();
for (const file of marked) {
@ -3391,17 +3552,14 @@ var PublishModal = class {
changedNotes.push(file);
}
}
Object.keys(remoteNoteHashes).forEach((key) => {
if (!marked.find((f) => f.path === key)) {
deletedNotePaths.push(key);
}
});
const deletedNotePaths = this.generateDeletedNotePaths(remoteNoteHashes, marked);
unpublishedNotes.sort((a, b) => a.path > b.path ? 1 : -1);
publishedNotes.sort((a, b) => a.path > b.path ? 1 : -1);
changedNotes.sort((a, b) => a.path > b.path ? 1 : -1);
deletedNotePaths.sort((a, b) => a > b ? 1 : -1);
return { unpublishedNotes, publishedNotes, changedNotes, deletedNotePaths };
});
}
open() {
this.modal.open();
}
};
// main.ts
@ -3415,7 +3573,7 @@ var DEFAULT_SETTINGS = {
var DigitalGarden = class extends import_obsidian5.Plugin {
onload() {
return __async(this, null, function* () {
this.appVersion = "2.4.0";
this.appVersion = "2.6.1";
console.log("Initializing DigitalGarden plugin v" + this.appVersion);
yield this.loadSettings();
this.addSettingTab(new DigitalGardenSettingTab(this.app, this));
@ -3474,9 +3632,14 @@ var DigitalGarden = class extends import_obsidian5.Plugin {
try {
const { vault, metadataCache } = this.app;
const publisher = new Publisher(vault, metadataCache, this.settings);
const filesToPublish = yield publisher.getFilesMarkedForPublishing();
const statusBar = new PublishStatusBar(statusBarItem, filesToPublish.length);
const siteManager = new DigitalGardenSiteManager(metadataCache, this.settings);
const publishStatusManager = new PublishStatusManager(siteManager, publisher);
const publishStatus = yield publishStatusManager.getPublishStatus();
const filesToPublish = publishStatus.changedNotes.concat(publishStatus.unpublishedNotes);
const filesToDelete = publishStatus.deletedNotePaths;
const statusBar = new PublishStatusBar(statusBarItem, filesToPublish.length + filesToDelete.length);
let errorFiles = 0;
let errorDeleteFiles = 0;
for (const file of filesToPublish) {
try {
statusBar.increment();
@ -3486,8 +3649,20 @@ var DigitalGarden = class extends import_obsidian5.Plugin {
new import_obsidian5.Notice(`Unable to publish note ${file.name}, skipping it.`);
}
}
for (const filePath of filesToDelete) {
try {
statusBar.increment();
yield publisher.delete(filePath);
} catch (e) {
errorDeleteFiles++;
new import_obsidian5.Notice(`Unable to delete note ${filePath}, skipping it.`);
}
}
statusBar.finish(8e3);
new import_obsidian5.Notice(`Successfully published ${filesToPublish.length - errorFiles} notes to your garden.`);
if (filesToDelete.length > 0) {
new import_obsidian5.Notice(`Successfully deleted ${filesToDelete.length - errorDeleteFiles} notes from your garden.`);
}
} catch (e) {
statusBarItem.remove();
console.error(e);
@ -3529,7 +3704,8 @@ var DigitalGarden = class extends import_obsidian5.Plugin {
if (!this.publishModal) {
const siteManager = new DigitalGardenSiteManager(this.app.metadataCache, this.settings);
const publisher = new Publisher(this.app.vault, this.app.metadataCache, this.settings);
this.publishModal = new PublishModal(this.app, siteManager, publisher, this.settings);
const publishStatusManager = new PublishStatusManager(siteManager, publisher);
this.publishModal = new PublishModal(this.app, publishStatusManager, publisher, this.settings);
}
this.publishModal.open();
}
@ -3561,7 +3737,7 @@ var DigitalGardenSettingTab = class extends import_obsidian5.PluginSettingTab {
}
});
settingView.renderCreatePr(handlePR);
settingView.renderPullRequestHistory(this.plugin.settings.prHistory.slice(0, 10));
settingView.renderPullRequestHistory(this.plugin.settings.prHistory.reverse().slice(0, 10));
}
};
/*!

@ -1,10 +1,10 @@
{
"id": "digitalgarden",
"name": "Digital Garden",
"version": "2.4.0",
"version": "2.6.2",
"minAppVersion": "0.12.0",
"description": "Publish your notes to a digital garden for others to enjoy.",
"author": "Ole Eskild Steensen",
"authorUrl": "https://ole.dev/garden",
"isDesktopOnly": false
}
}

@ -7,8 +7,12 @@
overflow: auto;
}
.digital-garden-publish-status-view h2 {
margin-top: 0;
margin-bottom: 5px;
}
.digital-garden-publish-status-view .collapsable {
cursor: pointer;
margin-bottom: 5px;
margin-left: 10px;
}

@ -12,8 +12,8 @@
"checkpointList": [
{
"path": "/",
"date": "2022-03-14",
"size": 2864095
"date": "2022-03-18",
"size": 2991953
}
],
"activityHistory": [
@ -283,6 +283,22 @@
{
"date": "2022-03-14",
"value": 85184
},
{
"date": "2022-03-15",
"value": 15754
},
{
"date": "2022-03-16",
"value": 96207
},
{
"date": "2022-03-17",
"value": 62718
},
{
"date": "2022-03-18",
"value": 1269
}
]
}

@ -1875,9 +1875,9 @@
"links": 18
},
"05.02 Networks/Configuring UFW.md": {
"size": 2097,
"size": 2946,
"tags": 2,
"links": 6
"links": 7
},
"05.02 Networks/@Networks.md": {
"size": 2825,
@ -1887,17 +1887,17 @@
"05.02 Networks/Server Cloud.md": {
"size": 8351,
"tags": 5,
"links": 10
"links": 11
},
"05.02 Networks/Server Alias.md": {
"size": 5882,
"tags": 6,
"links": 8
"links": 9
},
"05.02 Networks/Server Tools.md": {
"size": 10003,
"tags": 6,
"links": 12
"links": 13
},
"05.02 Networks/Server VPN.md": {
"size": 4443,
@ -2177,7 +2177,7 @@
"00.03 News/Why Epicureanism, not Stoicism, is the philosophy we need now.md": {
"size": 10860,
"tags": 2,
"links": 1
"links": 2
},
"00.04 IT/GitHub - stefanprodandockprom Docker hosts and containers monitoring with Prometheus, Grafana, cAdvisor, NodeExporter and AlertManager.md": {
"size": 14521,
@ -2202,12 +2202,12 @@
"00.03 News/Javanka in Exile.md": {
"size": 23938,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/How the NYPD Cracked the Michael K. Williams Overdose Case.md": {
"size": 21418,
"tags": 4,
"links": 1
"links": 2
},
"00.03 News/@News.md": {
"size": 2574,
@ -2217,7 +2217,7 @@
"00.03 News/He spent 25 years infiltrating the Klan.md": {
"size": 48093,
"tags": 2,
"links": 1
"links": 2
},
"01.01 Life Orga/Désert rural. La grande ruée vers les maisons italiennes à 1 euro.md": {
"size": 3343,
@ -2317,7 +2317,7 @@
"00.03 News/An ancient language has defied decryption for 100 years. Can AI crack the code.md": {
"size": 22955,
"tags": 3,
"links": 1
"links": 2
},
"00.06 Professional/The Company-Building Cornerstones Every Founder Needs to Focus On — Advice from HubSpot.md": {
"size": 30484,
@ -2327,7 +2327,7 @@
"00.03 News/My transformative first trip to Japan · Part 4.md": {
"size": 18383,
"tags": 1,
"links": 1
"links": 2
},
"00.03 News/Babies and chicks help solve one of psychologys oldest puzzles.md": {
"size": 13415,
@ -2347,7 +2347,7 @@
"00.03 News/PM to fill out party questionnaire.md": {
"size": 6407,
"tags": 3,
"links": 1
"links": 2
},
"00.06 Professional/Sameer Huda - gunnercooke llp.md": {
"size": 3758,
@ -2392,12 +2392,12 @@
"00.03 News/Imagine Scythias fierce warrior women, the real Amazons Aeon Essays.md": {
"size": 22315,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/Society has a trust problem. More censorship will only make it worse..md": {
"size": 8229,
"tags": 1,
"links": 1
"links": 2
},
"03.03 Food & Wine/Churros with Bittersweet Chocolate Sauce.md": {
"size": 4335,
@ -2412,12 +2412,12 @@
"00.03 News/How the enigmatic Nefertiti came to be locked away in Germany Aeon Essays.md": {
"size": 20808,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/Are Today's Portraitists Better Than the Old Masters — Evolve Artist.md": {
"size": 9138,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/Could COVID-19 And Alzheimer's Overlaps Point Towards A Solution For Both Diseases.md": {
"size": 5523,
@ -2432,7 +2432,7 @@
"00.03 News/Jackass Oral Hostory.md": {
"size": 30285,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/The 1918 flu didnt end in 1918. Heres what its third year can teach us..md": {
"size": 9566,
@ -2442,7 +2442,7 @@
"00.03 News/XXX-Files Who Torched the Pornhub Palace.md": {
"size": 37911,
"tags": 2,
"links": 1
"links": 2
},
"00.04 IT/Obsidian website publish - comments.md": {
"size": 296,
@ -2457,7 +2457,7 @@
"00.03 News/Why Indian universities are ditching English-only education.md": {
"size": 11749,
"tags": 2,
"links": 1
"links": 2
},
"00.01 Admin/Memos/2022-02-14.md": {
"size": 1261,
@ -2497,7 +2497,7 @@
"00.03 News/Why Black Women Are Divesting From Excellence & Embracing Mediocrity.md": {
"size": 16817,
"tags": 3,
"links": 1
"links": 2
},
"00.01 Admin/Memos/2022-02-17.md": {
"size": 935,
@ -2517,7 +2517,7 @@
"00.03 News/Whats the Matter with American Cities.md": {
"size": 20649,
"tags": 3,
"links": 1
"links": 2
},
"00.01 Admin/Memos/2022-02-18.md": {
"size": 1182,
@ -2557,7 +2557,7 @@
"00.01 Admin/Memos/2022-02-20.md": {
"size": 1011,
"tags": 0,
"links": 4
"links": 5
},
"02.03 Zürich/La Baracca.md": {
"size": 1144,
@ -2577,12 +2577,12 @@
"00.03 News/Confessions of a Bitcoin Widow How a Dream Life Turned into a Nightmare The Walrus.md": {
"size": 36436,
"tags": 2,
"links": 1
"links": 2
},
"00.03 News/Cowboys paid $2.4M over cheerleader allegations.md": {
"size": 28323,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/If they could turn back time how tech billionaires are trying to reverse the ageing process.md": {
"size": 15950,
@ -2607,17 +2607,17 @@
"00.03 News/Will the Bush Dynasty Die With George P. Bush.md": {
"size": 34634,
"tags": 4,
"links": 1
"links": 2
},
"00.03 News/Google Search Is Dying.md": {
"size": 13856,
"tags": 1,
"links": 1
"links": 2
},
"00.03 News/To Live and Love with a Dying World.md": {
"size": 32183,
"tags": 3,
"links": 1
"links": 2
},
"00.01 Admin/Memos/2022-02-21.md": {
"size": 914,
@ -2627,7 +2627,7 @@
"00.03 News/Why Are Letters Shaped the Way They Are.md": {
"size": 19695,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/Ancient Indian texts reveal the liberating power of metaphysics.md": {
"size": 13995,
@ -2647,7 +2647,7 @@
"00.03 News/Lenquête « Suisse Secrets » relance le débat sur la liberté de la presse face au secret bancaire.md": {
"size": 10239,
"tags": 3,
"links": 1
"links": 2
},
"00.01 Admin/Memos/2022-02-23.md": {
"size": 1043,
@ -2682,7 +2682,7 @@
"00.03 News/The Great Resignation has morphed into the Great Sabbatical.md": {
"size": 12932,
"tags": 6,
"links": 1
"links": 2
},
"00.06 Professional/Crypto industry makes push into regulated derivatives markets.md": {
"size": 7123,
@ -2737,12 +2737,12 @@
"00.03 News/Notes apps are where ideas go to die. And thats good..md": {
"size": 9585,
"tags": 4,
"links": 1
"links": 2
},
"00.03 News/A view from across the river.md": {
"size": 25481,
"tags": 3,
"links": 1
"links": 2
},
"02.03 Zürich/Afghan Anar.md": {
"size": 1127,
@ -2762,12 +2762,12 @@
"00.03 News/As rents rise, Americans are stuck in homes even when they want to move.md": {
"size": 16046,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/In Kashmir, indigenous Muslim healers cure broken bones with spirituality — and science.md": {
"size": 14659,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/On the pleasures of hand-writing letters youll never send.md": {
"size": 12624,
@ -2787,17 +2787,17 @@
"00.03 News/Vladimir Putins Revisionist History of Russia and Ukraine.md": {
"size": 10134,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/Opinion The Russia Sanctions That Could Actually Stop Putin.md": {
"size": 17832,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/Putins New Iron Curtain.md": {
"size": 14496,
"tags": 3,
"links": 1
"links": 2
},
"00.03 News/The Taliban Confront the Realities of Power.md": {
"size": 56767,
@ -2935,7 +2935,7 @@
"links": 4
},
"05.02 Networks/Configuring Telegram bots.md": {
"size": 3923,
"size": 2929,
"tags": 0,
"links": 9
},
@ -3002,7 +3002,7 @@
"00.03 News/Amateur open-source researchers went viral unpacking the war in Ukraine.md": {
"size": 9459,
"tags": 3,
"links": 1
"links": 2
},
"03.01 Reading list/Babylone.md": {
"size": 1598,
@ -3017,7 +3017,7 @@
"05.02 Networks/GitHub - deividgdtfail2ban_telegram_notifications Sending fail2ban notifications using a Telegram bot.md": {
"size": 5337,
"tags": 0,
"links": 2
"links": 3
},
"00.03 News/Three Bodies in Texas.md": {
"size": 49841,
@ -3044,11 +3044,6 @@
"tags": 4,
"links": 4
},
"01.02 Home/2022-03-14 Test event.md": {
"size": 265,
"tags": 0,
"links": 0
},
"00.01 Admin/Memos/2022-01-22.md": {
"size": 1124,
"tags": 0,
@ -3183,51 +3178,131 @@
"size": 551,
"tags": 0,
"links": 3
},
"00.01 Admin/Memos/2022-03-15.md": {
"size": 965,
"tags": 0,
"links": 4
},
"00.03 News/The Miseducation of Maria Montessori.md": {
"size": 13627,
"tags": 3,
"links": 1
},
"00.01 Admin/Memos/2022-03-16.md": {
"size": 1037,
"tags": 0,
"links": 6
},
"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md": {
"size": 307,
"tags": 0,
"links": 5
},
"00.01 Admin/Calendars/2022-03-19 Arrivée Meggi-mo.md": {
"size": 217,
"tags": 0,
"links": 3
},
"00.01 Admin/Calendars/2022-03-24 Départ de Meggi-mo.md": {
"size": 193,
"tags": 0,
"links": 2
},
"00.03 News/As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ.md": {
"size": 12814,
"tags": 3,
"links": 1
},
"00.03 News/Ukrainian military long on morale but short on weaponry.md": {
"size": 7881,
"tags": 3,
"links": 1
},
"00.03 News/The Terrible Truth So Many Experts Missed About Russia.md": {
"size": 16055,
"tags": 3,
"links": 1
},
"00.03 News/Whats in a Black name 400 years of context..md": {
"size": 25017,
"tags": 3,
"links": 1
},
"00.03 News/How to get the excitement back Psyche Guides.md": {
"size": 31925,
"tags": 3,
"links": 1
},
"00.01 Admin/Calendars/2022-03-31 Arrivée de Papa.md": {
"size": 179,
"tags": 0,
"links": 3
},
"00.01 Admin/Calendars/2022-04-04 Départ Papa.md": {
"size": 90,
"tags": 0,
"links": 0
},
"00.01 Admin/Memos/2022-03-17.md": {
"size": 961,
"tags": 0,
"links": 4
},
"05.02 Networks/Configuring Fail2ban.md": {
"size": 13460,
"tags": 3,
"links": 8
},
"00.01 Admin/Memos/2022-03-18.md": {
"size": 1069,
"tags": 0,
"links": 6
}
},
"commitTypes": {
"/": {
"Refactor": 325,
"Create": 273,
"Link": 477,
"Expand": 243
"Refactor": 340,
"Create": 292,
"Link": 547,
"Expand": 261
}
},
"dailyCommits": {
"/": {
"0": 21,
"1": 0,
"0": 47,
"1": 17,
"2": 1,
"3": 0,
"4": 2,
"5": 3,
"6": 14,
"7": 99,
"8": 117,
"7": 103,
"8": 135,
"9": 119,
"10": 79,
"11": 58,
"12": 71,
"13": 148,
"13": 156,
"14": 59,
"15": 58,
"16": 32,
"17": 58,
"18": 91,
"19": 42,
"20": 81,
"21": 37,
"22": 116,
"23": 12
"15": 61,
"16": 33,
"17": 69,
"18": 100,
"19": 44,
"20": 87,
"21": 45,
"22": 117,
"23": 20
}
},
"weeklyCommits": {
"/": {
"Mon": 236,
"Tue": 73,
"Wed": 86,
"Thu": 131,
"Fri": 124,
"Tue": 89,
"Wed": 153,
"Thu": 165,
"Fri": 129,
"Sat": 0,
"Sun": 668
}
@ -3235,6 +3310,24 @@
"recentCommits": {
"/": {
"Expanded": [
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-18.md\"> 2022-03-18 </a>",
"<a class=\"internal-link\" href=\"Test task.md\"> Test task </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-17.md\"> 2022-03-17 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-31 Arrivée de Papa.md\"> 2022-03-31 Arrivée de Papa </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-04-04 Départ Papa.md\"> 2022-04-04 Départ Papa </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-19 Arrivée Meggi-mo.md\"> 2022-03-19 Arrivée Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-24 Départ de Meggi-mo.md\"> 2022-03-24 Départ de Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md\"> 2022-03-26 Fiancailles Eloi </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-19 Arrivée Meggi-mo.md\"> 2022-03-19 Arrivée Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md\"> 2022-03-26 Fiancailles Eloi </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring UFW.md\"> Configuring UFW </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring UFW.md\"> Configuring UFW </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-15.md\"> 2022-03-15 </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Cover Page.md\"> Cover Page </a>",
@ -3267,27 +3360,28 @@
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Telegram bots.md\"> Configuring Telegram bots </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Telegram bots.md\"> Configuring Telegram bots </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Telegram bots.md\"> Configuring Telegram bots </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-10.md\"> 2022-03-10 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-09.md\"> 2022-03-09 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-02-23.md\"> 2022-02-23 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Babylone.md\"> Babylone </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-08.md\"> 2022-03-08 </a>",
"<a class=\"internal-link\" href=\"01.02 Home/Household.md\"> Household </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Test sheet.md\"> Test sheet </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-07.md\"> 2022-03-07 </a>",
"<a class=\"internal-link\" href=\"The twitching generation.md\"> The twitching generation </a>",
"<a class=\"internal-link\" href=\"Slow sex, long life.md\"> Slow sex, long life </a>",
"<a class=\"internal-link\" href=\"00.03 News/@News.md\"> @News </a>",
"<a class=\"internal-link\" href=\"Uyghur Exile.md\"> Uyghur Exile </a>",
"<a class=\"internal-link\" href=\"00.03 News/The improbable endless heroism of Volodymyr Zelensky.md\"> The improbable endless heroism of Volodymyr Zelensky </a>",
"<a class=\"internal-link\" href=\"The improbable endless heroism of volomir Zelensky.md\"> The improbable endless heroism of volomir Zelensky </a>",
"<a class=\"internal-link\" href=\"The man who paid for Anerica's fear.md\"> The man who paid for Anerica's fear </a>",
"<a class=\"internal-link\" href=\"03.03 Food & Wine/@Desserts.md\"> @Desserts </a>",
"<a class=\"internal-link\" href=\"Banana Foster.md\"> Banana Foster </a>",
"<a class=\"internal-link\" href=\"Banana Foster.md\"> Banana Foster </a>",
"<a class=\"internal-link\" href=\"00.03 News/What i learnt during my 3 days offline.md\"> What i learnt during my 3 days offline </a>"
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-10.md\"> 2022-03-10 </a>"
],
"Created": [
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-18.md\"> 2022-03-18 </a>",
"<a class=\"internal-link\" href=\"Untitled.md\"> Untitled </a>",
"<a class=\"internal-link\" href=\"Untitled.md\"> Untitled </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable.md\"> InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04.md\"> How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-17.md\"> 2022-03-17 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-04-04 Départ Papa.md\"> 2022-04-04 Départ Papa </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-31 Arrivée de Papa.md\"> 2022-03-31 Arrivée de Papa </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/How to get the excitement back Psyche Guides.md\"> How to get the excitement back Psyche Guides </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Whats in a Black name 400 years of context..md\"> Whats in a Black name 400 years of context. </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Terrible Truth So Many Experts Missed About Russia.md\"> The Terrible Truth So Many Experts Missed About Russia </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Ukrainian military long on morale but short on weaponry.md\"> Ukrainian military long on morale but short on weaponry </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ.md\"> As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-24 Départ de Meggi-mo.md\"> 2022-03-24 Départ de Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-19 Arrivée Meggi-mo.md\"> 2022-03-19 Arrivée Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md\"> 2022-03-26 Fiancailles Eloi </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-16.md\"> 2022-03-16 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Miseducation of Maria Montessori.md\"> The Miseducation of Maria Montessori </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-15.md\"> 2022-03-15 </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Landing Page 1.md\"> Landing Page 1 </a>",
"<a class=\"internal-link\" href=\"JPEG.md\"> JPEG </a>",
"<a class=\"internal-link\" href=\"JPEG.md\"> JPEG </a>",
@ -3319,28 +3413,19 @@
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/(Every M) Test event).md\"> (Every M) Test event) </a>",
"<a class=\"internal-link\" href=\"01.01 Life Orga/Markdown.md\"> Markdown </a>",
"<a class=\"internal-link\" href=\"@Life Admin.md\"> @Life Admin </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Fresh Tomato Eggs in Purgatory with Chickpeas.md\"> Fresh Tomato Eggs in Purgatory with Chickpeas </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Jeff Zucker Scandal Inside the CNN President's Downfall.md\"> Jeff Zucker Scandal Inside the CNN President's Downfall </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Im the Operator The Aftermath of a Self-Driving Tragedy.md\"> Im the Operator The Aftermath of a Self-Driving Tragedy </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/For the West, the Worst Is Yet to Come.md\"> For the West, the Worst Is Yet to Come </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Three Bodies in Texas - Believer Magazine.md\"> Three Bodies in Texas - Believer Magazine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Three Bodies in Texas - Believer Magazine.md\"> Three Bodies in Texas - Believer Magazine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/GitHub - deividgdtfail2ban_telegram_notifications Sending fail2ban notifications using a Telegram bot.md\"> GitHub - deividgdtfail2ban_telegram_notifications Sending fail2ban notifications using a Telegram bot </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Amateur open-source researchers went viral unpacking the war in Ukraine.md\"> Amateur open-source researchers went viral unpacking the war in Ukraine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/40+ of the best open-source tools to build your startup, from project management to infrastructure.md\"> 40+ of the best open-source tools to build your startup, from project management to infrastructure </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-13.md\"> 2022-03-13 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Seneca On Coping with the Shortness of Life.md\"> Seneca On Coping with the Shortness of Life </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Simone de Beauvoir recommends we fight for ourselves as we age Psyche Ideas.md\"> Simone de Beauvoir recommends we fight for ourselves as we age Psyche Ideas </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/We Need to Retire the Term “Microaggressions”.md\"> We Need to Retire the Term “Microaggressions” </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The cells that can give you super-immunity.md\"> The cells that can give you super-immunity </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-12.md\"> 2022-03-12 </a>",
"<a class=\"internal-link\" href=\"Docker config.md\"> Docker config </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-11.md\"> 2022-03-11 </a>",
"<a class=\"internal-link\" href=\"ReadItLater Inbox/GitHub - matriphemonit2telegram A simple script to send Monit alerts using Telegram bot..md\"> GitHub - matriphemonit2telegram A simple script to send Monit alerts using Telegram bot. </a>",
"<a class=\"internal-link\" href=\"ReadItLater Inbox/GitHub - fxkjdlogwatch-telegram-bot Send logwatch results to your telegram account.md\"> GitHub - fxkjdlogwatch-telegram-bot Send logwatch results to your telegram account </a>",
"<a class=\"internal-link\" href=\"https/t.me/mbvservers_bot.md\"> mbvservers_bot </a>"
"<a class=\"internal-link\" href=\"00.02 Inbox/Fresh Tomato Eggs in Purgatory with Chickpeas.md\"> Fresh Tomato Eggs in Purgatory with Chickpeas </a>"
],
"Renamed": [
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-30 Test task.md\"> 2022-06-30 Test task </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable.md\"> InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04.md\"> How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04 </a>",
"<a class=\"internal-link\" href=\"00.03 News/How to get the excitement back Psyche Guides.md\"> How to get the excitement back Psyche Guides </a>",
"<a class=\"internal-link\" href=\"00.03 News/Whats in a Black name 400 years of context..md\"> Whats in a Black name 400 years of context. </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Terrible Truth So Many Experts Missed About Russia.md\"> The Terrible Truth So Many Experts Missed About Russia </a>",
"<a class=\"internal-link\" href=\"00.03 News/Ukrainian military long on morale but short on weaponry.md\"> Ukrainian military long on morale but short on weaponry </a>",
"<a class=\"internal-link\" href=\"00.03 News/As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ.md\"> As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Miseducation of Maria Montessori.md\"> The Miseducation of Maria Montessori </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/News Page.md\"> News Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Landing Page.md\"> Landing Page </a>",
@ -3381,19 +3466,17 @@
"<a class=\"internal-link\" href=\"00.03 News/What i learnt during my 3 days offline.md\"> What i learnt during my 3 days offline </a>",
"<a class=\"internal-link\" href=\"00.04 IT/How to migrate your Nextcloud database-backend from MySQLMariaDB to PostgreSQL.md\"> How to migrate your Nextcloud database-backend from MySQLMariaDB to PostgreSQL </a>",
"<a class=\"internal-link\" href=\"00.06 Professional/The 10 Keys to A Successful Board Meeting How to Make Them Great and Not Something Everyone Dreads from Ajay Agarwal, Bain Capital Partners SaaStr.md\"> The 10 Keys to A Successful Board Meeting How to Make Them Great and Not Something Everyone Dreads from Ajay Agarwal, Bain Capital Partners SaaStr </a>",
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Mushroom risotto.md\"> Mushroom risotto </a>",
"<a class=\"internal-link\" href=\"00.06 Professional/Managing people 🤯 Andreas Klinger.md\"> Managing people 🤯 Andreas Klinger </a>",
"<a class=\"internal-link\" href=\"00.03 News/Reading Simone de Beauvoirs Ethics of Ambiguity in prison Aeon Essays.md\"> Reading Simone de Beauvoirs Ethics of Ambiguity in prison Aeon Essays </a>",
"<a class=\"internal-link\" href=\"03.01 Reading list/Tous les Hommes n'habitent pas le Monde de la meme Facon.md\"> Tous les Hommes n'habitent pas le Monde de la meme Facon </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/On the Road.md\"> On the Road </a>",
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Red Lentil Soup With Preserved Lemon and Crispy Garlic.md\"> Red Lentil Soup With Preserved Lemon and Crispy Garlic </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Taliban Confront the Realities of Power.md\"> The Taliban Confront the Realities of Power </a>",
"<a class=\"internal-link\" href=\"00.03 News/Putins New Iron Curtain.md\"> Putins New Iron Curtain </a>",
"<a class=\"internal-link\" href=\"00.03 News/Opinion The Russia Sanctions That Could Actually Stop Putin.md\"> Opinion The Russia Sanctions That Could Actually Stop Putin </a>",
"<a class=\"internal-link\" href=\"00.03 News/Vladimir Putins Revisionist History of Russia and Ukraine.md\"> Vladimir Putins Revisionist History of Russia and Ukraine </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Power of Emotional Honesty.md\"> The Power of Emotional Honesty </a>"
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Mushroom risotto.md\"> Mushroom risotto </a>"
],
"Tagged": [
"<a class=\"internal-link\" href=\"Test task.md\"> Test task </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"00.03 News/Whats in a Black name 400 years of context..md\"> Whats in a Black name 400 years of context. </a>",
"<a class=\"internal-link\" href=\"00.03 News/How to get the excitement back Psyche Guides.md\"> How to get the excitement back Psyche Guides </a>",
"<a class=\"internal-link\" href=\"00.03 News/As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ.md\"> As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ </a>",
"<a class=\"internal-link\" href=\"00.03 News/Ukrainian military long on morale but short on weaponry.md\"> Ukrainian military long on morale but short on weaponry </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Terrible Truth So Many Experts Missed About Russia.md\"> The Terrible Truth So Many Experts Missed About Russia </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Miseducation of Maria Montessori.md\"> The Miseducation of Maria Montessori </a>",
"<a class=\"internal-link\" href=\"00.03 News/A Vibe Shift Is Coming.md\"> A Vibe Shift Is Coming </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/QED Naval.md\"> QED Naval </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/VC Tasks.md\"> VC Tasks </a>",
@ -3436,15 +3519,7 @@
"<a class=\"internal-link\" href=\"00.03 News/The man who paid for Anerica's fear.md\"> The man who paid for Anerica's fear </a>",
"<a class=\"internal-link\" href=\"Banana Foster.md\"> Banana Foster </a>",
"<a class=\"internal-link\" href=\"Untitled.md\"> Untitled </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Mushroom risotto.md\"> Mushroom risotto </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Reading Simone de Beauvoirs Ethics of Ambiguity in prison Aeon Essays.md\"> Reading Simone de Beauvoirs Ethics of Ambiguity in prison Aeon Essays </a>",
"<a class=\"internal-link\" href=\"On the Road.md\"> On the Road </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Red Lentil Soup With Preserved Lemon and Crispy Garlic.md\"> Red Lentil Soup With Preserved Lemon and Crispy Garlic </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Taliban Confront the Realities of Power.md\"> The Taliban Confront the Realities of Power </a>",
"<a class=\"internal-link\" href=\"00.03 News/Vladimir Putins Revisionist History of Russia and Ukraine.md\"> Vladimir Putins Revisionist History of Russia and Ukraine </a>",
"<a class=\"internal-link\" href=\"00.03 News/Opinion The Russia Sanctions That Could Actually Stop Putin.md\"> Opinion The Russia Sanctions That Could Actually Stop Putin </a>",
"<a class=\"internal-link\" href=\"00.03 News/Putins New Iron Curtain.md\"> Putins New Iron Curtain </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Power of Emotional Honesty.md\"> The Power of Emotional Honesty </a>"
"<a class=\"internal-link\" href=\"00.02 Inbox/Mushroom risotto.md\"> Mushroom risotto </a>"
],
"Refactored": [
"<a class=\"internal-link\" href=\"01.02 Home/@Main Dashboard.md\"> @Main Dashboard </a>",
@ -3469,9 +3544,14 @@
"<a class=\"internal-link\" href=\"00.01 Admin/Templater scripts/List of plugins.md\"> List of plugins </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Fresh Tomato Eggs in Purgatory with Chickpeas.md\"> Fresh Tomato Eggs in Purgatory with Chickpeas </a>",
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Fresh Tomato Eggs in Purgatory with Chickpeas.md\"> Fresh Tomato Eggs in Purgatory with Chickpeas </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>"
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Telegram bots.md\"> Configuring Telegram bots </a>"
],
"Deleted": [
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-30 Test task.md\"> 2022-06-30 Test task </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable.md\"> InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04.md\"> How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04 </a>",
"<a class=\"internal-link\" href=\"01.02 Home/2022-03-14 Test event.md\"> 2022-03-14 Test event </a>",
"<a class=\"internal-link\" href=\"JPEG.md\"> JPEG </a>",
"<a class=\"internal-link\" href=\"JPEG.md\"> JPEG </a>",
"<a class=\"internal-link\" href=\"@Life Admin.md\"> @Life Admin </a>",
@ -3518,64 +3598,60 @@
"<a class=\"internal-link\" href=\"Docker config.md\"> Docker config </a>",
"<a class=\"internal-link\" href=\"01.01 Life Orga/@Life Admin.md\"> @Life Admin </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Three Bodies in Texas - Believer Magazine.md\"> Three Bodies in Texas - Believer Magazine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Im the Operator The Aftermath of a Self-Driving Tragedy.md\"> Im the Operator The Aftermath of a Self-Driving Tragedy </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/VC Tasks.md\"> VC Tasks </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/@Investment Task master.md\"> @Investment Task master </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Crypto Tasks.md\"> Crypto Tasks </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/EOS.md\"> EOS </a>"
"<a class=\"internal-link\" href=\"00.02 Inbox/Im the Operator The Aftermath of a Self-Driving Tragedy.md\"> Im the Operator The Aftermath of a Self-Driving Tragedy </a>"
],
"Linked": [
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Landing Page.md\"> Landing Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/DG - News Page.md\"> DG - News Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Cover Page.md\"> Cover Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Cover Page.md\"> Cover Page </a>",
"<a class=\"internal-link\" href=\"04.04 Blog/Cover Page.md\"> Cover Page </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/QED Naval.md\"> QED Naval </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/VC Tasks.md\"> VC Tasks </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/@Investment Task master.md\"> @Investment Task master </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Crypto Tasks.md\"> Crypto Tasks </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/EOS.md\"> EOS </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/VC Investments.md\"> VC Investments </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Ocean Protocol.md\"> Ocean Protocol </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Thalès.md\"> Thalès </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Le Miel de Paris.md\"> Le Miel de Paris </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Nimbus.md\"> Nimbus </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Crypto Investments.md\"> Crypto Investments </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Helium creates an open source, decentralized future for the web.md\"> Helium creates an open source, decentralized future for the web </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Revolut.md\"> Revolut </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Enjin.md\"> Enjin </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/@Investment master.md\"> @Investment master </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Equity Investments.md\"> Equity Investments </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Chainlink.md\"> Chainlink </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Polkadot.md\"> Polkadot </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Equity Tasks.md\"> Equity Tasks </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Valneva.md\"> Valneva </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Aragon.md\"> Aragon </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Holochain.md\"> Holochain </a>",
"<a class=\"internal-link\" href=\"06.02 Investments/Airbus.md\"> Airbus </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-14.md\"> 2022-03-14 </a>",
"<a class=\"internal-link\" href=\"01.01 Life Orga/@Life Admin.md\"> @Life Admin </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-13.md\"> 2022-03-13 </a>",
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Fresh Tomato Eggs in Purgatory with Chickpeas.md\"> Fresh Tomato Eggs in Purgatory with Chickpeas </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Fresh Tomato Eggs in Purgatory with Chickpeas.md\"> Fresh Tomato Eggs in Purgatory with Chickpeas </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-13.md\"> 2022-03-13 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Jeff Zucker Scandal Inside the CNN President's Downfall.md\"> Jeff Zucker Scandal Inside the CNN President's Downfall </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/For the West, the Worst Is Yet to Come.md\"> For the West, the Worst Is Yet to Come </a>",
"<a class=\"internal-link\" href=\"00.03 News/Three Bodies in Texas.md\"> Three Bodies in Texas </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Telegram bots.md\"> Configuring Telegram bots </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-02-20.md\"> 2022-02-20 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-18.md\"> 2022-03-18 </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md\"> 2022-03-26 Fiancailles Eloi </a>",
"<a class=\"internal-link\" href=\"Test task.md\"> Test task </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Server Tools.md\"> Server Tools </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Server Alias.md\"> Server Alias </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Server Cloud.md\"> Server Cloud </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/GitHub - deividgdtfail2ban_telegram_notifications Sending fail2ban notifications using a Telegram bot.md\"> GitHub - deividgdtfail2ban_telegram_notifications Sending fail2ban notifications using a Telegram bot </a>",
"<a class=\"internal-link\" href=\"00.03 News/Amateur open-source researchers went viral unpacking the war in Ukraine.md\"> Amateur open-source researchers went viral unpacking the war in Ukraine </a>",
"<a class=\"internal-link\" href=\"00.04 IT/40+ of the best open-source tools to build your startup, from project management to infrastructure.md\"> 40+ of the best open-source tools to build your startup, from project management to infrastructure </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-13.md\"> 2022-03-13 </a>",
"<a class=\"internal-link\" href=\"00.03 News/Seneca On Coping with the Shortness of Life.md\"> Seneca On Coping with the Shortness of Life </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Simone de Beauvoir recommends we fight for ourselves as we age Psyche Ideas.md\"> Simone de Beauvoir recommends we fight for ourselves as we age Psyche Ideas </a>",
"<a class=\"internal-link\" href=\"00.03 News/The cells that can give you super-immunity.md\"> The cells that can give you super-immunity </a>",
"<a class=\"internal-link\" href=\"00.03 News/We Need to Retire the Term “Microaggressions”.md\"> We Need to Retire the Term “Microaggressions” </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-12.md\"> 2022-03-12 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-11.md\"> 2022-03-11 </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Server VPN.md\"> Server VPN </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Server Tools.md\"> Server Tools </a>"
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring Fail2ban.md\"> Configuring Fail2ban </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable.md\"> InstallEnable Secure NGINX with Custom Fail2ban Filters - LinuxCapable </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04.md\"> How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-17.md\"> 2022-03-17 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-31 Arrivée de Papa.md\"> 2022-03-31 Arrivée de Papa </a>",
"<a class=\"internal-link\" href=\"00.03 News/Whats in a Black name 400 years of context..md\"> Whats in a Black name 400 years of context. </a>",
"<a class=\"internal-link\" href=\"00.03 News/How to get the excitement back Psyche Guides.md\"> How to get the excitement back Psyche Guides </a>",
"<a class=\"internal-link\" href=\"00.03 News/As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ.md\"> As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ </a>",
"<a class=\"internal-link\" href=\"00.03 News/Ukrainian military long on morale but short on weaponry.md\"> Ukrainian military long on morale but short on weaponry </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Terrible Truth So Many Experts Missed About Russia.md\"> The Terrible Truth So Many Experts Missed About Russia </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-19 Arrivée Meggi-mo.md\"> 2022-03-19 Arrivée Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-24 Départ de Meggi-mo.md\"> 2022-03-24 Départ de Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md\"> 2022-03-26 Fiancailles Eloi </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-19 Arrivée Meggi-mo.md\"> 2022-03-19 Arrivée Meggi-mo </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md\"> 2022-03-26 Fiancailles Eloi </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Memos/2022-03-16.md\"> 2022-03-16 </a>",
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring UFW.md\"> Configuring UFW </a>",
"<a class=\"internal-link\" href=\"00.03 News/To Live and Love with a Dying World.md\"> To Live and Love with a Dying World </a>",
"<a class=\"internal-link\" href=\"00.03 News/Whats the Matter with American Cities.md\"> Whats the Matter with American Cities </a>",
"<a class=\"internal-link\" href=\"00.03 News/Why Black Women Are Divesting From Excellence & Embracing Mediocrity.md\"> Why Black Women Are Divesting From Excellence & Embracing Mediocrity </a>",
"<a class=\"internal-link\" href=\"00.03 News/Why Are Letters Shaped the Way They Are.md\"> Why Are Letters Shaped the Way They Are </a>",
"<a class=\"internal-link\" href=\"00.03 News/PM to fill out party questionnaire.md\"> PM to fill out party questionnaire </a>",
"<a class=\"internal-link\" href=\"00.03 News/XXX-Files Who Torched the Pornhub Palace.md\"> XXX-Files Who Torched the Pornhub Palace </a>",
"<a class=\"internal-link\" href=\"00.03 News/Putins New Iron Curtain.md\"> Putins New Iron Curtain </a>",
"<a class=\"internal-link\" href=\"00.03 News/Vladimir Putins Revisionist History of Russia and Ukraine.md\"> Vladimir Putins Revisionist History of Russia and Ukraine </a>",
"<a class=\"internal-link\" href=\"00.03 News/Will the Bush Dynasty Die With George P. Bush.md\"> Will the Bush Dynasty Die With George P. Bush </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Great Resignation has morphed into the Great Sabbatical.md\"> The Great Resignation has morphed into the Great Sabbatical </a>",
"<a class=\"internal-link\" href=\"00.03 News/Why Epicureanism, not Stoicism, is the philosophy we need now.md\"> Why Epicureanism, not Stoicism, is the philosophy we need now </a>",
"<a class=\"internal-link\" href=\"00.03 News/Opinion The Russia Sanctions That Could Actually Stop Putin.md\"> Opinion The Russia Sanctions That Could Actually Stop Putin </a>",
"<a class=\"internal-link\" href=\"00.03 News/Why Indian universities are ditching English-only education.md\"> Why Indian universities are ditching English-only education </a>",
"<a class=\"internal-link\" href=\"00.03 News/Society has a trust problem. More censorship will only make it worse..md\"> Society has a trust problem. More censorship will only make it worse. </a>",
"<a class=\"internal-link\" href=\"00.03 News/Notes apps are where ideas go to die. And thats good..md\"> Notes apps are where ideas go to die. And thats good. </a>",
"<a class=\"internal-link\" href=\"00.03 News/Imagine Scythias fierce warrior women, the real Amazons Aeon Essays.md\"> Imagine Scythias fierce warrior women, the real Amazons Aeon Essays </a>",
"<a class=\"internal-link\" href=\"00.03 News/Lenquête « Suisse Secrets » relance le débat sur la liberté de la presse face au secret bancaire.md\"> Lenquête « Suisse Secrets » relance le débat sur la liberté de la presse face au secret bancaire </a>",
"<a class=\"internal-link\" href=\"00.03 News/Jackass Oral Hostory.md\"> Jackass Oral Hostory </a>",
"<a class=\"internal-link\" href=\"00.03 News/In Kashmir, indigenous Muslim healers cure broken bones with spirituality — and science.md\"> In Kashmir, indigenous Muslim healers cure broken bones with spirituality — and science </a>",
"<a class=\"internal-link\" href=\"00.03 News/How the enigmatic Nefertiti came to be locked away in Germany Aeon Essays.md\"> How the enigmatic Nefertiti came to be locked away in Germany Aeon Essays </a>",
"<a class=\"internal-link\" href=\"00.03 News/Google Search Is Dying.md\"> Google Search Is Dying </a>",
"<a class=\"internal-link\" href=\"00.03 News/He spent 25 years infiltrating the Klan.md\"> He spent 25 years infiltrating the Klan </a>",
"<a class=\"internal-link\" href=\"00.03 News/Javanka in Exile.md\"> Javanka in Exile </a>"
],
"Removed Tags from": [
"<a class=\"internal-link\" href=\"06.02 Investments/Le Miel de Paris.md\"> Le Miel de Paris </a>",

@ -332,15 +332,20 @@
}
],
"01.02 Home/MRCK.md": [
{
"title": ":birthday: **[[MRCK|Meggi-mo]]'s Papa** (1962)",
"time": "2023-02-02",
"rowNumber": 249
},
{
"title": ":birthday: **[[MRCK|Meggi-mo]]**",
"time": "2023-02-28",
"rowNumber": 247
},
{
"title": ":birthday: **[[MRCK|Meggi-mo]]'s Papa** (1962)",
"time": "2023-02-02",
"rowNumber": 249
"title": "[[MRCK|Meggi-mo]] Saint Patrick's Day",
"time": "2023-03-17",
"rowNumber": 251
}
],
"01.03 Family/Thaïs Bédier.md": [
@ -409,7 +414,7 @@
"00.01 Admin/Memos/2022-02-16.md": [
{
"title": "07:50 [[Selfhosting]], [[Server Cloud]], [[Nextcloud]], [[2022-02-16|Memo]]: upgrade Nextcloud",
"time": "2022-03-17",
"time": "2022-06-17",
"rowNumber": 84
}
],
@ -434,27 +439,10 @@
"rowNumber": 88
}
],
"00.01 Admin/Memos/2022-03-13.md": [
{
"title": "17:38 [[2022-03-13.md|Memo]], [[@Family.md|Family]], [[Eloi de Villeneuve]]: Prendre mes billets pour Paris (w/e 26 Mars)",
"time": "2022-03-16",
"rowNumber": 88
},
{
"title": "18:31 [[2022-03-13|Memo]], [[Voitures]]: regarder prix avec la montée du carburant",
"time": "2022-03-17",
"rowNumber": 90
},
{
"title": "18:16 [[2022-03-13|Memo]], [[Eloi de Villeneuve]]: trouver un cadeau de fiancailles",
"time": "2022-03-22",
"rowNumber": 89
}
],
"01.01 Life Orga/@Life Admin.md": [
{
"title": "[[@Life Admin]]: Cancel UK mobile line",
"time": "2022-03-31",
"time": "2022-11-30",
"rowNumber": 77
}
],
@ -485,6 +473,25 @@
"time": "2022-03-18",
"rowNumber": 74
}
],
"05.02 Networks/Configuring UFW.md": [
{
"title": "[[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix",
"time": "2022-03-19",
"rowNumber": 239
},
{
"title": "[[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list",
"time": "2022-03-19",
"rowNumber": 240
}
],
"00.01 Admin/Memos/2022-03-18.md": [
{
"title": "07:35 [[Selfhosting]], [[Configuring Fail2ban]]: look at the filter for the Postfix jail",
"time": "2022-03-19",
"rowNumber": 88
}
]
},
"debug": false,

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-sortable",
"name": "Sortable",
"version": "0.2.2",
"version": "0.2.3",
"minAppVersion": "0.12.0",
"description": "Wiki-like table sorting.",
"author": "Alexandru Dinu",

@ -4,7 +4,7 @@
"type": "split",
"children": [
{
"id": "566e7ba005cfd5cd",
"id": "3fc6e2a459514956",
"type": "leaf",
"state": {
"type": "markdown",
@ -84,7 +84,7 @@
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
"unlinkedCollapsed": false
}
}
},
@ -96,7 +96,7 @@
"state": {
"file": "01.02 Home/@Main Dashboard.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
"unlinkedCollapsed": false
}
}
},
@ -143,17 +143,17 @@
],
"currentTab": 2
},
"active": "566e7ba005cfd5cd",
"active": "3fc6e2a459514956",
"lastOpenFiles": [
"01.02 Home/@Main Dashboard.md",
"00.01 Admin/Memos/2022-03-14.md",
"00.01 Admin/Memos/2022-03-13.md",
"00.01 Admin/Memos/2022-03-12.md",
"04.04 Blog/Landing Page.md",
"04.04 Blog/DG - News Page.md",
"00.03 News/A view from across the river.md",
"00.03 News/A Vibe Shift Is Coming.md",
"00.03 News/@News.md",
"05.02 Networks/Selfhosting.md"
"00.01 Admin/Memos/2022-03-17.md",
"00.01 Admin/Memos/2022-03-16.md",
"00.01 Admin/Memos/2022-03-18.md",
"05.02 Networks/Configuring Fail2ban.md",
"05.02 Networks/Configuring Monit.md",
"05.02 Networks/Configuring Postfix.md",
"05.02 Networks/Configuring Telegram bots.md",
"05.02 Networks/Configuring UFW.md",
"00.01 Admin/Calendars/2022-03-26 Fiancailles Eloi.md"
]
}

@ -0,0 +1,12 @@
---
title: Arrivée Meggi-mo
allDay: true
date: 2022-03-19
endDate: 2022-03-20
CollapseMetaTable: yes
---
# Arrivée de [[MRCK|Meggi-mo]]
Arrivée à [[@@Zürich|Zürich]] de Meggi-mo, le [[2022-03-19|19/03/2022]].

@ -0,0 +1,11 @@
---
title: Départ de Meggi-mo
allDay: true
date: 2022-03-24
endDate: 2022-03-25
CollapseMetaTable: yes
---
# Départ de Meggi-mo
Départ de ma [[MRCK|Meggi-mo]] le [[2022-03-24|24/03/2022]].

@ -0,0 +1,14 @@
---
title: Fiancailles Eloi
allDay: false
startTime: 15:00
endTime: 16:30
date: 2022-03-26
CollapseMetaTable: yes
---
# Fiancailles d'Eloi
Le [[2022-03-26]], Fiancailles d'[[Eloi de Villeneuve|Eloi]] avec [[Zélie]] à [[@@Paris|Paris]].
Cérémonie à 15h à Saint-Do, suivi d'une réception chez [[Laurence Bédier|Maman]].

@ -0,0 +1,9 @@
---
title: Arrivée de Papa
allDay: false
startTime: 20:25
endTime: 20:30
date: 2022-03-31
---
[[2022-03-31]], arrivée de [[Amaury de Villeneuve|Papa]] à [[@@Zürich|Zürich]]

@ -0,0 +1,7 @@
---
title: Départ Papa
allDay: false
startTime: 13:30
endTime: 14:00
date: 2022-04-04
---

@ -82,7 +82,7 @@ This section does serve for quick memos.
%% ### %%
&emsp;
- [ ] 07:50 [[Selfhosting]], [[Server Cloud]], [[Nextcloud]], [[2022-02-16|Memo]]: upgrade Nextcloud 📅 2022-03-17
- [ ] 07:50 [[Selfhosting]], [[Server Cloud]], [[Nextcloud]], [[2022-02-16|Memo]]: upgrade Nextcloud 📅 2022-06-17
- [x] 09:01 [[MRCK]], [[2022-02-16|Memo]]: Book ski trip for Meggi-mo's birthday 📅 2022-02-21 ✅ 2022-02-20
- [x] 11:59 [[@Lifestyle|Lifestyle]], [[2022-02-16|Memo]]: contact Raphson qui habite Zürich 📅 2022-02-18 ✅ 2022-02-16
- [x] 12:12 [[@Lifestyle|Lifestyle]], [[2022-02-16|Memo]]: contact Juliette Chevallier, Genève 📅 2022-02-19 ✅ 2022-02-18

@ -82,7 +82,7 @@ This section does serve for quick memos.
%% ### %%
&emsp;
- 00:24 Mon ami de droite
- 00:24 [[@Media France|Documentaire]]: Chercher 'ami de droite' sur le quinquennat Macron 📆2022-04-03
---

@ -86,9 +86,9 @@ This section does serve for quick memos.
%% ### %%
&emsp;
- [ ] 17:38 [[2022-03-13.md|Memo]], [[@Family.md|Family]], [[Eloi de Villeneuve]]: Prendre mes billets pour Paris (w/e 26 Mars) 📆2022-03-16
- [ ] 18:16 [[2022-03-13|Memo]], [[Eloi de Villeneuve]]: trouver un cadeau de fiancailles 📆2022-03-22
- [ ] 18:31 [[2022-03-13|Memo]], [[Voitures]]: regarder prix avec la montée du carburant 📆2022-03-17
- [x] 17:38 [[2022-03-13.md|Memo]], [[@Family.md|Family]], [[Eloi de Villeneuve]]: Prendre mes billets pour Paris (w/e 26 Mars) 📅 2022-03-16 ✅ 2022-03-16
- [x] 18:16 [[2022-03-13|Memo]], [[Eloi de Villeneuve]]: trouver un cadeau de fiancailles 📅 2022-03-22 ✅ 2022-03-16
- [x] 18:31 [[2022-03-13|Memo]], [[Voitures]]: regarder prix avec la montée du carburant 📅 2022-03-17 ✅ 2022-03-17
---

@ -0,0 +1,101 @@
---
Date: 2022-03-15
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 8
Happiness: 90
Gratefulness: 90
Stress: 40
FrontHeadBar: 5
EarHeadBar: 45
BackHeadBar: 35
Water: 3.3
Coffee: 6
Steps: 11572
Ski:
Riding:
Racket:
Football:
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-03-14|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-03-16|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-03-15Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-03-15NSave
&emsp;
# 2022-03-15
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,102 @@
---
Date: 2022-03-16
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 4
Happiness: 90
Gratefulness: 95
Stress: 40
FrontHeadBar: 5
EarHeadBar: 45
BackHeadBar: 35
Water: 3.6
Coffee: 2
Steps: 7515
Ski:
Riding:
Racket:
Football:
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-03-15|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-03-17|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-03-16Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-03-16NSave
&emsp;
# 2022-03-16
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
- 01:20 [[Selfhosting]], [[Configuring UFW|Firewall]]: Mise en place du process d'update des IP bloquées 📆2022-03-19
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,101 @@
---
Date: 2022-03-17
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 8.5
Happiness: 90
Gratefulness: 95
Stress: 40
FrontHeadBar: 5
EarHeadBar: 45
BackHeadBar: 35
Water: 3.25
Coffee: 3
Steps: 2646
Ski:
Riding:
Racket:
Football:
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-03-16|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-03-18|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-03-17Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-03-17NSave
&emsp;
# 2022-03-17
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,102 @@
---
Date: 2022-03-18
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 6
Happiness: 90
Gratefulness: 85
Stress: 40
FrontHeadBar: 5
EarHeadBar: 45
BackHeadBar: 35
Water:
Coffee:
Steps:
Ski:
Riding:
Racket:
Football:
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-03-17|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-03-19|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-03-18Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-03-18NSave
&emsp;
# 2022-03-18
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
- [ ] 07:35 [[Selfhosting]], [[Configuring Fail2ban]]: look at the filter for the Postfix jail 📆2022-03-19
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -13,9 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
%%
Read:: No
%%
---

@ -14,9 +14,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
%%
Read:: Yes
%%
Read:: [[2022-02-26]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-03-13]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-11]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-14]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-28]]
---

@ -0,0 +1,123 @@
---
dg-publish: true
Alias: [""]
Tag: ["Economy", "War", "Russia"]
Date: 2022-03-16
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-03-16
Link: https://www.icij.org/investigations/pandora-papers/as-the-west-takes-aim-with-russian-sanctions-heres-what-we-know-about-oligarchs-secret-finances
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: No
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-hereswhatweknowaboutoligarchssecretfinancesNSave
&emsp;
# As the West takes aim with Russian sanctions, heres what we know about oligarchs secret finances - ICIJ
****Update, Feb. 22, 2022:** Russian oligarchs Boris Rotenberg, Igor Rotenberg and Gennady Timchenko have been sanctioned by the U.K., along with five Russian banks, hours after President Vladimir Putin ordered troops into two separatist regions in Ukraine after recognizing their independence. [Read our full story here](https://www.icij.org/investigations/pandora-papers/uk-targets-three-oligarchs-and-five-russian-banks-in-first-tranche-of-new-sanctions/).**
As tensions continue to rise around the threat of a Russian invasion of Ukraine, authorities in the U.S. and the U.K. are looking to hit figures close to Russian President Vladimir Putin where it might hurt: in Western safe havens where they keep and spend their money.
Late last month, U.S. and U.K. officials said they [were preparing](https://www.wsj.com/articles/u-s-u-k-prepare-plans-to-sanction-russian-oligarchs-businesses-11643660794) economic sanctions for possible use against both sectors of the Russian economy as well as wealthy Russian individuals with close connections to Russian President Vladimir Putin and senior Russian government officials. The measures could include family members of the potentially targeted people.
“Sanctions would cut them off from the international financial system and ensure that they and their family members will no longer be able to enjoy the perks of parking their money in the West and attending elite Western universities,” a senior U.S. official [told Reuters](https://www.reuters.com/world/europe/us-prepared-sanction-russian-elites-close-putin-if-russia-invades-ukraine-2022-01-31/) late last month.
The sanctions regime that U.K. officials say they are devising may be the most worrying for rich Russians, who have long seen London as a safe destination for storing and growing their wealth.
> ***In elite Russian financial circles, there is always that lingering concern about what U.K. authorities know and what they could do** — Russia expert Alex Nice*
In late January, the U.K. government [said it was](https://www.wsj.com/articles/u-s-u-k-prepare-plans-to-sanction-russian-oligarchs-businesses-11643660794) working on a new proposed sanctions law that would leverage its status as a major destination of Russian private money in order to place political pressure on the Kremlin. This is a measure that critics have long urged the U.K. to take. “It will be the toughest sanction regime against Russia we have ever had,” the United Kingdoms Foreign Secretary Liz Truss [said](https://www.wsj.com/articles/u-s-u-k-prepare-plans-to-sanction-russian-oligarchs-businesses-11643660794).
“Its always like the gun you have on the table — it is in the room and gives you leverage without you using it,” Alex Nice, a researcher at the Institute for Government, told the International Consortium of Investigative Journalists of the prospect of U.K. authorities going after Russian money. “In elite Russian financial circles, there is always that lingering concern about what U.K. authorities know and what they could do.”
For more than a decade, [ICIJ](https://www.icij.org/) has tracked flows of money globally stories that have commonly involved wealthy Russians with elite political connections. These projects included the [Panama Papers](https://www.icij.org/tags/panama-papers/), the [Paradise Papers](https://www.icij.org/investigations/paradise-papers/), [FinCEN Files](https://www.icij.org/investigations/fincen-files/), and the [Pandora Papers](https://www.icij.org/investigations/pandora-papers/).
Here are five oligarchs whose financial dealings have been uncovered by ICIJ investigations and who have received additional scrutiny from authorities.
## Alisher Usmanov
***Politically connected Uzbek-Russian billionaire***
![Russian billionaire Alisher Usmanov and Vladimir Putin](https://media.icij.org/uploads/2017/11/UsmanovPutin-GettyImages-620w.jpg)
Vladimir Putin talks with Russian billionaire Alisher Usmanov.
Usmanov has for decades invested heavily in tech firms in Russia and elsewhere while keeping close [connections](https://www.icij.org/investigations/paradise-papers/senators-urge-adding-usmanov-official-oligarch-list-citing-paradise-papers-revelations/) to the Russian political elite. During the early days of Facebooks growth as a social media firm, Kanton Services, a firm with links to Usmanov provided a link between Russian state money and [large early investments in Facebook](https://www.icij.org/investigations/paradise-papers/kremlin-owned-firms-linked-major-twitter-facebook-investments-icij/), according to reporting from 2017 that was a part of [the Paradise Papers](https://www.icij.org/investigations/paradise-papers/kremlin-owned-firms-linked-major-twitter-facebook-investments-icij/). The leaked records reviewed by ICIJ indicate that all of Kantons shares were owned as recently as 2009 by an investment manager who is known as an Usmanov business associate.
Rollo Head, a spokesman for Usmanov, said Usmanov “has been a highly successful investor in Russian and international assets utilizing a combination of his own and borrowed funds.”
Usmanov has avoided major rounds of sanctions on wealthy Russians. He appeared on a 2018 U.S. Treasury Department list of Russian Oligarchs. [British MPs recently](https://www.bbc.com/news/uk-politics-55844146) called for sanctioning Usmanov over Russian political aggression.
## Gennady Timchenko
***Russian billionaire and oil magnate who is known for his close relationship with Russian President Vladimir Putin***
In 2010, Timchenkos investment fund, Volga Resources, became one of the largest shareholders in Novatek, one of Russias primary natural gas firms, extending Timchenkos considerable grip on Russias oil and gas industry.
[Pandora Papers reporting from October 2021 reveal](https://www.icij.org/investigations/pandora-papers/power-players/) a series of massive loans in 2007 and 2008 between anonymous offshore shell companies and a Timchenko firm registered in Cyprus. The Moscow Times reported that the firm, called White Seal Holdings, played a role in Timchenkos Novatek investment.
The files show that a Cyprus shell company called Vidrio Enterprises Limited loaned White Seal $572 million between 2007 and 2008. Some of the repayment dates were a single year after the loans were made. In 2008, White Seal received an additional $150 million from another anonymous Cyprus company called Bodela Holdings. It is unclear who ultimately owns Vidrio and Bodela Holdings, and Timchenko did not answer questions about the firms owners. In 2007, White Seal received a loan of $320 million from a shell company called Lerma Trading S.A., registered in Panama. Lawyers for Timchenko told ICIJ that “our clients unequivocal position is that he has always acted entirely lawfully throughout his career and business dealings.”
In 2015, the U.S. government sanctioned White Seal and Lerma Trading for “acting for or on behalf of” Timchenko. Timchenko was also director of LTS Holding Limited and beneficial owner of Roxlane Corporate Limited, both of which were registered in the British Virgin Islands.
## Arkady Rotenberg
***Russian businessman, billionaire and former [Judo partner](https://www.nytimes.com/2018/04/06/world/europe/russian-oligarchs-sanctions.html) of Vladimir Putin***
![Vladimir Putin and Arkady Rotenberg](https://media.icij.org/uploads/2020/07/Arkady_Rotenberg_Putin_GettyImages-1124908820-835x640.jpg)
Russian President Vladimir Putin and billionaire Arkady Rotenberg attend judo training in Sochi, Russia. Image: Mikhail Svetlov/Getty Images
In 2013, one of Arkady Rotenbergs companies received potentially lucrative [government contracts](http://imrussia.org/en/analysis/economy/765-will-the-south-stream-be-frozen) to work on a proposed $40 billion natural gas pipeline between Russia and Europe. Around the same time, three anonymous companies made huge payments into the Putin network, [records show](https://www.icij.org/investigations/panama-papers/20160403-putin-russia-offshore-network/). Two of the shadow companies, and likely all three, were controlled by Arkady Rotenberg, [according to Panama Papers](https://www.icij.org/investigations/panama-papers/20160403-putin-russia-offshore-network/) reporting from 2016.
Loans from these Rotenberg companies totaling more than $231 million appear to have gone to a British Virgin Islands-based company called Sunbarn Limited, created by a manager at Bank Rossiya, according to ICIJs [reporting](https://www.icij.org/investigations/panama-papers/20160403-putin-russia-offshore-network/); The loans had no repayment schedule.
When reached for comment by ICIJ in 2016, Arkady Rotenberg did not respond to a request for comment.
The European Union and the U.S. government [issued sanctions](http://www.bbc.com/news/world-europe-26672800) against Arkady Rotenberg in 2014, in retaliation for Putins annexation of Crimea. The U.S. also sanctioned his brother Boris.
## Oleg Deripaska
***Billionaire in Russias natural resources sector and close ally of Vladimir Putin***
Between 2013 and 2015, compliance officers at the Bank of New York Mellon [flagged 16 transactions as potentially suspicious](https://www.icij.org/investigations/fincen-files/confidential-clients/). Each of these transactions involved Mallow Capital Corp., a company registered in the British Virgin Islands that operates as a subsidiary of Oleg Deripaskas Basic Element Group. Mellon said Mallow Capital appeared to be a shell company operating in a high-risk area with no known legitimate business purpose. In 2012 and 2013, Mallow sent itself nearly $420 million using different British Virgin Islands addresses and different banks. Mallow also sent $20 million to another company with the same name, this one listing an address in Cyprus. The Bank of New York Mellon helped facilitate these transactions through a relationship with Moscow-based Bank Soyuz. Deripaska bought a controlling stake in Bank Soyuz in 2010, according to Reuters.
Banks reports of suspicious activity reflect the concerns of bank compliance officers and are not necessarily indicative of criminal conduct or other wrongdoing. Deripaska denied laundering funds or committing financial crimes.
## Yury Kovalchuk
***Russian banker and longtime confidant of Vladimir Putin, who [U.S. officials have called](https://www.wsj.com/articles/u-s-sanctions-against-russia-bite-putins-personal-banker-1414711043) Putins “personal banker”***
Kovalchuk is co-owner of a company, Ozon, that holds the title to what is reported to be Vladimir Putins favorite ski resorts, [according to a Panama Papers](https://www.icij.org/investigations/panama-papers/20160403-putin-russia-offshore-network/) story from 2016. Beginning in late 2009, Ozon received $11.3 million worth of loans from a key offshore company in the Putin network, the Panama Papers show. The loans carried an interest rate of 1 percent, according to the reporting.
One $5 million loan was revised and extended multiple times and was converted to Russian rubles; the exchange rate and new amendments reduced its value and ultimately, the amount owed, [the leaked documents show](https://www.icij.org/investigations/panama-papers/20160403-putin-russia-offshore-network/).
When reached for comment in 2016, a lawyer for Kovalchuk said information about Bank Rossiya was available from public sources, adding: “We do not understand why your decision was to address these questions to Mr. Yury Kovalchuk.”
At the time, Bank Rossiya did not respond to detailed questions about its role.
Kovalchuk has [previously](https://www.reuters.com/article/us-usa-sanctions-russia/u-s-sanctions-companies-people-over-russia-actions-in-ukraine-idUSKBN1492AH) been sanctioned by the US, who has called him a close adviser to Putin and his personal banker.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-21]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-21]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-22]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News]]
Read:: Yes
Read:: [[2022-02-07]]
---

@ -12,7 +12,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News]]
Read:: Yes
Read:: [[2022-02-07]]
---

@ -6,14 +6,14 @@ Date: 2022-02-12
DocType: "WebClipping"
Hierarchy:
TimeStamp:
Link: https://aeon.co/essays/how-the-enigmatic-nefertiti-came-to-be-locked-away-in-germany?utm_source=pocket&utm_medium=email&utm_campaign=pockethits
Link: https://aeon.co/essays/how-the-enigmatic-nefertiti-came-to-be-locked-away-in-germany
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-13]]
---

@ -0,0 +1,185 @@
---
dg-publish: true
Alias: [""]
Tag: ["Human", "Sex", "Desire"]
Date: 2022-03-16
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-03-16
Link: https://psyche.co/guides/how-to-rekindle-a-long-term-sexual-relationship-in-five-strategies
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: No
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-HowtogettheexcitementbackNSave
&emsp;
# How to get the excitement back | Psyche Guides
## Need to know
A married couple I worked with recently, Chris and Jonathan both in their 40s, together for more than 15 years once shared intense mutual attraction and physical chemistry, but for the past few years their sexual relationship had been stalling. Sex had become rote; Jonathan often found a to-do list of other things, such as the laundry, took precedence over sex.
Chris was increasingly frustrated and perplexed. He couldnt stop thinking about, and missing, the sexual intensity he used to share with Jonathan. Chris was particularly distraught after he planned a sexy birthday weekend for Jonathan at a pricey hotel in the Bahamas, and brought along sex toys and jockstraps (their version of sexy lingerie), only to find that Jonathan was sullen, grumpy and uninterested in sex.
We had two or three counselling sessions together, yet the needle wasnt moving much. Jonathan was still attracted to Chris, but he just wasnt feeling aroused, and was also starting to worry about his ability to muster an erection. Maybe this was just middle age, he thought. There were tears and apologies, and they both wondered what they could do, if anything, to rediscover their earlier passion.
**Sexual boredom is normal but reversible**
Ill return to Jonathan and Chris but, as a long-term couple, their predicament is far from unique. At the start of a romantic relationship, you dont need to suggest something new to try in bed everything is new. Novelty, unpredictability and spontaneity abound and, along with a dopamine-driven neurochemical cocktail, help keep the sexual excitement on tap. But, as time goes on, relationships often become more companionate, as sex takes a backseat to parenting, work, chores, in-laws, you name it.
About 10 years ago, together with Kristen Mark, who was then based at the Kinsey Institute at Indiana University (shes now at the University of Minnesota), I surveyed nearly 3,500 people in the United States and Canada about their sex lives. Most of them were heterosexual and all were in a committed relationship. More than 50 per cent reported being either bored or on the brink of boredom. In relationships of less than a year, women were twice as likely as men to be bored; by the three-year mark, it was men who were more likely to be bored. Thats a whole lot of boredom on both sides of the bed, and speaks to a problem I see in my practice all the time: boredom, sex ruts, low-pleasure/low-desire relationships are all too prevalent and often bring dire consequences in our study, 24 per cent of participants also reported having engaged in infidelity, with boredom as one of the contributing factors. But the good news is that a majority also told us they were interested in trying something new that their partner suggested.
A useful way to understand your libido and the difficulties of sustaining it in a long-term relationship is in terms of the dual-control model [developed](https://kinseyinstitute.org/pdf/Janssen_Bancroft_2006.pdf) by the sex researchers Erick Janssen and John Bancroft at the Kinsey Institute. Its based on the idea that our sexual arousal and associated behaviours depend on the balance between two systems: a sexual excitation system (SES) and a sexual inhibition system (SIS). Some experts [propose](https://pubmed.ncbi.nlm.nih.gov/15483367/) that we think of these two systems like a car that has an accelerator and a brake. Your SES is all the things that turn you on and heat you up sexually, for example: your attraction to your partner, a particular body part, a fantasy, a memory of hot sex, being touched in the right places, a particular sexual behaviour (such as oral sex) and feeling desired over others. Your SIS is the brake and is triggered by all the things that turn you off, such as: feeling exhausted, feeling full after eating, being angry at your partner, being anxious about some aspect of sex, or the resonance of trauma.
A particular challenge of being in a long-term relationship is that, as time passes, the sexual inhibitors start to stack up and the exciters start to lose some of their erotic potential. The sex educator Emily Nagoski, who has both expanded upon and popularised the dual-control model, wrote in her book *Come As You Are* (2015): The process of becoming aroused is turning on the ons and turning off the offs. In a long-term relationship, even as you work as a couple to eliminate those turn-offs, you and your partner mustnt forget about the turn-ons.
**Sexual arousal is as much psychological as physical**
When it comes to maintaining and promoting those turn-ons, one of the biggest problems I see in my work with long-term couples, regardless of gender and orientation, is that very often sex has become reduced to a series of predictable physical behaviours that might or might not generate pleasure to varying degrees. Thats why I always ask couples: So what did you do to create arousal with your minds? The question is purposefully a bit vague and Ill go on to say that we know, for example, that some women can fantasise their way to orgasms without even touching themselves. Additionally, when Im working with men who have problems gaining and/or maintaining erections, Ill often ask them to go home and watch porn (or whatever it is they masturbate to, which just so happens to always be porn) without touching themselves, so they can find out the extent to which their erection difficulties are physiological or psychological in nature. Most report back that they were able to gain robust erections in a matter of minutes, such is the power of mind-based arousal. This suggests that, if you wish to reawaken a long-term sexual relationship, you and your partner need to learn to share more of this psychological arousal with each other, rather than each individual keeping it to themselves.
**This is about having fun together**
Most of the time, couples come to see me with a predominantly relational view of sex, meaning they generally conceptualise sex in term of intimacy, affection and emotional closeness, with its apotheosis being passionate lovemaking. I often emphasise to them the recreational aspects: sex as a source of fun, pleasure, adventure and play. As you experiment with the following steps in this Guide, please try to keep this in mind. Too often, in my experience, many couples in committed relationships have lost the recreational aspect of sex, or perhaps never had it in the first place. If they are having fun sexually, its often when theyre on their own and accessorising their masturbation with newfangled sex toys and porn, or reading some hot erotica; or theyre enjoying the recreational aspects of sex extra-relationally, in an underground shadowland they are hiding from their primary partner. Remember, both aspects of sexuality the relational and the recreational are crucial to a healthy sex life, especially for couples in long-term relationships, and thats why I encourage you to think of sex as a rec-relational experience.
With all this in mind, and in the spirit of making everything old new again, here are some of my essential practical suggestions for ways you can begin to rekindle your sexual connection.
## What to do
**Know your desire framework, understand your partners**
Although desire is highly variable (from person to person and even day to day), sex researchers recognise that people can broadly be placed into two categories based on how they tend to become aroused spontaneous vs responsive. Inevitably, in many relationships, one partner is generally in a spontaneous (also known as highly reactive) desire framework, while the other partner may often be in a responsive (also known as deliberative) desire framework. Becoming more aware of these differences in your relationship is a useful first step toward reigniting passions. The following descriptions will give you an idea of which camp you fall in:
- Do you tend to always initiate sex? If so, its quite possible your experience of sexual desire is clear, palpable and forthright. You experience a sexual cue, which metabolises very quickly into arousal to create a strong subjective feeling of desire. This is whats known as **spontaneous desire**, and its what we see everywhere in the media: two strangers make eye contact across the room, cut to them passionately ripping each others clothes off; sex on the beach; sex in a stairwell. Spontaneous desire is passion unbridled. Desire is depicted as a need, a craving, a wanting, a drive, an urge thats easily triggered.
- But many people dont experience desire in a spontaneous or highly reactive manner. If youre in this category, desire for you doesnt have an instant onset; getting in the mood happens gradually. Desire isnt the first thing you feel, its more like the second, third or fourth down the line. If youre someone with this more **responsive-desire** framework, it can take multiple prompts unfolding over time to generate arousal, and you need to be in a context in which exciters are high and inhibitors are low.
Misunderstandings can easily arise when partners have different desire frameworks: spontaneous-desire partners may be wondering why theyre always initiating and not feeling their desire reciprocated, and the responsive person might wonder why their partner isnt more concerned about the background context, such as romance, emotional connection or the effects of stress and anxiety. Those in a responsive-desire framework are much more vulnerable to the effects of stressors (both situational and global). Ideally, you and partner will work together to create a shared framework, one in which the spontaneous-desire partner manages their arousal while the responsive-desire partner expresses a willingness to cultivate arousal.
The willingness window is a homework assignment I often give couples, which involves them scheduling a window of time (usually 20-30 minutes) in which they agree to show up regardless of their own desire and to engage in some sort of arousal-generating activity to see if responsive desire emerges. I dont expect couples to show up at the scheduled time with both partners brimming with desire, but I do ask them to show up with the willingness to engage. Some people balk at the idea of scheduling sex they think it should just happen spontaneously but when one partner is in a responsive-desire framework (which is often the case), sex needs to be more deliberate. If you and/or your partner are both in the responsive framework, you will need to work together to create a context in which any inhibitors are pushed aside so the exciters can take over. This also means talking about what exciters are going to create a runway into arousal. Try to schedule two willingness windows a week, with one window focusing on an activity that is physical/sensual in nature (a massage, for example, or making out) and the other window centred around an activity that is more psychological in nature. Speaking of which…
**Generate mind-based arousal**
Ive mentioned a few times the importance of generating psychological arousal as well as physical. Most couples I work with want to do this, but they often dont know how. Broadly speaking, there are two ways to do it, **face-to-face** and **side-by-side**. Face-to-face arousal involves activities such as sharing a fantasy, role-playing a sexy scenario, engaging in sexual power dynamics activities that can be done between two people with just their imaginations.
But thats easier said than done. With so much shame and inhibition around sex, generating face-to-face arousal takes willingness, vulnerability and courage. So, I suggest you start out by trying the other way. A side-by-side experience is less pressured, such as: reading some literary erotica aloud together, listening to a sexy podcast, or watching ethical porn (the kind where the performers actually want to be there see the Links & Books section at the end of this Guide for some suggestions).
Remember Jonathan and Chris? In one of our counselling sessions, Chris revealed that he fantasises about dominating Jonathan in roleplay. This piqued Jonathans interest and he admitted that he fantasises about being arrested by a hot cop and getting interrogated and body-searched in every imaginable nook and cranny. Chris said he would be totally into that, yet neither of them felt ready yet to dive in face-to-face. So I encouraged them to start with a side-by-side approach, to watch some ethical porn together that explored the scenario, and later, only once they were ready to transition to face-to-face, I encouraged them to go get some costumes and accessories, and give the roleplay a whirl. It took a lot of reassurance from me for them to move forward, but what ensued was the beginning of a reparative journey in their shared sex life.
**Make sure theres enough outercourse**
Many couples, especially heterosexual partners, focus too much on intercourse at the expense of other forms of sexual activity. According to a [study](https://pubmed.ncbi.nlm.nih.gov/21029390/) by Debby Herbenick at Indiana University and her colleagues, only about 10 to 15 per cent of heterosexual couples did not include intercourse the last time they engaged in sexual activity together. In my clinical experience, most couples get to intercourse in as little as seven minutes, often sooner than that. What this means is that a lot of pleasure is getting left off the table, especially for the many women who do not orgasm consistently from intercourse.
What else could you be doing? Some ideas come from a major [study](https://pubmed.ncbi.nlm.nih.gov/21883941/) published in the *Journal of Sexual Medicine* involving 25,000 gay and bisexual men in the US, approximately 65 per cent of whom said their last sexual experience did not involve intercourse. They engaged in many outercourse behaviours, such as oral sex and manual stimulation of the genitals, hugging and kissing. There were 10 discrete outercourse behaviours in all, but the gay and bisexual men in this study put them together in more than 1,300 combinations, with most sexual events involving five to nine different outercourse behaviours. Thats 1,300 personalised paths to pleasure and all outercourse based. So my message to you and your partner is to experiment with turning foreplay into core-play and to plan an outercourse-based sexual event from start to finish.
**Create an erotic thread between sexual events**
For many couples, there just isnt room in their busy lives for sexual energy to emerge. To engage in quality sex, you have to be in the sort of quality relationship that inspires you to have sex in the first place, and that means maintaining the erotic thread between sexual events: those moments when you can spontaneously express desire, or feel desired, and pivot in and out of a quick sexual charge without a feeling of pressure to do more. Most of the couples I work with are in egalitarian relationships that are free of traditional gender roles. When Im talking to these couples, I can hear an egalitarian language in how they speak to each other. I can hear a desire to be respectful, fair and considerate, to collaborate. This kind of language serves people well in most aspects of their relationship, but is it an erotic language? Is it sexy, raw and primal? Is it coming from a place of lust or arousal? How, when were leading these egalitarian lives, do we give ourselves and each other the necessary permission to slip into language thats erotically intentional and might be coming from a place thats anything but egalitarian a desire to eroticise, objectify, use and possess?
If you and your partner find it difficult to make this switch and need some help breaking the ice, try something simple, such as telling your partner, at an opportune moment, that you had a sexy dream about them. You could say something such as: I dont know what my subconscious was up to when I was dreaming about you last night, but, boy, was it hot… Hopefully, that will pique a partners curiosity, and then theres an opportunity to describe something sexy, or a sexualised way of seeing your partner, without feeling judged.
**Picture the sex life youd like to have together**
By the time couples make it into my office, they generally have a lot to say about their sex life, but its usually in the form of a complaint. Generally, after hearing about the problem that brought them in, I want to get them thinking about the solution. So Ill ask them a future-oriented question: Tell me, Ill say, if we were to work together for a relatively short period of time, maybe just a couple of months, meeting every other week or so, with homework assignments in between sessions, and you were actually able to get on the other side of this problem and put it behind you, what would that look like? How would you know things were better? If I were a fly on the wall, what would I see? What Im doing with these questions is asking them to imagine, in very positive terms, a vision of future sex. Im asking them to reframe a negative the problem into a positive: the solution. Once I ask for that future vision of sex and encourage them to elaborate, I start to hear about their sexual hopes and dreams, of how they just want to be wanted, or the languorous kissing they crave, or the sensual oral sex, or the overwhelming power they want to submit to, or the trembling into each other during orgasm, or all of the above! Suddenly, the language has shifted into a vocabulary thats not only positive, its sexy. Theyre actually generating the face-to-face arousal I discussed earlier. Sometimes I can even feel the heat in the room rise!
## Key points How to get the excitement back
1. **Sexual boredom is normal but reversible.** To reignite the spark, you need to eliminate the turn-offs and ramp up the turn-ons.
2. **Sexual arousal is as much psychological as physical.** You need to move past the same old predictable physical behaviours.
3. **This is about having fun together.** Many long-term couples become overly focused on the procreative and relationship aspects of sex, forgetting the fun side of it.
4. **Some people get aroused easily, others need a while to get warmed up.** Acknowledge your differences and agree to willingness windows where youll both agree to show up and see if desire emerges.
5. **Generate mind-based arousal.** Start with a side-by-side experience (such as watching porn together) and warm up to face-to-face experiences, such as engaging in roleplay.
6. **Make sure theres enough outercourse.** There are many paths to pleasure beyond basic intercourse.
7. **Create an erotic thread between sexual events.** Practise communicating in more erotic language outside of the bedroom.
8. **Picture the sex life youd like to have together.** If you reignited the spark, what would your sexual relationship look like?
## Learn more
**The eight components of magnificent sex**
For more than 15 years, my colleague, the clinical psychologist Peggy Kleinplatz, has been co-leading the Optimal Sexual Experiences Research Team at the University of Ottawa, including conducting what might very well be the largest in-depth study of people who claim to be having magnificent sex. She and her team have distilled their findings into eight core components, each of which could give you further ideas for how to rekindle your sexual relationship.
**Be completely present in the moment, embodied, focused, absorbed**
Many of Kleinplatzs participants cited the feeling of being present and absorbed as the major difference between great sex and merely good sex. Being present during magnificent sex means being focused on all levels mentally, physically, emotionally and spiritually, she and her co-author Dana Ménard wrote in their [book](https://www.routledge.com/Magnificent-Sex-Lessons-from-Extraordinary-Lovers/Kleinplatz-Menard/p/book/9780367181376) *Magnificent Sex* (2020). This means slowing down and being fully conscious, “inside the moment”. Of course, it can be challenging to get lost in the moment when thoughts of outside stressors work, kids, schedules interfere. Its no wonder that the study participants who were able to achieve this total immersion also reported having learned skills to cope with such distractions.
You and your partner will need to find your own ways of achieving absorption. One of my patients felt strongly that both giving and receiving a massage was his way of getting absorbed; another said taking a bath or shower together was important to him. Many of my female patients say that sex toys, particularly clitoral vibrators, help with absorption at various points during a sexual event. Another client told me about fooling around in complete darkness.
**Connect, align, be in sync, merge**
Many of Kleinplatzs participants also said that being present and feeling connected to their partners inside and outside of the bedroom was what made sex magnificent. Some described this sensation as feeling like one entity rather than two separate people. Through my client work, Ive heard of many different reactions and approaches people have to making a connection with their partner and getting in sync, such as changing kissing from light to deep, dancing, cooking together, mutual masturbation, and complimenting each other physically and erotically.
**Aim for deep sexual and erotic intimacy**
Do you feel emotionally safe during sex? Do you feel like you can be totally vulnerable naked from the inside out? Kleinplatz found that, for some participants, magnificent sex is inseparable from the relationship in which it happens. This component of magnificent sex is characterised by deep feelings of mutual respect and trust for their partners, she and Ménard explained in their book. People talked about caring, valuing and liking their partners. When I talk to my clients about intimacy, what usually comes up is a sense of closeness and trust, feeling truly seen and known by a partner in ways that nobody else does. For example, one of my clients talks about cuddling after sex (spooning, being tightly held) as the most intimate part of sex. Another client talks about deep conversation. Some couples talk about rituals they have that are just about the two of them; others talk about being able to be totally silly and dorky and feeling appreciated; yet another couple talks about power-play with ropes as the ultimate intimacy. Kissing comes up a lot. One client talks about letting a guy go down on her; another mentions being able to share his performance anxiety and potential erectile impairment as a form of sexual intimacy.
**Extraordinary communication and deep empathy**
Magnificent sex involves communication between partners, whether verbal or nonverbal. Many of Kleinplatzs participants said they found sex extraordinary when it allowed them to completely share themselves with their partner, especially if they revealed more personal or hidden aspects of themselves. So, think about the way you communicate about, during and around sex. What behaviours and activities promote extraordinary communication and empathy? Some of my clients have cited knowing what their partner likes and just doing it; or being able to say that some part of sex hurts or doesnt feel good without repercussion; or being honest about not having an orgasm; using dirty talk and language that normally makes them blush; not feeling judged; feeling able to initiate or take a rain check on sex; and using pet names.
**Be genuine, authentic, transparent**
For many people, magnificent sex also involves the opportunity to be completely uninhibited, unselfconscious and trusting. Many \[of our participants\] described the pleasure of being totally transparent and available with a lover; they also talked about the joy at receiving such revelations from their partners, wrote Kleinplatz and Ménard in their book. Getting comfortable with being uncomfortable may be an important skill for developing the capacity for magnificent sex.
Think about the behaviours that could help you feel genuine and authentic. Is it sharing a fantasy, or being able to moan as loud as you want? One client told me that being genuine meant sharing his gender-fluid fantasies.
**Be vulnerable and surrender**
Shared vulnerability and trust can be a powerful aphrodisiac, yet feeling vulnerable during sex is far from easy. One of my patients, who has struggled her whole life with body issues, talks about being naked and having lights-on sex as the epitome of vulnerability. In a similar vein, a male client of mine, who suffers from a lack of genital self-esteem and has always felt that his penis is extremely small, similarly talks about being seen naked, especially when flaccid, as being extremely vulnerable. Being physically naked isnt the only source of feeling vulnerable; it is also brought on by being emotionally exposed. Sometimes our vulnerable emotions such as fear, loneliness, sadness reside behind a wall of shame, or are shielded by protective emotions such as anger, disgust or jealousy. But allowing your vulnerabilities, physical or emotional, to be seen and soothed during sex can create a sense of emotional safety and connection that is truly magnificent. Participants in Kleinplatzs latest research used phrases such as letting go, being swept away, or taken and going with the flow to describe this kind of surrender. Many of my clients who explore BDSM talk about both submission and domination in terms of vulnerability, the trust they have to have for a partner in their respective roles, and how that can fuel intimacy and desire.
**Explore, take risks, have fun**
Interpersonal risk-taking was another feature of magnificent sex uncovered in the research. It doesnt mean sex without a condom. Instead, it refers to sex that involves shared emotional and erotic exploration, play, fun, humour, and pushing personal boundaries. Magnificent sex is a way to relax, experiment and not worry about making mistakes, Kleinplatz and Ménard wrote.
When I talk to my clients about exploration, fun and adventurousness, many of them mention the erotic themes and the fantasies theyd be open to or curious to explore. These can include BDSM, swinging, group sex, going to a sex party, bringing home a third person to have fun with, taking a risk with exhibitionism (for example, sex on the beach), opening up a relationship and [exploring](https://psyche.co/guides/how-to-explore-ethical-non-monogamy-with-care-and-kindness) consensual non-monogamy, exploring a fetish, or masturbating under the watchful eyes of a partner. Whether adventurousness for you is some sort of shared adventure happening out in the world, or simply you and your partner continuing to expand the possibilities between you, try to make some move into uncharted territory.
**Transcend and transform**
Magnificent sex is described as a combination of heightened states mental, emotional, physical, relational and spiritual, wrote Kleinplatz and Ménard. Participants in their studies said that, because magnificent sex allowed them to be their true and authentic selves, it was ecstatic, otherworldly, timeless and out-of-body. Some talked about experiencing alternative realities, being in a trance or a deep meditative state, or feeling high. Magnificent sex is not frivolous it can be life-altering, wrote Kleinplatz and Ménard. Sex is not just some bonus activity in life. It can define who we are, where were going and what were capable of becoming. This rings true in my work. Some of my clients tie sex to their spiritual or religious [beliefs](https://psyche.co/ideas/from-sexual-union-to-the-divine-the-teachings-of-ibn-al-arabi) and a feeling a connection to a higher power; others talk about the out-of-body experience of [orgasm](https://aeon.co/essays/delayed-orgasm-the-sexual-technique-thats-better-than-sex); others about the [afterglow](https://aeon.co/essays/why-post-sex-cuddles-and-pillowtalk-count-for-more-than-orgasm) of sex, and just feeling incredibly alive and connected to their partner.
## Links & books
The sexuality [app](https://getcoral.app/about) Coral is designed for individuals and couples looking to improve their sexual knowledge and connection.
The educational [website](https://www.omgyes.com/) OMGyes (one-off payment required) is a terrific science-based website developed to help women learn to masturbate, and it is great for couples to watch and learn from.
Erika Lust Media Centre is the eponymous [website](https://erikalust.com/erika-media-centre) of a leading director of indie erotic films and a great introduction to the world of ethical porn.
The audio subscription [site](https://www.dipseastories.com/) Dipsea provides a wide variety of sexy audio stories.
The online [store](https://www.babeland.com/) Babeland is my favourite sex-positive outlet for a wide range of toys, accessories and sexual inspiration.
To stay on top of sexual trends and insight into the latest research, the Sex and Psychology [blog](https://www.sexandpsychology.com/), by the social psychologist Justin Lehmiller, is a good option.
The [book](https://www.simonandschuster.com/books/Come-As-You-Are-Revised-and-Updated/Emily-Nagoski/9781982165314) *Come As You Are* (2015) by Emily Nagoski will give you more background on spontaneous and responsive desire and the dual-control model.
My [book](https://www.harpercollins.com/products/she-comes-first-ian-kerner?variant=32207941861410) *She Comes First* (2004) provides more advice on outercourse, sexual cliteracy and bridging the orgasm gap (the tendency for women to experience fewer orgasms than men in heterosexual relationships).
My most recent [book](https://www.grandcentralpublishing.com/titles/ian-kerner-phd-lmft/so-tell-me-about-the-last-time-you-had-sex/9781538734858/) *So Tell Me About the Last Time You Had Sex* (2021) is an in-depth guide to constructing highly personalised paths to pleasure.
The [book](https://www.harpercollins.com/products/the-erotic-mind-jack-morin?variant=32128771457058) *The Erotic Mind* (1995) by Jack Morin will give you more information on fantasy, psychological arousal and exploring core erotic themes.
The [book](https://www.harpercollins.com/products/mating-in-captivity-esther-perel?variant=32122437468194) *Mating in Captivity* (2006) by Esther Perel provides more information on maintaining desire, attraction and sexual unpredictability in the context of predictable relationships.
The erotic [anthologies](https://cleispress.com/author/21/rachel-kramer-bussel/) from Cleis Press, edited by Rachel Kramer Bussel, provide a wide variety of erotic lit to suit all tastes.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -6,14 +6,14 @@ Date: 2022-02-12
DocType: "WebClipping"
Hierarchy:
TimeStamp:
Link: https://aeon.co/essays/imagine-scythias-fierce-warrior-women-the-real-amazons?ref=refind
Link: https://aeon.co/essays/imagine-scythias-fierce-warrior-women-the-real-amazons
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-13]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-28]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-03-07]]
---

@ -12,7 +12,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News]]
Read:: Yes
Read:: [[2022-02-07]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-23]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-11]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-27]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-28]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-11]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-28]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-22]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-25]]
---

@ -0,0 +1,65 @@
---
dg-publish: true
Alias: [""]
Tag: ["Human", "Education", "Montessori"]
Date: 2022-03-15
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-03-15
Link: https://www.newyorker.com/books/under-review/the-miseducation-of-maria-montessori
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: No
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-TheMiseducationofMariaMontessoriNSave
&emsp;
# The Miseducation of Maria Montessori
When my daughter was little, I became fixated on a schoolhouse a few blocks from our apartment—a Tudor-style storybook cottage, with red trim and a brick chimney and a playground all of wood. Its first-floor windows were concealed by tall bushes of a deep impossible green, and everything that a childhood should be was waiting for my daughter behind them, or so I believed. When I went inside, my expectations were met. The children, aged two to six, were serious and serene, occasionally speaking to each other in low, considerate tones. They stacked blocks, strung beads, and arranged letter boards, and of course I had seen these *kinds* of blocks and beads and boards before, but never these specific, exquisite renderings of them. When it was time for “walking on the line”—a morning custom in which the children followed a line of tape on the floor, around and around, silent and judiciously spaced—I felt overcome by a sense of dazed compliance.
This was our local Montessori school, and I had convinced myself that, with a bit of scrimping and bootstrapping, I could somehow find the money to send my daughter there. I scheduled her required interview; afterward, the director told me, “Oh, shes a *dream*,” and in that moment I would have signed a Sea Org contract in exchange for a year of my kids enrollment. But when I reviewed the numbers, the following weekend, I concluded that I could pay the tuition only if I went into credit-card debt—and, really, if that qualifies as being able to “afford” something, what *cant* you afford? I withdrew her application, and, to self-soothe, I bought a Montessori-ish hundred-piece counting board for her off Amazon. (She barely touched it, and I gave it away after her toddler brother expressed an interest in eating the numbers.)
For the Montessori-curious parent on a budget, there is consolation in the wide and lasting influence of the movements founder, Maria Montessori, the Italian physician and educator whose ideas and innovations are ubiquitous even in the preschools that do not bear her name. The eschewing of individual desks in favor of mats and child-size tables, the primacy of hands-on learning, daily observances such as “circle time” (when children sit cross-legged on a rug to share news and participate in group lessons) and “choice time” (when children busy themselves at various classroom “centers” for art, music, tower-building, and so on)—all of these elements of early-childhood education are indebted to Montessoris philosophy.
At the turn of the twentieth century, it was revolutionary to think that a childs education could be child-centered—shaped according to his or her actual brain and body. Montessori and her many disciples made this common sense. Whats more, they believed something that still seems counterintuitive today: that children are, in their essence, methodical, self-directed beings with a strong work ethic, perfectly capable of deep concentration, and that their tendency toward inattention and disruption can be a reasonable response to disharmonious surroundings. As Cristina De Stefano writes in “[The Child Is the Teacher](https://www.amazon.com/Child-Teacher-Life-Maria-Montessori/dp/1635420849)” (Other Press), a new biography of Montessori, “Children, placed in the right environment, provided with the right materials, soon stop being agitated and noisy and are transformed into quiet creatures, calm, happy to work.”
This most orderly and tranquil of educational philosophies had its beginnings in the most grim and chaotic of circumstances. In 1897, Montessori, one of the first women in Italy to earn a medical degree, had recently graduated from the University of Rome and was volunteering at the schools psychiatric clinic, where her responsibilities entailed visits to the citys ghastly insane asylums. At the time, mental illness was widely viewed by Catholics as a form of divine retribution, but Montessori became attached to the children who lived in the asylums, many of whom had been committed owing to disabilities, although others simply suffered from malnutrition or neglect. Her interest in the children led her to the writings of the special-education pioneer Édouard Séguin, who employed balls, blocks, beads, buttons, and everyday tools in his work with asylum children in Paris, and of Friedrich Froebel, the German educator who originated the concept of kindergarten and gave his name to the toys known as “Froebel gifts”: balls of yarn, wooden spheres and cylinders. Séguin and Froebel understood that childrens desire to touch and manipulate everything around them, easily mistaken as behavior to be managed, might be better seen as self-education.
In 1900, at the age of twenty-nine, Montessori became the co-director of the Orthophrenic School, in Rome, the nations first training institute for special-education teachers. The trainees worked with students who were selected from the asylums or who had been unable to keep up at state schools. For two years, Montessori taught students and teachers for upward of eleven hours a day, then worked late into the night reading, writing, and sketching plans for her own Froebel-inspired “gifts.” Some of her students, amazingly, went on to pass the same primary-school exams as their mainstream peers, although Montessori shrugged off the results—the strong performance of her “little idiots,” as she called them, was more an indictment of the state-school system than it was an endorsement of her pedagogy, she said.
The Orthophrenic School was also a key plot point in a cascading personal melodrama: Montessori had fallen in love with her co-director, Giuseppe Montesano, and given birth in secret to their son. The child was whisked off to a wet nurse in the countryside; Montesano married another woman, and Montessori, finding proximity to her ex-lover unbearable, resigned her position at the school. In this moment, De Stefano writes, she lost “everything she had done for special education, the mission for which she had given up her son at birth.” Such a sacrifice would undoubtedly provide the tragic pivot for the Oscar-bait biopic of Montessoris life. But its not entirely reflective of actual events: after she resigned, she pursued anthropological research in mainstream public schools, finished translating some six hundred pages of Séguins writings into Italian, and took an appointment at the University of Rome, where she gave lectures that proposed “practical foundations of a far-reaching reform in our schools.” (She was reunited with her son, Mario, when he was a teen-ager, and as an adult he became one of her closest collaborators.)
The chance to pursue that reform came in 1906, when Montessori, now an educator of some renown, gained the backing of a group of Roman financiers. The next year, on the day of the Feast of the Epiphany, she opened her first schoolroom—the Casa dei Bambini, or Childrens House—in a tenement in San Lorenzo, a working-class neighborhood with high rates of poverty. The building superintendents daughter was put nominally in charge, overseeing about fifty children, ages two to six, in activities such as button-fastening, water-pouring, and drawing with colored pencils. The schools multiplied in Italy, then across Europe, often finding their most hospitable environments in regions with a strong socialist presence. At the Casa dei Bambini in Naples, some of the pupils were so poor that they werent familiar with the utensils they set out at meal time; in France, Montessori classes were set up expressly to aid kids who had been traumatized by the First World War. And yet these children, despite their deprivation, evinced a stunning response to Montessoris methods. In particular, they made rapid and enthusiastic progress in their writing skills, encouraged by a system—movable letters, cut from sandpaper and pasted on boards—that was based on play, rather than on rote memorization.
Montessori had found the contours of her philosophy, and she detailed them in her first book, which was published as “The Montessori Method” in America, in 1912. It was prophetic in ways that remain uncanny. Her schoolrooms did away with rewards and punishments—among her many rebukes to the heaven-or-hell endgame of the Catholic Church—and aimed to instill intrinsic motivation and self-regulation, concepts promoted by the wildly popular parenting gurus of today, such as [Janet Lansbury](https://www.newyorker.com/magazine/2022/01/17/janet-lansburys-gospel-of-less-anxious-parenting) and Dr. Becky. In her laments that teen-agers are “subject to the small-minded blackmail of the bad grade, ” Montessori anticipated the “gradeless movement” in schools, the [opt-out movement](https://www.newyorker.com/news/daily-comment/the-defiant-parents-testings-discontents) for standardized tests, and a wealth of literature indicating that a focus on grades and tests can discourage meaningful learning. And, in her assertion that, in De Stefanos words, “authoritarianism and competition—the ingredients of school as traditionally conceived—create violence,” Montessori foresaw aspects of the school-to-prison pipeline.
“The child, a free human being, must teach us and teach society order, calm, discipline, and harmony,” Montessori wrote. In some ways, the engine of her method was paradox: order is freedom, and vice-versa; the teacher is subordinate to the child, but powerfully so; a child must be left to her own devices, but left to them systematically, and the devices shall be made of wood.
De Stefanos American and Italian publishers have stated, in their promotional materials and jacket copy, that “The Child Is the Teacher” is “the first biographical work on Maria Montessori written by an author who is not a member of the Montessori movement, but who has been granted access to original letters, diaries, notes, and texts written by Montessori herself.” Its a curious claim, given that the journalist Rita Kramer published a biography, in 1976, that drew on the archive of the Association Montessori Internationale and interviews with Mario and other family members. In her afterword, De Stefano waves away that book as “solid but dated,” and yet her own biography seems at times a kind of digest of Kramers, recapitulating the same events and pulling from the same sack of anecdotes and quotations, but often stripping them of historical, cultural, or pedagogical context.
What De Stefano does bring to her subject is a distinct style—she recounts Montessoris life in a declamatory, sometimes hyperbolic present tense, beginning with a young Maria sitting in a classroom in Rome, in 1876, that “is like all the others in the Kingdom of Italy: a prison for children.” When Maria reads aloud to her class, “she makes everybody cry.” (Really? *Everybody*?) The chapters are short and the pace is brisk: Maria is interviewing for medical school on page eleven. She seems to glow alone in a darkness; she has very few forebears (the exception is Séguin, to whom De Stefano devotes two chapters and change) and no afterlife. When she dies, the book is done.
And what is Maria Montessoris afterlife? De Stefano criticizes unnamed skeptics who believe that Montessoris “ideas cannot be applied in schools for the masses, that they work only with the children of the rich, who attend private schools.” Yet the obvious irony of Montessoris crusade on behalf of the poorest and least powerful in society is that its most visible legacy is selective private schools for the élite. As word of the San Lorenzo experiment travelled around Rome, two of the early adopters were the citys mayor and the British Ambassador to Italy; soon, aristocrats and diplomats were hosting Montessori classrooms in their parlors. The first Montessori school in North America began in a Georgian mansion in Westchester, in 1911, with twelve students: the six children of Frank Vanderlip, a founder of the Federal Reserve, and some cousins and friends. The educator Helen Parkhurst, who trained under Montessori in Rome, went on to found the Dalton School, in New York City, where tuition now tops fifty-seven thousand dollars. And, although Montessoris influence remains a salutary force in universal pre-K programs, it dims abruptly in public kindergarten, where Common Core standards squeeze out free play in favor of academic drills and assessments. (I dread the day that my son, currently enrolled in New York Citys U.P.K. program, is forced to resign as mayor of the block center.) Today, there are only a few hundred public Montessori schools in the U.S., and as Mira Debs, the executive director of Yales Education Studies program, has pointed out, they tend to follow a pattern, “becoming Whiter and wealthier with time.”
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,117 @@
---
dg-publish: true
Alias: [""]
Tag: ["Politics", "War", "Russia"]
Date: 2022-03-16
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-03-16
Link: https://slate.com/news-and-politics/2022/02/ukraine-invasion-putin-is-ruling-alone.html
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: No
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-TheTerribleTruthSoManyExpertsMissedAboutRussiaNSave
&emsp;
# The Terrible Truth So Many Experts Missed About Russia
[Politics](https://slate.com/news-and-politics/politics)
## Vladimir Putin didnt always rule his country alone. Now he does, and the dictator appears to care little about the consequences of his actions.
![Putin speaks as he sits at a conference table](https://compote.slate.com/images/20de8078-8049-4cf2-a7fa-3f4b203b9fc9.jpeg?width=780&height=520&rect=3432x2288&offset=245x0) ![Putin speaks as he sits at a conference table](https://compote.slate.com/images/20de8078-8049-4cf2-a7fa-3f4b203b9fc9.jpeg?width=780&height=520&rect=3432x2288&offset=245x0)
Vladimir Putin in Moscow on Sunday. Russian Pool/Reuters TV via Reuters
The belief that Vladimir Putin was bluffing, that he would never give the order for the nearly 200,000-man army he had spent months amassing on the borders of Ukraine to invade, persisted as late as 5:45 a.m. Moscow time the day of the attack, when, grimacing in a red tie, Russias ruler of almost 23 years announced in a prerecorded statement what he called “a special military operation.”
This was not just a shock on American political Twitter. It was a shock to many of the leading experts and policymakers in the United States, Europe, and even Ukraine. The head of German intelligence was so caught off guard that he was still in Kyiv and had to be evacuated.
But nowhere did the shock feel more profound than among foreign policy analysts in Russia, where overwhelming consensus, until that very moment, had been that Putin would never launch such a war.
## Subscribe to the Slatest Newsletter
A daily email update of the stories you need to read right now.
Please enable javascript to use form.
Email address:
Send me updates about Slate special offers.
By signing up, you agree to our [Privacy Policy](https://slate.com/privacy) and [Terms](https://slate.com/terms).
Even someone as experienced as Sir John Sawers, former head of the British intelligence agency MI6—the role code-named M in the *James Bond* universe—[told me just a week before](https://www.youtube.com/watch?v=KOVkLt8hEWU) the invasion began: “The idea that Putin was actually going to invade the whole of Ukraine, topple the Kyiv government, and occupy the whole country, for years to come—I never thought that that was a realistic prospect.”\*
Among even the leaders who had spent weeks warning a major offensive was imminent, a tone of surprise was not too hard to detect in their statements. “I cannot believe this is being done in your name,” [said British Prime Minister Boris Johnson](https://www.bbc.com/news/world-europe-60503037), trying to address, for a moment, the Russian people, “or that you really want the pariah status it will bring to the Putin regime.”
However, that phrase—“the Putin regime”—which has been stuck to all discussions of Russian politics now for almost 20 years, in some ways itself helps explain why so many people who believed they understood the country turned out to be so wrong about the Ukraine conflict. It has become clear that what exists inside the Kremlin is no longer a “regime” at all—a system of government where multiple figures can affect and feed into decision-making, from security chiefs to billionaires—as many believed.
Instead, it has transformed into what political scientists call a personalist dictatorship, where the whims of one man, and one man only, determine policy, a fact that has terrifying implications for Russia and the world.
Americans tend to see the world in much the same way as President Joe Biden frames it in his [speeches](https://www.reuters.com/world/biden-democratic-nations-race-compete-with-autocratic-governments-2021-06-13/), divided neatly between “democracies” and “autocracies.” But the reality is that authoritarian states exist on a political spectrum depending on how much power is exercised by a single individual—and where states land on this spectrum has a big impact on matters of war and peace. At one end, you have civilian-run regimes, like Hu Jintaos China or Leonid Brezhnevs Soviet Union, where political power is checked and shared within a ruling party. At the other, you have personalist dictatorships like that of, say, Saddam Hussein, where rivals are purged, loyalists are rewarded, cults of personality flourish, and all authority runs through the glorious leader.
The political science literature suggests that personalist dictatorships are more erratic and dangerous to the outside world than other sorts of autocracies.
Researchers have found they [are more likely](https://ideas.repec.org/a/cup/apsrev/v106y2012i02p326-347_00.html) to start wars, for instance (institutionalized civilian-run regimes are about as apt to use force as democracies), and [also tend](https://www.tandfonline.com/doi/abs/10.1080/09636412.2013.786911) to perform worse militarily (not surprising, since their leaders are often surrounded by yes men). But while civilian-run regimes might be less apt to launch destructive, harebrained conflicts in the short term, in the long term they can still be ticking time bombs.
Thats because as they age, their intricate power structures often devolve and allow dictators to consolidate personal control. In a [forthcoming paper](https://www.andrewmleber.info/_files/ugd/c6b86c_3b687edd4cd040239c9944076f5c4d4f.pdf), Andrew Leber and Matthew Reichert of Harvard University and Christopher Carothers of the University of Pennsylvania theorize that this tends to happen when theres no influential old guard of political elites who can stop them. All of which pretty much sums up what has happened in Russia over the last two decades.
While the worlds news readers may long have thought of Vladimir Putin as a dictator, most Russia analysts and policymakers saw the Kremlin differently. And for most of Putins nearly 23-year journey in power, they were right to do so. What existed was a complicated regime beyond one man where lots of people exerted influence and could check Putins impulses.
Putin began his rule as Boris Yeltsins chosen successor in 1999. Then, he was a kind of semi-democratic populist strongman—closer to Turkeys Recep Tayyip Erdogan than the Putin of today. He turned toward full-on authoritarianism with the rigged 2004 Russian elections. But his government still looked to the [U.S. Embassy](https://www.amazon.com/Cold-War-Hot-Peace-Ambassador/dp/0544716248) like a regime in which billionaires and security chiefs influenced grand strategy when he installed Dmitry Medvedev as puppet president from 2008 to 2012 and toyed with retirement.
Mass protests against the government may have changed Putins thinking, and he began to tighten his grip on power after returning to the presidency in 2012. As Leber and his co-authors note, by then, nobody in Russia was in a position to challenge him. But, even as late as 2014, when Putin decided to annex Crimea, the move was taken [after a night of intense discussion](https://www.bbc.com/news/world-europe-31796226) with his inner circle in the Kremlin—after commissioning secret polls on public opinion. There was still some semblance of a *regime*, albeit one in which Putin tightly controlled its reins.
This brings us to today. A key reason that many wise foreign policy hands thought Russia was bluffing about an invasion was that they assumed Putin wasnt making his decisions alone. This assumption informed much of Western strategy. Experts believed that threatening Russian oligarchs with sanctions, for instance, would encourage Putins inner circle to push back against war. Offering accommodation—for example, changes to the Ukrainian Constitution, autonomy for the Donbas region under the Minsk Agreement, or a 20-year moratorium on NATO expansion—would satisfy the regimes rational actors, the thinking went, even if Putin himself had grander visions of territorial conquest. Threats of economic sanctions were supposed to raise the oligarchs concerns about public backlash. The prospect of high casualties, of what was already certain to be a very unpopular war, convinced many that a regime concerned somewhat with public opinion would undertake it.
But the world is now realizing that the Putin regime is really just Vladimir Putin. And he is apparently no longer worried about what war will mean for Russias rich, much less its masses.
This was made brutally clear to all in the astonishing session of the Russian security council [a week ago](https://www.ft.com/content/95074e66-2da9-431e-8959-2039f5d3c08d). In the echoing and ornate hall of St. Catherine in the Kremlin, a former imperial throne room where the annexation of Crimea was announced in 2014, Putin gathered his most senior lieutenants to “consult them” on whether to recognize the independence of the so-called Luhansk and Donetsk Peoples Republics.
Not only did many of them look visibly uncomfortable, but the head of Russian foreign intelligence, Sergey Naryshkin, looked actually scared—to the point [where he forgot](https://www.youtube.com/watch?v=g5xzFRVlpZI) whether he was being asked whether or not to welcome the republics into Russia itself or merely if they should be recognized as independent.
The same shift was more subtly visible in St. Catherines Hall after the fighting began.
Putin summoned the countrys leading businessmen to what the Western press described as an “oligarchs meeting.” However, as [astutely noted](https://twitter.com/maxseddon/status/1496804727199305728) by the Financial Times Moscow bureau chief, Max Seddon, few of those present were what we actually think of as oligarchs: billionaires of independent wealth, power, and influence, the type who dominated Russia back in the 1990s.
Instead, those at the “oligarchs meeting” were by and large state company directors with an intelligence background or Putin cronies elevated to great wealth—men who owe their positions to Putin, not the other way around; men who act as placeholders and frontmen for him in the commanding heights of the economy. The best way to understand their political position is through a joke common in Moscow: “They are not oligarchs; they just work as oligarchs.”
At this point, analysis of what Russia might do next largely consists of guessing the state of Putins mind. (As the New York Times Tom Friedman [put it](https://www.nytimes.com/2022/02/21/opinion/putin-ukraine-nato.html), “The only place to be for understanding this war is inside Russian President Vladimir Putins head.”)
The press is chock-full of speculation about his sanity; now that hes ordered Russias nuclear forces on [high alert](https://apnews.com/article/russia-ukraine-kyiv-business-europe-moscow-2e4e1cf784f22b6afbe5a2f936725550), weve all been forced to contemplate the possibility that this conflict could somehow spiral into atomic death and destruction. Certainly, its unclear who could stop Putin from irrational action.
But how did so many miss that Putin and his rule had changed? Part of the answer is that Putin has been in power so long that much analysis simply got frozen in the past. Impressions about a Russia dominated by “oligarchs” froze into legend and did not keep up with their effective liquidation as a class. (It didnt help that Westerns know plenty of Russian billionaires from the Davos circuit, but dont know the security officials whove [increasingly embraced](http://www.amazon.com/dp/0300226454/?tag=slatmaga-20) the sort of religious nationalism that seems to have gripped Putin.)
The pandemic also made it difficult for outsiders to notice Putins apparent descent into paranoid isolation; he has apparently cloistered himself for the past few years through ultra-strict personal lockdowns and social distancing measures that may have affected his judgment. The absurdly long tables Putin has sat at for meetings have become a symbol of his remoteness (and a pretty good meme). French President Emmanuel Macron [reportedly](https://www.reuters.com/world/europe/moscow-macron-found-different-tougher-putin-2022-02-10/) found him a completely “different person” in early February from the man he last met in 2019.
And finally, [Western Russia analysis failed](https://twitter.com/KadriLiik/status/1496757863007473666?s=20&t=QB4_ncBE1J2sTilJmRU3YQ) because it depends on Russian analysis of its own society, and that failed even more catastrophically. There, an expert class inured by decades of propaganda underestimated the effect that the systematic dismantling of Russian journalism has had on its ability to know what goes on inside the Kremlin. This, mixed with denial: It was simply too terrifying to contemplate the fact Russians were living under dictatorship where all the guardrails had fallen off. Though Americans may think of Russia as a society used to tyrants, this is subtly missing the point. The post-Stalin Soviet Union was a collectively ruled, civilian-led authoritarian regime, not one-man rule. Stalin died when Putin was less than 5 months old, meaning the ability to spot the warning signs of personalist dictatorship are almost as distant to Russians as Hitler is to the Germans.
What can we expect next in this new phase of Putinism? Unfortunately, the political science literature makes grim reading for Russians. As studies would predict, the invasion of Ukraine is going quite poorly. But only 12.5 percent of personalist leaders lost power within two years after losing a war, according to a [2009 data set](https://ideas.repec.org/a/cup/apsrev/v106y2012i02p326-347_00.html). [Research](https://journals.sagepub.com/doi/abs/10.1177/0738894216651826?journalCode=cmpb) by Desha Girod, Megan Stewart, and Meir Walters at Georgetown suggests that oil-rich autocrats are better positioned to repress dissent at home while resisting international pressure. [Research](https://ideas.repec.org/a/cup/apsrev/v106y2012i02p326-347_00.html) also comprehensively shows that leaders like Putin tend to be removed only by death or a coup. The more intense the personalization of a government, the harder it is to execute a coup—but it is harder still to imagine a peaceful transition of power in Russia.
There is a ray of hope, however. Of the worlds wealthier authoritarian states, Russia is arguably the only one to briefly have had something of a democracy and a free society in its modern history (the debate depends on whether you still count Turkey as a democracy). All the others—the Gulf petro-monarchies, China, Singapore, Kazakhstan—have never experienced a break in authoritarian rule. That may make some of Russias elites and regular citizens more likely to push back rather than accept a deeper descent into autocracy. Putins war is already imposing a new repressive order on society while sanctions are isolating it from the world economy. In both cases, this means taking Russians backward, toward something more like the USSR than the last few years—a considerably more difficult task than other personalist dictators have attempted. Much as the invasion of Ukraine is proving harder than Putin seems to have expected, so too might pulling off that degree of oppression.
Correction, Feb. 28, 2022: This piece originally misidentified the code name of the head of MI6 in *James Bond* as C. It is M.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-22]]
---

@ -0,0 +1,101 @@
---
dg-publish: true
Alias: [""]
Tag: ["Politics", "War", "Russia"]
Date: 2022-03-16
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-03-16
Link: https://apnews.com/article/europe-russia-ukraine-moscow-crimea-3bd1a7cc472dd9d576c7642ffea0f87f
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: No
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-UkrainianmilitarylongonmoralebutshortonweaponryNSave
&emsp;
# Ukrainian military long on morale but short on weaponry
KYIV, Ukraine (AP) — When Russia annexed [Ukraines Crimean Peninsula and threw its support behind separatists in the countrys east more than seven years ago](https://apnews.com/article/europe-russia-ukraine-vladimir-putin-moscow-1170930d07c3b41d227dbf44b062aa26), Kyivs underfunded and disorganized armed forces struggled to mount a credible response.
Now, [amid fears that a Russian troop buildup near Ukraines border](https://apnews.com/article/europe-russia-ukraine-moscow-kyiv-8b311835f8940dce18b415a369f050f4) could signal a possible attack, military experts say Moscow would face stronger resistance this time. But they emphasize that Ukraine would be well short of what it needs to counter Russias overwhelming land, sea and air superiority.
Still, years of fighting the separatists have given Ukrainian veterans like Col. Viacheslav Vlasenko the battlefield experience for such a fight.
“In case of Russian aggression. I will have no choice — every Ukrainian is ready to die with arms in hands,” said the highly decorated 53-year-old Vlasenko. “Ukraine will never become a part of Russia. If we have to prove it to the Kremlin that Ukraine has the right for freedom and independence, we are ready for it.”
While Western military assistance has remained limited, Ukraine still received state-of-the-art foreign weaponry, including sophisticated U.S. anti-tank missiles and Turkish drones to provide a heavier punch than they had in years past.
Vlasenko, who spent 4 1/2 years battling the rebels in the east in a conflict that has killed more than 14,000 people, said the country now has thousands of highly motivated and battle-hardened troops.
“We Ukrainians are defending our land, and there is no place for us to retreat,” said Vlasenko, adding that he takes his 13-year-old son to target practice so that he knows “who our enemy is and learns to defend himself and fight back.”
Earlier this week, President Volodymyr Zelenskyy praised Ukraines soldiers on a visit to an area near the conflict zone to mark a military holiday.
“Ukrainian servicemen are continuing to perform their most important mission — to protect the freedom and sovereignty of the state from the Russian aggressor,” Zelenskyy said.
U.S. intelligence officials have determined that Russia has moved 70,000 troops near Ukraines border and has made preparations for a possible invasion early next year. Moscow has denied any plans to attack Ukraine, rejecting Western concerns as part of a smear campaign.
On Tuesday, [U.S. President Joe Biden warned Russian President Vladimir Putin](https://apnews.com/article/joe-biden-europe-middle-east-russia-ukraine-a010c200fe1d648694ed5b11aa097511) in a video conference that Moscow would face “economic consequences like youve never seen” if it invades Ukraine, although he noted that Washington would not deploy its military forces there.
Putin reaffirmed his denial of planning to attack Ukraine but emphasized that [NATOs possible expansion to Ukraine](https://apnews.com/article/joe-biden-russia-ukraine-europe-vladimir-putin-8193787ec21ca2aded4a37fa325f07b5) was a “red line” for Moscow.
If Russia attacks its neighbor, the 1 million-member Russian military would inevitably overwhelm Ukraines armed forces, which number about 255,000. But in addition to a promised heavy economic blow from Western sanctions, Russia would also stand to suffer significant military losses that would dent Putins image at home.
Ukrainian veterans and military analysts say the country wont surrender territory without a fight this time, unlike in 2014 in Crimea, where Russian troops in unmarked uniforms faced virtually no resistance in overtaking the Black Sea peninsula.
“Ukraine will not become easy prey for the Russians. There will be a bloodbath,” Vlasenko said. “Putin will get hundreds and thousands of coffins floating from Ukraine to Russia.”
Weeks after annexing Crimea, Russia began supporting the separatist uprising in Ukraines eastern industrial heartland, known as the Donbas. Ukraine and the West have accused Russia of supplying the rebels with troops and weapons — accusations that Moscow has denied, saying that any Russians fighting there were volunteers.
A series of bruising military defeats forced Ukraine to sign a 2015 peace agreement brokered by France and Germany that envisaged broad autonomy for the separatist regions and a sweeping amnesty for the rebels. The deal that was seen by many in Ukraine as a betrayal of its national interests. While it has helped end large-scale fighting, frequent skirmishes have continued amid a political deadlock as Ukraine and Russia have traded accusations.
Mykola Sunhurovskyi, a top military analyst for the Kyiv-based Razumkov Center independent think-tank, said the Ukrainian military has made much progress in recent years, thanks to Western-equipment and training.
“The army today is much stronger than it was in early 2014, and Russia will face serious resistance,” he said.
The Western aid included Javelin anti-tank missiles and patrol boats supplied by the United States. The U.S. and other NATO forces have conducted joint drills with the Ukrainian military in exercises that have vexed Russia. Last month, Ukraine signed an agreement with the U.K. for building naval bases on the Black Sea and the Sea of Azov.
Still, Sunhurovskyi argued that the Western assistance is not enough.
“The military aid given by the West is far from what Ukraine needs,” Sunhurovskyi said, adding that its slow pace was also a key problem. “The assistance is needed within two months, not two or three years. There are huge gaps in the Ukrainian military potential that need to be taken care of.”
He pointed in particular to Ukraines air defenses.
“The air defense system isnt ready for repelling massive airstrikes by Russia,” Sunhurovskyi said, adding that Ukraine also lacks advanced electronic warfare systems and has a shortage of artillery and missiles.
Morale is not a problem, he said.
“From the point of view of combat spirit, Ukraine is ready for war, but there are issues with the technological level of the Ukrainian military, which is below what is needed to deter Russia from launching an attack,” he said.
Zelenskyy said Ukraines military “has come a difficult way to the creation of a highly capable and highly organized combat structure that is confident of its potential and capable of derailing any aggressive plans by the enemy.” On Thursday, he spoke with Biden, who briefed him on the discussion with Putin.
The analysts also said Russia would have to be prepared for a nationwide resistance campaign from Ukrainian veterans after any invasion.
“If it launches an aggression, Russia will face a large-scale guerrilla war in Ukraine, and the infrastructure for it has already been set,” said Volodymyr Fesenko, head of the Kyiv-based Penta think tank. “Thousands of Ukrainian soldiers served in the east, and there is a local hero in every courtyard who fought the separatists and the Russians.”
\_\_\_
Vladimir Isachenkov in Moscow contributed.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-28]]
---

@ -0,0 +1,131 @@
---
dg-publish: true
Alias: [""]
Tag: ["History", "BlackAmerican", "Naming"]
Date: 2022-03-16
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-03-16
Link: https://andscape.com/features/whats-in-a-black-name-400-years-of-context/
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: No
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-WhatsinaBlackname400yearsofcontextNSave
&emsp;
# Whats in a Black name? 400 years of context.
Changing ones name might be one of the most American things a Black person can do, emblematic of one of the countrys most enduring, if elusive, promises: that where you begin isnt necessarily where you must end.
One can find themselves introduced to the world as Chloe Anthony Wofford and exit it as Toni Morrison, or begin life as Gloria Jean Watkins and conclude it as bell hooks.
Behind a name lies an expanse of motivations, possibilities and intentions. A name, chosen, repeated and stubbornly asserted, can point to reclamation, remembrance and self-determination, as it did for many kidnapped and enslaved Africans who fought to hold fast to their homelands. For enslaved Americans running away to emancipate themselves, a name change could be just as much about security as self-possession.
![](https://andscape.com/wp-content/uploads/2022/02/r979018_400x600_2-3.jpg?w=400)
Sojourner Truth, the abolitionist and suffragist, was born Isabella Bomfree.
Hulton Archive/Getty Images
But changing what we call ourselves can also be rooted in serendipity, frivolity, decadence, braggadocio and, yeah, capitalism. It can be an artistic identity. A way of affirming — or rejecting — gender identities. It can simultaneously be an embrace of Blackness and a rejection of white supremacy, a way of establishing community or political identity. Today, The Undefeated joins in this long tradition as we change our name to Andscape. The throughline across all these name changes, almost always, is power.
Lets begin with slavery and the story of poet Phillis Wheatley, one of the nations first Black celebrities. Author of the 1773 collection *Poems on Various Subjects, Religious and Moral*, Wheatley was born in West Africa around 1753. Her first name, Phillis, comes from the name of the ship that brought her as chattel to the American colonies. Her surname, like that of many enslaved people, came from the white family who bought her and taught her to read, write and speak English. She was, horrifically, almost a pet to the Wheatleys, who were regarded as beneficent enslavers. Wheatley was raised to suit their tastes and beliefs. After her eventual manumission, she married a free Black Bostonian named John Peters. She died penniless in a Boston boarding house at age 31.
As the country grew and enslaved Black people began to seek liberty, their choices in names began to reflect their agency. Take, for instance, the Africans who arrived at the port of Charleston, South Carolina, were sold at its slave market, and later ran away. Newspaper notices placed by white slaveholders often included an Anglo name and a “country” name, according to research published by the [Charleston County Public Library](https://www.ccpl.org/charleston-time-machine/recall-their-names-personal-identity-enslaved-south-carolinians):
*Although more subtle than the use of physical violence and intimidation, the act of erasing and replacing a persons identity is an effective means of breaking the resistance of captive humans. … The names of enslaved people found among various historical records are the products of a process of dialog and negotiation between persons asserting dominance and others being forced to submit.* …
*Some unknown number of the African captives brought to early South Carolina refuted their new identities and attempted to assert their original African or “country” names. For the most part, we know of such resistance only through a handful of documents such as newspaper advertisements for runaways. In 1748, for example, Daniel Bourget of Charleston advertised in the* South-Carolina Gazette *for the return of two “Angola Negro men,” one named Moses, but his “country name Monvigo,” the other named Sampson, “his country name Gomo.”*
Sojourner Truth, the abolitionist and suffragist born Isabella Bomfree in Esopus, New York, took the name we now know her by [in 1843](https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.womenshistory.org%2Feducation-resources%2Fbiographies%2Fsojourner-truth&data=04%7C01%7CSteve.Reiss%40espn.com%7C99778a955f73419cdffb08d9f8ad898d%7C56b731a8a2ac4c32bf6b616810e913c6%7C1%7C0%7C637814246560894256%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=C5cizLzZF7CPRgJ3bKKPLPTk1bjJvhW0UoCcJam5fyo%3D&reserved=0), after escaping enslavement in 1827. She, like Douglass, had a crossover name: Isabella Van Wagenen, after the Dutch abolitionists who helped her evade the last slaveholder who claimed to own her. The name Sojourner Truth wasnt just a new name that she took once living in New York City, it reflected a calling. Truth took up the causes of abolition, suffrage, and eliminating poverty, spurred by her own experiences and the community she found at African Methodist Episcopal Zion Church.
Similarly, Harriet Tubman, born Araminta Ross, used her name to assert bodily agency, first by marrying John Tubman and assuming his last name at a time when enslaved peoples marriages were not legally recognized. The Tubmans were a family unit, bonded in spite of laws that said they were not really people, and that any children they had together were not theirs to keep since they were subject to the whims of white ownership.
Frederick Douglass wrote of his own journey to a new identity in his autobiographies. Having escaped from a Maryland plantation as Frederick Bailey, the fugitive slave changed his name, briefly, to Frederick Johnson once he escaped to New Bedford, Massachusetts, in 1838. It was a well-known community of fugitive slaves, and many of them had adopted the last name of Johnson, including the people who gave refuge to Douglass and his new wife, Anna, as they got on their feet.
According to David Blights Pulitzer Prize-winning biography, *Frederick Douglass: Prophet of Freedom*, along with Douglass own firsthand accounts in his autobiography, *Narrative of the Life of Frederick Douglass*, it was in New Bedford that Douglass found his name. Wrote Blight:
*At breakfast on the morning after Frederick and Annas arrival, Johnson urged the Marylanders to choose a new name. Too many Johnsons resided among the fugitive slaves of New Bedford … In his remembrances, Douglass gives no role to Anna in this decision. He tells us that he gave his host the privilege of choosing his new last name, but that he dearly wanted to retain Frederick. “I must hold on to that to preserve a sense of my identity,” wrote Douglass in 1845. Johnson had just been reading Sir Walter Scotts* Lady of the Lake*, the classic and popular romantic Scottish poem of 1810. From the Highlander clan named Douglas, Johnson suggested a new name. Frederick liked the names sound and strength as a word, and he quickly accepted, adding an s for distinction. Thus began the long process of the most famous self-creation of an African American identity in American history.*
One story of the assertion of personhood became iconic because of the evolution of mass media. In one of the most famous scenes from the 1977 television miniseries adaptation of Alex Haleys *Roots*, an enslaved man, played by LeVar Burton, initially refuses to accept the name Toby. Instead, he insists that he be called by his Gambian name, Kunta Kinte. He endures a horrific lashing until, choosing to save his life and fight another day, the character identifies himself as Toby. As the miniseries aired — [more than 50% of American households watched the finale](https://www.vulture.com/2016/05/roots-miniseries-ratings-were-off-the-charts.html) — the public got an up close look at how stripping a person of their name can be weaponized to break their spirit.
But that awful scene wasnt the end of the story, thanks to Burton. Nearly 45 years after the debut of *Roots*, the actor broke through the fourth wall by posting a photograph of himself on Twitter sporting a black hoodie. On it, the name Toby was crossed through, with Kunta Kinte scrawled defiantly beneath it. “Dont get it twisted!” he wrote, punctuating the end of a protracted saga in which he auditioned to follow Alex Trebek as the [host of *Jeopardy!*](https://variety.com/2021/tv/news/levar-burton-jeopardy-host-1235067378/), only to see the gig go, briefly, to the shows white executive producer.
---
Once they were finally, legally permitted to have surnames, many formerly enslaved people took the names of the white people who once owned them, [which is what my ancestors did](https://andscape.com/features/capitol-attack-trump-the-dangerous-magical-thinking-of-this-is-not-who-we-are/). Others adopted the names of presidents and founding fathers (my dad is named after Benjamin Franklin), which is why one of the [Blackest surnames in America is Washington](https://www.nbcnews.com/id/wbna41704238). And so names become a living memorial of constitutional hypocrisy, codified in birth certificates and [census data](https://www.washingtonpost.com/nation/2020/02/25/lost-lineage-quest-identify-black-americans-roots/). Some Washingtons, the last name reminds, were rooting *for* [Ona Judge](https://www.mountvernon.org/library/digitalhistory/digital-encyclopedia/article/ona-judge/), who escaped from Mary Washington, not against her. America is nothing if not a cauldron of simmering ironies. Sure, George Washington was first at something, but [so was Harold](https://artsandculture.google.com/story/harold-washington-the-first-black-mayor-of-chicago-the-obsidian-collection-archives/iwUBt4PfmsLLIA?hl=en). Names that are distinctively Black, whether appropriated or created, have been around longer than most people realize. In 1920, 99% of Americans named Booker were Black, according to 2014 research published in [*Explorations in Economic History*](https://www.sciencedirect.com/science/article/abs/pii/S0014498314000059?via%3Dihub). Names such as [Perlie, Ambrose, Freeman and Titus](https://www.nber.org/system/files/working_papers/w28101/w28101.pdf) became unmistakably Black.
The 1960s and 70s brought another round of reinvention, with the civil rights movement leading to important legislative and judicial gains. On paper, Black people had the rights conferred by American citizenship. Culturally, a group of people was reasserting itself by embracing histories and lineages that white slaveholders had tried mightily to snuff out. The first Muslims in America were enslaved Africans, for instance. [Omar Ibn Said](https://www.loc.gov/collections/omar-ibn-said-collection/about-this-collection/) was a well-to-do 37-year-old scholar when he was kidnapped from West Africa and forced into slave labor in the American South in 1807. His autobiography, written in Arabic, not only provided an early account of enslavement, but also the deep connections between American slavery and Islam.
[*African Muslims in Antebellum America*](https://www.routledge.com/African-Muslims-in-Antebellum-America-Transatlantic-Stories-and-Spiritual/Austin/p/book/9780415912709) asserts that nearly 30% of Africans kidnapped and brought to the Americas were Muslim. (Others put the estimate [as high as 40%](https://www.voanews.com/a/america-s-first-muslims-were-slaves/4763323.html).) The 1960s brought a new spotlight to this religious history, as national figures such as [Malcolm X and Muhammad Ali](https://www.aaihs.org/black-power-name-choices-and-self-determination/) of the Nation of Islam shed their birth names and adopted new ones that communicated Black power and Black beauty.
They were not always well received. Though Ali announced that he was rejecting his “[slave name](https://andscape.com/features/whats-my-name/),” Cassius Marcellus Clay, in March 1964, much of the white sports media insisted on continuing to refer to the champ as Clay. With its refusal to take Alis name change seriously, white American media contributed to a broader perception of Ali as uppity, un-American, unpatriotic and ungrateful. One of the first broadcasters who respected the change was Howard Cosell, who was loud, bombastic and Jewish. It led to a [decadeslong friendship](https://www.nytimes.com/2016/06/05/sports/muhammad-ali-and-howard-cosell-foils-and-friends-bound-by-mutual-respect.html) between the two men.
![](https://andscape.com/wp-content/uploads/2022/02/r979015_600x400_3-2.jpg?w=600)
Cassius Marcellus Clay (Muhammad Ali, left) with Black Muslim leader Malcolm X (right) in New York on March 2, 1964.
John Peodincuk/NY Daily News/Getty Images
The boundaries between the Nation and the Black Power movement were loose. Still, the embrace of Islamic heritage as a way of connecting to African ancestors brought forth a generation of Aaliyahs, Fatimas, Kareems, Amiris, Assatas and Afenis who saw themselves in the celebrity of Chaka Khan. The songstress was born Yvette Marie Stevens in 1953 in Chicago, home to Harold Washington and [Fred Hampton](https://andscape.com/features/a-triumphant-judas-and-the-black-messiah-unfurls-the-life-and-death-of-fred-hampton/). Her involvement with the Black Panthers and their program that provided free breakfast to Black children sparked an awakening and a transformation to Chaka Adunne Aduffe Yemoja Hodarhi Karifi. (She later was married briefly to Hassan Khan.)
For Black women, facing the twin threats of racism and patriarchy, a name wasnt just a way of embracing African heritage. It was also bound up with independence and freedom from abuse. Tina Turner, born [Anna Mae Bullock](https://andscape.com/features/in-tina-the-queen-of-rock-n-roll-says-goodbye/), has lived a life of multiple reinventions, but she became an icon of freedom and resilience after she escaped an abusive marriage to Ike Turner.
Within Turners name lies the story of how she became the queen of rock n roll. Her name was the only asset she insisted on keeping when her divorce to Ike Turner was finalized in 1978, and publicly announced their disunion in a 1981 *People* interview. But Turner didnt want to simply be known as the Tina from the Ike and Tina Turner Revue. She reinvented herself with a new sound and became synonymous with freedom and self-love. Many women, [unseen and unserved by the Constitution](https://andscape.com/features/what-the-constitution-means-to-us/), saw hope in the vibrancy she fashioned for herself after leaving an abuser. When Oprah Winfrey had Turner as a guest on her eponymous talk show in 1997, viewers sent 50,000 letters to the show. There are similar contours to the stories of queer Black people and naming conventions that are etched in quests for love and acknowledgment amid a larger atmosphere of anti-gay bias, anti-transgender bias, racism and misogyny. Like Turner, these folks, too, were grasping for recognition across multiple intersecting fronts. Before she became Marsha P. (the “P” stands for Pay It No Mind) Johnson, for instance, the LGBTQ activist went by [Black Marsha](https://marshap.org/about-mpji/#:~:text=She%20was%20a%20prominent%20figure,to%20questions%20about%20her%20gender.).
New Yorks Black ball scene of the 1980s and 90s, captured in the documentary *Paris Is Burning* and dramatized in the fictional series *Pose*, grew out of a need for spaces that were welcoming to Black queer people. The creation of chosen families (often in the wake of rejection from blood relatives) and dynasties that ruled the scene arose when queer Black folks found themselves rejected from places of queer white refuge. Up sprang families like the House of Ninja, House of Xtravaganza and House of LaBeija, but also houses that appropriated white names for their own ends. Instead of presidents, Black people injected themselves with the glamour of fashion designers creating the House of Miyake-Mugler, House of Balenciaga, etc.
![](https://andscape.com/wp-content/uploads/2022/02/r979001_400x600_2-3.jpg?w=400)
Tina Turner, born Anna Mae Bullock, has lived a life of multiple reinventions, but she became an icon of freedom and resilience after she escaped an abusive marriage to Ike Turner.
Helmuth Lohman/AP Photo
Queer Black people continue to use fashion to create and reinvent themselves. The late [André Leon Talley](https://andscape.com/galleries/andre-leon-talley-brought-black-to-fashions-palette/?view=list#gallery-list-1) eventually became so well known as a stylist, tastemaker, fashion historian and editor that he no longer required three separate names. To those in the know, [he was simply ALT](https://www.nytimes.com/2022/01/19/style/andre-leon-talley-dead.html).
For a trans person, or someone who is gender-nonconforming or non-binary, a name can be more than a way of asserting ones gender identity. It can be a map to understanding oneself. Take writer and producer Janet Mock, who, in her 2014 memoir, *Redefining Realness*, shared that Janet Jackson was the inspiration for her own moniker. Wrote Mock:
*I was obsessed with* The Velvet Rope *for a year straight, letting Janet Jacksons confessional lyrics lull me to sleep and comfort me when I felt lost. I felt that the album was the vehicle onto which Janet finally expressed her full self. I loved her fiery red curls and her equally vibrant smile, features that my friends said I had in common with the singer. I was deeply flattered when they nicknamed me baby Janet, a name that stuck and that I took as my own. Theres power in naming yourself, in proclaiming to the world that this is who you are. Wielding this power is often a difficult step for many transgender people, because its also a very visible one.*
---
Sometimes names establish boundaries of intimacy, like Whitney Houston was known as [Nippy](https://andscape.com/features/whitney-houston-documentary-review/) growing up in Newark, New Jersey. I have two cousins who I have only ever known as Sweetpea and Skeeter. Just about all of my paternal aunts and uncles have nicknames, which we use almost exclusively: Sis, Goldie, Tootsie, Booboo, Cook. … And just as nicknames can indicate closeness, they can also be used to label racial betrayal. One of the worst things someone can call another Black person is “Uncle Tom.”
Casual monikers such as [Queen, Slim](https://andscape.com/features/in-queen-slim-melina-matsoukas-a-black-love-story-blooms-from-panic-and-tragedy/), Youngblood, Sista, Brotha, Homie, Lil Homie, etc., are among the ways we embrace strangers and communicate a certain in-group fellowship, much like the ubiquitous nod we use to acknowledge each other. Such sobriquets dissolve boundaries and spiral into public view through the stage names of rappers, singers and other performing artists. While stage names have been common for a century or more, its interesting how the names of Black artists from Howlin Wolf to H.E.R. are trying to do so much more than just look good on a marquee. Theyre unique, sticky, original and syncopated, like Fats Waller and Jelly Roll Morton.
That can lead to some amusing trends. Theres nothing, for example, to which the word “Lil” — or one of its variations, Lil or Lil — cannot be affixed: Lil Cease, Lil Bow Wow, Lil Baby, Lil Nas X, Lil Wayne, Lil Mo, Lil Flip, Lil Uzi Vert, Lil Yachty, Lil Mama. The rap game is peppered with a [litany of Lils](https://www.hotnewhiphop.com/here-are-the-top-200-lil-rappers-on-currently-on-spotify-news.51490.html), long after the stardom and ubiquity of rock n rolls Little Richard.
Sometimes, a combination of ego, mood, humor and personal prerogative lead to less serious developments, such as Sean Combs multidecade evolution from Puff Daddy to P. Diddy to Diddy to Love. That last iteration appears to be where most folks departed his name-change bus. See also: Ron Artest → Metta World Peace → [The Pandas Friend](https://www.espn.com/blog/new-york/knicks/post/_/id/58196/metta-changing-name-to-the-pandas-friend) → Metta Sandiford-Artest. Stage names dont even have to be pronounceable — remember when Prince, in the throes of a fractious row with his record label, Warner Bros., [changed his name to a symbol](https://www.vox.com/2016/4/21/11481686/prince-name-change-symbol-why), then changed it back to Prince once he was released from the label in 2000?
The most memorable Black stage names often share an element of clever frivolity with drag queen names — both are characterized by puns or double entendres. How could anyone forget Brooklyn, New York, rapper Christopher Wallace, who performed as Biggie Smalls and The Notorious B.I.G., names that reflected a playful self-awareness of his corpulence? There, too, lurks a broader story about race and power and acceptance. After his 1997 murder, The Notorious B.I.G. became an avatar for a nationwide moral panic over gangsta rap. At the time, it seemed unthinkable that Ruth Bader Ginsburg, a little Jewish woman from the same borough, whom President Bill Clinton named to the Supreme Court, would one day be celebrated as the Notorious RBG because of her pointed defenses of womens rights. It was a nickname that translated the Shakespearean “though she be but little, she is fierce,” into wholly American dialect. It also collapsed much of the late justices legal work into a brand of white girlboss badassification that smoothed over details like the fact that in her 27 years on the Supreme Court, Ginsburg [only ever hired one Black clerk](https://www.law.com/nationallawjournal/sites/nationallawjournal/2017/12/11/mostly-white-and-male-diversity-still-lags-among-scotus-law-clerks/?slreturn=20220116143658) and [she didnt hire any](https://www.nationalreview.com/bench-memos/re-vapors-greenhouse-ed-whelan/) during her 13-year tenure on the U.S. Court of Appeals for the District of Columbia Circuit, a fact that emerged during her Supreme Court of the United States confirmation hearings in 1993.
Its important to note both the way Black names and nicknames that once evoked white fear become broadly accepted *and* the ways they can be weaponized to alchemize white fear into political power. Why do certain Black names such as Kwame Ture (formerly Stokely Carmichael) or Amiri Baraka gin up so much white fear? Perhaps because they demand engagement with Black people on our own terms. They communicate that we know ourselves, that we know the country, that we have long memories and that we will not shut up.
Take Baraka, one of the luminaries of the Black Arts Movement. His given name, LeRoi Jones, was pretty dang Black on its own. He adopted the name Amiri Baraka, which means “Blessed Prince,” in response to the assassination of Malcolm X. Such a decision was explicitly political. Baraka was both distancing himself from the American project by rejecting his “slave name” at the same time he was participating in it. One generation later, his son Ras Baraka was elected mayor of Newark, yet another in a multitude of examples of the tension inherent in being both Black and American, and the work of reconciling those two elements even as we are perpetually regarded as outsiders. The shedding of an establishment, government name marks one generation, the ascension to the governmental establishment marks another.
Plenty of research has been published on the ways that names understood to be Black can hinder a persons [professional](https://www.bloomberg.com/news/articles/2021-07-29/job-applicants-with-black-names-still-less-likely-to-get-the-interview#:~:text=They%20found%20that%20distinctively%20Black,rates%20varied%20substantially%20across%20firms.), [social](https://www.wbur.org/hereandnow/2021/08/18/name-discrimination-jobs) and [financial prospects](https://psmag.com/news/how-your-name-could-cost-you-a-mortgage-loan). Nevertheless, Black folks continue to adorn ourselves with names that celebrate us, our history, our place in America. We have been defining and redefining ourselves through our names for 400 years. Why stop now?
Soraya Nadia McDonald is the senior culture critic for Andscape. She writes about pop culture, fashion, the arts and literature. She is the 2020 winner of the George Jean Nathan prize for dramatic criticism, a 2020 finalist for the Pulitzer Prize in criticism and the runner-up for the 2019 Vernon Jarrett Medal for outstanding reporting on Black life.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -6,14 +6,14 @@ Date: 2022-02-18
DocType: "WebClipping"
Hierarchy:
TimeStamp:
Link: https://commonedge.org/whats-the-matter-with-american-cities/?ref=refind
Link: https://commonedge.org/whats-the-matter-with-american-cities/
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-19]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-27]]
---

@ -6,14 +6,14 @@ Date: 2022-02-16
DocType: "WebClipping"
Hierarchy:
TimeStamp:
Link: https://www.refinery29.com/en-us/2022/02/10834953/redefining-black-excellence-success-mediocrity?ref=refind
Link: https://www.refinery29.com/en-us/2022/02/10834953/redefining-black-excellence-success-mediocrity
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-17]]
---

@ -12,7 +12,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News]]
Read:: Yes
Read:: [[2022-02-07]]
---

@ -6,14 +6,14 @@ Date: 2022-02-14
DocType: "WebClipping"
Hierarchy:
TimeStamp:
Link: https://restofworld.org/2022/indian-universities-are-ditching-english-only-education/?ref=refind
Link: https://restofworld.org/2022/indian-universities-are-ditching-english-only-education/
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-15]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-21]]
---

@ -13,7 +13,7 @@ CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: Yes
Read:: [[2022-02-14]]
---

@ -75,7 +75,7 @@ Repository of tasks and To-Dos re Utilities & Public service admin
- [x] [[@Life Admin]]: Update UK Nationality scheme of new address 📅 2022-02-15 ✅ 2022-02-14
- [x] [[@Life Admin]]: Check if requirement to close NHS/HMRC accounts 📅 2022-02-15 ✅ 2022-02-14
- [x] [[@Life Admin]]: Get a [[@Life Admin#Swiss Mobile|CH mobile line]] 📅 2022-03-31 ✅ 2022-02-22
- [ ] [[@Life Admin]]: Cancel UK mobile line 📅 2022-03-31
- [ ] [[@Life Admin]]: Cancel UK mobile line 📅 2022-11-30
- [x] [[@Life Admin]]: Monitor UK naturalisation (2021-08-02) 📅 2022-02-02 ✅ 2022-02-01
&emsp;

@ -1,16 +0,0 @@
---
title: Test event
allDay: false
startTime: 14:00
endTime: 15:30
type: single
daysOfWeek: [M]
startRecur: 2022-03-14
endRecur: 2120-03-13
date: 2022-03-14
---
This is a test event. Things to check:
- [ ] can the note be edited?
- [ ] Can the note be displaced?

@ -249,6 +249,8 @@ Victorian 18th century daisy ring
- [x] :birthday: **[[MRCK|Meggi-mo]]** 🔁 every year 📅 2022-02-28 ✅ 2022-02-28
- [ ] :birthday: **[[MRCK|Meggi-mo]]'s Papa** (1962) 🔁 every year 📅 2023-02-02
- [x] :birthday: **[[MRCK|Meggi-mo]]'s Papa** (1962) 🔁 every year 📅 2022-02-02 ✅ 2022-02-02
- [ ] [[MRCK|Meggi-mo]] Saint Patrick's Day 🔁 every year 📅 2023-03-17
- [x] [[MRCK|Meggi-mo]] Saint Patrick's Day 🔁 every year 📅 2022-03-17 ✅ 2022-03-17
&emsp;
&emsp;

@ -252,7 +252,7 @@ Configuration requires to add the following in the sub-domain definition:
&emsp;
#### Configuration with the docker network
#### Configuring with the docker network
[[#^Top|TOP]]
Configuration of a service attached to the docker network is easy:
@ -368,6 +368,40 @@ import proxy-auth
&emsp;
#### Configuring logging for Caddy
1. In the Caddyfile, add a logging module:
```ad-code
title: logging script
~~~bash
(log) {
log {
output file /var/log/caddy/caddy.log {
roll_local_time
# Other parameters can be found on the Caddy website
}
format console # (or stoud)
level INFO # (or ERROR)
}
}
~~~
```
&emsp;
2. In each subdomain definition, add the following line
`import log`
&emsp;
---
&emsp;
### Utilities
[[#^Top|TOP]]
&emsp;

@ -0,0 +1,726 @@
---
Alias: ["Fail2ban", "fail2ban"]
Tag: ["Computer", "Server", "Monitoring"]
Date: 2022-03-17
DocType: "Personal"
Hierarchy: "NonRoot"
TimeStamp:
location: [47.3639129,8.55627491017841]
CollapseMetaTable: Yes
---
Parent:: [[Selfhosting]], [[Server Alias]], [[Server Cloud]], [[Server Tools]], [[Server VPN]]
---
^Top
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-ConfiguringFail2banNSave
&emsp;
# Configuring Fail2ban
&emsp;
```ad-abstract
title: Summary
collapse: open
This note runs through [fail2ban](https://www.fail2ban.org), a free open-source tool to monitor running programs and deamons on a VPs.
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Installing Fail2Ban
[[#^Top|TOP]]
&emsp;
Type the following over command line and hit enter to begin installing Fail2Ban:
```ad-command
~~~bash
sudo apt-get install fail2ban
~~~
```
&emsp;
That will install the software for you however, by default Fail2Ban is only configured to ban failed SSH login attempts. For it to work more effectively, we need to enable some additional rules that will check the webserver or mtc logs for patterning indicating malicious activity.
&emsp;
---
&emsp;
### Modifying the general settings in Fail2Ban
[[#^Top|TOP]]
&emsp;
First, we need to modify the configuration file that Fail2Ban uses to determine which application logs should be monitored, and what actions should be taken when offending entries are identified. 
For this you can use the supplied `/etc/fail2ban/jail.conf` file.
We must first however, copy this file over to prevent changes being overwritten if a package updated changes the default file.
To copy the default configuration file to a new file, named `/etc/fail2ban/jail.local`, use the following command:
```ad-command
~~~bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
~~~
```
&emsp;
Now we can open the newly copied file in order to set up the Apache log monitoring:
```ad-command
~~~bash
sudo nano /etc/fail2ban/jail.local
~~~
```
&emsp;
#### Adjusting the default settings
[[#^Top|TOP]]
The first thing to look at within the configuration file are the defaults, which are found under the `[DEFAULT]` section within the file. These items set the general policy, and all of them can be individually overridden in specific jails.
Here there are a few options you may want to configure, depending on your requirements.
A common option to change is the ***`ignoreip`*** setting. This allows you to specify an IP address that Fail2Ban should ignore, and not ban under any circumstances. It can be helpful to add your own IP address or network to this list to avoid locking yourself out! To add an IP address, just append it to the line separated by a space, and make sure that the line is uncommented.
Another item you may want to change is the ***`bantime`*** setting. This setting determines how long an offending IP address will be banned from the system for. Ideally, you want to set this to a long enough time to be effective at dissuading malicious parties, but also short enough to allow legitimate users to correct their mistakes and access the system.
The final two items to look at are the ***findtime*** and ***`maxretry`*** settings. The ***`findtime`*** item specifies an amount of time, and the ***`maxretry`*** item indicates the number of login attempts that will be tolerated within that time period. If a client attempting to access the system makes more than ***`maxtry`*** attempts within the amount of time set by ***`findtime`***, Fail2Ban will ban them.
&emsp;
---
&emsp;
### Configuring with a MTA
[[#^Top|TOP]]
&emsp;
#### Postfix
In order to monitor [[Configuring Postfix|Postfix]]'s SMTP connections through Fail2Ban, a few steps need to be taken.
1. Open the conf file
```ad-path
~~~bash
/etc/fail2ban/jail.conf
~~~
Or
~~~bash
/etc/fail2ban/jail.local
~~~
```
&emsp;
2. Edit Postfix & create Postfix-auth
```ad-code
~~~bash
[postfix]
enabled = true
maxretry = 3
bantime = 1h
filter = postfix[mode=aggressive]
telegram
mode = more
port = smtp,465,submission
logpath = %(postfix_log)s
backend = %(postfix_backend)s
[postfix-auth]
enabled = true
bantime = 1h
filter = postfix.auth
action = iptables-multiport[name=postfix, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve”, protocol=tcp]
telegram
logpath = /var/log/mail.log
ignoreip = 127.0.0.1/8
maxretry = 3
~~~
```
&emsp;
3. Create postfix.auth filter
```ad-path
/etc/fail2ban/filter.d/postfix.auth.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = lost connection after AUTH from (.*)\[<HOST>\]
ignoreregex =
~~~
```
&emsp;
4. Restart fail2ban
```ad-command
~~~bash
sudo systemctl restart fail2ban
~~~
```
&emsp;
---
&emsp;
### Configuring with a webserver
[[#^Top|TOP]]
&emsp;
#### Apache
This section focusses on enabling the Apache-specific jails that will monitor the logs of our web server for specific behaviour patterns, which it can then act upon.
Each jail within the configuration file is marked by a header, containing the jail name in square brackets.
1. Open the conf file
```ad-path
~~~bash
/etc/fail2ban/jail.conf
~~~
Or
~~~bash
/etc/fail2ban/jail.local
~~~
```
&emsp;
2. Add the following code
```ad-code
~~~bash
# detect password authentication failures
[apache]
enabled  = true
filter   = apache-auth
action   = iptables-multiport[name=auth, port="http,https"]
logpath  = /var/log/httpd/fail2ban.log
bantime  = 3600
maxretry = 3
ignoreip = 192.0.2.0
# detect spammer robots crawling email addresses
[apache-badbots]
enabled  = true
filter   = apache-badbots
action   = iptables-multiport[name=badbots, port="http,https"]
logpath  = /var/log/httpd/fail2ban.log
bantime  = 3600
maxretry = 1
ignoreip = 192.0.2.0
# detect potential search for exploits
[apache-noscript]
enabled  = true
filter   = apache-noscript
action   = iptables-multiport[name=noscript, port="http,https"]
logpath  = /var/log/httpd/fail2ban.log
bantime  = 3600
maxretry = 6
ignoreip = 192.0.2.0
# detect Apache overflow attempts
[apache-overflows]
enabled  = true
filter   = apache-overflows
action   = iptables-multiport[name=overflows, port="http,https"]
logpath  = /var/log/httpd/fail2ban.log
bantime  = 3600
maxretry = 2
ignoreip = 192.0.2.0
~~~
```
&emsp;
**NOTE**: make sure to substitute your own static IP address for “192.0.2.0” in the ***`ignoreip`*** field..
&emsp;
3. Save and close the file, then restart Fail2Ban for the changes to take effect:
```ad-command
~~~bash
sudo systemctl restart fail2ban
~~~
```
&emsp;
Now you can use the following command to check the firewall rules added by Fail2Ban:
```ad-command
~~~bash
sudo iptables -L
~~~
```
&emsp;
You should see something like the following:
```ad-code
~~~bash
Chain fail2ban-apache (1 references) 
 target prot opt source destination 
 RETURN all -- anywhere anywhere
 Chain fail2ban-apache-badbots (1 references) 
 target prot opt source destination 
 RETURN all -- anywhere anywhere
 Chain fail2ban-apache-noscript (1 references) 
 target prot opt source destination 
 RETURN all -- anywhere anywhere
 Chain fail2ban-apache-overflows (1 references) 
 target prot opt source destination 
 RETURN all -- anywhere anywhere
~~~
```
&emsp;
#### NGINX
[[#^Top|TOP]]
This section focusses on enabling the NGINX-specific jails that will monitor the logs of our web server for specific behaviour patterns, which it can then act upon.
Each jail within the configuration file is marked by a header, containing the jail name in square brackets.
1. Edit the conf file
```ad-command
~~~bash
sudo nano /etc/fail2ban/jail.conf
~~~
```
&emsp;
2. Now, copy and paste which jails you prefer to use, remember to see the next section for the actual filter.
```ad-code
~~~bash
[nginx-403]
enabled = true
port = http,https
filter = nginx-403
action = iptables-allports
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 4
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
action = iptables-allports
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 30 # <--- monitor and adjust, all servers are different.
[nginx-noagent]
enabled = true
port = http,https
filter = nginx-noagent
action = iptables-allports
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 3
[nginx-noauth]
enabled = true
filter = nginx-noauth
action = iptables-allports
logpath = %(nginx_error_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 5
[nginx-no-x-spam]
enabled = true
filter = nginx-no-x-spam
action = iptables-allports
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 5
[nginx-noscript]
enabled = true
action = iptables-allports
filter = nginx-noscript
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 3
[nginx-noproxy]
enabled = true
action = iptables-allports
filter = nginx-noproxy
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 0
[nginx-nowordpress]
enabled = true
action = iptables-allports
filter = nginx-nowordpress
logpath = %(nginx_access_log)s
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 3
[portscan-block]
enabled = true
action = iptables-allports
filter = portscan-block
logpath = /var/log/ufw.log <--- this has to be direct to your UFW logs.
bantime = 1440m # 1 day
findtime = 1440m # 1 day
maxretry = 5
~~~
```
&emsp;
3. Next, you need to make a new filter file for each of these filters and put ***.conf*** at the end of the file.
**Note, the created file is something you need to do yourself.**
&emsp;
###### nginx-403 configuration
[[#^Top|TOP]]
```ad-path
/location/fail2ban/filter.d/nginx-403.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 403
ignoreregex =
~~~
```
&emsp;
###### nginx-404 configuration
```ad-path
/location/fail2ban/filter.d/nginx-404.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404
ignoreregex =
~~~
```
&emsp;
###### nginx-noagent configuration
```ad-path
/location/fail2ban/filter.d/nginx-noagent.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST> -.*"-" "-"$
^<HOST> -.*"-" "curl.*"$
ignoreregex =
~~~
```
&emsp;
###### nginx-noauth configuration
[[#^Top|TOP]]
```ad-path
/location/fail2ban/filter.d/nginx-noauth.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = no user/password was provided for basic authentication.client: user . was not found in.client: user . password mismatch.*client:
ignoreregex =
~~~
```
&emsp;
###### nginx-no-x-spam configuration
```ad-path
/location/fail2ban/filter.d/nginx-no-x-spam.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = {"log":"<HOST> .* ".*\\x.*" .*$
ignoreregex =
~~~
```
&emsp;
###### nginx-noscript configuration
```ad-path
/location/fail2ban/filter.d/nginx-noscript.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\.scgi)
ignoreregex =
~~~
```
&emsp;
###### nginx-noproxy configuration
[[#^Top|TOP]]
```ad-path
/location/fail2ban/filter.d/nginx-noproxy.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST> -.*GET http.*
^<HOST> -.*CONNECT.*
ignoreregex =
~~~
```
&emsp;
###### nginx-nowordpress configuration
```ad-path
/location/fail2ban/filter.d/nginx-nowordpress.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) /+(?i)(wp(-|/)|xmlrpc.php|\?author=1)
^<HOST> -.* "(GET|POST|HEAD|PROPFIND) /+(?i) (a2billing|admin|apache|axis|blog|cfide|cgi|cms|config|etc|.git|hnap|inc|jenkins|jmx-|joomla|lib|linuxsucks|msd|muieblackcat|mysql|myadmin|n0w|owa-autodiscover|pbxip|pma|recordings|sap|sdk|script|service|shell|sqlite|vmskdl44rededd|vtigercrm|w00tw00t|webdav|websql|wordpress|xampp|xxbb)
^<HOST> -.* "(GET|POST|HEAD) /[^"]+.(asp|cgi|exe|jsp|mvc|pl)( |\?)
^<HOST> -.*(?i)(/bash|burger-imperia|changelog|hundejo|hvd-store|jorgee|masscan|pizza-imperia|pizza-tycoon|servlet|testproxy|uploadify)
ignoreregex =
journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx
~~~
```
&emsp;
###### portscan-block configuration
```ad-path
/location/fail2ban/filter.d/portscan-block.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = .*\[UFW BLOCK\] IN=.* SRC=<HOST>
ignoreregex = SRC=(10.|172.1[6-9].|172.2[0-9].|172.3[0-1].|192.168.|fe\w:). DST=(static.ip.address.here|224.0.0.). PROTO=(2|UDP)(\s+|.* DPT=(1900|3702|5353|5355) LEN=\d*\s+)$
~~~
```
&emsp;
4. Save and close the file, then restart Fail2Ban for the changes to take effect:
```ad-command
~~~bash
sudo systemctl restart fail2ban
~~~
```
&emsp;
#### Caddy
[[#^Top|TOP]]
This section focusses on enabling the [[Configuring Caddy|caddy]]-specific jails that will monitor the logs of our web server for specific behaviour patterns, which it can then act upon.
Each jail within the configuration file is marked by a header, containing the jail name in square brackets.
1. Open the conf file
```ad-path
~~~bash
/etc/fail2ban/jail.conf
~~~
Or
~~~bash
/etc/fail2ban/jail.local
~~~
```
&emsp;
2. Add the following code
```ad-code
~~~bash
[caddy-4xx]
port = http,https
logpath = /var/log/caddy/caddy.log
enabled = true
filter = caddy-4xx
action = iptables-multiport[name=auth, port="http,https"]
banTime = 3600
findTime = 600
maxretry = 5
~~~
```
&emsp;
3. Create the filter file
```ad-path
/etc/fail2ban/filter.d/caddy-4xx.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = ^<HOST>.*"(GET|POST).*" (404|444|403|400) .*$
ignoreregex =
~~~
```
&emsp;
4. Save and close the file, then restart Fail2Ban for the changes to take effect:
```ad-command
~~~bash
sudo systemctl restart fail2ban
~~~
```
&emsp;
---
&emsp;
### Test fail2ban filters
[[#^Top|TOP]]
&emsp;
Fail2ban allows to test filters on a defined logfile through the below command. This enables to test filters when occurences are present in the log.
```ad-command
~~~bash
sudo fail2ban-regex < path to logfile > < filter name >
~~~
```
[[#^Top|TOP]]
&emsp;
&emsp;

@ -346,6 +346,28 @@ sudo tail -f /var/log/mail.log
~~~
```
&emsp;
#### Identify IPs with Failed Logins
```ad-command
~~~bash
sudo grep " warning: " /var/log/mail.log |cut -d '[' -f3 |cut -d ']' -f1 |sort -u
~~~
```
&emsp;
And
&emsp;
```ad-command
~~~bash
sudo grep " reject: " /var/log/mail.log |cut -d '[' -f3 |cut -d ']' -f1 |sort -u
~~~
```
[[#^Top|TOP]]
&emsp;

@ -93,80 +93,6 @@ Please see full documentation [[GitHub - matriphemonit2telegram A simple script
Please see full documentation [[GitHub - deividgdtfail2ban_telegram_notifications Sending fail2ban notifications using a Telegram bot|here]] for SSH monitoring.
##### Postfix Monitoring
In order to monitor SMTP connections through Fail2Ban, a few steps need to be taken.
1. Open the conf file
```ad-path
~~~bash
/etc/fail2ban/jail.conf
~~~
Or
~~~bash
/etc/fail2ban/jail.local
~~~
```
&emsp;
2. Edit Postfix & create Postfix-auth
```ad-code
~~~bash
[postfix]
enabled = true
maxretry = 3
bantime = 1h
filter = postfix[mode=aggressive]
telegram
mode = more
port = smtp,465,submission
logpath = %(postfix_log)s
backend = %(postfix_backend)s
[postfix-auth]
enabled = true
bantime = 1h
filter = postfix.auth
action = iptables-multiport[name=postfix, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve”, protocol=tcp]
telegram
logpath = /var/log/mail.log
ignoreip = 127.0.0.1/8
maxretry = 3
~~~
```
&emsp;
3. Create postfix.auth filter
```ad-path
/etc/fail2ban/filter.d/postfix.auth.conf
```
&emsp;
```ad-code
~~~bash
[Definition]
failregex = lost connection after AUTH from (.*)\[<HOST>\]
ignoreregex =
~~~
```
&emsp;
4. Restart fail2ban
```ad-command
~~~bash
sudo systemctl restart fail2ban
~~~
```
&emsp;
---

@ -154,6 +154,92 @@ Finer rules can be defined with the following syntax.
**port** | port (port or any)
**outgoing traffic** | out
&emsp;
##### Delete a rule
```ad-command
~~~bash
sudo ufw delete <rule number>
~~~
```
&emsp;
---
&emsp;
### Ban List management
[[#^Top|TOP]]
&emsp;
#### Ban List Folder
```ad-path
/etc/addip4ban/
```
&emsp;
#### Ban List Script
```ad-code
title: addip4ban.sh
~~~bash
#!/bin/bash
INPUT="/etc/addip4ban/blocked.ip.list"
while IFS= read -r block
do
sudo ufw insert 1 deny from "$block"
done < "$INPUT"
~~~
```
&emsp;
Once written, the script needs to be executed. To prepare:
```ad-command
~~~bash
sudo chmod +x /etc/addip4ban/addip4ban.sh
~~~
```
&emsp;
#### Ban List Document
```ad-code
title: blocked.ip.list
~~~bash
< ip1 >
< ip2/range >
< ip3 >
~~~
```
&emsp;
#### Ban list Update Process
Copy/paste the new ban list into `blocked.ip.list` and run:
```ad-command
~~~bash
sudo bash /etc/addip4ban/addip4ban.sh
~~~
```
&emsp;
#### Ban List Tasks
- [ ] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-19
- [ ] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-03-19
[[#^Top|TOP]]
&emsp;

@ -36,7 +36,7 @@ id Save
[![](https://camo.githubusercontent.com/aa776779f2a389bb73b23dda7927b688b14255ade756ecaeaa20de09368e0847/68747470733a2f2f64656976696473646f63732e66696c65732e776f726470726573732e636f6d2f323032302f30342f74656c656772616d5f6e6f74696669636174696f6e735f6661696c3262616e2e6a7067)](https://camo.githubusercontent.com/aa776779f2a389bb73b23dda7927b688b14255ade756ecaeaa20de09368e0847/68747470733a2f2f64656976696473646f63732e66696c65732e776f726470726573732e636f6d2f323032302f30342f74656c656772616d5f6e6f74696669636174696f6e735f6661696c3262616e2e6a7067)
Sending **fail2ban** notifications using a **Telegram** bot
Sending **[[Configuring Fail2ban|fail2ban]]** notifications using a **Telegram** bot
&emsp;
@ -83,7 +83,7 @@ chmod +x /etc/fail2ban/scripts/send\_telegram\_notif.sh
~~~
```
- Restart the fail2ban service and enjoy!
- Restart the [[Configuring Fail2ban|fail2ban]] service and enjoy!
```ad-command
~~~bash

@ -118,7 +118,7 @@ All dependencies for running the alias service.
| Program name | Type | Description
|----------------|------|-------------
| **fail2ban** | Deamon | Blocks suspicious attempts to login
| **[[Configuring Fail2ban|fail2ban]]** | Deamon | Blocks suspicious attempts to login
| **unattended-upgrades** | Program | Enables automatic updates of installed programs and OS
| **logwatch** | Deamon | Monitors activity on server and sends activity logs
@ -190,7 +190,7 @@ Refer to the [[Configuring Monit|monit section]] for further information on inst
List of monitored services:
- System
- SSH
- Fail2ban
- [[Configuring Fail2ban|Fail2ban]]
- cron
- Postfix
- nginx

@ -184,7 +184,7 @@ sudo service mysql restart
[[#^Top|TOP]]
| Program name | Type | Description
|----------------|------|-------------
| **fail2ban** | Daemon | Blocks suspicious attempts to login
| **[[Configuring Fail2ban|fail2ban]]** | Daemon | Blocks suspicious attempts to login
| **unattended-upgrades** | Program | Enables automatic updates of installed programs and OS
| **logwatch** | Daemon | Monitors activity on server and sends activity logs
@ -254,7 +254,7 @@ Firewall management, see [[Configuring UFW|here]] for more details.
List of monitored services:
- System
- SSH
- Fail2ban
- [[Configuring Fail2ban|Fail2ban]]
- cron
- Postfix
- MySQL

@ -146,7 +146,7 @@ LWERS4M7njDLiAJe5A6gkv9jRDabvnzBGyYk9vPr1F5dY0LMu47FSjB0v21BAE83rYTOksElzcYmioWA
| Program name | Type | Description
|----------------|------|-------------
| **fail2ban** | Daemon | Blocks suspicious attempts to login
| **[[Configuring Fail2ban|fail2ban]]** | Daemon | Blocks suspicious attempts to login
| **unattended-upgrades** | Program | Enables automatic updates of installed programs and OS
| **logwatch** | Daemon | Monitors activity on server and sends activity logs
@ -504,7 +504,7 @@ Refer to the [[Configuring Monit|monit section]] for further information on inst
List of monitored services:
- System
- SSH
- Fail2ban
- [[Configuring Fail2ban|Fail2ban]]
- cron
- Postfix
- docker

@ -116,7 +116,7 @@ The VPN server will host a single VPN service and dependencies bare metal.
| Program name | Type | Description |
| ----------------------- | ------- | ------------------------------------------------------ |
| **fail2ban** | Daemon | Blocks suspicious attempts to login |
| **[[Configuring Fail2ban|fail2ban]]** | Daemon | Blocks suspicious attempts to login |
| **unattended-upgrades** | Program | Enables automatic updates of installed programs and OS |
| **logwatch** | Daemon | Monitors activity on server and sends activity logs |

Loading…
Cancel
Save