Fundamentals in Industrial Ventilation & Practical Applications of Useful Equations

About the Instructors

Jonathan F. Hale, MPA is the founder and owner of Air Systems Corporation, an innovator in the industrial pollution-control industry. Mr. Hale has also worked as an EPA inspector and permits engineer. He is the winner of two national level ASHRAE awards for excellence in energy efficient design of industrial ventilation systems and is the co-chair of the North Carolina Industrial Ventilation Conference. Mr. Hale obtained a Bachelor of Science degree from Wake Forest University and a Master of Arts degree in Political Science from Appalachian State University. He is a member of the ACGIH® Industrial Ventilation Committee.

 

Gerry A. Lanham, PE is the Past President of KBD/Technic, Inc., a CECO Environmental Company. Mr. Lanham has over 46 years of experience in the design, testing and installation of industrial ventilation systems and is the co-author of a patent for HVAC controls and a system for protection against biohazard attack. He is the co-chair of the North Carolina Industrial Ventilation Conference as well as an instructor for NIOSH and numerous other local ventilation courses for industry. Mr. Lanham completed a Bachelor of Science degree in Mechanical Engineering at the University of Cincinnati and an MBA in advanced business economics at Xavier University. He is Vice Chair of the ACGIH® Industrial Ventilation Committee.

 


"Very informative and useful information. Will definitely help me in my job function."
— Chad Anderson
Ormet Primary Aluminum Corp.
Hannibal, OH

"Great, good course."
— Jim Riggs
US Coast Guard
Norfolk, VA

"This course provided many troubleshooting tips."
— Harry Wahra
Mabbett & Associates
Bedford, MA

"Course provided a streamlined approach to ventilation."
— Brandon C. Takacs
West Virginia University, Safety & Health
Morgantown, WV

Debugging Info
pagedictsize=0
sqltime = 0.017 s
cpu time = 0.120 s
real time = 0.146 s
memory increase = 16816 kB
fields =
templates =
/data/demo/current/generic/themes/www/mako/meetings/microsite_footer.html
/data/demo/current/generic/themes/www/mako/meetings/microsite_header_pixel
/data/demo/current/generic/themes/www/mako/meetings/microsite_header_responsive.html
/data/demo/current/generic/themes/www/mako/meetings/microsite_index_responsive.html
dg = [] | []
extra debug info =
queries = 26 queries

Total TimeCountAvg TimeQuery
0.0031 call
0 rows
0.003 SELECT DISTINCT hex(`Website`.`WebsiteId`) AS `WebsiteId`, `Website`.`description`, `Website`.`address` FROM (Meeting, Website) WHERE `Website`.`MeetingId`=`Meeting`.`MeetingId` AND `Meeting`.`MeetingId`=0x1F3E00000114
0.0031 call
0 rows
0.003 COMMIT
0.0021 call
1 row
0.002 SELECT DISTINCT hex(`MicrositeTabComponent`.`MicrositeTabComponentId`) AS `MicrositeTabComponentId`, `MicrositeTabComponent`.`type`, `MicrositeTabComponent`.`text`, `MicrositeTabComponent`.`orderindex` FROM (MicrositeTab, MicrositeTabComponent) WHERE `MicrositeTabComponent`.`MicrositeTabId`=`MicrositeTab`.`MicrositeTabId` AND `MicrositeTab`.`MicrositeTabId`=0x1F3E0000013E ORDER BY `MicrositeTabComponent`.`orderindex`
0.0011 call
1 row
0.001 SELECT DISTINCT hex(`Meeting`.`MeetingId`) AS `MeetingId`, `Meeting`.`name`, `Meeting`.`hostName`, `Meeting`.`description`, `Meeting`.`audienceDescription`, `Meeting`.`cosponsors`, `Meeting`.`includes`, `Meeting`.`attire`, `Meeting`.`cancellationPolicy`, `Meeting`.`thankYouText`, `Meeting`.`registrationStarts`, `Meeting`.`registrationEnds`, `Meeting`.`earlybirdCutoff`, `Meeting`.`onlineRegistrationsEnabled`, `Meeting`.`selectSessionsOnRegForm`, `Meeting`.`accountingCode`, `Meeting`.`maximumNumAttendees`, `Meeting`.`type`, `Meeting`.`showPublicSessionSearch`, `Meeting`.`allowSpouseReg`, `Meeting`.`continuingEdUnits`, `Meeting`.`mediaAllowed`, `Meeting`.`travelInfo`, `Meeting`.`hotelBlurb`, `Meeting`.`dateClosed`, `Meeting`.`showFeesOnPublicView`, `Meeting`.`showPublicSchedule`, `Meeting`.`calendarLinkType`, `Meeting`.`calendarBlurb`, `Meeting`.`retainedEarningsAcctCode`, `Meeting`.`enableHousing`, `Meeting`.`eventId`, `Meeting`.`staffNotificationEmail`, `Meeting`.`paymentInstructions`, `Meeting`.`staffCancellationEmail`, `Meeting`.`lowRoomTrigger`, `Meeting`.`continuingEdNumber`, `Meeting`.`enableRSVP`, `Meeting`.`micrositePath`, `Meeting`.`bgcolor`, `Meeting`.`accentColor`, `Meeting`.`tabTitleColor`, `Meeting`.`bodyTextColor`, `Meeting`.`linkTextColor`, `Meeting`.`rightNavTextColor`, `Meeting`.`fontTitleSize`, `Meeting`.`fontBodySize`, `Meeting`.`fontName`, `Meeting`.`navbarColor`, `Meeting`.`sidebarColor`, `Meeting`.`highlightedTabTextColor`, `Meeting`.`headlineColor`, `Meeting`.`highlightedTabColor`, `Meeting`.`inSiteAccentColor`, `Meeting`.`inSiteBodyTextColor`, `Meeting`.`inSiteHeadlineColor`, `Meeting`.`inSiteHighlightedTabColor`, `Meeting`.`inSiteHighlightedTabTextColor`, `Meeting`.`inSiteLinkTextColor`, `Meeting`.`inSiteNavbarColor`, `Meeting`.`inSiteRightNavTextColor`, `Meeting`.`inSiteSidebarColor`, `Meeting`.`inSiteTabTitleColor`, `Meeting`.`inSiteFontBodySize`, `Meeting`.`inSiteFontName`, `Meeting`.`inSiteFontTitleSize`, `Meeting`.`useBadges`, `Meeting`.`staffNotificationRevisitedEmail`, `Meeting`.`anticipatedRegistrations`, `Meeting`.`_budgetedRevenue`, `Meeting`.`groupRegistrationOn`, `Meeting`.`allowPlaceholders`, `Meeting`.`feesPageTopText`, `Meeting`.`badgesPageTopText`, `Meeting`.`questionsPageTopText`, `Meeting`.`eventsPageTopText`, `Meeting`.`reviewPageTopText`, `Meeting`.`paymentPageTopText`, `Meeting`.`micrositeTemplate`, `Meeting`.`inSiteTemplate`, `Meeting`.`isWebinar`, `Meeting`.`housingPageTopText`, `Meeting`.`attendeesPageTopText`, `Meeting`.`shortCalDescription`, `Meeting`.`allowAddToCalendar`, `Meeting`.`campaignCode`, `Meeting`.`recordOrigin`, `Meeting`.`additionalFeesPageTopText`, `Meeting`.`referralText`, `Meeting`.`hasReferrals`, `Meeting`.`wwwRegistrationsEditAlwaysApprove`, `Meeting`.`thankYouFullyPaidText`, `Meeting`.`venue`, `Meeting`.`sendToLMS`, `Meeting`.`CEU_frac`, `Meeting`.`showSponsorLogos`, `Meeting`.`confSponsorText`, `Meeting`.`isArchived` FROM (Meeting) WHERE `Meeting`.`micrositePath`='aprilfundamentals'
0.0016 calls
1 row
0.000 SELECT version from databasemap;
0.0011 call
6 rows
0.001 SELECT DISTINCT hex(`MicrositeTab`.`MicrositeTabId`) AS `MicrositeTabId`, `MicrositeTab`.`title`, `MicrositeTab`.`orderindex`, `MicrositeTab`.`enabled`, `MicrositeTab`.`isInSite` FROM (Meeting, MicrositeTab) WHERE `MicrositeTab`.`MeetingId`=`Meeting`.`MeetingId` AND `Meeting`.`MeetingId`=0x1F3E00000114
0.0011 call
0 rows
0.001 SELECT DISTINCT hex(`MyMeeting`.`MyMeetingId`) AS `MyMeetingId`, `MyMeeting`.`published`, `MyMeeting`.`description`, `MyMeeting`.`mxxCreated`, hex(`MyMeeting`.`mxxCreatedBy`) AS `mxxCreatedBy`, `MyMeeting`.`mxxUpdated`, hex(`MyMeeting`.`mxxUpdatedBy`) AS `mxxUpdatedBy`, `MyMeeting`.`rule`, `MyMeeting`.`introText`, `MyMeeting`.`embedCode` FROM (Meeting, MyMeeting) WHERE `MyMeeting`.`MeetingId`=`Meeting`.`MeetingId` AND `Meeting`.`MeetingId`=0x1F3E00000114
0.0011 call
155 rows
0.001 SELECT * FROM webselect
0.0011 call
1 row
0.001 SELECT DISTINCT hex(`FeeDateRange`.`FeeDateRangeId`) AS `FeeDateRangeId`, `FeeDateRange`.`name`, `FeeDateRange`.`startDate`, `FeeDateRange`.`endDate` FROM (Meeting, FeeDateRange) WHERE `FeeDateRange`.`MeetingId`=`Meeting`.`MeetingId` AND `Meeting`.`MeetingId`=0x1F3E00000114
0.0011 call
0 rows
0.001 SELECT DISTINCT hex(`Individual`.`IndividualId`) AS `IndividualId`, `Individual`.`EthnicityId`, `Individual`.`firstName`, `Individual`.`lastName`, `Individual`.`prefix`, `Individual`.`suffix`, `Individual`.`title`, `Individual`.`mxxUpdatedBy`, `Individual`.`enteredBy`, `Individual`.`gender`, `Individual`.`SalaryId`, `Individual`.`ssn`, `Individual`.`middleInitial`, `Individual`.`email`, `Individual`.`alternateEmail`, `Individual`.`emailFromThirdPartyId`, `Individual`.`mxxUpdated`, `Individual`.`fax`, `Individual`.`homePhone`, `Individual`.`workPhone`, `Individual`.`secondaryPhone`, `Individual`.`mobilePhone`, `Individual`.`pager`, `Individual`.`IndividualTypeId`, `Individual`.`paidDues`, hex(`Individual`.`VotingId`) AS `VotingId`, `Individual`.`aliases`, `Individual`.`personalStatus`, `Individual`.`salutation`, `Individual`.`homeFax`, `Individual`.`visionsId`, `Individual`.`emailSent`, `Individual`.`personalBackground`, `Individual`.`dontEmail`, `Individual`.`preferredMethodOfComm`, `Individual`.`mxxCreated`, `Individual`.`jobLevel`, `Individual`.`publishInDirectory`, `Individual`.`individualNum`, `Individual`.`birthDay`, `Individual`.`ageGroup`, `Individual`.`degreeLevel`, `Individual`.`maritalStatus`, `Individual`.`designations`, `Individual`.`yearJoined`, `Individual`.`otherJobFunction`, `Individual`.`numberOfChildren`, `Individual`.`namesOfChildren`, `Individual`.`groupAffiliations`, `Individual`.`schoolAttended`, `Individual`.`SACompanyName`, `Individual`.`recordOrigin`, `Individual`.`source`, `Individual`.`sourceOther`, `Individual`.`dontSnailmail`, `Individual`.`prospectStatus`, `Individual`.`canSpamSet`, hex(`Individual`.`mxxCreatedBy`) AS `mxxCreatedBy`, `Individual`.`criticalNotes`, `Individual`.`congresspersonFor`, `Individual`.`congressParty`, `Individual`.`ceus`, `Individual`.`mailChimpMergeCache`, `Individual`.`training`, `Individual`.`dateOfBirth`, `Individual`.`createdOnWWW`, `Individual`.`lastCheckedNotifications`, `Individual`.`specialNeeds`, `Individual`.`SAIsBoard`, `Individual`.`delinquentSince`, `Individual`.`isMergeProtected` FROM (Address, Individual) WHERE `Address`.`AddressId`=0x1F3E00000121 AND `Address`.`IndividualId`=`Individual`.`IndividualId` ORDER BY `Individual`.`lastName`, `Individual`.`firstName`, `Individual`.`middleInitial`
0.0011 call
2 rows
0.001 SELECT DISTINCT hex(`Fee`.`FeeId`) AS `FeeId`, `Fee`.`expirationDate`, `Fee`.`amount`, hex(`Fee`.`itemId`) AS `itemId`, `Fee`.`name`, `Fee`.`description`, `Fee`.`minGroupSize`, `Fee`.`isEarlyDiscount`, `Fee`.`membersOnly`, `Fee`.`guestsOnly`, `Fee`.`availableToGuests`, `Fee`.`accountingCode`, `Fee`.`availableToSpouses`, `Fee`.`feeCode`, `Fee`.`published`, `Fee`.`rateCategory`, `Fee`.`showOnWWW`, `Fee`.`showMembershipTypesAsMembersOnWWW`, `Fee`.`membershipTypesLabelForWWW`, `Fee`.`groupSizeRule`, `Fee`.`specialDealType`, `Fee`.`recordOrigin`, `Fee`.`confirmationText` FROM (Meeting, Fee) WHERE `Fee`.`itemId`=`Meeting`.`MeetingId` AND `Meeting`.`MeetingId`=0x1F3E00000114
0.0011 call
1 row
0.001 SELECT DISTINCT `CalendarItem`.`type`, `CalendarItem`.`startDate`, `CalendarItem`.`endDate`, `CalendarItem`.`location`, hex(`CalendarItem`.`CalendarItemId`) AS `CalendarItemId`, `CalendarItem`.`name`, `CalendarItem`.`status`, `CalendarItem`.`contactName`, `CalendarItem`.`contactPhone`, `CalendarItem`.`contactEmail`, `CalendarItem`.`description`, `CalendarItem`.`URL`, `CalendarItem`.`URLDescription`, `CalendarItem`.`handOut`, `CalendarItem`.`handOutDescription`, `CalendarItem`.`minutesUpload`, `CalendarItem`.`minutes`, `CalendarItem`.`phone`, `CalendarItem`.`fax`, `CalendarItem`.`line1`, `CalendarItem`.`line2`, `CalendarItem`.`city`, `CalendarItem`.`province`, `CalendarItem`.`zip`, `CalendarItem`.`state`, `CalendarItem`.`country`, `CalendarItem`.`attendeeNames` FROM (Meeting, CalendarItem) WHERE `CalendarItem`.`MeetingId`=`Meeting`.`MeetingId` AND `Meeting`.`MeetingId`=0x1F3E00000114 ORDER BY `CalendarItem`.`startDate`
0.0001 call
54 rows
0.000 SELECT * FROM StateProvince ORDER BY orderindex, id
0.0001 call
0 rows
0.000 INSERT INTO `PageRequest` SET `mxxCreated`='2025-08-21 21:53:23',`mxxCreatedBy`=NULL, `PageRequestId`=0x1F4ECA00000000, `path`='forms/meeting/Microsite/aprilfundamentals,1', `formName`='Microsite', `site`='www', `clientAcronym`='DEMO', `pid`='2993225', `requestNum`='1', `pageDictSize`=NULL, `objectId`=NULL, `templateMethod`=NULL, `growth`=NULL, `server`='www.demo.maxx.matrixdev.net', `dbThreadId`='653152', `startTime`='2025-08-21 21:53:23', `sessionId`=0x4D6B11E6A2C885AD, `userId`=0x0, `userName`='public', `result`=NULL, `sqltime`=NULL, `timeTaken`=NULL, `dictSize`=NULL, `fields`='{}', `clientIPAddr`='216.73.216.122'
0.0001 call
54 rows
0.000 select id, abbreviation from StateProvince
0.0001 call
1 row
0.000 SELECT DISTINCT hex(`Address`.`AddressId`) AS `AddressId`, `Address`.`line1`, `Address`.`line2`, `Address`.`city`, `Address`.`CountryId`, `Address`.`AddressTypeId`, `Address`.`StateProvinceId`, `Address`.`province`, `Address`.`zip`, `Address`.`isPrimary`, `Address`.`name`, `Address`.`mainPhone`, `Address`.`fax`, `Address`.`tollFree`, `Address`.`zip5`, `Address`.`isZipVerified`, `Address`.`congressionalDistrict`, `Address`.`latitude`, `Address`.`longitude`, `Address`.`jsonResult`, `Address`.`countyFips`, `Address`.`countyName`, `Address`.`stateFips` FROM (Meeting, Address) WHERE `Meeting`.`MeetingId`=0x1F3E00000114 AND `Meeting`.`locationAddressId`=`Address`.`AddressId` ORDER BY `Address`.`zip`
0.0001 call
1 row
0.000 SELECT DISTINCT hex(`File`.`FileId`) AS `FileId`, `File`.`filename`, `File`.`description`, `File`.`caption`, `File`.`altTag`, hex(`File`.`parentId`) AS `parentId` FROM (Meeting, File) WHERE `Meeting`.`bannerFileId`=`File`.`FileId` AND `Meeting`.`MeetingId`=0x1F3E00000114
0.0001 call
1 row
0.000 SELECT DISTINCT hex(`Timezone`.`TimezoneId`) AS `TimezoneId`, `Timezone`.`description`, `Timezone`.`tzname`, hex(`Timezone`.`orderindex`) AS `orderindex` FROM (Timezone, CalendarItem) WHERE `CalendarItem`.`CalendarItemId`=0x1F3E0000011F AND `CalendarItem`.`TimezoneId`=`Timezone`.`TimezoneId` ORDER BY `Timezone`.`orderindex`
0.0001 call
0 rows
0.000 SELECT DISTINCT hex(`Branch`.`BranchId`) AS `BranchId`, `Branch`.`name`, `Branch`.`isMain`, `Branch`.`mainPhone`, `Branch`.`secondaryPhone`, `Branch`.`tollFree`, `Branch`.`fax` FROM (Address, Branch) WHERE `Address`.`AddressId`=0x1F3E00000121 AND `Address`.`BranchId`=`Branch`.`BranchId` ORDER BY `Branch`.`isMain`, `Branch`.`name`
0.0001 call
1 row
0.000 SELECT * FROM uuid FOR UPDATE
0.0001 call
0 rows
0.000 START TRANSACTION