, but this code // executes before the first paint, when

ÃÛÌÒapp

is not yet present. The // classes are added to so styling immediately reflects the current // toolbar state. The classes are removed after the toolbar completes // initialization. const classesToAdd = ['toolbar-loading', 'toolbar-anti-flicker']; if (toolbarState) { const { orientation, hasActiveTab, isFixed, activeTray, activeTabId, isOriented, userButtonMinWidth } = toolbarState; classesToAdd.push( orientation ? `toolbar-` + orientation + `` : 'toolbar-horizontal', ); if (hasActiveTab !== false) { classesToAdd.push('toolbar-tray-open'); } if (isFixed) { classesToAdd.push('toolbar-fixed'); } if (isOriented) { classesToAdd.push('toolbar-oriented'); } if (activeTray) { // These styles are added so the active tab/tray styles are present // immediately instead of "flickering" on as the toolbar initializes. In // instances where a tray is lazy loaded, these styles facilitate the // lazy loaded tray appearing gracefully and without reflow. const styleContent = ` .toolbar-loading #` + activeTabId + ` { background-image: linear-gradient(rgba(255, 255, 255, 0.25) 20%, transparent 200%); } .toolbar-loading #` + activeTabId + `-tray { display: block; box-shadow: -1px 0 5px 2px rgb(0 0 0 / 33%); border-right: 1px solid #aaa; background-color: #f5f5f5; z-index: 0; } .toolbar-loading.toolbar-vertical.toolbar-tray-open #` + activeTabId + `-tray { width: 15rem; height: 100vh; } .toolbar-loading.toolbar-horizontal :not(#` + activeTray + `) > .toolbar-lining {opacity: 0}`; const style = document.createElement('style'); style.textContent = styleContent; style.setAttribute('data-toolbar-anti-flicker-loading', true); document.querySelector('head').appendChild(style); if (userButtonMinWidth) { const userButtonStyle = document.createElement('style'); userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}` document.querySelector('head').appendChild(userButtonStyle); } } } document.querySelector('html').classList.add(...classesToAdd); })(); Engineering is a lie that helps us realize truth: Art, Tornadoes, and a Sabbatical in Canada with Fred Haan: Tue, Apr 15 2025, 4 - 5pm | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Events Calendar

S M T W T F S
30
 
31
 
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
1
 
2
 
3
 

Engineering is a lie that helps us realize truth: Art, Tornadoes, and a Sabbatical in Canada with Fred Haan

  • Tue, Apr 15, 2025
  • 4:00 pm–5:00 pm

ENGR Seminar with Professor Fred Haan
I practice wind engineering - that is, wind effects on structures. More specifically, I study tornadoes, tornado aerodynamics, and tornado effects on structures. Last year I did a sabbatical at Western University in London, Ontario using one of the world's largest tornado simulators to try to answer some aerodynamic puzzles about how things (specifically cars) fly in tornadoes. Along the way, I learned more about art than I was expecting - and specifically, how art can inform and help illustrate engineering concepts and engineering research. In this talk, I'm going to explain how we study the wind and how we design for wind effects, how Picasso, Magritte, and Van Gogh influenced my thoughts, how we got cars to fly in the lab (after years of failure), and what other fun things I learned during my sabbatical.