vault backup: 2026-06-04 16:59:32

This commit is contained in:
2026-06-04 16:59:32 -04:00
parent d127008fb1
commit 32e24aab08
32 changed files with 714 additions and 133 deletions
+2 -1
View File
@@ -20,5 +20,6 @@
"landscape": false, "landscape": false,
"margin": "0", "margin": "0",
"downscalePercent": 100 "downscalePercent": 100
} },
"showInlineTitle": true
} }
+4 -1
View File
@@ -28,5 +28,8 @@
"tabout", "tabout",
"obsidian-tidy-footnotes", "obsidian-tidy-footnotes",
"obsidian-citation-plugin", "obsidian-citation-plugin",
"obsidian-quiet-outline" "obsidian-quiet-outline",
"inline-spoilers",
"daily-notes-editor",
"tasknotes"
] ]
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "homepage", "id": "homepage",
"name": "Homepage", "name": "Homepage",
"version": "4.4.2", "version": "4.4.4",
"minAppVersion": "1.12.2", "minAppVersion": "1.12.2",
"description": "Open a specified note, canvas, base, or workspace on startup, or set it for quick access later.", "description": "Open a specified note, canvas, base, or workspace on startup, or set it for quick access later.",
"author": "novov", "author": "novov",
+1 -1
View File
@@ -3,6 +3,6 @@
* https://github.com/logonoff/obsidian-inline-spoilers * https://github.com/logonoff/obsidian-inline-spoilers
* SPDX-License-Identifier: GPL-3.0-or-later * SPDX-License-Identifier: GPL-3.0-or-later
*/ */
"use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var C=(t,e)=>{for(var i in e)u(t,i,{get:e[i],enumerable:!0})},_=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of N(e))!A.call(t,o)&&o!==i&&u(t,o,{get:()=>e[o],enumerable:!(s=y(e,o))||s.enumerable});return t};var v=t=>_(u({},"__esModule",{value:!0}),t);var H={};C(H,{default:()=>g});module.exports=v(H);var D=require("@codemirror/language"),x=require("@codemirror/state"),c=require("@codemirror/view"),n=require("obsidian"),P=/\|\|(.+?)\|\|/g,M="p, li, h1, h2, h3, h4, h5, h6, blockquote, em, strong, b, i, a, th, td",T=t=>{if(t.nodeType===Node.TEXT_NODE){if(!t.textContent||!t.parentNode)return;let e=t.textContent.split(/(\|\|[^|]+\|\|)/g),i=document.createDocumentFragment();for(let s of e)if(P.test(s)){let o=s.slice(2,-2),l=createSpan({cls:"inline_spoilers-spoiler",text:o});i.appendChild(l)}else{let o=document.createTextNode(s);i.appendChild(o)}t.parentNode.replaceChild(i,t)}else t.nodeType===Node.ELEMENT_NODE&&Array.from(t.childNodes).forEach(T)},w=(t,e)=>{let i=t.findAll(M);for(let o of i)Array.from(o.childNodes).forEach(T);let s=t.findAll(".inline_spoilers-spoiler");for(let o of s)e.registerDomEvent(o,"click",()=>{o.classList.toggle("inline_spoilers-revealed")})},V=t=>{let e=Array.from(t.containerEl.querySelectorAll(".inline_spoilers-spoiler"));for(let i of e){let s=i.parentNode,o=document.createTextNode(`||${i.innerText}||`);s&&s.replaceChild(o,i)}},L=c.Decoration.mark({class:"inline_spoilers-editor-spoiler",tagName:"span"}),R=c.Decoration.mark({class:"inline_spoilers-editor-spoiler-delimiter",tagName:"span"}),m=class{constructor(e){this.decorations=this.buildDecorations(e)}update(e){(e.docChanged||e.viewportChanged)&&(this.decorations=this.buildDecorations(e.view))}destroy(){}buildDecorations(e){let i=new x.RangeSetBuilder,s=[];for(let{from:o,to:l}of e.visibleRanges)(0,D.syntaxTree)(e.state).iterate({from:o,to:l,enter(E){let k=e.state.sliceDoc(E.from,E.to),h;for(;(h=P.exec(k))!==null;){let a=h.index,p=a+h[0].length,S=e.state.sliceDoc(a,p);!S.startsWith("||")&&!S.endsWith("||")||(s.push({from:a,to:a+2,isDelimiter:!0}),s.push({from:a+2,to:p-2,isDelimiter:!1}),s.push({from:p-2,to:p,isDelimiter:!0}))}}});s.sort((o,l)=>o.from-l.from);for(let o of s)i.add(o.from,o.to,o.isDelimiter?R:L);return i.finish()}},I={decorations:t=>t.decorations},d=c.ViewPlugin.fromClass(m,I),r=[],O=t=>{r.includes(d)||r.push(d),t.updateOptions()},b=t=>{let e=r.indexOf(d);e!==-1&&r.splice(e,1),t.updateOptions()},W={showAllSpoilers:!1,enableEditorMode:!1},f=class extends n.PluginSettingTab{constructor(e,i){super(e,i),this.plugin=i}display(){let{containerEl:e}=this;e.empty(),new n.Setting(e).setName("Reveal all spoilers").setDesc("Always show all inline spoilers, regardless of whether they are clicked or not.").addToggle(i=>i.setValue(this.plugin.settings.showAllSpoilers).onChange(async s=>{this.plugin.settings.showAllSpoilers=s,this.app.workspace.containerEl.toggleClass("inline_spoilers-revealed",s),await this.plugin.saveSettings()})),new n.Setting(e).setName("Hide spoilers in editor view (experimental)").setDesc("Hide spoilers in the editor until your cursor is on the same line as the spoiler.").addToggle(i=>i.setValue(this.plugin.settings.enableEditorMode).onChange(async s=>{this.plugin.settings.enableEditorMode=s,s?O(this.app.workspace):b(this.app.workspace),await this.plugin.saveSettings()}))}},g=class extends n.Plugin{async onload(){await this.loadSettings();let e=this.app.workspace.containerEl.querySelector(".markdown-reading-view");e&&w(e,this),this.registerMarkdownPostProcessor(i=>{w(i,this)}),this.addCommand({id:"create-spoiler",name:"Create spoiler",editorCallback:i=>{let s=i.getSelection();i.replaceSelection(`||${s}||`)}}),this.registerEditorExtension(r),this.addSettingTab(new f(this.app,this))}onunload(){this.app.workspace.containerEl.classList.remove("inline_spoilers-revealed"),V(this.app.workspace),b(this.app.workspace)}async loadSettings(){this.settings=Object.assign({},W,await this.loadData()),this.app.workspace.containerEl.toggleClass("inline_spoilers-revealed",this.settings.showAllSpoilers),this.settings.enableEditorMode&&r.push(d)}async saveSettings(){await this.saveData(this.settings)}}; "use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var C=(t,e)=>{for(var i in e)u(t,i,{get:e[i],enumerable:!0})},v=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of N(e))!A.call(t,o)&&o!==i&&u(t,o,{get:()=>e[o],enumerable:!(s=y(e,o))||s.enumerable});return t};var _=t=>v(u({},"__esModule",{value:!0}),t);var H={};C(H,{default:()=>g});module.exports=_(H);var D=require("@codemirror/language"),x=require("@codemirror/state"),c=require("@codemirror/view"),n=require("obsidian"),P=/\|\|(.+?)\|\|/g,M="p, li, h1, h2, h3, h4, h5, h6, blockquote, em, strong, b, i, a, th, td",T=t=>{if(t.nodeType===Node.TEXT_NODE){if(!t.textContent||!t.parentNode)return;let e=t.textContent.split(/(\|\|[^|]+\|\|)/g),i=createFragment();for(let s of e)if(P.test(s)){let o=s.slice(2,-2),l=createSpan({cls:"inline_spoilers-spoiler",text:o});i.appendChild(l)}else{let o=activeDocument.createTextNode(s);i.appendChild(o)}t.parentNode.replaceChild(i,t)}else t.nodeType===Node.ELEMENT_NODE&&Array.from(t.childNodes).forEach(T)},w=(t,e)=>{let i=t.findAll(M);for(let o of i)Array.from(o.childNodes).forEach(T);let s=t.findAll(".inline_spoilers-spoiler");for(let o of s)e.registerDomEvent(o,"click",()=>{o.classList.toggle("inline_spoilers-revealed")})},V=t=>{let e=Array.from(t.containerEl.querySelectorAll(".inline_spoilers-spoiler"));for(let i of e){let s=i.parentNode,o=activeDocument.createTextNode(`||${i.innerText}||`);s&&s.replaceChild(o,i)}},L=c.Decoration.mark({class:"inline_spoilers-editor-spoiler",tagName:"span"}),R=c.Decoration.mark({class:"inline_spoilers-editor-spoiler-delimiter",tagName:"span"}),m=class{constructor(e){this.decorations=this.buildDecorations(e)}update(e){(e.docChanged||e.viewportChanged)&&(this.decorations=this.buildDecorations(e.view))}destroy(){}buildDecorations(e){let i=new x.RangeSetBuilder,s=[];for(let{from:o,to:l}of e.visibleRanges)(0,D.syntaxTree)(e.state).iterate({from:o,to:l,enter(E){let k=e.state.sliceDoc(E.from,E.to),h;for(;(h=P.exec(k))!==null;){let a=h.index,p=a+h[0].length,S=e.state.sliceDoc(a,p);!S.startsWith("||")&&!S.endsWith("||")||(s.push({from:a,to:a+2,isDelimiter:!0}),s.push({from:a+2,to:p-2,isDelimiter:!1}),s.push({from:p-2,to:p,isDelimiter:!0}))}}});s.sort((o,l)=>o.from-l.from);for(let o of s)i.add(o.from,o.to,o.isDelimiter?R:L);return i.finish()}},I={decorations:t=>t.decorations},d=c.ViewPlugin.fromClass(m,I),r=[],O=t=>{r.includes(d)||r.push(d),t.updateOptions()},b=t=>{let e=r.indexOf(d);e!==-1&&r.splice(e,1),t.updateOptions()},W={showAllSpoilers:!1,enableEditorMode:!1},f=class extends n.PluginSettingTab{constructor(e,i){super(e,i),this.plugin=i}display(){let{containerEl:e}=this;e.empty(),new n.Setting(e).setName("Reveal all spoilers").setDesc("Always show all inline spoilers, regardless of whether they are clicked or not.").addToggle(i=>i.setValue(this.plugin.settings.showAllSpoilers).onChange(async s=>{this.plugin.settings.showAllSpoilers=s,this.app.workspace.containerEl.toggleClass("inline_spoilers-revealed",s),await this.plugin.saveSettings()})),new n.Setting(e).setName("Hide spoilers in editor view (experimental)").setDesc("Hide spoilers in the editor until your cursor is on the same line as the spoiler.").addToggle(i=>i.setValue(this.plugin.settings.enableEditorMode).onChange(async s=>{this.plugin.settings.enableEditorMode=s,s?O(this.app.workspace):b(this.app.workspace),await this.plugin.saveSettings()}))}},g=class extends n.Plugin{async onload(){await this.loadSettings();let e=this.app.workspace.containerEl.querySelector(".markdown-reading-view");e&&w(e,this),this.registerMarkdownPostProcessor(i=>{w(i,this)}),this.addCommand({id:"create-spoiler",name:"Create spoiler",editorCallback:i=>{let s=i.getSelection();i.replaceSelection(`||${s}||`)}}),this.registerEditorExtension(r),this.addSettingTab(new f(this.app,this))}onunload(){this.app.workspace.containerEl.classList.remove("inline_spoilers-revealed"),V(this.app.workspace),b(this.app.workspace)}async loadSettings(){this.settings=Object.assign({},W,await this.loadData()),this.app.workspace.containerEl.toggleClass("inline_spoilers-revealed",this.settings.showAllSpoilers),this.settings.enableEditorMode&&r.push(d)}async saveSettings(){await this.saveData(this.settings)}};
/* nosourcemap */ /* nosourcemap */
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "inline-spoilers", "id": "inline-spoilers",
"name": "Inline spoilers", "name": "Inline spoilers",
"version": "1.2.5", "version": "1.2.6",
"minAppVersion": "1.6.5", "minAppVersion": "1.6.5",
"description": "Adds Discord-like syntax for inline spoilers.", "description": "Adds Discord-like syntax for inline spoilers.",
"author": "logonoff", "author": "logonoff",
+21 -5
View File
@@ -13,15 +13,25 @@ body {
--inline-spoilers-spoiler-radius: var(--radius-s); --inline-spoilers-spoiler-radius: var(--radius-s);
} }
/* spoiler bar */ /**
* hidden spoilers
*/
/** used in reader mode */
.inline_spoilers-spoiler, .inline_spoilers-spoiler,
/** used in spoiler content in editor mode */
.inline_spoilers-editor-spoiler, .inline_spoilers-editor-spoiler,
/** used in delimiter in editor mode */
.inline_spoilers-editor-spoiler-delimiter { .inline_spoilers-editor-spoiler-delimiter {
/* obscured */ /* obscured */
background-color: var(--inline-spoilers-hidden-background) !important; background-color: var(--inline-spoilers-hidden-background) !important;
color: var(--inline-spoilers-hidden-foreground) !important; color: var(--inline-spoilers-hidden-foreground) !important;
} }
/**
* revealed spoilers
*/
/** used when a hidden spoiler is revealed by clicking in reader mode */ /** used when a hidden spoiler is revealed by clicking in reader mode */
.inline_spoilers-spoiler.inline_spoilers-revealed, .inline_spoilers-spoiler.inline_spoilers-revealed,
@@ -33,27 +43,31 @@ body {
.inline_spoilers-revealed .inline_spoilers-spoiler, .inline_spoilers-revealed .inline_spoilers-spoiler,
.inline_spoilers-revealed .inline_spoilers-editor-spoiler, .inline_spoilers-revealed .inline_spoilers-editor-spoiler,
.inline_spoilers-revealed .inline_spoilers-editor-spoiler-delimiter { .inline_spoilers-revealed .inline_spoilers-editor-spoiler-delimiter {
/* revealed */
background-color: var(--inline-spoilers-revealed-background) !important; background-color: var(--inline-spoilers-revealed-background) !important;
color: var(--inline-spoilers-revealed-foreground) !important; color: var(--inline-spoilers-revealed-foreground) !important;
} }
/* reader */ /**
* spoiler border radius
*/
/* reader mode always shows one contiguous spoiler with rounded corners */
.inline_spoilers-spoiler { .inline_spoilers-spoiler {
border-radius: var(--inline-spoilers-spoiler-radius); border-radius: var(--inline-spoilers-spoiler-radius);
} }
/* editor */ /* editor mode, when a spoiler is hidden, does not display delimiters (||) */
.is-live-preview .inline_spoilers-editor-spoiler { .is-live-preview .inline_spoilers-editor-spoiler {
border-radius: var(--inline-spoilers-spoiler-radius); border-radius: var(--inline-spoilers-spoiler-radius);
} }
/* editor mode, when a spoiler is revealed, display delimiters */
.is-live-preview .cm-active .inline_spoilers-editor-spoiler { .is-live-preview .cm-active .inline_spoilers-editor-spoiler {
/* contiguous border radius with the delimiter */ /* contiguous border radius with the delimiter */
border-radius: 0em; border-radius: 0em;
} }
/* delimiter */ /* editor mode, when a spoiler is revealed, display delimiters, which should have
contiguous border radius with the spoiler content */
.cm-line .inline_spoilers-editor-spoiler-delimiter { .cm-line .inline_spoilers-editor-spoiler-delimiter {
&:has(+ .inline_spoilers-editor-spoiler) { &:has(+ .inline_spoilers-editor-spoiler) {
border-radius: var(--inline-spoilers-spoiler-radius) 0 0 var(--inline-spoilers-spoiler-radius); border-radius: var(--inline-spoilers-spoiler-radius) 0 0 var(--inline-spoilers-spoiler-radius);
@@ -63,10 +77,12 @@ body {
} }
} }
/** hide spoiler delimiters in editor mode when spoilers are hidden */
.is-live-preview .inline_spoilers-editor-spoiler-delimiter { .is-live-preview .inline_spoilers-editor-spoiler-delimiter {
display: none; display: none;
} }
/** reveal spoiler delimiters in editor mode when a spoiler is revealed */
.is-live-preview .cm-active .inline_spoilers-editor-spoiler-delimiter { .is-live-preview .cm-active .inline_spoilers-editor-spoiler-delimiter {
display: unset; display: unset;
} }
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "obsidian-excalidraw-plugin", "id": "obsidian-excalidraw-plugin",
"name": "Excalidraw", "name": "Excalidraw",
"version": "2.23.7", "version": "2.23.8",
"minAppVersion": "1.8.7", "minAppVersion": "1.8.7",
"description": "Sketch Your Mind. Edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.", "description": "Sketch Your Mind. Edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
"author": "Zsolt Viczian", "author": "Zsolt Viczian",
+7
View File
@@ -353,6 +353,13 @@
"replace": "...", "replace": "...",
"flags": "gm", "flags": "gm",
"enabled": true "enabled": true
},
{
"label": "remove whitespace from empty blockquote lines",
"find": "^> +(?=\\n>)",
"replace": ">",
"flags": "gm",
"enabled": true
} }
], ],
"commonStyles": { "commonStyles": {
+7 -4
View File
@@ -45,8 +45,9 @@ add `ITEM DATABASE`/`WIRING & SYSTEM DEVICES`/`FLOOR BOXES & FITTTINGS`/`GENERIC
### Lighting Homeruns ### Lighting Homeruns
* `Area` = "XX - Level XX Building" > [!info] Breakdowns
* `Phase` = "Building - Back of House (BOH)" > * `Area` = "XX - Level XX Building"
> * `Phase` = "Building - Back of House (BOH)"
Takeoff homeruns in Building breakdowns, Takeoff homeruns in Building breakdowns,
even where serving Amenity spaces. even where serving Amenity spaces.
@@ -79,7 +80,8 @@ per [[fire-resistive-wiring-methods-takeoff]].
##### Homeruns ##### Homeruns
* `Area` = _Match unit_ > [!info] Breakdowns
> * `Area` = _Match unit_
.../`CONDENSOR HOME RUNS` .../`CONDENSOR HOME RUNS`
@@ -99,7 +101,8 @@ per [[fire-resistive-wiring-methods-takeoff]].
##### Connections ##### Connections
* `Area` = _Match CU (usually roof)_ > [!info] Breakdowns
> * `Area` = _Match CU (usually roof)_
.../`CU CONDENSER SLEEVE W/ FLEX - NO HMRN WIRE` .../`CU CONDENSER SLEEVE W/ FLEX - NO HMRN WIRE`
+52 -20
View File
@@ -1,5 +1,5 @@
--- ---
id: feeders id:
aliases: aliases:
- feeders takeoff - feeders takeoff
title: Feeders Takeoff title: Feeders Takeoff
@@ -16,12 +16,12 @@ up: "[[takeoff-scripts]]"
> including [[conest-wiring-method-selection]], > including [[conest-wiring-method-selection]],
> before beginning takeoff. > before beginning takeoff.
## Execution ## Scope
1. Primaries * Primaries
2. Secondaries * Secondaries
3. Feeders * Feeders
4. Grounding * Grounding
### Formatting ### Formatting
@@ -46,38 +46,50 @@ For adjacent panels, use a minimum 10ft length.
#### Adders #### Adders
Use the difference in elevation between equipment Use the difference in elevation between equipment[^2]
or 10ft, whichever is greater. or 10ft, whichever is greater.
Add an additional 5ft (total 15ft) for site runs [^2]: Not actually difference in elevation.
(primaries, secondaries, etc.). A site run from the bottom to the top of a hill may still only need 10ft.
This needs more precise wording.
It is not necessary to change this logic for site runs.[^3][^4]
[^3]: [[2026-06-03_14-05-39#Site Run Adders]]
[^4]: I will remove this line when I break the habit.
## Primaries ## Primaries
* `Area` = "2 - Site" > [!info] Breakdowns
* `Phase` = "Site" > * `Area` = "2 - Site"
* `System` = "PRI - Primaries" > * `Phase` = "Site"
> * `System` = "PRI - Primaries"
Usually only empty conduit if included. Usually only empty conduit if included.
## Secondaries ## Secondaries
* `Area` = "2 - Site" > [!info] Breakdowns
* `Phase` = "Site" > * `Area` = "2 - Site"
* `System` = "SEC - Secondaries" > * `Phase` = "Site"
> * `System` = "SEC - Secondaries"
### Wiring on Vault Racks ### Wiring on Vault Racks
Where secondary conductors run on racks in utility vaults Where secondary conductors run on racks in utility vaults
manually set the length of conduit, manually set the length of conduit,
measure the wire length, measure the wire length,
add 20ft in addition to previously mentioned adders. add 20ft in addition to previously mentioned adders.[^5]
[^5]: [[art-baldwin]] at some point, I think.
## Feeders ## Feeders
* `Area` = "01 - Feeders/Risers Building" > [!info] Breakdowns
* `Phase` = "Feeders" > * `Area` = "01 - Feeders/Risers Building"
* `System` = "FRR - Feeders and Risers" > * `Phase` = "Feeders"
> * `System` = "FRR - Feeders and Risers"
> [!info] Garage Feeders > [!info] Garage Feeders
> `Area` "01 - Feeders/Risers Garage" is seldom used. > `Area` "01 - Feeders/Risers Garage" is seldom used.
@@ -88,9 +100,25 @@ add 20ft in addition to previously mentioned adders.
`COMMON ASSEMBLIES`/`DISTRIBUTION`/`BUS DUCT`/... `COMMON ASSEMBLIES`/`DISTRIBUTION`/`BUS DUCT`/...
Delete unnecessary items and change `Fct 1`
to get the correct quantities for the use case.
## Conductor Support ## Conductor Support
![[nfpa-70_300_general-requirements#300.19(A) Spacing Intervals --- Maximum.]] In lieu of more stringent requirements
that may be imposed by project requirements,
minimum support for vertical conductors
is determined by [[nfpa-70_300_general-requirements#300.19(A) Spacing Intervals --- Maximum.|NEC 300.19(A)]]
Various [[heuristics]] exist among ConEst teams.
Assuming minimum 40ft spacing
(the absolute minimum for feeders we're likely to encounter)
for _all_ conductors is popular even among more detail-favoring seniors.
I generally prefer not to use a heuristic
because `takeoff-calcs.xlsm` trivializes accurate selection
and results in far fewer necessary supports.
Like [[#Sleeving]], it is acceptable to takeoff total counts
`ITEM DATABASE`/`CONDUIT & FITTINGS`/`CABLE SUPPORT / WEDGES`/`... COMPLETE FITTING`/... `ITEM DATABASE`/`CONDUIT & FITTINGS`/`CABLE SUPPORT / WEDGES`/`... COMPLETE FITTING`/...
@@ -101,3 +129,7 @@ See [[grounding-takeoff]].
## Sleeving ## Sleeving
See [[sleeving-takeoff]]. See [[sleeving-takeoff]].
Because feeders are not broken down by level
(they use `Area` = "01 - Feeders/Risers ...")
it is acceptable to use total counts.
+10 -6
View File
@@ -17,7 +17,8 @@ aliases:
> This note is intended for practice specific to [[pdi-estimating]]. > This note is intended for practice specific to [[pdi-estimating]].
> See [[fire-alarm]] for information about fire alarm systems. > See [[fire-alarm]] for information about fire alarm systems.
* `System` = "FA - Fire Alarm" > [!info] Breakdowns
> * `System` = "FA - Fire Alarm"
## Assembly Selection ## Assembly Selection
@@ -59,8 +60,9 @@ Include [[sleeving-takeoff]] as necessary.
> Also "Elevator Machine Room (EMR)" > Also "Elevator Machine Room (EMR)"
* `Area` = Same as FACR. > [!info] Breakdowns
* `Phase` = Same as FACR. > * `Area` = Same as FACR.
> * `Phase` = Same as FACR.
For each Elevator Control Room (ECR): For each Elevator Control Room (ECR):
@@ -73,8 +75,9 @@ For each Elevator Control Room (ECR):
### Elevator Shafts ### Elevator Shafts
* `Area` = Same as FACR. > [!info] Breakdowns
* `Phase` = Same as FACR. > * `Area` = Same as FACR.
> * `Phase` = Same as FACR.
For each elevator shaft: For each elevator shaft:
@@ -149,7 +152,8 @@ For each stairwell:
## Central Monitoring Loop ## Central Monitoring Loop
* `System` = "FAR - Fire Alarm Loop" > [!info] Breakdowns
> * `System` = "FAR - Fire Alarm Loop"
> [!important] > [!important]
> Garden Style only. > Garden Style only.
+3 -1
View File
@@ -165,7 +165,7 @@ Also called "cove" or "strip" lighting,
however those terms are less specific however those terms are less specific
and potentially confusing. and potentially confusing.
Use item `FIXTURE LABOR 1/2HR` Use item `FIXTURE LABOR 1HR`
and change `Fct 1` to match the calculated labor and change `Fct 1` to match the calculated labor
(1 hour per 12 feet). (1 hour per 12 feet).
@@ -245,6 +245,7 @@ round up to the nearest 5ft
## Facade ## Facade
> [!info] Breakdowns
> * `Phase` = "Facade" > * `Phase` = "Facade"
Length and Labor will be more than a normal fixture in BOH/Amenity Length and Labor will be more than a normal fixture in BOH/Amenity
@@ -269,6 +270,7 @@ Create its own breakout in WBS, and phase in [[accubid|Accubid]]
### Breakdowns ### Breakdowns
> [!info] Breakdowns
> * `System` = "FML - Site Fixtures Material & Labor" > * `System` = "FML - Site Fixtures Material & Labor"
### Pole Lights ### Pole Lights
+38
View File
@@ -0,0 +1,38 @@
---
title: Garlic Chicken and Rice
tags:
- topic/hobbies/cooking
up: "[[recipes]]"
---
# Garlic Chicken and Rice
## Ingredients
* **1 pound** boneless, skinless chicken breasts, cubed
* **3/4 teaspoon** garlic salt
* **1/4 teaspoon** ground black pepper
* **4 cloves** garlic, minced
* **1 cup** dry white rice
* **3 cups** low-sodium chicken broth
* **1/2 cup** heavy cream, room temperature
* **2 cups** fresh spinach
* **1/4 cup** freshly grated Parmesan cheese
## Instructions
* Season the **chicken** with the **garlic salt** and **pepper**.
* Add the chicken to a large oiled skillet.
Sauté over medium-high heat until brown. (5--7 minutes)
* Add the **garlic** and sauté 1 minute more.
* Add **rice** and **chicken broth** to the pan.
Bring to a boil then cover.
Cook until most of the liquid is absorbed. (12--15 minutes)
* Stir in the **heavy cream** and **spinach**.
Re-cover and cook for 5--7 minutes.
* Remove from heat.
Stir in the **Parmesan cheese** and serve.
+2 -1
View File
@@ -21,7 +21,8 @@ not especially consistent with the actual install.
## System Grounding ## System Grounding
* `Area` = "01 - Feeders/Risers Building" > [!info] Breakdowns
> * `Area` = "01 - Feeders/Risers Building"
1. `COMMON ASSEMBLIES`/`GROUNDING`/`GND = \#3/0 & 1" CONDUIT - EMT` 1. `COMMON ASSEMBLIES`/`GROUNDING`/`GND = \#3/0 & 1" CONDUIT - EMT`
* **Length:** Perimeter of the main electrical rooms plus length to each riser. * **Length:** Perimeter of the main electrical rooms plus length to each riser.
+2
View File
@@ -6,6 +6,8 @@ tags:
- topic/strategy - topic/strategy
- type/media/book - type/media/book
author: Daniel Kahneman author: Daniel Kahneman
aliases:
- Thinking, Fast and Slow
--- ---
# Thinking, Fast and Slow # Thinking, Fast and Slow
+9
View File
@@ -0,0 +1,9 @@
---
title: Lasagna
tags:
- topic/hobbies/cooking
up: "[[recipes]]"
---
# Lasagna
TODO
+14 -11
View File
@@ -24,7 +24,8 @@ aliases:
Determine which Systems and Codes are required: Determine which Systems and Codes are required:
* _IBC/IECC 2021 or later:_ all fixtures 0-10V dimmable. * _IBC/IECC 2021 or later:_ all fixtures 0-10V dimmable.
* `System` = "LV - Lighting Control System" > [!info] Breakdowns
> * `System` = "LV - Lighting Control System"
## Wall Switches ## Wall Switches
@@ -72,27 +73,29 @@ Room controllers distributed throughout controlled areas.
`COMMON ASSEMBLIES`/`SWITCHES`/`LOW VOLTAGE SWITCHES & OCC SENSORS - ROUGH IN`/... `COMMON ASSEMBLIES`/`SWITCHES`/`LOW VOLTAGE SWITCHES & OCC SENSORS - ROUGH IN`/...
1. .../`DLM LTG RM CONTROLLER - ...` 1. .../`DLM LTG RM CONTROLLER - ...`
**Count:** each lighting control zone. * **Count:** each lighting control zone.
2. .../`REC PLUG CONTROLLER - ...` 2. .../`REC PLUG CONTROLLER - ...`
**Count:** each receptacle control zone. * **Count:** each receptacle control zone.
3. `HEATING`/`Network Bridge - Blank 4SQ` 3. `HEATING`/`Network Bridge - Blank 4SQ`
**Count:** each controller. * **Count:** each controller.
Coordinate with PDS to determine if necessary. Coordinate with PDS to determine if necessary.
4. `COMMON ASSEMBLIES`/`PDI BRANCH CKT HOME RUNS`/... (_without_ dimming cable) 4. `COMMON ASSEMBLIES`/`PDI BRANCH CKT HOME RUNS`/... (_without_ dimming cable)
**Count:** each _circuit_. * **Count:** each _circuit_.
### "Centralized" Systems ### "Centralized" Systems
Zones switched and dimmed from central lighting control panel (LCP). Zones switched and dimmed from central lighting control panel (LCP).
1. `COMMON ASSEMBLIES`/`DISTRIBUTION`/`LIGHTING CONTROL PANEL INSTALLATION`/... 1. `COMMON ASSEMBLIES`/`PDI BRANCH CKT HOME RUNS`/... (_with_ dimming cable)
* **Count:** each _lighting control zone_.
2. `COMMON ASSEMBLIES`/`PDI BRANCH CKT HOME RUNS`/... (_with_ dimming cable) #### "Feed-Thru" Panels
**Count:** each _lighting control zone_.
1. `COMMON ASSEMBLIES`/`DISTRIBUTION`/`LIGHTING CONTROL PANEL INSTALLATION`/`_ - LIGHTING CONTROL PANEL INSTALLATION & TROUGH - ...`
### Somewhere In Between ### Somewhere In Between
@@ -103,8 +106,8 @@ assumes zones will be controlled either
I think just as common is 3--5 circuit controllers above the ceiling. I think just as common is 3--5 circuit controllers above the ceiling.
1. `HEATING`/`Lighting Control Room Controller - n Circuit` 1. `HEATING`/`Lighting Control Room Controller - n Circuit`
**Count:** each controller. * **Count:** each controller.
2. `COMMON ASSEMBLIES`/`PDI BRANCH CKT HOME RUNS`/... (_without_ dimming cable) 2. `COMMON ASSEMBLIES`/`PDI BRANCH CKT HOME RUNS`/... (_without_ dimming cable)
**Length:** route to room. * **Length:** route to room.
**Count:** each circuit. * **Count:** each circuit.
+1
View File
@@ -42,6 +42,7 @@ If no quote is available:
### Takeoff ### Takeoff
> [!info] Breakdowns
> * `Area` = "01 - Lightning Protection Building" > * `Area` = "01 - Lightning Protection Building"
> * `Phase` = "Building - BOH, Storage & Common" > * `Phase` = "Building - BOH, Storage & Common"
> * `System` = "LPT - Lightning Protection" > * `System` = "LPT - Lightning Protection"
+20 -11
View File
@@ -1,29 +1,38 @@
--- ---
aliases:
- misc budgets takeoff
title: Misc Budgets Takeoff title: Misc Budgets Takeoff
tags: tags:
- occupational/takeoff - occupational/takeoff
- status/draft - status/draft
- type/guide - type/guide
up: "[[takeoff-scripts]]" up: "[[takeoff-scripts]]"
aliases:
- misc budgets takeoff
--- ---
# Misc Budgets Takeoff # Misc Budgets Takeoff
* `Drawing` = "N/A"
## Slab Deck ## Slab Deck
* `System` = "EL - Electrical"
Takeoff: `ITEM DATABASE`/`MISC PDI PRODUCT`/`MISC MATERIAL - SLAB/DECK & FEEDER`/`MISC MATERIAL - SLAB/DECK (NAILS, PAINT, TAPE, ETC = $250)` Takeoff: `ITEM DATABASE`/`MISC PDI PRODUCT`/`MISC MATERIAL - SLAB/DECK & FEEDER`/`MISC MATERIAL - SLAB/DECK (NAILS, PAINT, TAPE, ETC = $250)`
1. * `Area` = "Typical - Building All Levels" (each level except roof) ### Building
* `Phase` = "Building - BOH, Storage & Common"
> [!info] Breakdowns
> * `Drawing` = "N/A"
> * `Area` = "Typical - Building All Levels" (each level except roof)
> * `Phase` = "Building - BOH, Storage & Common"
> * `System` = "EL - Electrical"
1. Takeoff: .../`MISC MATERIAL - SLAB/DECK ...`
* **Count** = 1 * **Count** = 1
* _High Density:_ 1 per Section * _High Density:_ 1 per Section
2. * `Area` = "Typical - Garage All Levels" ### Garage
* `Phase` = "Garage"
[[temp-power-takeoff]] > [!info] Breakdowns
> * `Drawing` = "N/A"
> * `Area` = "Typical - Garage All Levels"
> * `Phase` = "Garage"
> * `System` = "EL - Electrical"
1. Takeoff: .../`MISC MATERIAL - SLAB/DECK ...`
* **Count** = 1
+27 -27
View File
@@ -12,33 +12,33 @@ title: PDI Breakdowns
### Bid Item: Site ### Bid Item: Site
* `Bid Item` = "1 - Site" > * `Bid Item` = "1 - Site"
* `Area` = "2 - Site" > * `Area` = "2 - Site"
* `Phase` = "Site" > * `Phase` = "Site"
### Bid Item: Garage ### Bid Item: Garage
* `Bid Item` = "2 - Garage" > * `Bid Item` = "2 - Garage"
* `Area` = "XX - Level XX Garage" > * `Area` = "XX - Level XX Garage"
* `Phase` = "Garage" > * `Phase` = "Garage"
#### Area: Stairwells Garage #### Area: Stairwells Garage
* `Area` = "S - Stairwells Garage" > * `Area` = "S - Stairwells Garage"
### Bid Item: Building ### Bid Item: Building
* `Bid Item` = "3 - Building" > * `Bid Item` = "3 - Building"
#### Owner #### Owner
##### Area: Building ##### Area: Building
* `Area` = "XX - Level XX Building" > * `Area` = "XX - Level XX Building"
###### Phase: Back of House (BOH) ###### Phase: Back of House (BOH)
* `Phase` = "Building - Back of House (BOH)" > * `Phase` = "Building - Back of House (BOH)"
Catch all for spaces not Catch all for spaces not
@@ -47,17 +47,17 @@ Catch all for spaces not
###### Phase: Corridor ###### Phase: Corridor
* `Phase` = "Building - Corridor" > * `Phase` = "Building - Corridor"
###### Phase: Units ###### Phase: Units
* `Area` = "Typical - Unit A" > * `Area` = "Typical - Unit A"
* `Phase` = "UNIT - ..." > * `Phase` = "UNIT - ..."
##### Area: Interior Amenity ##### Area: Interior Amenity
* `Area` = "XX - Level XX Interior Amenity Building" > * `Area` = "XX - Level XX Interior Amenity Building"
* `Phase` = "Interior Amenity" > * `Phase` = "Interior Amenity"
High-finish, customer-facing spaces High-finish, customer-facing spaces
@@ -79,8 +79,8 @@ Also includes
##### Area: Kitchen ##### Area: Kitchen
* `Area` = "XX - Level XX Kitchen Building" > * `Area` = "XX - Level XX Kitchen Building"
* `Phase` = "Kitchen" > * `Phase` = "Kitchen"
Commercial kitchen spaces Commercial kitchen spaces
defined by provisions for high-load equipment, defined by provisions for high-load equipment,
@@ -93,13 +93,13 @@ which only include 20A provisions
##### Area: Ballrooms ##### Area: Ballrooms
* `Area` = "XX - Level XX Ballrooms Building" > * `Area` = "XX - Level XX Ballrooms Building"
* `Phase` = "Ballrooms" > * `Phase` = "Ballrooms"
##### Area: Exterior Amenity ##### Area: Exterior Amenity
* `Area` = "XX - Level XX Exterior Amenity Building" > * `Area` = "XX - Level XX Exterior Amenity Building"
* `Phase` = "Exterior Amenity" > * `Phase` = "Exterior Amenity"
##### Area: Porte Cochere ##### Area: Porte Cochere
@@ -109,8 +109,8 @@ which only include 20A provisions
##### Area: Stairwells Building ##### Area: Stairwells Building
* `Area` = "S - Stairwells Building" > * `Area` = "S - Stairwells Building"
* `Phase` = "Building - Back of House (BOH)" > * `Phase` = "Building - Back of House (BOH)"
#### Tenant #### Tenant
@@ -121,16 +121,16 @@ These spaces seem to be, by definition, [[construction-methods#Core and Shell|sh
##### Area: Retail ##### Area: Retail
* `Area` = "XX - Level XX Retail Building" > * `Area` = "XX - Level XX Retail Building"
* `Phase` = "Retail" > * `Phase` = "Retail"
Core and shell for mercantile occupancies. Core and shell for mercantile occupancies.
Does not include finished restaurants Does not include finished restaurants
##### Area: Office Space ##### Area: Office Space
* `Area` = "XX - Level XX Retail Building" > * `Area` = "XX - Level XX Retail Building"
* `Phase` = "Office Space" > * `Phase` = "Office Space"
> [!quote] [[joel-jansen]] to William Bonn 2025-12-05 (pp.) > [!quote] [[joel-jansen]] to William Bonn 2025-12-05 (pp.)
> PDI Accubid `Phase` "Office Space" > PDI Accubid `Phase` "Office Space"
+8 -4
View File
@@ -1,13 +1,13 @@
--- ---
id: sleeving id: sleeving
aliases:
- sleeving takeoff
title: Sleeving Takeoff
tags: tags:
- occupational/takeoff - occupational/takeoff
- status/draft - status/draft
- type/guide - type/guide
title: Sleeving Takeoff
up: "[[general-takeoff]]" up: "[[general-takeoff]]"
aliases:
- sleeving takeoff
--- ---
# Sleeving Takeoff # Sleeving Takeoff
@@ -38,7 +38,11 @@ the assembly to be sleeved.[^1]
## Item Selection ## Item Selection
`ITEM DATABASE`/`HILTI`/`CAST-IN DEVICE CP 680-...` Conduit sleeve selection has nothing to do
with the material of the floor it is installed in,
only the material of the conduit.
`ITEM DATABASE`/`HILTI`/`CAST-IN DEVICE CP 680-_`
* **CP 680-P** --- For plastic conduit * **CP 680-P** --- For plastic conduit
* **CP 680-M** --- For metal conduit[^2] * **CP 680-M** --- For metal conduit[^2]
+4 -3
View File
@@ -68,8 +68,9 @@ Use where conductors are oversized
Only for PVC subfeeds where we own voltage drop. Only for PVC subfeeds where we own voltage drop.
* `Area` = "Typical - Building Levels With Meter Centers" > [!info] Breakdowns
* `System` = "Electrical" > * `Area` = "Typical - Building Levels With Meter Centers"
* `Phase` = "Sub Feeders" > * `System` = "Electrical"
> * `Phase` = "Sub Feeders"
`ITEM DATABASE`/`DISTRIBUTION`/`BUDGET ITEMS $ & LBR`/`METER CENTER WIRE TROUGH ($400/E)` `ITEM DATABASE`/`DISTRIBUTION`/`BUDGET ITEMS $ & LBR`/`METER CENTER WIRE TROUGH ($400/E)`
+9 -7
View File
@@ -27,10 +27,11 @@ up: "[[takeoff-scripts]]"
## Switchgear ## Switchgear
* `Area` = _As shown_ > [!info] Breakdowns
* `Phase` = "Switch Gear" > * `Area` = _As shown_
* `System` = "SWG - Switchgear" > * `Phase` = "Switch Gear"
* `Bid Item` = "3 - Building" > * `System` = "SWG - Switchgear"
> * `Bid Item` = "3 - Building"
### Transformers ### Transformers
@@ -57,8 +58,9 @@ up: "[[takeoff-scripts]]"
## Generator ## Generator
* `Area` = "01 - Generator" > [!info] Breakdowns
* `Phase` = "Switch Gear" > * `Area` = "01 - Generator"
* `System` = "Gen - Generator" > * `Phase` = "Switch Gear"
> * `System` = "Gen - Generator"
1. [[distribution-designations#Generators]] 1. [[distribution-designations#Generators]]
+22 -3
View File
@@ -7,16 +7,35 @@ up: "[[conest-processes]]"
I often refer to "ConEst takeoff scripts" I often refer to "ConEst takeoff scripts"
as justification for certain of decisions, as justification for certain of decisions,
but like the Project Management Body of Knowledge, but they do not really exist in writing.[^1]
they do not really exist in writing.
[^1]: See [[conest-body-of-knowledge]]
Scripts should be directed, Scripts should be directed,
limiting extraneous information. limiting extraneous information.
## Systems
The structure and names of scripts
were originally intended to match how the terms
are generally understood in ConEst,
such that a new estimator could be told "Do _electrical_,"
find `electrical-takeoff.md`, complete all its instructions,
and in doing so satisfy the expectations of the estimator making the request.
I've since come to the conclusion
that the names of systems are ambiguously understood.
A request that an estimator "do _electrical_"
may or may not come with the expectation
that any of lightning protection, slab deck budgets,
or temporary power be completed as well.
Because I feel I lose nothing in doing so,
## Citations ## Citations
For the purpose of accountability, For the purpose of accountability,
it is crucial that all direction have a documented origin. it is crucial that all direction has a documented origin.
Use footnotes to reference timestamped notes. Use footnotes to reference timestamped notes.
+3 -2
View File
@@ -57,8 +57,9 @@ Alternative
## Backbone Riser ## Backbone Riser
* `Phase` = "Building - BOH ..." > [!info] Breakdowns
* `System` = "TC - Telecom Backbone" > * `Phase` = "Building - BOH ..."
> * `System` = "TC - Telecom Backbone"
If not shown: If not shown:
* _Garden Style:_ (2) 4"C * _Garden Style:_ (2) 4"C
+45 -11
View File
@@ -8,19 +8,46 @@ daily: "[[2026-06-03]]"
## 303 Mariposa Residence Senior Review ## 303 Mariposa Residence Senior Review
[[conest-senior-review]] for [[303-mariposa-residence]]. [[conest-senior-review]] for [[303-mariposa-residence]]
lead by [[joel-jansen]] and attended by [[zane-meyers]] and [[jared-defanti]].
### Selling Price ### Selling Price
[[pdi-bid-estimating|Bid]]'s proposal base bid \$800,000 [[pdi-bid-estimating|Bid]]'s proposal base bid was \$800,000,
but in response to the [[conest-pre-takeoff-confirmation]]
[[joshua-komis]] said to add \$65,000 for secondaries.
Joel messaged [[joshua-komis|Joshua Komis]] to clarify. We found correspondence
that the secondaries were sold as $10,000 for conduit
and $65,000 for wire.
Joel messaged Komis to clarify.
He responded to use \$875,000.
### Site Run Adders ### Site Run Adders
previous direction to use 15ft adders for site runs Joel questioned the use of 15ft adders for secondaries.
It would be easier to assume 10ft for all cases I explained their use was based on prior direction he had given below.
Joel agreed
> [!quote] feeders-takeoff.md
> #### Adders
>
> Use the difference in elevation between equipment
> or 10ft, whichever is greater.
>
> Add an additional 5ft (total 15ft) for site runs
> (primaries, secondaries, etc.).
Joel remembered and started to move on.
Jared asked if the extra adder was for vertical distance or routing contingency,
Joel responded that it was sort of both.
I suggested that if it may be necessary to adjust them anyway,
and "site runs" often being up to interpretation,
it may be preferable to assume 10ft to start for all cases
where the start and end are on the same level.
That is, remove the conditional 5ft extra adder from the script.
Joel agreed.
Mariposa's site runs didn't need adders at all Mariposa's site runs didn't need adders at all
since we added PVC80 stub-ups. since we added PVC80 stub-ups.
@@ -36,6 +63,8 @@ Solar [[feeders-takeoff]] used copper feeder size
based on aluminum size shown in Solar set. based on aluminum size shown in Solar set.
No change necessary. No change necessary.
We should have added the solar one-line to LiveCount.
### Material Pricing ### Material Pricing
Joel requested pricing for the dimmable receptacles from [[pdi-procurement]]. Joel requested pricing for the dimmable receptacles from [[pdi-procurement]].
@@ -47,8 +76,8 @@ but taken off as 2 counts each.
### Telecom ### Telecom
[[telecom-takeoff]] used Cat5e [[telecom-takeoff]] assumed Cat5e
which we assumed, but did not note visibly. but we did not note the assumption visibly.
### Fire Alarm ### Fire Alarm
@@ -60,13 +89,18 @@ which we assumed, but did not note visibly.
assuming a dozen or so interconnected smokes. assuming a dozen or so interconnected smokes.
\$26,XXX was the quote \$26,XXX was the quote
for sprinkler monitoring only for sprinkler monitoring only.
"only one assembly"
### Closeout ### Closeout
#### Sales Tax #### Final Pricing
[[pdi-accubid-final-price]] 10.35% [[pdi-accubid-final-price]]
##### Sales Tax
10.35%
#### Equipment #### Equipment
+245
View File
@@ -0,0 +1,245 @@
---
id: 2026-06-04T10:05:03-0400
title: 2026-06-04 10:05:03
tags: []
daily: "[[2026-06-04]]"
---
# 2026-06-04 10:05:03
## Mechanical Rules of Thumb
### Cooling towers
Avoid single cell tower
Avoid tower without a bleed-off
Avoid tower without heat trace and insulation on the make-up water
Avoid line-to-line bypass (in lieu of dumping into the sump)
### Chillers/chilled water
Avoid one chiller system (exception: dual circuit air-cooled)
Avoid series chillers without bypasses
Avoid a coil with more than 14 fins/inch
### Equipment/misc.
Avoid simplex air compressor
Avoid simplex sump pump
Avoid dx built-up systems (vav)
Avoid coil face velocity above 550 fpm (could send condensate down ductwork)
Avoid horizontal cold water lines or horizontal roof drain lines above ceilings without insulating (dripping/sweating)
Isolation valves on both sides of all equipment - good practice
Think about future service: don't locate where dangerous to service
Avoid discharging roof drains onto a driveway or where pedestrian traffic
Avoid floor mounted water closets in commercial buildings - cleaning issue
Minimum 4" housekeeping pads underneath all floor mounted equipment
Ashrae recommends 400 fpm face velocity maximum at intake louvers
Avoid standard filters at more than 500 fpm (see mfgr recommendations)
Trap primers on all floor drains
### Ashrae 62 (ventilation)
* 20 cfm/person oa in office buildings.
exceptions: large assembly areas
* 15 cfm/person oa in schools.
note: this ventilation might exceed the local codes,
but ashrae recommendations should be met.
### Smacna pressure class
* 1" wg - low pressure
* 3" wg - medium pressure
* Under 3" wg - smacna does not recommend duct testing
If higher static pressures are specified,
try to get lower pressure classes approved.
The savings in duct costs are significant.
### Ductwork sizing
| Case | Max Friction Per 100ft |
| ------------ | ---------------------- |
| Low pressure | 0.10" |
| Exhaust duct | 0.15" |
| Case | Velocity FPM |
| --------------------- | ------------------------------- |
| Medium pressure riser | Max 3000 |
| Medium pressure | Max 2500 |
| Low pressure | Max 1800-2000 |
| Return air shaft | Max 1000 |
| Outside air shaft | Max 1000 |
| Grease duct | Target 1800, Min 1500, Max 2200 |
Due to excessive noise,
Avoid fan-powered or VAV boxes larger than 2000 CFM.
Install a balance damper at each low-pressure runout to diffusers.
No more than 90° turn with flex duct, straight duct run into boxes.
Where space permits,
consider converting rectangular ductwork to round ductwork.
Energy code requires all duct to be sealed.
### Pumps
Try to locate condenser water pumps as low as possible
as compared to the cooling tower basin - NPSH - gravity flow.
Select pumps for "non-overloading".
Select impeller no larger than 90% of maximum impeller size.
### Air units
| Tons | CFM/Ton |
| ------------- | ------- |
| under 20 | ~400 |
| 25 and larger | ~350 |
Avoid VFD bypass on VAV fan systems
because it can blow apart duct in manual mode.
Consider a spare VFD, or dump damper/blow-out doors.
Avoid larger economizer systems without powered exhaust.
### Useful formulas (standard conditions)
Quantity (CFM) = Velocity (FPM) * Area (SF)
Sensible load (BTUH) = 1.08 * CFM * (Delta-T)
Latent load (BTUH) = 0.68 * CFM * (Delta-GR)
Total load (BTUH) = 4.45 * CFM * (Delta-H)
* Formula for water:
* Load (BTUH) = 1.08 * CFM * (Delta-T)
$$
\rm{GPM} = \frac{\text{Load (BTUH)}}{500 \times \text{Delta-T}}
$$
* A/C equipment efficiencies:
$$
$$
### Conversion factors
* 1 PSI = 2.307 ft of water
* 1 ton A/C = 12,000 BTUH
* 1 hp = 2545.1 BTUH = 745.7 watts
* 1 kW = 341 5 BTUH
* 1 cubic foot = 7.48 gallons
* 1 gal. of water = 8.345 lbs
### pipe sizing
* 8 to 10 FPS max. Velocity
* 6 FPS max. Velocity (public areas - noise)
* 10 to 15 FPS velocity in central plant headers or on roof
* 3" ano smaller: max head loss 6 ft/100 ft
* Schedule 40 blk. Stl. Pipe sizing: (* std wt)
### Hvac piping
* Chilled water: 2 GPM/ton (12°F Delta-t)
* Condenser water: 3 GPM/ton
#### Thermal Expansion
(steel pipe): 1" expansion/100 ft of pipe/100°F rise
### A/C condensate/waste sizing
| Tons | Pipe Size |
| -------- | --------- |
| Up to 20 | 3/4" |
| 21--40 | 1" |
| 41--90 | 1-1/4" |
| 91--125 | 1-1/2" |
| 126--250 | 2" |
### Air device sizing
| CFM | Neck Size |
| --------- | --------- |
| Up to 150 | 6" |
| 151--250 | 8" |
| 251--450 | 10" |
| 451--650 | 12" |
| 651--800 | 14" |
### FPB/VAV sizing
| Inlet Size | Max CFM |
| ---------- | ------- |
| 6" | 450 |
| 8" | 700 |
| 10" | 1200 |
| 12" | 1700 |
| 14" | 2300 |
Note: runout distance is very important.
The inlet size shown is not necessarily the correct runout size to the box.
(Medium pressure runs 0.3 ft/100 ft max)
### Cooling loads
| Building Type | SF/Ton |
| ------------------ | -------- |
| Office buildings | 300--325 |
| Tempered warehouse | 500 |
| Call center | 275--300 |
* Typical air distribution for office bldgs:
* north 1.5 CFM/SF
(assumes 12 ft zone east 2.0 CFM/SF and 25°F Delta-t)
* south 2.5 CFM/SF
* west 2.5 CFM/SF
* interior 0.8 CFM/SF
* total should avg 0.8 to 1.0 CFM/SF gross
* Smoke evacuation: 1 CFM/SF
* Stairwell pressurization: 2000 CFM/floor
### Plumbing Fixture Runout Minimum Size Schedule
| Fixture | Waste | Vent | Cold | Hot |
| ---------------------- | ------ | ------ | ---- | ---- |
| Water Closets | 4" | 2" | 1" | - |
| Lavatories | 1-1/2" | 1-1/2" | 1/2" | 1/2" |
| Urinals | 2" | 1-1/2" | 3/4" | - |
| Sinks | 2" | 1-1/2" | 1/2" | 1/2" |
| Service Sinks | 3" | 2" | 3/4" | 3/4" |
| Hose Bibbs | - | - | 3/4" | - |
| Box Hydrants | - | - | 3/4" | - |
| Electric Water Coolers | 2" | 1-1/2" | 1/2" | - |
| Showers | 2" | 2" | 1/2" | 1/2" |
+20
View File
@@ -0,0 +1,20 @@
---
id: 2026-06-04T11:40:49-0400
title: 2026-06-04 11:40:49
tags: []
daily: "[[2026-06-04]]"
---
# 2026-06-04 11:40:49
Expect that people's explanations
of what they do and why they do it
will be related to what they _actually_ do
and why they _actually_ do it,
but if you care to meet or exceed their ability
never take those explanations at face value.
It is well known that the ability of individuals
to perform complex practiced tasks
_far_ exceeds their ability to explain their process.[^1]
[^1]: See [[kahneman_2011_thinking]]
+120
View File
@@ -0,0 +1,120 @@
---
id: 2026-06-04T13:20:08-0400
title: 2026-06-04 13:20:08
tags: []
daily: "[[2026-06-04]]"
---
# 2026-06-04 13:20:08
## 303 Mariposa Residence
[[conest-manager-review]] for [[303-mariposa-residence]]
lead by [[josh-ford]] as ConEst Manager
attended by [[joel-jansen]] as ConEst Senior Estimator
and [[jared-defanti]] and [[zane-meyers]] as ConEst Estimators.
### Temporary Power
> "Do they really need \$10,000 for temp power?"
\$2,500 and 50hrs
### Site Lighting
Pole Bases
> "I would leave it if it's for the bollards. It can't be that much."
### Site Low Voltage Duct Bank
Josh okayed assumptions for site runs
secondaries
### Putty Pads
add putty pads equal to device boxes
### Feeders
%% is run from inverter to EM diff size from MDP to inverter? %%
### Dimmable Receptacles
> Lutron Homeworks devices are thicker,
> need deep boxes.
### Lighting/Shade Controls
[[lighting-controls-takeoff]]
#### Trough
`COMMON ASSEMBLIES`/`DISTRIBUTION`/`LIGHTING CONTROL PANEL INSTALLATION`/`_ - LIGHTING CONTROL PANEL INSTALLATION & TROUGH - ...`
used 4 section
changed labor time from 4 to 6
added 500ft \#12/2 NM
### Telecom
> "I'm surprised this isn't a certified system"
Changed assumed Cat5e to Cat6
> "I feel like we don't ever install Cat5 anymore"
>
> "A house on the upper range like this isn't going to go with Cat5"
AV Coordination.pdf
TV Specs: 3 Cat6
### Fire Alarm
Leaving smokes despite direction
for budgetary purposes.
### Closeout
#### Labor Plan
> "I don't think you can even do a labor plan."
> "Just leave it all at 100%."
> "I use World (Electric) for everything, I don't care where it is."
#### Subs
Excavation $5,000
Wireways, Troughs: $1,250
#### General Expenses
Lower Office Supplies to $2,500
Delete Customer Development
##### Duration
Approved Labor Plan says 16 months
Removed all under "Jobs > \$3mil COGs"
Josh said he removed COGs with Aaron's direction
on a job sold at \$3.8 million.
#### Equipment
Removed two-way radio
#### Material Pricing
> Josh: "Put \$400 for the Quazite." \
> Joel: "I put \$1,200." \
> Josh: "You put \$1,200? Okay put \$500."
### Conclusion
surprised by high margin,
checked bid takeoff
found large cost difference in relocation budget
+8 -4
View File
@@ -57,7 +57,8 @@ aliases:
### Load Centers ### Load Centers
* `System` = "EL - Electrical" > [!info] Breakdowns
> * `System` = "EL - Electrical"
| Rating | Assembly | | Rating | Assembly |
| ------- | ---------------------------------------------------------------------------------- | | ------- | ---------------------------------------------------------------------------------- |
@@ -161,7 +162,8 @@ Adjust cable length as needed.
#### Residential #### Residential
* `System` = "EL - Electrical" > [!info] Breakdowns
> * `System` = "EL - Electrical"
##### Smoke Detectors & CO Detectors ##### Smoke Detectors & CO Detectors
@@ -175,7 +177,8 @@ For ADA units:
##### Additional Signaling Devices ##### Additional Signaling Devices
* `System` = "FA - Fire Alarm"[^3] > [!info] Breakdowns
> * `System` = "FA - Fire Alarm"[^3]
`COMMON ASSEMBLIES`/`FIRE ALARM & DAS SYSTEMS`/`INDICATING DEVICES WITH WIRE - FREE AIR`/`INDOOR HORN STROBE - FREE AIR` `COMMON ASSEMBLIES`/`FIRE ALARM & DAS SYSTEMS`/`INDICATING DEVICES WITH WIRE - FREE AIR`/`INDOOR HORN STROBE - FREE AIR`
@@ -183,7 +186,8 @@ For ADA units:
#### Hospitality #### Hospitality
* `System` = "FA - Fire Alarm" > [!info] Breakdowns
> * `System` = "FA - Fire Alarm"
`COMMON ASSEMBLIES`/`FIRE ALARM & DAS SYSTEMS`/`... DEVICES WITH WIRE - FREE AIR` `COMMON ASSEMBLIES`/`FIRE ALARM & DAS SYSTEMS`/`... DEVICES WITH WIRE - FREE AIR`