diff --git a/.obsidian/app.json b/.obsidian/app.json index 9e3dc02..c6a70f9 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -4,7 +4,7 @@ "strictLineBreaks": true, "propertiesInDocument": "visible", "showLineNumber": true, - "autoPairMarkdown": false, + "autoPairMarkdown": true, "useTab": false, "alwaysUpdateLinks": true, "tabSize": 4, diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 1e39670..449a3fe 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -24,5 +24,7 @@ "obsidian-toggle-list", "neighbouring-files", "cmdr", - "sheets" + "sheets", + "tabout", + "obsidian-tidy-footnotes" ] \ No newline at end of file diff --git a/.obsidian/plugins/neighbouring-files/data.json b/.obsidian/plugins/neighbouring-files/data.json index f3ea15d..d60ad2c 100644 --- a/.obsidian/plugins/neighbouring-files/data.json +++ b/.obsidian/plugins/neighbouring-files/data.json @@ -1,6 +1,6 @@ { "defaultSortOrder": "alphabetical", - "enableFolderLoop": true, + "enableFolderLoop": false, "enableFolderBoundary": false, "includedFileTypes": "markdownOnly", "additionalExtensions": [ diff --git a/.obsidian/plugins/obsidian-tidy-footnotes/main.js b/.obsidian/plugins/obsidian-tidy-footnotes/main.js new file mode 100644 index 0000000..1793582 --- /dev/null +++ b/.obsidian/plugins/obsidian-tidy-footnotes/main.js @@ -0,0 +1,189 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => TidyFootnotes +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian = require("obsidian"); + +// src/tidyFootnotes.ts +var reKey = /\[\^(.+?(?=\]))\]/gi; +var reDefinition = /^\[\^([^\]]+)\]\:/; +function isNumeric(value) { + return !isNaN(value - parseFloat(value)); +} +function tidyFootnotes(editor) { + let markers = []; + let definitions = /* @__PURE__ */ new Map(); + let firstDefinitionLine = -1; + let definitionsIndexed = /* @__PURE__ */ new Map(); + const lineCount = editor.lineCount(); + let prevKey = ""; + for (let i = 0; i < lineCount; i++) { + const line = editor.getLine(i); + let isDefinition = false; + let match; + if (prevKey.length) { + const hasIndent = /^[ \t]/.test(line); + const isLastLine = i === lineCount - 1; + if (hasIndent || line.length === 0 && !isLastLine) { + const value = definitions.get(prevKey); + definitions.set(prevKey, value + "\n" + line); + markers[markers.length - 1].length++; + continue; + } else { + prevKey = ""; + } + } + while ((match = reDefinition.exec(line)) !== null) { + if (match.length < 1) + return; + isDefinition = true; + let key = match[1]; + let value = line.substring(match[0].length); + definitions.set(key, value); + prevKey = key; + let marker = { + key, + line: i, + index: 0, + length: 0, + isDefinition: true + }; + markers.push(marker); + if (firstDefinitionLine === -1) { + firstDefinitionLine = i; + } + break; + } + if (isDefinition) + continue; + while ((match = reKey.exec(line)) !== null) { + if (match.length < 1) + return; + let key = match[1]; + let marker = { + key, + line: i, + index: match.index, + length: match[0].length, + isDefinition: false + }; + markers.push(marker); + if (!definitionsIndexed.has(key)) { + definitionsIndexed.set(key, { + key, + newKey: key, + isNumber: isNumeric(key), + value: "" + }); + } + } + } + definitions.forEach((value, key) => { + definitionsIndexed.set(key, { + key, + newKey: key, + isNumber: isNumeric(key), + value + }); + }); + let count = 1; + let definitionsStr = ""; + definitionsIndexed.forEach((definition, marker) => { + let key = definition.key; + if (definition.isNumber) { + const current = definitionsIndexed.get(marker); + key = count.toString(); + definitionsIndexed.set(marker, { + ...current, + newKey: key + }); + count++; + } + definitionsStr += `[^${key}]:${definition.value} +`; + }); + const markersCount = markers.length; + for (let i = markersCount - 1; i >= 0; i--) { + const marker = markers[i]; + const markerLine = marker.line; + if (marker.isDefinition) { + let rangeStart, rangeEnd; + const lineEnd = markerLine + 1 + marker.length; + if (lineEnd === editor.lineCount()) { + rangeStart = { line: markerLine, ch: 0 }; + rangeEnd = { line: lineEnd - 1, ch: Infinity }; + } else { + rangeStart = { line: markerLine, ch: 0 }; + rangeEnd = { line: lineEnd, ch: 0 }; + } + if (markerLine === firstDefinitionLine) { + editor.replaceRange(definitionsStr, rangeStart, rangeEnd); + continue; + } + editor.replaceRange("", rangeStart, rangeEnd); + continue; + } + const definition = definitionsIndexed.get(marker.key); + const newKey = definition.newKey; + if (marker.key === newKey) + continue; + const line = editor.getLine(markerLine); + const prefix = line.substring(0, marker.index); + const newMarker = `[^${newKey}]`; + const suffix = line.substr(marker.index + marker.length); + const newLine = prefix + newMarker + suffix; + editor.replaceRange( + newLine, + { line: markerLine, ch: 0 }, + { line: markerLine, ch: Infinity } + ); + } + if (firstDefinitionLine == -1) { + const lineCount2 = editor.lineCount(); + editor.replaceRange( + "\n\n" + definitionsStr, + { line: lineCount2, ch: 0 }, + { line: lineCount2, ch: Infinity } + ); + } +} + +// src/main.ts +var TidyFootnotes = class extends import_obsidian.Plugin { + async onload() { + this.addCommand({ + id: "tidy-footnotes", + name: "Tidy Footnotes", + editorCallback: (editor, view) => { + tidyFootnotes(editor); + } + }); + } +}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-tidy-footnotes/manifest.json b/.obsidian/plugins/obsidian-tidy-footnotes/manifest.json new file mode 100644 index 0000000..9ea2e7d --- /dev/null +++ b/.obsidian/plugins/obsidian-tidy-footnotes/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "obsidian-tidy-footnotes", + "name": "Tidy Footnotes", + "version": "0.1.2", + "minAppVersion": "0.11.13", + "description": "Tidy your footnotes seamlessly.", + "author": "Charlie Chao", + "authorUrl": "https://github.com/charliecm", + "fundingUrl": "https://www.buymeacoffee.com/charliecm", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/.obsidian/plugins/tabout/data.json b/.obsidian/plugins/tabout/data.json new file mode 100644 index 0000000..b9e7a83 --- /dev/null +++ b/.obsidian/plugins/tabout/data.json @@ -0,0 +1,71 @@ +{ + "rules": [ + { + "tokenMatcher": "strong", + "lookups": [ + "**" + ], + "jumpAfter": true + }, + { + "tokenMatcher": "em", + "lookups": [ + "*", + "_" + ], + "jumpAfter": true + }, + { + "tokenMatcher": "math", + "lookups": [ + "$" + ], + "jumpAfter": true + }, + { + "tokenMatcher": "code", + "lookups": [ + "`" + ], + "jumpAfter": true + }, + { + "lookups": [ + "==" + ], + "tokenMatcher": "highlight", + "jumpAfter": true + }, + { + "lookups": [ + "~~" + ], + "tokenMatcher": "strikethrough", + "jumpAfter": true + }, + { + "tokenMatcher": "hmd-internal-link", + "lookups": [ + "]]" + ], + "jumpAfter": true + }, + { + "tokenMatcher": "link", + "lookups": [ + "]", + ")" + ], + "jumpAfter": true + }, + { + "tokenMatcher": "math", + "lookups": [ + ")", + "]", + "}" + ], + "jumpAfter": true + } + ] +} \ No newline at end of file diff --git a/.obsidian/plugins/tabout/main.js b/.obsidian/plugins/tabout/main.js new file mode 100644 index 0000000..219d017 --- /dev/null +++ b/.obsidian/plugins/tabout/main.js @@ -0,0 +1,8 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var w=Object.create;var m=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var T=r=>m(r,"__esModule",{value:!0});var D=(r,t)=>{T(r);for(var e in t)m(r,e,{get:t[e],enumerable:!0})},P=(r,t,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of j(t))!R.call(r,o)&&o!=="default"&&m(r,o,{get:()=>t[o],enumerable:!(e=A(t,o))||e.enumerable});return r},h=r=>P(T(m(r!=null?w(S(r)):{},"default",r&&r.__esModule&&"default"in r?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r);var l=(r,t,e)=>new Promise((o,s)=>{var a=u=>{try{d(e.next(u))}catch(b){s(b)}},n=u=>{try{d(e.throw(u))}catch(b){s(b)}},d=u=>u.done?o(u.value):Promise.resolve(u.value).then(a,n);d((e=e.apply(r,t)).next())});D(exports,{default:()=>E});var k=h(require("obsidian"));var f=h(require("obsidian"));var c=h(require("obsidian")),g=class extends c.Modal{constructor(t,e,o){super(t.app);this.plugin=t,this.rule=e,this.idx=o}onOpen(){let{contentEl:t}=this;t.empty(),new c.Setting(t).setName("Environment").setClass("tabout-match-text").setDesc("The Codemirror Token for the Environment.").addText(o=>{o.setValue(this.rule.tokenMatcher).setPlaceholder("em").onChange(s=>{this.rule.tokenMatcher=s})}),new c.Setting(t).setName("Jump after the Characters").setClass("tabout-match-text").setDesc("If enabled the Cursor will be set after the Characters, otherwise before them.").addToggle(o=>{o.setValue(this.rule.jumpAfter).onChange(s=>{this.rule.jumpAfter=s})}),this.rule.lookups.forEach((o,s)=>{new c.Setting(t).setName(s===0?"Characters":"").setClass("tabout-jump-char").addExtraButton(a=>{a.setIcon("trash").onClick(()=>{this.rule.lookups.remove(this.rule.lookups[s]),this.onOpen()})}).addText(a=>{a.setValue(o).setPlaceholder("**").onChange(n=>{this.rule.lookups[s]=n})})}),new c.Setting(t).setClass("tabout-jump-char").addButton(o=>{o.setButtonText("Add Character").onClick(()=>{this.rule.lookups.push(""),this.onOpen()})});let e=createEl("button",{text:"Save Rule",cls:"tabout-add-rule"});e.onClickEvent(()=>{this.close()}),t.createDiv({cls:"tabout-add-rule-container"}).append(e)}onClose(){let{contentEl:t}=this;t.empty(),dispatchEvent(new CustomEvent("tabout-edit-complete",{detail:{rule:this.rule,idx:this.idx}}))}};var i=h(require("obsidian")),p=class extends i.Modal{constructor(t,e=""){super(t.app);this.plugin=t,this.rule={lookups:[""],tokenMatcher:e,jumpAfter:!0}}onOpen(){let{contentEl:t}=this;t.empty(),new i.Setting(t).setName("Environment").setClass("tabout-match-text").setDesc("The Codemirror Token for the Environment.").addText(s=>{s.setValue(this.rule.tokenMatcher).setPlaceholder("em").onChange(a=>{this.rule.tokenMatcher=a})}),new i.Setting(t).setName("Jump after the Characters").setClass("tabout-match-text").setDesc("If enabled the Cursor will be set after the Characters, otherwise before them.").addToggle(s=>{s.setValue(this.rule.jumpAfter).onChange(a=>{this.rule.jumpAfter=a})}),this.rule.lookups.forEach((s,a)=>{new i.Setting(t).setName(a===0?"Characters":"").setClass("tabout-jump-char").addExtraButton(n=>{n.setIcon("trash").onClick(()=>{this.rule.lookups.remove(this.rule.lookups[a]),this.onOpen()})}).addText(n=>{n.setValue(s).setPlaceholder("**").onChange(d=>{this.rule.lookups[a]=d})})}),new i.Setting(t).setClass("tabout-jump-char").addButton(s=>{s.setButtonText("Add Character").onClick(()=>{this.rule.lookups.push(""),this.onOpen()})});let e=createEl("button",{text:"Add this Rule",cls:"tabout-add-rule"});e.onClickEvent(()=>{this.rule.lookups.length>=1&&this.rule.lookups.first()?(this.save(),this.close()):new i.Notice("Something is still Missing")});let o=createEl("button",{text:"Cancel",cls:"tabout-add-rule"});o.onClickEvent(()=>{this.close()}),t.createDiv({cls:"tabout-add-rule-container"}).append(e,o)}onClose(){let{contentEl:t}=this;t.empty()}save(){dispatchEvent(new CustomEvent("tabout-rule-create",{detail:{rule:this.rule}}))}};var C=class extends f.PluginSettingTab{constructor(t,e){super(t,e);this.plugin=e,addEventListener("tabout-edit-complete",o=>l(this,null,function*(){this.plugin.settings.rules[o.detail.idx]=o.detail.rule,this.display(),yield this.plugin.saveSettings()})),addEventListener("tabout-rule-create",o=>l(this,null,function*(){this.plugin.settings.rules.push(o.detail.rule),this.display(),yield this.plugin.saveSettings()}))}display(){let{containerEl:t}=this,{settings:e}=this.plugin;t.empty(),t.createEl("h2",{text:"Obsidian Tabout"}),e.rules.forEach((s,a)=>{new f.Setting(t).setName(`Rule #${a}`).setDesc(this.generateDescription(s)).addButton(n=>{n.setButtonText("Edit").onClick(()=>{new g(this.plugin,s,a).open()})}).addExtraButton(n=>{n.setIcon("trash").setTooltip("Delete Rule").onClick(()=>l(this,null,function*(){e.rules.remove(s),yield this.plugin.saveSettings(),this.display()}))})});let o=createEl("button",{text:"Add Rule",cls:"tabout-add-rule"});o.onClickEvent(()=>{new p(this.plugin).open()}),t.createDiv({cls:"tabout-add-rule-container"}).append(o)}generateDescription(t){let e=document.createDocumentFragment();return e.append("This Rule is only active in "),e.append(createEl("code",{text:t.tokenMatcher?t.tokenMatcher:"all"})),e.append(" Environments and with the press of "),e.append(createEl("kbd",{text:"Tab",cls:"tabout-kbd"})),e.append(" you will jump to one of these characters: "),t.lookups.forEach((o,s)=>{e.append(createEl("code",{text:o})),s!=t.lookups.length-1&&e.append(", ")}),e}};var x={rules:[{tokenMatcher:"Document",lookups:['"',"'",")","}"],jumpAfter:!0},{tokenMatcher:"formatting_formatting-quote_formatting-quote-1_hmd-callout",lookups:['"',"'",")","}"],jumpAfter:!0},{tokenMatcher:"quote",lookups:['"',"'",")","}"],jumpAfter:!0},{tokenMatcher:"hmd-internal-link",lookups:["]"],jumpAfter:!0},{tokenMatcher:"formatting-link_formatting-link-start",lookups:["]]"],jumpAfter:!0},{tokenMatcher:"strong",lookups:["**"],jumpAfter:!0},{tokenMatcher:"em",lookups:["*","_"],jumpAfter:!0},{tokenMatcher:"math",lookups:["$"],jumpAfter:!0},{tokenMatcher:"code",lookups:["`"],jumpAfter:!0},{tokenMatcher:"header_header",lookups:['"',"'",")","}","]"],jumpAfter:!0},{tokenMatcher:"list-1",lookups:['"',"'",")","}","]"],jumpAfter:!0},{tokenMatcher:"list-2",lookups:['"',"'",")","}","]"],jumpAfter:!0},{tokenMatcher:"list-3",lookups:['"',"'",")","}","]"],jumpAfter:!0},{tokenMatcher:"hmd-codeblock",lookups:[")","}"],jumpAfter:!0}]};var M=h(require("@codemirror/view")),v=h(require("@codemirror/state")),y=h(require("@codemirror/language")),E=class extends k.Plugin{constructor(){super(...arguments);this.getToken=t=>(0,y.syntaxTree)(t).resolveInner(t.selection.main.head,-1).type.name;this.tabout=t=>{for(let e of this.settings.rules)if(t.contains(e.tokenMatcher)){let o=this.app.workspace.getActiveViewOfType(k.MarkdownView).editor,s=o.getCursor(),a=o.getLine(s.line).substring(s.ch),n=Math.min(...this.getIndices(e.lookups,a,e.jumpAfter));if(n!=1/0)return o.setCursor(s.line,s.ch+n),!0}return!1};this.legacyTabout=(t,e)=>{if(e.text.first()===" "){let o=t.getTokenTypeAt(t.getCursor());this.tabout(o)&&e.cancel()}}}onload(){return l(this,null,function*(){yield this.loadSettings(),this.legacy=this.app.vault.config.legacyEditor,this.legacy?this.registerCodeMirror(t=>{t.on("beforeChange",this.legacyTabout)}):this.registerEditorExtension(v.Prec.high(M.keymap.of([{key:"Tab",run:t=>this.tabout(this.getToken(t.state))}]))),this.addSettingTab(new C(this.app,this)),this.addCommand({id:"tabout-add-rule-here",name:"Add Rule for this Environment",editorCallback:t=>{let e="";this.legacy?e=t.cm.getTokenTypeAt(t.getCursor()):e=this.getToken(t.cm.state),new p(this,e).open()}})})}getIndices(t,e,o){let s=[];return t.forEach(a=>{let n=e.indexOf(a);n!=-1&&s.push(o?n+a.length:n)}),s}onunload(){this.legacy&&this.app.workspace.iterateCodeMirrors(t=>t.off("beforeChange",this.legacyTabout))}loadSettings(){return l(this,null,function*(){this.settings=Object.assign({},x,yield this.loadData())})}saveSettings(){return l(this,null,function*(){yield this.saveData(this.settings)})}}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/tabout/manifest.json b/.obsidian/plugins/tabout/manifest.json new file mode 100644 index 0000000..2679fcd --- /dev/null +++ b/.obsidian/plugins/tabout/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "tabout", + "name": "Tabout", + "version": "1.0.1", + "minAppVersion": "0.13.0", + "description": "Easily \"tab out\" of Links or other Markdown Formatting Characters.", + "author": "phibr0", + "authorUrl": "https://phibr0.de", + "isDesktopOnly": true, + "fundingUrl": "https://ko-fi.com/phibr0" +} diff --git a/.obsidian/plugins/tabout/styles.css b/.obsidian/plugins/tabout/styles.css new file mode 100644 index 0000000..5d27ae5 --- /dev/null +++ b/.obsidian/plugins/tabout/styles.css @@ -0,0 +1,24 @@ +.tabout-kbd { + padding: 3px 6px; +} + +.tabout-add-rule-container { + width: 100%; + display: flex; +} + +.tabout-add-rule { + margin: auto !important; + min-width: 15%; + margin-top: 2rem; +} + +.setting-item.tabout-jump-char { + border: none; + margin: 18px 0 18px 0; + padding: 0 !important; +} +.setting-item.tabout-match-text { + border-bottom: 1px solid var(--background-modifier-border); +} + diff --git a/analog-lighting-controls-diagram.png b/analog-lighting-controls-diagram.png new file mode 100644 index 0000000..1c1bb3d Binary files /dev/null and b/analog-lighting-controls-diagram.png differ diff --git a/digital-standalone-diagram.png b/digital-standalone-diagram.png new file mode 100644 index 0000000..babd0f5 Binary files /dev/null and b/digital-standalone-diagram.png differ diff --git a/lighting-controls.md b/lighting-controls.md index 968e5df..8d4c0c7 100644 --- a/lighting-controls.md +++ b/lighting-controls.md @@ -36,16 +36,22 @@ Dimming Terms ### Line Voltage +![[line-voltage-occupancy-sensor-diagram.png]] + 120--347VAC ### Low Voltage +![[analog-lighting-controls-diagram.png]] + 24V Class 2 control circuit ### Digital #### Generic "Standalone" +![[digital-standalone-diagram.png]] + The examples below are typical of a generic system, with functionally identical features and topologies. @@ -57,6 +63,10 @@ and wireless (via RF) communication. * [Lutron Vive](https://commercial.lutron.com/us/en/commercial-systems/vive) * [Cooper Greengate](https://www.cooperlighting.com/global/brands/greengate) +#### Generic "Centralized" + +A "centralized" system refers + #### Digital Addressable Lighting Interface (DALI) ^dali [Digital Addressable Lighting Interface](https://en.wikipedia.org/wiki/Digital_Addressable_Lighting_Interface) diff --git a/line-voltage-occupancy-sensor-diagram.png b/line-voltage-occupancy-sensor-diagram.png new file mode 100644 index 0000000..397c1dc Binary files /dev/null and b/line-voltage-occupancy-sensor-diagram.png differ diff --git a/timestamped/2025-07-18_00-00-00.md b/timestamped/2025-07-18_00-00-00.md index f2a7bc8..3a950a0 100644 --- a/timestamped/2025-07-18_00-00-00.md +++ b/timestamped/2025-07-18_00-00-00.md @@ -1,7 +1,8 @@ --- id: 2025-07-18T00:00:00-0400 title: 2025-07-18 ??:??:?? -tags: [] +tags: + - topic/estimating daily: "[[2025-07-18]]" --- # 2025-07-18 ??:??:?? diff --git a/timestamped/2025-08-15_14-15-41.md b/timestamped/2025-08-15_14-15-41.md index 89ec76a..ce1bb81 100644 --- a/timestamped/2025-08-15_14-15-41.md +++ b/timestamped/2025-08-15_14-15-41.md @@ -1,7 +1,8 @@ --- id: 2025-08-15T14:15:41-0400 title: 2025-08-15 14:15:41 -tags: [] +tags: + - occupational/takeoff daily: "[[2025-08-15]]" --- # 2025-08-15 14:15:41 diff --git a/timestamped/2025-11-11_00-00-00.md b/timestamped/2025-11-11_00-00-00.md index 266d015..7424f67 100644 --- a/timestamped/2025-11-11_00-00-00.md +++ b/timestamped/2025-11-11_00-00-00.md @@ -1,7 +1,8 @@ --- id: 2025-11-11T00:00:00-0500 title: 2025-11-11 ??:??:?? -tags: [] +tags: + - occupational/takeoff daily: "[[2025-11-11]]" --- # 2025-11-11 ??:??:?? diff --git a/timestamped/2025-12-02_10-57-00.md b/timestamped/2025-12-02_10-57-00.md index d2faca8..54b0bbc 100644 --- a/timestamped/2025-12-02_10-57-00.md +++ b/timestamped/2025-12-02_10-57-00.md @@ -1,7 +1,8 @@ --- id: 2025-12-02T10:57:00-0500 title: 2025-12-02 10:57:?? -tags: [] +tags: + - topic/math daily: "[[2025-12-02]]" --- # 2025-12-02 10:57:?? diff --git a/timestamped/2025-12-02_13-20-00.md b/timestamped/2025-12-02_13-20-00.md index cbaa416..4cd7a3d 100644 --- a/timestamped/2025-12-02_13-20-00.md +++ b/timestamped/2025-12-02_13-20-00.md @@ -1,7 +1,9 @@ --- id: 2025-12-02T13:20:00-0500 title: 2025-12-02 13:20:?? -tags: [] +tags: + - topic/estimating + - topic/construction/electrical daily: "[[2025-12-02]]" --- # 2025-12-02 13:20:?? diff --git a/timestamped/2025-12-03_15-54-22.md b/timestamped/2025-12-03_15-54-22.md index 5028e2d..36af4d8 100644 --- a/timestamped/2025-12-03_15-54-22.md +++ b/timestamped/2025-12-03_15-54-22.md @@ -1,7 +1,8 @@ --- id: 2025-12-03T15:54:22-0500 title: 2025-12-03 15:54:22 -tags: [] +tags: + - topic/estimating daily: "[[2025-12-03]]" --- # 2025-12-03 15:54:22 diff --git a/timestamped/2025-12-10_10-45-19.md b/timestamped/2025-12-10_10-45-19.md index cc6a45e..d4d6cf3 100644 --- a/timestamped/2025-12-10_10-45-19.md +++ b/timestamped/2025-12-10_10-45-19.md @@ -26,7 +26,7 @@ Objective: Discuss lighting control systems A primary reason for the discussion was presented: -> [!example] ^ex +> [!example] Example ^ex > While putting together a large garden style project > [[pdi-bid-estimating|Bid]] received a quote for lighting control > at over one million dollars. diff --git a/timestamped/2025-12-16_09-20-52.md b/timestamped/2025-12-16_09-20-52.md index e555510..7f2c2a8 100644 --- a/timestamped/2025-12-16_09-20-52.md +++ b/timestamped/2025-12-16_09-20-52.md @@ -2,6 +2,7 @@ id: 2025-12-16T09:20:52-0500 title: 2025-12-16 09:20:52 tags: + - topic/math/statistics daily: "[[2025-12-16]]" --- # 2025-12-16 09:20:52 diff --git a/timestamped/2025-12-16_20-04-00.md b/timestamped/2025-12-16_20-04-00.md index 4ed70a8..762ebb3 100644 --- a/timestamped/2025-12-16_20-04-00.md +++ b/timestamped/2025-12-16_20-04-00.md @@ -2,10 +2,11 @@ id: 2025-12-16T20:04:00-0500 title: 2025-12-16 20:04:?? tags: + - topic/math/statistics daily: "[[2025-12-16]]" --- # 2025-12-16 20:04:?? ### Metalog Distributions -[Metalog Distributions]http://www.metalogdistributions.com/home.html) +[Metalog Distributions](http://www.metalogdistributions.com/home.html) diff --git a/timestamped/2025-12-18_14-18-00.md b/timestamped/2025-12-18_14-18-00.md index 33342b6..d24edc1 100644 --- a/timestamped/2025-12-18_14-18-00.md +++ b/timestamped/2025-12-18_14-18-00.md @@ -2,6 +2,7 @@ id: 2025-12-18T14:18:00-0500 title: 2025-12-18 14:18:?? tags: + - topic/estimating daily: "[[2025-12-18]]" --- # 2025-12-18 14:18:?? diff --git a/timestamped/2025-12-18_15-22-00.md b/timestamped/2025-12-18_15-22-00.md index d4e12cc..7478f06 100644 --- a/timestamped/2025-12-18_15-22-00.md +++ b/timestamped/2025-12-18_15-22-00.md @@ -2,6 +2,7 @@ id: 2025-12-18T15:22:00-0500 title: 2025-12-18 15:22:?? tags: + - occupational daily: "[[2025-12-18]]" --- # 2025-12-18 15:22:?? diff --git a/timestamped/2025-12-18_15-30-00.md b/timestamped/2025-12-18_15-30-00.md index 5b9ee16..3b20191 100644 --- a/timestamped/2025-12-18_15-30-00.md +++ b/timestamped/2025-12-18_15-30-00.md @@ -2,6 +2,8 @@ id: 2025-12-18T15:30:00-0500 title: 2025-12-18 15:30:?? tags: + - topic/construction + - topic/estimating daily: "[[2025-12-18]]" --- # 2025-12-18 15:30:?? diff --git a/timestamped/2026-01-02_10-10-18.md b/timestamped/2026-01-02_10-10-18.md index fe6800c..975657b 100644 --- a/timestamped/2026-01-02_10-10-18.md +++ b/timestamped/2026-01-02_10-10-18.md @@ -2,6 +2,7 @@ id: 2026-01-02T10:10:18-0500 title: 2026-01-02 10:10:18 tags: + - occupational daily: "[[2026-01-02]]" --- # 2026-01-02 10:10:18 diff --git a/timestamped/2026-01-06_10-00-00.md b/timestamped/2026-01-06_10-00-00.md index eff06a4..af333fa 100644 --- a/timestamped/2026-01-06_10-00-00.md +++ b/timestamped/2026-01-06_10-00-00.md @@ -2,6 +2,7 @@ id: 2026-01-06T10:00:00-0500 title: 2026-01-06 10:00:?? tags: + - occupational/takeoff daily: "[[2026-01-06]]" --- # 2026-01-06 10:00:?? diff --git a/timestamped/2026-01-07_10-03-00.md b/timestamped/2026-01-07_10-03-00.md index c2ca09b..e4af459 100644 --- a/timestamped/2026-01-07_10-03-00.md +++ b/timestamped/2026-01-07_10-03-00.md @@ -1,7 +1,8 @@ --- id: 2026-01-07T10:03:00-0500 title: 2026-01-07 10:03:?? -tags: [] +tags: + - topic/construction daily: "[[2026-01-07]]" --- # 2026-01-07 10:03:?? diff --git a/timestamped/2026-01-07_10-05-00.md b/timestamped/2026-01-07_10-05-00.md index f62d6bf..4a97d39 100644 --- a/timestamped/2026-01-07_10-05-00.md +++ b/timestamped/2026-01-07_10-05-00.md @@ -2,6 +2,8 @@ id: 2026-01-07T10:05:00-0500 title: 2026-01-07 10:05:?? tags: + - topic/estimating + - occupational daily: "[[2026-01-07]]" --- # 2026-01-07 10:05:?? diff --git a/timestamped/2026-01-09_14-45-00.md b/timestamped/2026-01-09_14-45-00.md index deb7205..202c8aa 100644 --- a/timestamped/2026-01-09_14-45-00.md +++ b/timestamped/2026-01-09_14-45-00.md @@ -2,6 +2,7 @@ id: 2026-01-09T14:45:00-0500 title: 2026-01-09 14:45:?? tags: + - topic/estimating daily: "[[2026-01-09]]" --- # 2026-01-09 14:45:?? diff --git a/timestamped/2026-01-11_09-00-00.md b/timestamped/2026-01-11_09-00-00.md index 3bbed28..e0d520b 100644 --- a/timestamped/2026-01-11_09-00-00.md +++ b/timestamped/2026-01-11_09-00-00.md @@ -2,6 +2,7 @@ id: 2026-01-11T09:00:00-0500 title: 2026-01-11 09:00:?? tags: + - topic/estimating daily: "[[2026-01-11]]" --- # 2026-01-11 09:00:?? diff --git a/timestamped/2026-01-20_09-09-12.md b/timestamped/2026-01-20_09-09-12.md index 977ec77..5d27fb1 100644 --- a/timestamped/2026-01-20_09-09-12.md +++ b/timestamped/2026-01-20_09-09-12.md @@ -2,6 +2,7 @@ id: 2026-01-20T09:09:12-0500 title: 2026-01-20 09:09:12 tags: + - topic/estimating daily: "[[2026-01-20]]" --- # 2026-01-20 09:09:12 diff --git a/timestamped/2026-01-20_14-25-00.md b/timestamped/2026-01-20_14-25-00.md index 6274244..edcc11f 100644 --- a/timestamped/2026-01-20_14-25-00.md +++ b/timestamped/2026-01-20_14-25-00.md @@ -2,6 +2,7 @@ id: 2026-01-20T14:25:00-0500 title: 2026-01-20 14:25:?? tags: + - topic/hobbies/music daily: "[[2026-01-20]]" --- # 2026-01-20 14:25:?? diff --git a/timestamped/2026-01-20_16-30-00.md b/timestamped/2026-01-20_16-30-00.md index 3cec753..6cb6ad9 100644 --- a/timestamped/2026-01-20_16-30-00.md +++ b/timestamped/2026-01-20_16-30-00.md @@ -1,7 +1,8 @@ --- id: 2026-01-20T16:30:00-0500 title: 2026-01-20 16:30:00 -tags: [] +tags: + - occupational/takeoff daily: "[[2026-01-20]]" --- # 2026-01-20 16:30:00 diff --git a/timestamped/2026-01-23_12-34-00.md b/timestamped/2026-01-23_12-34-00.md index 2684f80..a771906 100644 --- a/timestamped/2026-01-23_12-34-00.md +++ b/timestamped/2026-01-23_12-34-00.md @@ -2,6 +2,7 @@ id: 2026-01-23T12:34:00-0500 title: 2026-01-23 12:34:?? tags: + - topic/meta daily: "[[2026-01-23]]" --- # 2026-01-23 12:34:?? diff --git a/timestamped/2026-01-25_18-46-00.md b/timestamped/2026-01-25_18-46-00.md index ba51f3e..2a2bac0 100644 --- a/timestamped/2026-01-25_18-46-00.md +++ b/timestamped/2026-01-25_18-46-00.md @@ -1,7 +1,8 @@ --- id: 2026-01-25T18:46:00-0500 title: 2026-01-25 18:46:?? -tags: [] +tags: + - topic/finance daily: "[[2026-01-25]]" --- # 2026-01-25 18:46:?? diff --git a/timestamped/2026-01-25_22-59-00.md b/timestamped/2026-01-25_22-59-00.md index 8a088cd..282d865 100644 --- a/timestamped/2026-01-25_22-59-00.md +++ b/timestamped/2026-01-25_22-59-00.md @@ -2,6 +2,7 @@ id: 2026-01-25T22:59:00-0500 title: 2026-01-25 22:59:?? tags: + - topic/estimating daily: "[[2026-01-25]]" --- # 2026-01-25 22:59:?? diff --git a/timestamped/2026-01-29_17-57-00.md b/timestamped/2026-01-29_17-57-00.md index fa7827e..81cc79b 100644 --- a/timestamped/2026-01-29_17-57-00.md +++ b/timestamped/2026-01-29_17-57-00.md @@ -1,7 +1,8 @@ --- id: 2026-01-29T17:57:00-0500 title: 2026-01-29 17:57:?? -tags: [] +tags: + - topic/finance daily: "[[2026-01-29]]" --- # 2026-01-29 17:57:?? diff --git a/timestamped/2026-01-30_16-29-00.md b/timestamped/2026-01-30_16-29-00.md index f88d97a..4b52ae4 100644 --- a/timestamped/2026-01-30_16-29-00.md +++ b/timestamped/2026-01-30_16-29-00.md @@ -1,7 +1,8 @@ --- id: 2026-01-30T16:29:00-0500 title: 2026-01-30 16:29:?? -tags: [] +tags: + - topic/math/statistics daily: "[[2026-01-30]]" --- # 2026-01-30 16:29:?? diff --git a/timestamped/2026-02-17_16-36-35.md b/timestamped/2026-02-17_16-36-35.md index fea61ac..8e65b97 100644 --- a/timestamped/2026-02-17_16-36-35.md +++ b/timestamped/2026-02-17_16-36-35.md @@ -1,7 +1,8 @@ --- id: 2026-04-21T11:55:50 title: 2026-02-17 16:36:35 -tags: [] +tags: + - topic/estimating daily: "[[2026-02-17]]" --- # 2026-02-17 16:36:35 diff --git a/timestamped/2026-04-18_18-44-11.md b/timestamped/2026-04-18_18-44-11.md index 4eb5a6d..e5e4df0 100644 --- a/timestamped/2026-04-18_18-44-11.md +++ b/timestamped/2026-04-18_18-44-11.md @@ -1,7 +1,8 @@ --- id: 2026-04-18T18:44:11 -title: "2026-04-18 18:44:11" -tags: [] +title: 2026-04-18 18:44:11 +tags: + - topic/estimating daily: "[[2026-04-18]]" --- # 2026-04-18 18:44:11 diff --git a/timestamped/2026-04-20_08-31-52.md b/timestamped/2026-04-20_08-31-52.md index 8c0012e..092de7a 100644 --- a/timestamped/2026-04-20_08-31-52.md +++ b/timestamped/2026-04-20_08-31-52.md @@ -1,7 +1,9 @@ --- id: 2026-04-20T08:31:52 -title: "2026-04-20 08:31:52" -tags: [] +title: 2026-04-20 08:31:52 +tags: + - type/minutes + - occupational daily: "[[2026-04-20]]" --- # 2026-04-20 08:31:52 diff --git a/timestamped/2026-04-20_08-58-40.md b/timestamped/2026-04-20_08-58-40.md index 8d5e878..4603193 100644 --- a/timestamped/2026-04-20_08-58-40.md +++ b/timestamped/2026-04-20_08-58-40.md @@ -1,7 +1,8 @@ --- id: 2026-04-20T08:58:40 -title: "2026-04-20 08:58:40" -tags: [] +title: 2026-04-20 08:58:40 +tags: + - occupational daily: "[[2026-04-20]]" up: "[[conest-pre-takeoff-email-template]]" --- diff --git a/timestamped/2026-04-22_11-50-05.md b/timestamped/2026-04-22_11-50-05.md index 770f290..1b359b5 100644 --- a/timestamped/2026-04-22_11-50-05.md +++ b/timestamped/2026-04-22_11-50-05.md @@ -1,7 +1,8 @@ --- id: 2026-04-22T11:50:05-0400 title: 2026-04-22 11:50:05 -tags: [] +tags: + - topic/estimating daily: "[[2026-04-22]]" --- # 2026-04-22 11:50:05 diff --git a/timestamped/2026-04-23_10-01-40.md b/timestamped/2026-04-23_10-01-40.md index 2564a2b..31a845b 100644 --- a/timestamped/2026-04-23_10-01-40.md +++ b/timestamped/2026-04-23_10-01-40.md @@ -1,7 +1,9 @@ --- id: 2026-04-23T10:01:40-0400 title: 2026-04-23 10:01:40 -tags: [] +tags: + - occupational + - type/minutes daily: "[[2026-04-23]]" --- # 2026-04-23 10:01:40 diff --git a/timestamped/2026-04-23_14-36-51.md b/timestamped/2026-04-23_14-36-51.md index 07645bd..237d21a 100644 --- a/timestamped/2026-04-23_14-36-51.md +++ b/timestamped/2026-04-23_14-36-51.md @@ -1,7 +1,8 @@ --- id: 2026-04-23T14:36:51-0400 title: 2026-04-23 14:36:51 -tags: [] +tags: + - topic/construction/electrical daily: "[[2026-04-23]]" --- # 2026-04-23 14:36:51 diff --git a/timestamped/2026-04-27_10-05-24.md b/timestamped/2026-04-27_10-05-24.md index 65f601a..353e087 100644 --- a/timestamped/2026-04-27_10-05-24.md +++ b/timestamped/2026-04-27_10-05-24.md @@ -1,7 +1,8 @@ --- id: 2026-04-27T10:05:24-0400 title: 2026-04-27 10:05:24 -tags: [] +tags: + - occupational/takeoff daily: "[[2026-04-27]]" --- # 2026-04-27 10:05:24 diff --git a/timestamped/2026-04-27_12-19-33.md b/timestamped/2026-04-27_12-19-33.md index c29c502..6853dfb 100644 --- a/timestamped/2026-04-27_12-19-33.md +++ b/timestamped/2026-04-27_12-19-33.md @@ -1,7 +1,8 @@ --- id: 2026-04-27T12:19:33-0400 title: 2026-04-27 12:19:33 -tags: [] +tags: + - topic/estimating daily: "[[2026-04-27]]" --- # 2026-04-27 12:19:33 diff --git a/timestamped/2026-04-27_12-43-54.md b/timestamped/2026-04-27_12-43-54.md index ad56b3a..077f151 100644 --- a/timestamped/2026-04-27_12-43-54.md +++ b/timestamped/2026-04-27_12-43-54.md @@ -1,7 +1,8 @@ --- id: 2026-04-27T12:43:54-0400 title: 2026-04-27 12:43:54 -tags: [] +tags: + - occupational/takeoff daily: "[[2026-04-27]]" --- # 2026-04-27 12:43:54 diff --git a/timestamped/2026-04-27_12-56-35.md b/timestamped/2026-04-27_12-56-35.md index 92c0764..484e0e9 100644 --- a/timestamped/2026-04-27_12-56-35.md +++ b/timestamped/2026-04-27_12-56-35.md @@ -1,7 +1,9 @@ --- id: 2026-04-27T12:56:35-0400 title: 2026-04-27 12:56:35 -tags: [] +tags: + - occupational + - type/minutes daily: "[[2026-04-27]]" --- # 2026-04-27 12:56:35 diff --git a/timestamped/2026-04-29_20-25-22.md b/timestamped/2026-04-29_20-25-22.md index 496aa24..595a4a4 100644 --- a/timestamped/2026-04-29_20-25-22.md +++ b/timestamped/2026-04-29_20-25-22.md @@ -1,7 +1,8 @@ --- id: 2026-04-29T20:25:22-0400 title: 2026-04-29 20:25:22 -tags: [] +tags: + - topic/estimating daily: "[[2026-04-29]]" --- # 2026-04-29 20:25:22 diff --git a/timestamped/2026-04-30_14-27-02.md b/timestamped/2026-04-30_14-27-02.md index fb880e0..9df9cc4 100644 --- a/timestamped/2026-04-30_14-27-02.md +++ b/timestamped/2026-04-30_14-27-02.md @@ -1,7 +1,8 @@ --- id: 2026-04-30T14:27:02-0400 title: 2026-04-30 14:27:02 -tags: [] +tags: + - occupational/takeoff daily: "[[2026-04-30]]" --- # 2026-04-30 14:27:02 diff --git a/timestamped/2026-05-20_12-23-54.md b/timestamped/2026-05-20_12-23-54.md new file mode 100644 index 0000000..1a1cb14 --- /dev/null +++ b/timestamped/2026-05-20_12-23-54.md @@ -0,0 +1,42 @@ +--- +id: 2026-05-20T12:23:54-0400 +title: 2026-05-20 12:23:54 +tags: [] +daily: "[[2026-05-20]]" +--- +# 2026-05-20 12:23:54 + +## Footnotes as Sidenotes for Obsidian + +I've recently switched to using +`Editor > Display > Readable Line Length` +and have been enjoying the change, +however I'm left with a lot of real estate in the viewport. + +An unrelated problem, +I really don't love using the reading view and find it difficult to recommend +because it puts `[^n]` style footnotes at the bottom of the page. +I use footnotes liberally to include extra context +and information that interests me +while still maintaining a strong central narrative +which only includes what is strictly necessary to understand the subject. + +My favorite way to present such asides +is in the margin, right next to the reference.[^1] +While the [[obsidian]] core plugin Footnotes View +can almost emulate the desired appearance, +the text is redundant when in the editing view. + +[^1]: See [My hobby: running deranged surveys --- LessWrong](https://www.lesswrong.com/posts/fQz6afpcZhdMdYzgE/my-hobby-running-deranged-surveys). + +No existing community plugin implements the desired behavior. +Cornell Marginalia is close, +but it uses new syntax rather than footnotes +and is bloated, buggy, and not fully translated. +Eventually I should take a crack at it. + +### Resources + +* [Sidenotes In Web Design · Gwern.net](https://gwern.net/sidenote) +* [Implementing Pure CSS Sidenotes for a Blog • Hey!👏Lyle!](https://heylyle.com/en/posts/only-css-sidenotes/) +* [What HTML element for semantic sidenotes? --- Stack Overflow](https://stackoverflow.com/questions/57272564/what-html-element-for-semantic-sidenotes) diff --git a/timestamped/2026-05-20_13-10-36.md b/timestamped/2026-05-20_13-10-36.md new file mode 100644 index 0000000..2ade656 --- /dev/null +++ b/timestamped/2026-05-20_13-10-36.md @@ -0,0 +1,32 @@ +--- +id: 2026-05-20T13:10:36-0400 +title: 2026-05-20 13:10:36 +tags: [] +daily: "[[2026-05-20]]" +--- +# 2026-05-20 13:10:36 + +Direction from [[josh-ford]] +on [[303-mariposa-residence]] +with application elsewhere as well. + +## Heating Designations vs. Temporary Assemblies + +Reiterating direction expressed [[2025-05-11]], +we are to prefer length-based assemblies for equipment connections, +preferring temp assemblies over heating designations. + +## "1/2in Conduit" + +> [!quote] Electrical.pdf, E2.11 +> PROVIDE EQUIPMENT WITH 1/2"C - 2#8 AWG & #10 GND. + +Josh repeated my understanding that this verbiage is common +even when cable type wiring methods are allowed. +Assuming the inclusion is deliberate, +it could be interpreted in our favor as +"if you choose to or must use conduit, use this size." + +We very rarely use 1/2in conduit, using 3/4in instead. +the cost difference is quite small, +especially when considering bulk savings.