1<!DOCTYPE html> 2<!--[if IE 6]> 3<html id="ie6" lang="en"> 4<![endif]--> 5<!--[if IE 7]> 6<html id="ie7" lang="en"> 7<![endif]--> 8<!--[if IE 8]> 9<html id="ie8" lang="en"> 10<![endif]--> 11<!--[if !(IE 6) & !(IE 7) & !(IE 8)]><!--> 12<html lang="en"> 13<!--<![endif]--> 14<head> 15<meta charset="UTF-8" /> 16<meta name="viewport" content="width=device-width" /> 17<link rel="profile" href="http://gmpg.org/xfn/11" /> 18<link rel="pingback" href="https://joannawng.com/xmlrpc.php" /> 19<!--[if lt IE 9]>
20<script src="https://s2.wp.com/wp-content/themes/pub/forever/js/html5.js?m=1323451932i" type="text/javascript"></script>
20 21<![endif]--> 22 23<title>Bio – Joanna W. Ng</title> 24<meta name='robots' content='max-image-preview:large' /> 25 26<!-- Async WordPress.com Remote Login -->
27<script id="wpcom_remote_login_js"> 28var wpcom_remote_login_extra_auth = ''; 29function wpcom_remote_login_remove_dom_node_id( element_id ) { 30 var dom_node = document.getElementById( element_id ); 31 if ( dom_node ) { dom_node.parentNode.removeChild( dom_node ); } 32} 33function wpcom_remote_login_remove_dom_node_classes( class_name ) { 34 var dom_nodes = document.querySelectorAll( '.' + class_name ); 35 for ( var i = 0; i < dom_nodes.length; i++ ) { 36 dom_nodes[ i ].parentNode.removeChild( dom_nodes[ i ] ); 37 } 38} 39function wpcom_remote_login_final_cleanup() { 40 wpcom_remote_login_remove_dom_node_classes( "wpcom_remote_login_msg" ); 41 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" ); 42 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_validate" ); 43 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_js" ); 44 wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_iframe" ); 45 wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_styles" ); 46} 47 48// Watch for messages back from the remote login 49window.addEventListener( "message", function( e ) { 50 if ( e.origin === "https://r-login.wordpress.com" ) { 51 var data = {}; 52 try { 53 data = JSON.parse( e.data ); 54 } catch( e ) { 55 wpcom_remote_login_final_cleanup(); 56 return; 57 } 58 59 if ( data.msg === 'LOGIN' ) { 60 // Clean up the login check iframe 61 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" ); 62 63 var id_regex = new RegExp( /^[0-9]+$/ ); 64 var token_regex = new RegExp( /^.*|.*|.*$/ ); 65 if ( 66 token_regex.test( data.token ) 67 && id_regex.test( data.wpcomid ) 68 ) { 69 // We have everything we need to ask for a login 70 var script = document.createElement( "script" ); 71 script.setAttribute( "id", "wpcom_remote_login_validate" ); 72 script.src = '/remote-login.php?wpcom_remote_login=validate' 73 + '&wpcomid=' + data.wpcomid 74 + '&token=' + encodeURIComponent( data.token ) 75 + '&host=' + window.location.protocol 76 + '//' + window.location.hostname 77 + '&postid=41' 78 + '&is_singular='; 79 document.body.appendChild( script ); 80 } 81 82 return; 83 } 84 85 // Safari ITP, not logged in, so redirect 86 if ( data.msg === 'LOGIN-REDIRECT' ) { 87 window.location = 'https://wordpress.com/log-in?redirect_to=' + window.location.href; 88 return; 89 } 90 91 // Safari ITP, storage access failed, remove the request 92 if ( data.msg === 'LOGIN-REMOVE' ) { 93 var css_zap = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } @media screen and ( max-width: 782px ) { html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } }'; 94 var style_zap = document.createElement( 'style' ); 95 style_zap.type = 'text/css'; 96 style_zap.appendChild( document.createTextNode( css_zap ) ); 97 document.body.appendChild( style_zap ); 98 99 var e = document.getElementById( 'wpcom_request_access_iframe' ); 100 e.parentNode.removeChild( e ); 101 102 document.cookie = 'wordpress_com_login_access=denied; path=/; max-age=31536000'; 103 104 return; 105 } 106 107 // Safari ITP 108 if ( data.msg === 'REQUEST_ACCESS' ) { 109 console.log( 'request access: safari' ); 110 111 // Check ITP iframe enable/disable knob 112 if ( wpcom_remote_login_extra_auth !== 'safari_itp_iframe' ) { 113 return; 114 } 115 116 // If we are in a "private window" there is no ITP. 117 var private_window = false; 118 try { 119 var opendb = window.openDatabase( null, null, null, null ); 120 } catch( e ) { 121 private_window = true; 122 } 123 124 if ( private_window ) { 125 console.log( 'private window' ); 126 return; 127 } 128 129 var iframe = document.createElement( 'iframe' ); 130 iframe.id = 'wpcom_request_access_iframe'; 131 iframe.setAttribute( 'scrolling', 'no' ); 132 iframe.setAttribute( 'sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-top-navigation-by-user-activation' ); 133 iframe.src = 'https://r-login.wordpress.com/remote-login.php?wpcom_remote_login=request_access&origin=' + encodeURIComponent( data.origin ) + '&wpcomid=' + encodeURIComponent( data.wpcomid ); 134 135 var css = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 46px !important; } * html body { margin-top: 46px !important; } @media screen and ( max-width: 660px ) { html { margin-top: 71px !important; } * html body { margin-top: 71px !important; } #wpcom_request_access_iframe { display: block; height: 71px !important; } } #wpcom_request_access_iframe { border: 0px; height: 46px; position: fixed; top: 0; left: 0; width: 100%; min-width: 100%; z-index: 99999; background: #23282d; } '; 136 137 var style = document.createElement( 'style' ); 138 style.type = 'text/css'; 139 style.id = 'wpcom_request_access_styles'; 140 style.appendChild( document.createTextNode( css ) ); 141 document.body.appendChild( style ); 142 143 document.body.appendChild( iframe ); 144 } 145 146 if ( data.msg === 'DONE' ) { 147 wpcom_remote_login_final_cleanup(); 148 } 149 } 150}, false ); 151 152// Inject the remote login iframe after the page has had a chance to load 153// more critical resources 154window.addEventListener( "DOMContentLoaded", function( e ) { 155 var iframe = document.createElement( "iframe" );
156 iframe.style.display = "none"; 157 iframe.setAttribute( "scrolling", "no" ); 158 iframe.setAttribute( "id", "wpcom_remote_login_key" ); 159 iframe.src = "https://r-login.wordpress.com/remote-login.php" 160 + "?wpcom_remote_login=key" 161 + "&origin=aHR0cHM6Ly9qb2FubmF3bmcuY29t" 162 + "&wpcomid=76957057" 163 + "&time=" + Math.floor( Date.now() / 1000 ); 164 document.body.appendChild( iframe ); 165}, false ); 166</script>
166 167<link rel='dns-prefetch' href='//s1.wp.com' /> 168<link rel='dns-prefetch' href='//s2.wp.com' /> 169<link rel='dns-prefetch' href='//widgets.wp.com' /> 170<link rel='dns-prefetch' href='//wordpress.com' /> 171<link rel='dns-prefetch' href='//fonts-api.wp.com' /> 172<link rel='dns-prefetch' href='//s0.wp.com' /> 173<link rel='dns-prefetch' href='//af.pubmine.com' /> 174<link rel="alternate" type="application/rss+xml" title="Joanna W. Ng » Feed" href="https://joannawng.com/feed/" /> 175<link rel="alternate" type="application/rss+xml" title="Joanna W. Ng » Comments Feed" href="https://joannawng.com/comments/feed/" /> 176<link rel="alternate" type="application/rss+xml" title="Joanna W. Ng » Bio Comments Feed" href="https://joannawng.com/bio/feed/" /> 177
177<script type="text/javascript"> 178 /* <![CDATA[ */ 179 function addLoadEvent(func) { 180 var oldonload = window.onload; 181 if (typeof window.onload != 'function') { 182 window.onload = func; 183 } else { 184 window.onload = function () { 185 oldonload(); 186 func(); 187 } 188 } 189 } 190 /* ]]> */ 191 </script>
191 192 <style id="wp-img-auto-sizes-contain-inline-css"> 193img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 194/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 195</style> 196<link crossorigin='anonymous' rel='stylesheet' id='all-css-2-1' href='/_static/??/wp-content/mu-plugins/widgets/eu-cookie-law/templates/style.css,/wp-content/mu-plugins/likes/jetpack-likes.css?m=1743883414j&cssminify=yes' type='text/css' media='all' /> 197<style id="wp-emoji-styles-inline-css"> 198 199 img.wp-smiley, img.emoji { 200 display: inline !important; 201 border: none !important; 202 box-shadow: none !important; 203 height: 1em !important; 204 width: 1em !important; 205 margin: 0 0.07em !important; 206 vertical-align: -0.1em !important; 207 background: none !important; 208 padding: 0 !important; 209 } 210/*# sourceURL=wp-emoji-styles-inline-css */ 211</style> 212<style id="wp-block-library-inline-css"> 213:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
213--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 214 215/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.0.0/build/styles/block-library/common.min.css */ 216</style> 217<style id="wp-block-paragraph-inline-css"> 218.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:var(--wp--style--block-background-padding,1.25em 2.375em)}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg} 219/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.0.0/build/styles/block-library/paragraph/style.min.css */ 220</style> 221<style id="wp-block-library-inline-css-extra"> 222.has-text-align-justify { 223 text-align:justify; 224} 225.has-text-align-justify{text-align:justify;} 226/*# sourceURL=wp-block-library-inline-css */ 227</style> 228 229<style id="classic-theme-styles-inline-css"> 230.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}.wp-block-accordion-heading{margin:0}.wp-block-accordion-heading__toggle{background-color:inherit!important;color:inherit!important}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:focus,.wp-block-accordion-heading__toggle:hover{background-color:inherit!important;border:none;box-shadow:none;color:inherit;padding:var(--wp--preset--spacing--20,1em) 0;text-decoration:none}.wp-block-accordion-heading__toggle:focus-visible{outline:auto;outline-offset:0}.wp-block-tab:not(.has-text-color){color:inherit!important}.wp-block-tab:not(.has-background){background-color:inherit!important}.wp-block-tab:focus,.wp-block-tab:hover{text-decoration:none}.wp-block-tab:focus-visible{outline:auto;outline-offset:0} 231/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.0.0/build/styles/block-library/classic.min.css */ 232</style> 233 234<style id="coblocks-inline-format-inline-css"> 235.uppercase{text-transform:uppercase} 236/*# sourceURL=coblocks-inline-format-inline-css */ 237</style> 238<link crossorigin='anonymous' rel='stylesheet' id='all-css-12-1' href='/_static/??-eJx9jEEOAiEQBD/kQECjeDC+ZWEnijIwYWA3/l72op689KFTVXplCCU3zE1z6reYRYfiUwlP0VYZpwxIJE4IFRd10HOU9iFA2iuhCiI7/ROiDt9WxfETT20jCOc4YUIa2D9t5eGA91xRBMZS7ATtPkTZvCtdzNEZt7f2fHq8Afl7R7w=&cssminify=yes' type='text/css' media='all' /> 239<style id="global-styles-inline-css"> 240:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
2400) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
240.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;} 241/*# sourceURL=global-styles-inline-css */ 242</style> 243 244<link crossorigin='anonymous' rel='stylesheet' id='all-css-14-1' href='/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.css?m=1790591968i&cssminify=yes' type='text/css' media='all' /> 245<link rel='stylesheet' id='verbum-gutenberg-css-css' href='https://widgets.wp.com/verbum-block-editor/block-editor.css?ver=1771405207' media='all' /> 246<link crossorigin='anonymous' rel='stylesheet' id='all-css-16-1' href='/_static/??-eJyNjNEOgjAMRX/I2czEgA/Gf3GpWli7hXUQ/t4iCSE+8daee++BKbuQRFEUuLoc65ukQEjMhlyk
246Hu0rf+Rs5AQEkpRsXbZjDXZO/SCbIdcnvNKAIw5AEqDoHNFN2axHJr/6Unzw3Tdt62++uVy7L5IMRfc=&cssminify=yes' type='text/css' media='all' /> 247<link rel='stylesheet' id='raleway-css' href='https://fonts-api.wp.com/css?family=Raleway:100&ver=7.2-alpha-63387' media='all' /> 248<link crossorigin='anonymous' rel='stylesheet' id='all-css-18-1' href='/_static/??-eJzTLy/QTc7PK0nNK9HPLdUtyClNz8wr1i9KTcrJTwcy0/WTi5G5ekCujj52Temp+bo5+cmJJZn5eSgc3bScxMwikFb7XFtDE1NLExMLc0OTLACohS2q&cssminify=yes' type='text/css' media='all' /> 249<link crossorigin='anonymous' rel='stylesheet' id='print-css-19-1' href='/wp-content/mu-plugins/global-print/global-print.css?m=1465851035i&cssminify=yes' type='text/css' media='print' /> 250<style id="jetpack-global-styles-frontend-style-inline-css"> 251:root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;} 252/*# sourceURL=jetpack-global-styles-frontend-style-inline-css */ 253</style> 254<link crossorigin='anonymous' rel='stylesheet' id='all-css-22-1' href='/_static/??-eJyNjcsKAjEMRX/ImhmUURfip0inLW3GNCmmQfx7H7gRN+7ugcs5cGsuCPfEHaq5RpaRFZbUmw+XD4MaQ5VolBS0+GuKPsb7eyLndVBdwd+iM3KA2ZAiqAT05Eiy6Bf8KHtJ9RkvW8gks6fX4VSP426/mQ7TMA7LA38FSqA=&cssminify=yes' type='text/css' media='all' />
255<script id="wpcom-actionbar-placeholder-js-extra"> 256var actionbardata = {"siteID":"76957057","postID":"41","siteURL":"https://joannawng.com","xhrURL":"https://joannawng.com/wp-admin/admin-ajax.php","nonce":"4ca43495cc","isLoggedIn":"","statusMessage":"","subsEmailDefault":"instantly","proxyScriptUrl":"https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m=1513050504i&ver=20211021","shortlink":"https://wp.me/P5cU2R-F","i18n":{"followedText":"New posts from this site will now appear in your \u003Ca href=\"https://wordpress.com/reader\"\u003EReader\u003C/a\u003E","foldBar":"Collapse this bar","unfoldBar":"Expand this bar","shortLinkCopied":"Copied to clipboard."}}; 257//# sourceURL=wpcom-actionbar-placeholder-js-extra 258</script>
vendor: 1 bytes, line 258
258
259<script id="jetpack-mu-wpcom-settings-js-before"> 260var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https://s1.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"}; 261//# sourceURL=jetpack-mu-wpcom-settings-js-before 262</script>
vendor: 1 bytes, line 262
262
263<script crossorigin='anonymous' type='text/javascript' src='/_static/??/wp-content/js/rlt-proxy.js,/wp-content/blog-plugins/wordads-classes/js/cmp/v2/cmp-non-gdpr.js?m=1780567333j'></script>
vendor: 1 bytes, line 263
263
264<script id="rlt-proxy-js-after"> 265 rltInitialize( {"token":null,"iframeOrigins":["https:\/\/widgets.wp.com"]} ); 266//# sourceURL=rlt-proxy-js-after 267</script>
267 268<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://joannawng.wordpress.com/xmlrpc.php?rsd" /> 269<meta name="generator" content="WordPress.com" /> 270<link rel="canonical" href="https://joannawng.com/bio/" /> 271<link rel='shortlink' href='https://wp.me/P5cU2R-F' /> 272<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/?format=json&url=https%3A%2F%2Fjoannawng.com%2Fbio%2F&for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/?format=xml&url=https%3A%2F%2Fjoannawng.com%2Fbio%2F&for=wpcom-auto-discovery" /> 273<!-- Jetpack Open Graph Tags --> 274<meta property="og:type" content="article" /> 275<meta property="og:title" content="Bio" /> 276<meta property="og:url" content="https://joannawng.com/bio/" /> 277<meta property="og:description" content="Joanna Ng is the founder of Devarim Design. An ex-IBM-er, Joanna pivoted to innovate in an entrepreneurial start-up setting, focusing on Artificial Intelligence, specialized in Augmented Cognition,â¦" /> 278<meta property="article:published_time" content="2014-10-15T17:55:23+00:00" /> 279<meta property="article:modified_time" content="2022-11-03T17:46:11+00:00" /> 280<meta property="og:site_name" content="Joanna W. Ng" /> 281<meta property="og:image" content="https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg" /> 282<meta property="og:image:width" content="4752" /> 283<meta property="og:image:height" content="3168" /> 284<meta property="og:image:alt" content="IMG_4055" /> 285<meta property="og:locale" content="en_US" /> 286<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" /> 287<meta name="twitter:text:title" content="Bio" /> 288<meta name="twitter:card" content="summary" /> 289 290<!-- End Jetpack Open Graph Tags --> 291<link rel="shortcut icon" type="image/x-icon" href="https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=32" sizes="16x16" /> 292<link rel="icon" type="image/x-icon" href="https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=32" sizes="16x16" /> 293<link rel="apple-touch-icon" href="https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=114" /> 294<link rel='openid.server' href='https://joannawng.com/?openidserver=1' /> 295<link rel='openid.delegate' href='https://joannawng.com/' /> 296<link rel="search" type="application/opensearchdescription+xml" href="https://joannawng.com/osd.xml" title="Joanna W. Ng" /> 297<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" /> 298<meta name="theme-color" content="#f1ecdf" /> 299 <style type="text/css"> 300 .recentcomments a { 301 display: inline !important; 302 padding: 0 !important; 303 margin: 0 !important; 304 } 305 306 table.recentcommentsavatartop img.avatar, table.recentcommentsavatarend img.avatar { 307 border: 0px; 308 margin: 0; 309 } 310 311 table.recentcommentsavatartop a, table.recentcommentsavatarend a { 312 border: 0px !important; 313 background-color: transparent !important; 314 } 315 316 td.recentcommentsavatarend, td.recentcommentsavatartop { 317 padding: 0px 0px 1px 0px; 318 margin: 0px; 319 } 320 321 td.recentcommentstextend { 322 border: none !important; 323 padding: 0px 0px 2px 10px; 324 } 325 326 .rtl td.recentcommentstextend { 327 padding: 0px 10px 2px 0px; 328 } 329 330 td.recentcommentstexttop { 331 border: none; 332 padding: 0px 0px 0px 10px; 333 } 334 335 .rtl td.recentcommentstexttop { 336 padding: 0px 10px 0px 0px; 337 } 338 </style> 339 <meta name="description" content="Joanna Ng is the founder of Devarim Design. An ex-IBM-er, Joanna pivoted to innovate in an entrepreneurial start-up setting, focusing on Artificial Intelligence, specialized in Augmented Cognition, by integrating with IoT and Blockchain, applying to all of it her design-thinking methodology. Joannaâs niche is her capacity and insight in turning complex abstractions and theories and…" /> 340 <style type="text/css"> 341 #masthead img { 342 margin: 1.615em 0 0; 343 } 344 .custom-header { 345 display: block; 346 text-align: center; 347 } 348 #site-title a { 349 color: #1982d1; 350 } 351 </style> 352 <style id="custom-background-css"> 353body.custom-background { background-color: #f1ecdf; background-image: url("https://joannawng.files.wordpress.com/2022/11/img_1706.jpeg"); background-position: right top; background-size: auto; background-repeat: repeat; background-attachment: scroll; } 354</style>
355<script> 356var wa_client = {}; wa_client.cmd = []; wa_client.config = { 'blog_id': 76957057, 'blog_language': 'en', 'is_wordads': false, 'hosting_type': 0, 'afp_account_id': null, 'afp_host_id': 5038568878849053, 'theme': 'pub/forever', '_': { 'title': 'Advertisement', 'privacy_settings': 'Privacy Settings' }, 'formats': [ 'inline', 'belowpost', 'bottom_sticky', 'sidebar_sticky_right', 'sidebar', 'gutenberg_rectangle', 'gutenberg_leaderboard', 'gutenberg_mobile_leaderboard', 'gutenberg_skyscraper' ] }; 357</script>
357 358
358<script type="text/javascript"> 359 360 window.doNotSellCallback = function() { 361 362 var linkElements = [ 363 'a[href="https://wordpress.com/?ref=footer_blog"]', 364 'a[href="https://wordpress.com/?ref=footer_website"]', 365 'a[href="https://wordpress.com/?ref=vertical_footer"]', 366 'a[href^="https://wordpress.com/?ref=footer_segment_"]', 367 ].join(','); 368 369 var dnsLink = document.createElement( 'a' ); 370 dnsLink.href = 'https://wordpress.com/advertising-program-optout/'; 371 dnsLink.classList.add( 'do-not-sell-link' ); 372 dnsLink.rel = 'nofollow'; 373 dnsLink.style.marginLeft = '0.5em'; 374 dnsLink.textContent = 'Do Not Sell or Share My Personal Information'; 375 376 var creditLinks = document.querySelectorAll( linkElements ); 377 378 if ( 0 === creditLinks.length ) { 379 return false; 380 } 381 382 Array.prototype.forEach.call( creditLinks, function( el ) { 383 el.insertAdjacentElement( 'afterend', dnsLink ); 384 }); 385 386 return true; 387 }; 388 389 </script>
389 390 <style type="text/css" id="custom-colors-css">body { background-color: #F1ECDF;} 391a { color: #816D0D;} 392.entry-title a:focus, .entry-title a:active, .entry-title a:hover { color: #816D0D;} 393.recent-title a:focus, .recent-title a:active, .recent-title a:hover { color: #816D0D;} 394.entry-meta a { color: #816D0D;} 395.more-link a { color: #816D0D;} 396#page #site-title a { color: #816D0D;} 397.more-link a { color: #816D0D;} 398#site-description { color: #2A2A2A;} 399.recent-title a { color: #2A2A2A;} 400.entry-title a { color: #2A2A2A;} 401#secondary .widget-title { color: #2A2A2A;} 402</style>
403<script type="text/javascript"> 404 window.google_analytics_uacct = "UA-52447-2"; 405</script>
405 406
407<script type="text/javascript"> 408 var _gaq = _gaq || []; 409 _gaq.push(['_setAccount', 'UA-52447-2']); 410 _gaq.push(['_gat._anonymizeIp']); 411 _gaq.push(['_setDomainName', 'none']); 412 _gaq.push(['_setAllowLinker', true]); 413 _gaq.push(['_initData']); 414 _gaq.push(['_trackPageview']); 415 416 (function() { 417 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 418 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 419 (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga); 420 })(); 421</script>
421 422<link crossorigin='anonymous' rel='stylesheet' id='all-css-0-5' href='/_static/??-eJyNjMEKgzAQBX9IfVpq60X8lGLXRaLJJrhZ/P1SUM8eZxgGeyopSmbJCFYmb7MTxcI5jbQeDDXBxwnh6yOtCt1d4q0i1QK3ByFO5llB4xZN2V/NKf6/IfTNu2sfzbPuXssPrlM6pw==&cssminify=yes' type='text/css' media='all' /> 423 424</head> 425 426<body class="wp-singular page-template-default page page-id-41 custom-background wp-theme-pubforever customizer-styles-applied single-author jetpack-reblog-enabled"> 427 428<div id="page" class="hfeed"> 429 430 431<header id="masthead" role="banner"> 432 <h1 id="site-title"><a href="https://joannawng.com/" title="Joanna W. Ng" rel="home">Joanna W. Ng</a></h1> 433 434 <a class="custom-header" href="https://joannawng.com/" rel="home"> 435 <img class="custom-header-image" src="https://joannawng.com/wp-content/uploads/2022/11/cropped-img_7706-1.jpg" width="885" height="666" alt="" /> 436 </a> 437 438 <nav id="access" role="navigation"> 439 <h1 class="assistive-text section-heading">Main menu</h1> 440 <div class="skip-link assistive-text"><a href="#content" title="Skip to content">Skip to content</a></div> 441 442 <div class="menu-bio-container"><ul id="menu-bio" class="menu"><li id="menu-item-96" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-96"><a href="https://joannawng.com/about/">About</a></li> 443<li id="menu-item-42" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-41 current_page_item menu-item-42"><a href="https://joannawng.com/bio/" aria-current="page">Bio</a></li> 444<li id="menu-item-182" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-182"><a href="https://joannawng.com/thoughts-on-technologies/">Thoughts on New Technologlies</a></li> 445<li id="menu-item-38" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38"><a href="https://joannawng.com/anecdotes-of-innovation/">Thoughts on Innovations</a></li> 446<li id="menu-item-89" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-89"><a href="https://joannawng.com/about-women-in-technology/">Thoughts on Women in Technology</a></li> 447<li id="menu-item-54" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-54"><a href="https://joannawng.com/why-a-blog-about-me/">Personal Anecdotes</a></li> 448<li id="menu-item-46" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46"><a href="https://joannawng.com/patents/">Patents Issued</a></li> 449<li id="menu-item-50" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-50"><a href="https://joannawng.com/publications/">Publications</a></li> 450<li id="menu-item-71" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71"><a href="https://joannawng.com/talks-presentations/">Talks & Presentations</a></li> 451<li id="menu-item-83" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-83"><a href="https://joannawng.com/sources-of-inspiration/">Sources of Inspiration</a></li> 452<li id="menu-item-459" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-459"><a href="https://joannawng.com/stuff-i-think-about/">Stuff I Care About</a></li> 453</ul></div> </nav><!-- #access --> 454</header><!-- #masthead --> 455 <div id="main"> 456 <div id="primary"> 457 <div id="content" role="main"> 458 459 460 461<article id="post-41" class="post-41 page type-page status-publish hentry"> 462 <header class="entry-header"> 463 <h1 class="entry-title">Bio</h1> 464 </header><!-- .entry-header --> 465 466 <div class="entry-content"> 467 <p><img data-attachment-id="32" data-permalink="https://joannawng.com/img_4055/" data-orig-file="https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg" data-orig-size="4752,3168" data-comments-opened="1" data-image-meta="{"aperture":"5.6","camera":"Canon EOS REBEL T1i","created_timestamp":"1413334758","focal_length":"40","iso":"400","shutter_speed":"0.016666666666667","orientation":"1"}" data-image-title="IMG_4055" data-image-description="" data-image-caption="" data-large-file="https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg?w=560" class="alignnone size-full wp-image-32" src="https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg" alt="IMG_4055" width="4752" height="3168" srcset="https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg 4752w, https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg?w=150&h=100 150w, https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg?w=300&h=200 300w, https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg?w=768&h=512 768w, https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg?w=1024&h=683 1024w, https://joannawng.com/wp-content/uploads/2014/10/img_4055.jpg?w=1440&h=960 1440w" sizes="(max-width: 4752px) 100vw, 4752px" /></p> 468<p>Joanna Ng is the founder of Devarim Design. An ex-IBM-er, Joanna pivoted to innovate in an entrepreneurial start-up setting, focusing on Artificial Intelligence, specialized in Augmented Cognition, by integrating with IoT and Blockchain, applying to all of it her design-thinking methodology.</p> 469<p>Joannaâs niche is her capacity and insight in turning complex abstractions and theories and research outcome into useful products and s
469olutions. She held a seven-year tenure as the Head of Research and Director of the Centre for Advanced Studies, IBM Canada Lab; and accredited as an IBM Master Inventor.</p> 470<p>Professionally as an inventor and technologist, her portfolio includes:</p> 471<ul> 472<li>Being granted to her name forty-nine patents by U.S. and other countriesâ Patent Offices</li> 473<li>Co-authored two computer science books with Springer: <a href="https://www.amazon.com/gp/product/3642166008/ref=dbs_a_def_rwt_bibl_vppi_i3" target="_blank" rel="noopener">The Smart Internet (2010)</a> and <a href="https://www.amazon.com/gp/product/3642399940/ref=dbs_a_def_rwt_bibl_vppi_i2" target="_blank" rel="noopener">The Personal Web (2013)</a></li> 474<li>Published and co-authored over twenty <a href="https://dblp.org/pid/63/8816.html" target="_blank" rel="noopener">peer-reviewed academic papers</a></li> 475</ul> 476<p>Some of Joanna’s inventions are highlighted below:</p> 477<ul> 478<li><a href="https://joannawng.com/wp-content/uploads/2014/10/cas-research-the-four-languages-of-innovation-april-2015-v2.pdf" target="_blank" rel="noopener">“The Four Languages of Innovation”</a></li> 479<li>“The Smart Internet”</li> 480<li>“The Personal Web”</li> 481<li>“Personalized Web Tasking”, “Web Tasking”</li> 482<li>Scribble on IISE</li> 483<li>SOSA (Social Ontology & Semantic Actions)</li> 484<li>REAST (REpresentational Action State Transfer) and ROH (Resource Oriented Hypermedia)</li> 485<li>DIANE (Domain Informatics and ANalytics for Enterprise) aka Talk To Your Own Data</li> 486</ul> 487<p>Personally as a person of faith in Christ, her ministries in faith includes:</p> 488<ul> 489<li>Started a virtual and local hybrid faith community to promote the integration of faith and work called <a href="https://www.koe.community/" target="_blank" rel="noopener">KOE (Kingdom On Earth)</a></li> 490<li>Being a speaker at Lausanne Global Workplace Forum (GWF) at Manila, Philippines in June 2019. She gave two talks at its Media & Technology Consultation; one on âRedeeming AI for Godâs Kingdomâ and the other one on âUsing Mobile & Social Computing for the Great Commission. She was also one of the main tent panelists on âAI at the Workplaceâ. </li> 491<li>Being a voice of faith in the tech-space: She published an article through Christianity Today, called <a href="https://www.christianitytoday.com/ct/2020/june-web-only/artificial-intelligence-todays-tower-of-babel-ai-ethics.html" target="_blank" rel="noopener">How Artificial Super Intelligence Is Today’s Tower of Babel</a></li> 492<li>Being interviewed by <a href="https://aiandfaith.org/meet-joanna-ng-ai-pioneer-computer-scientist-and-disciple-of-jesus/" target="_blank" rel="noopener">AI and Faith</a> and Alpha Asia <a href="https://www.youtube.com/watch?v=U5mzdgTL8_A" target="_blank" rel="noopener">Alpha Asia</a></li> 493<li>Profiled by Christianity Today as a <a href="https://www.christianitytoday.com/ct/2020/march/joanna-ng-computer-scientist-christian-women-in-science.html" target="_blank" rel="noopener">Computer Scientist and Technologist</a> and as a <a href="https://www.christianitytoday.org/stories/what-people-are-saying/2022/how-ct-encourages-ai-technologist-to-stand-firm-in-tough-ti.html" target="_blank" rel="noopener">partner and advocate</a></li> 494<li>Started a KOE book series</li> 495<li>Published her first book of the KOE series called <a href="https://www.amazon.com/dp/B0BGBFBBTH" target="_blank" rel="noopener">Being Christian 2.0: Instead of losing heart, Let’s start over (Oct 2022)</a></li> 496</ul> 497<p>Joanna earned her degree of Bachelor of Science from University of Calgary, majored in Computer Science, with a double major in Psychology. She also earned a degree of MBA from Queen’s University.</p> 498 499 500<p class="wp-block-paragraph"></p> 501<div id="atatags-370373-6abdd4041ae3c"> 502
502<script type="text/javascript"> 503 __ATA = window.__ATA || {}; 504 __ATA.cmd = window.__ATA.cmd || []; 505 __ATA.cmd.push(function() { 506 __ATA.initVideoSlot('atatags-370373-6abdd4041ae3c', { 507 sectionId: '370373', 508 format: 'inread' 509 }); 510 }); 511 </script>
511 512 </div><span id="wordads-inline-marker" style="display: none;"></span><div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"><div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-twitter"><a rel="nofollow noopener noreferrer" 513 data-shared="sharing-twitter-41" 514 class="share-twitter sd-button share-icon" 515 href="https://joannawng.com/bio/?share=twitter" 516 target="_blank" 517 aria-labelledby="sharing-twitter-41" 518 > 519 <span id="sharing-twitter-41" hidden>Share on X (Opens in new window)</span> 520 <span>X</span> 521 </a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer" 522 data-shared="sharing-facebook-41" 523 class="share-facebook sd-button share-icon" 524 href="https://joannawng.com/bio/?share=facebook" 525 target="_blank" 526 aria-labelledby="sharing-facebook-41" 527 > 528 <span id="sharing-facebook-41" hidden>Share on Facebook (Opens in new window)</span> 529 <span>Facebook</span> 530 </a></li><li class="share-end"></li></ul></div></div></div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-76957057-41-6abdd4041b326' data-src='//widgets.wp.com/likes/index.html?ver=20261001#blog_id=76957057&post_id=41&origin=joannawng.wordpress.com&obj_id=76957057-41-6abdd4041b326&domain=joannawng.com' data-name='like-post-frame-76957057-41-6abdd4041b326' data-title='Like or Reblog'><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>Like</span></span> <span class='loading'>Loading...</span></div><span class='sd-text-color'></span><a class='sd-link-color'></a></div></div> </div><!-- .entry-content --> 531 532 533</article><!-- #post-41 --> 534 535 <div id="comments"> 536 537 538 <h2 id="comments-title"> 539 One thought on “<span>Bio</span>” </h2> 540 541 542 <ol class="commentlist"> 543 <li class="post pingback"> 544 <p>Pingback: <a href="https://www.whatsyourtech.ca/2023/06/05/challenging-the-stereotypes-building-an-ecosystem-for-women-in-ip/" class="url" rel="ugc external nofollow">Challenging the Stereotypes, Building an Ecosystem for Women in IP | WhatsYourTech.ca</a></p> 545 </li><!-- #comment-## --> 546 </ol> 547 548 549 550 551 <div id="respond" class="comment-respond"> 552 <h3 id="reply-title" class="comment-reply-title">Leave a comment <small><a rel="nofollow" id="cancel-comment-reply-link" href="/bio/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://joannawng.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"> 553 554 555<div class="comment-form__verbum transparent"></div><div class="verbum-form-meta"><input type='hidden' name='comment_post_ID' value='41' id='comment_post_ID' /> 556<input type='hidden' name='comment_parent' id='comment_parent' value='0' /> 557 558 <input type="hidden" name="highlander_comment_nonce" id="highlander_comment_nonce" value="d63d29d3c8" /> 559 <input type="hidden" name="verbum_show_subscription_modal" value="" /></div><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="0ae3be38cf" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="124"/>
559<script> 560document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() ); 561</script>
561 562</p></form> </div><!-- #respond --> 563 564</div><!-- #comments --> 565 566 567 </div><!-- #content --> 568 </div><!-- #primary --> 569 570 <div id="secondary" class="widget-area" role="complementary"> 571 572 <aside id="search" class="widget widget_search"> 573 <form method="get" id="searchform" action="https://joannawng.com/"> 574 <label for="s" class="assistive-text">Search</label> 575 <input type="text" class="field" name="s" id="s" placeholder="Search" /> 576 <input type="submit" class="submit" name="submit" id="searchsubmit" value="Search" /> 577 </form> 578 </aside> 579 580 <aside id="archives" class="widget"> 581 <h1 class="widget-title">Archives</h1> 582 <ul> 583 <li><a href='https://joannawng.com/2023/11/'>November 2023</a></li> 584 <li><a href='https://joannawng.com/2018/05/'>May 2018</a></li> 585 <li><a href='https://joannawng.com/2017/09/'>September 2017</a></li> 586 <li><a href='https://joannawng.com/2017/04/'>April 2017</a></li> 587 <li><a href='https://joannawng.com/2016/01/'>January 2016</a></li> 588 <li><a href='https://joannawng.com/2015/11/'>November 2015</a></li> 589 <li><a href='https://joannawng.com/2015/10/'>October 2015</a></li> 590 <li><a href='https://joannawng.com/2015/07/'>July 2015</a></li> 591 <li><a href='https://joannawng.com/2014/12/'>December 2014</a></li> 592 <li><a href='https://joannawng.com/2014/11/'>November 2014</a></li> 593 </ul> 594 </aside> 595 596 <aside id="meta" class="widget"> 597 <h1 class="widget-title">Meta</h1> 598 <ul> 599 <li><a class="click-register" href="https://wordpress.com/start?ref=wplogin">Create account</a></li> <aside><a href="https://joannawng.wordpress.com/wp-login.php">Log in</a></aside> 600 </ul> 601 </aside> 602 603 </div><!-- #secondary .widget-area --> 604 605 606 </div><!-- #main --> 607 608 609 610<footer id="colophon" role="contentinfo"> 611 <div id="site-info"> 612 <a href="https://wordpress.com/?ref=footer_website" rel="nofollow">Create a free website or blog at WordPress.com.</a> 613 </div> 614</footer><!-- #colophon --></div><!-- #page --> 615 616<!-- -->
617<script type="speculationrules"> 618{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/files/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/pub/forever/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 619</script>
vendor: 1 bytes, line 619
619
620<script id="grofiles-cards-js" src="//0.gravatar.com/js/hovercards/hovercards.min.js?ver=202640d1133547e8a1f2801609f51cef12522abe7f6647d869e9fbc974fe356a37e613"></script>
vendor: 1 bytes, line 620
620
621<script id="wpgroho-js-extra"> 622var WPGroHo = {"my_hash":""}; 623//# sourceURL=wpgroho-js-extra 624</script>
vendor: 1 bytes, line 624
624
625<script crossorigin='anonymous' type='text/javascript' src='/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m=1610363240i'></script>
625 626 627
627<script> 628 // Initialize and attach hovercards to all gravatars 629 ( function() { 630 function init() { 631 if ( typeof Gravatar === 'undefined' ) { 632 return; 633 } 634 635 if ( typeof Gravatar.init !== 'function' ) { 636 return; 637 } 638 639 Gravatar.profile_cb = function ( hash, id ) { 640 WPGroHo.syncProfileData( hash, id ); 641 }; 642 643 Gravatar.my_hash = WPGroHo.my_hash; 644 Gravatar.init( 645 'body', 646 '#wp-admin-bar-my-account', 647 { 648 i18n: { 649 'Edit your profile â': 'Edit your profile â', 650 'View profile â': 'View profile â', 651 'Contact': 'Contact', 652 'Send money': 'Send money', 653 'Sorry, we are unable to load this Gravatar profile.': 'Sorry, we are unable to load this Gravatar profile.', 654 'Gravatar not found.': 'Gravatar not found.', 655 'Too Many Requests.': 'Too Many Requests.', 656 'Internal Server Error.': 'Internal Server Error.', 657 'Is this you?': 'Is this you?', 658 'Claim your free profile.': 'Claim your free profile.', 659 'Email': 'Email', 660 'Home Phone': 'Home Phone', 661 'Work Phone': 'Work Phone', 662 'Cell Phone': 'Cell Phone', 663 'Contact Form': 'Contact Form', 664 'Calendar': 'Calendar', 665 }, 666 } 667 ); 668 } 669 670 if ( document.readyState !== 'loading' ) { 671 init(); 672 } else { 673 document.addEventListener( 'DOMContentLoaded', init ); 674 } 675 } )(); 676 </script>
676 677 678 <div style="display:none"> 679 </div> 680 <!-- CCPA [start] --> 681
681<script type="text/javascript"> 682 ( function () { 683 684 var setupPrivacy = function() { 685 686 // Minimal Mozilla Cookie library 687 // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework 688 var cookieLib = window.cookieLib = {getItem:function(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null},setItem:function(e,o,n,t,r,i){if(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))return!1;var c="";if(n)switch(n.constructor){case Number:c=n===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n;break;case String:c="; expires="+n;break;case Date:c="; expires="+n.toUTCString()}return"rootDomain"!==r&&".rootDomain"!==r||(r=(".rootDomain"===r?".":"")+document.location.hostname.split(".").slice(-2).join(".")),document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+c+(r?"; domain="+r:"")+(t?"; path="+t:"")+(i?"; secure":""),!0}}; 689 690 // Implement IAB USP API. 691 window.__uspapi = function( command, version, callback ) { 692 693 // Validate callback. 694 if ( typeof callback !== 'function' ) { 695 return; 696 } 697 698 // Validate the given command. 699 if ( command !== 'getUSPData' || version !== 1 ) { 700 callback( null, false ); 701 return; 702 } 703 704 // Check for GPC. If set, override any stored cookie. 705 if ( navigator.globalPrivacyControl ) { 706 callback( { version: 1, uspString: '1YYN' }, true ); 707 return; 708 } 709
710 // Check for cookie. 711 var consent = cookieLib.getItem( 'usprivacy' ); 712 713 // Invalid cookie. 714 if ( null === consent ) { 715 callback( null, false ); 716 return; 717 } 718 719 // Everything checks out. Fire the provided callback with the consent data. 720 callback( { version: 1, uspString: consent }, true ); 721 }; 722 723 // Initialization. 724 document.addEventListener( 'DOMContentLoaded', function() { 725 726 // Internal functions. 727 var setDefaultOptInCookie = function() { 728 var value = '1YNN'; 729 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 730 cookieLib.setItem( 'usprivacy', value, 365 * 24 * 60 * 60, '/', domain ); 731 }; 732 733 var setDefaultOptOutCookie = function() { 734 var value = '1YYN'; 735 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 736 cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain ); 737 }; 738 739 var setDefaultNotApplicableCookie = function() { 740 var value = '1---'; 741 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 742 cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain ); 743 }; 744 745 var setCcpaAppliesCookie = function( applies ) { 746 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 747 cookieLib.setItem( 'ccpa_applies', applies, 24 * 60 * 60, '/', domain ); 748 } 749 750 var maybeCallDoNotSellCallback = function() { 751 if ( 'function' === typeof window.doNotSellCallback ) { 752 return window.doNotSellCallback(); 753 } 754 755 return false; 756 } 757 758 // Look for usprivacy cookie first. 759 var usprivacyCookie = cookieLib.getItem( 'usprivacy' ); 760 761 // Found a usprivacy cookie. 762 if ( null !== usprivacyCookie ) { 763 764 // If the cookie indicates that CCPA does not apply, then bail. 765 if ( '1---' === usprivacyCookie ) { 766 return; 767 } 768 769 // CCPA applies, so call our callback to add Do Not Sell link to the page. 770 maybeCallDoNotSellCallback(); 771 772 // We're all done, no more processing needed. 773 return; 774 } 775 776 // We don't have a usprivacy cookie, so check to see if we have a CCPA applies cookie. 777 var ccpaCookie = cookieLib.getItem( 'ccpa_applies' ); 778 779 // No CCPA applies cookie found, so we'll need to geolocate if this visitor is from California. 780 // This needs to happen client side because we do not have region geo data in our $SERVER headers, 781 // only country data -- therefore we can't vary cache on the region. 782 if ( null === ccpaCookie ) { 783 784 var request = new XMLHttpRequest(); 785 request.open( 'GET', 'https://public-api.wordpress.com/geo/', true ); 786 787 request.onreadystatechange = function () { 788 if ( 4 === this.readyState ) { 789 if ( 200 === this.status ) { 790 791 // Got a geo response. Parse out the region data. 792 var data = JSON.parse( this.response ); 793 var region = data.region ? data.region.toLowerCase() : ''; 794 var ccpa_applies = ['california', 'colorado', 'connecticut', 'delaware', 'indiana', 'iowa', 'montana', 'new jersey', 'oregon', 'tennessee', 'texas', 'utah', 'virginia'].indexOf( region ) > -1; 795 // Set CCPA applies cookie. This keeps us from having to make a geo request too frequently. 796 setCcpaAppliesCookie( ccpa_applies ); 797 798 // Check if CCPA applies to set the proper usprivacy cookie. 799 if ( ccpa_applies ) { 800 if ( maybeCallDoNotSellCallback() ) { 801 // Do Not Sell link added, so set default opt-in. 802 setDefaultOptInCookie(); 803 } else { 804 // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. 805 setDefaultOptOutCookie(); 806 } 807 } else { 808 // CCPA does not apply. 809 setDefaultNotApplicableCookie(); 810 } 811 } else { 812 // Could not geo, so let's assume for now that CCPA applies to be safe. 813 setCcpaAppliesCookie( true ); 814 if ( maybeCallDoNotSellCallback() ) { 815 // Do Not Sell link added, so set default opt-in. 816 setDefaultOptInCookie(); 817 } else { 818 // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. 819 setDefaultOptOutCookie(); 820 } 821 } 822 } 823 }; 824 825 // Send the geo request. 826 request.send(); 827 } else { 828 // We found a CCPA applies cookie. 829 if ( ccpaCookie === 'true' ) { 830 if ( maybeCallDoNotSellCallback() ) { 831 // Do Not Sell link added, so set default opt-in. 832 setDefaultOptInCookie(); 833 } else { 834 // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. 835 setDefaultOptOutCookie(); 836 } 837 } else { 838 // CCPA does not apply. 839 setDefaultNotApplicableCookie(); 840 } 841 } 842 } ); 843 }; 844 845 // Kickoff initialization. 846 if ( window.defQueue && defQueue.isLOHP && defQueue.isLOHP === 2020 ) { 847 defQueue.items.push( setupPrivacy ); 848 } else { 849 setupPrivacy(); 850 } 851 852 } )(); 853 </script>
853 854 855 <!-- CCPA [end] --> 856 <div class="widget widget_eu_cookie_law_widget"> 857<div 858 class="hide-on-button ads-active" 859 data-hide-timeout="30" 860 data-consent-expiration="180" 861 id="eu-cookie-law" 862 style="display: none" 863> 864 <form method="post"> 865 <input type="submit" value="Close and accept" class="accept" /> 866 867 Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use. <br /> 868To find out more, including how to control cookies, see here: 869 <a href="https://automattic.com/cookies/" rel="nofollow"> 870 Cookie Policy </a> 871 </form> 872</div> 873</div> <div id="actionbar" dir="ltr" style="display: none;" 874 class="actnbr-pub-forever" role="region" aria-label="Site actions"> 875 <span class="actnbr-live" aria-live="polite"></span> 876 <ul> 877 <li class="actnbr-btn actnbr-hidden"> 878 <a class="actnbr-action actnbr-actn-follow " href="" role="button" aria-haspopup="dialog" aria-expanded="false"> 879 <svg class="actnbr-icon actnbr-icon-bell" width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M17 11.5c0 1.353.17 2.368.976 3 .266.209.602.376 1.024.5v1H5v-1c.422-.124.757-.291 1.024-.5.806-.632.976-1.647.976-3V9c0-2.8 2.2-5 5-5s5 2.2 5 5v2.5ZM15.5 9v2.5c0 .93.066 1.98.515 2.897l.053.103H7.932a4.018 4.018 0 0 0 .053-.103c.449-.917.515-1.967.515-2.897V9c0-1.972 1.528-3.5 3.5-3.5s3.5 1.528 3.5 3.5Zm-5.492 9.008c0-.176.023-.346.065-.508h3.854A1.996 1.996 0 0 1 12 20c-1.1 0-1.992-.892-1.992-1.992Z"/></svg> <span>Subscribe</span> 880 </a> 881 <a class="actnbr-action actnbr-actn-following no-display" href="" role="button"> 882 <svg class="actnbr-icon actnbr-icon-check" width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" style="fill: none" stroke="currentColor" stroke-width="1.5"><path d="M7 12L10 15L17 8" vector-effect="non-scaling-stroke"/></svg> <span>Subscribed</span> 883 </a> 884 <div class="actnbr-popover actnbr-panel actnbr-notice" id="follow-bubble" role="dialog" aria-label="Subscribe to Joanna W. Ng"> 885 <div class="actnbr-follow-bubble"> 886 <div class="actnbr-panel__group"><a class="actnbr-menu__item actnbr-sitename" href="https://joannawng.com"><img loading='lazy' alt='' src='https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=50&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png' srcset='https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=50&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 1x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=75&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 1.5x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=100&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 2x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=150&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 3x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=200&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 4x' class='avatar avatar-50' height='50' width='50' /><span class="actnbr-menu__label">Joanna W. Ng</span></a></div> <div class="actnbr-panel__group"> 887 <div class="actnbr-message no-display" aria-live="polite"></div> 888 <form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" class="no-display"> 889 <input type="email" name="email" placeholder="Want updates? Enter your email" class="actnbr-email-field" aria-label="Email address" /> 890 <input type="hidden" name="action" value="subscribe" /> 891 <input type="hidden" name="blog_id" value="76957057" /> 892 <input type="hidden" name="source" value="https://joannawng.com/bio/" /> 893 <input type="hidden" name="sub-type" value="actionbar-follow" /> 894 <input type="hidden" id="_wpnonce" name="_wpnonce" value="d0da96c64b" /> <button type="submit" class="actnbr-button">Sign me up</button> 895 </form> 896 <p class="actnbr-login-nudge"> 897 Have a WordPress.com account? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fjoannawng.com%252Fbio%252F">Log in now.</a> </p> 898 </div> 899 </div> 900 </div> 901 </li> 902 <li class="actnbr-ellipsis actnbr-hidden"> 903 <button type="button" class="actnbr-more-toggle" aria-haspopup="true" aria-expanded="false" aria-label="More options"> 904 <svg class="actnbr-icon actnbr-icon-more-horizontal" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path d="M11 13h2v-2h-2v2zm-6 0h2v-2H5v2zm12-2v2h2v-2h-2z"/></svg> </button> 905 <div class="actnbr-popover actnbr-menu" role="menu" aria-label="Site options"> 906 <div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-sitename" href="https://joannawng.com"><img loading='lazy' alt='' src='https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=50&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png' srcset='https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=50&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 1x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=75&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 1.5x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=100&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 2x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=150&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 3x, https://secure.gravatar.com/blavatar/4ac68796bd7ea1b95bbd7e4ccf78ea2ca21766e15d7c83b7aa50a55747809056?s=200&d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Flogo%2Fwpcom-gray-white.png 4x' class='avatar avatar-50' height='50' width='50' /><span class="actnbr-menu__label">Joanna W. Ng</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-shortlink" href="https://wp.me/P5cU2R-F"><span class="actnbr-menu__label actnbr-shortlink__text">Copy shortlink</span><span class="actnbr-menu__icon actnbr-shortlink__icon"><svg class="actnbr-icon actnbr-icon-copy" width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M5 4.5h11a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5ZM3 5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Zm17 3v10.75c0 .69-.56 1.25-1.25 1.25H6v1.5h12.75a2.75 2.75 0 0 0 2.75-2.75V8H20Z"/></svg></span><span class="actnbr-menu__icon actnbr-shortlink__icon-copied"><svg class="actnbr-icon actnbr-icon-check" width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" style="fill: none" stroke="currentColor" stroke-width="1.5"><path d="M7 12L10 15L17 8" vector-effect="non-scaling-stroke"/></svg></span></a><a role="menuitem" class="actnbr-menu__item actnbr-reader" href="https://wordpress.com/reader/blogs/76957057/posts/41"><span class="actnbr-menu__label">View post in Reader</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-subs" href="https://subscribe.wordpress.com/"><span class="actnbr-menu__label">Manage subscriptions</span></a><a role="menuitem" class="actnbr-menu__item actnbr-signup" href="https://wordpress.com/start/"><span class="actnbr-menu__label">Sign up</span></a><a role="menuitem" class="actnbr-menu__item actnbr-login" href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fjoannawng.com%252Fbio%252F"><span class="actnbr-menu__label">Log in</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item flb-report" href="https://wordpress.com/abuse/?report_url=https://joannawng.com/bio/" target="_blank" rel="noopener noreferrer"><span class="actnbr-menu__label">Report this content</span><span class="actnbr-menu__icon"><svg class="actnbr-icon actnbr-icon-external" width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path d="M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"/></svg></span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-fold" href=""><span class="actnbr-menu__label">Collapse this bar</span></a></div> </div> 907 </li> 908 </ul> 909 </div> 910
910<script> 911window.addEventListener( "DOMContentLoaded", function () { 912 var link = document.createElement( "link" ); 913 link.href = "\/wp-content\/mu-plugins\/jetpack-plugin\/sun\/jetpack_vendor\/automattic\/jetpack-newsletter\/src\/..\/build\/action-bar.css?ver=33ad88c8b02f7d5bc6d2"; 914 link.rel = "stylesheet"; 915 document.head.appendChild( link ); 916 917 var script = document.createElement( "script" ); 918 script.src = "\/wp-content\/mu-plugins\/jetpack-plugin\/sun\/jetpack_vendor\/automattic\/jetpack-newsletter\/src\/..\/build\/action-bar.js?ver=33ad88c8b02f7d5bc6d2"; 919 document.body.appendChild( script ); 920 } ); 921</script>
921 922<link rel="prefetch" href="/wp-content/mu-plugins/jetpack-plugin/sun/_inc/blocks/swiper.js" as="script" /> 923 <div id="jp-carousel-loading-overlay" style="display: none;"> 924 <div id="jp-carousel-loading-wrapper"> 925 <span id="jp-carousel-library-loading"><svg class="jetpack-spinner" width="40" height="40" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span> 926 </div> 927 </div> 928 <div class="jp-carousel-overlay" style="display: none;"> 929 930 <div class="jp-carousel-container"> 931 <!-- The Carousel Swiper --> 932 <div 933 class="jp-carousel-wrap swiper jp-carousel-swiper-container jp-carousel-transitions" 934 itemscope 935 itemtype="https://schema.org/ImageGallery"> 936 <div class="jp-carousel swiper-wrapper"></div> 937 <div class="jp-swiper-button-prev swiper-button-prev"> 938 <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 939 <mask id="maskPrev" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="9" height="12"> 940 <path d="M16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z" fill="white"/> 941 </mask> 942 <g mask="url(#maskPrev)"> 943 <rect x="0.579102" width="23.8823" height="24" fill="#FFFFFF"/> 944 </g> 945 </svg> 946 </div> 947 <div class="jp-swiper-button-next swiper-button-next"> 948 <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 949 <mask id="maskNext" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="8" height="12"> 950 <path d="M8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z" fill="white"/> 951 </mask> 952 <g mask="url(#maskNext)"> 953 <rect x="0.34375" width="23.8822" height="24" fill="#FFFFFF"/> 954 </g> 955 </svg> 956 </div> 957 </div> 958 <!-- The main close buton --> 959 <div class="jp-carousel-close-hint"> 960 <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 961 <mask id="maskClose" mask-type="alpha" maskUnits="userSpaceOnUse" x="5" y="5" width="15" height="14"> 962 <path d="M19.3166 6.41L17.9135 5L12.3509 10.59L6.78834 5L5.38525 6.41L10.9478 12L5.38525 17.59L6.78834 19L12.3509 13.41L17.9135 19L19.3166 17.59L13.754 12L19.3166 6.41Z" fill="white"/> 963 </mask> 964 <g mask="url(#maskClose)"> 965 <rect x="0.409668" width="23.8823" height="24" fill="#FFFFFF"/> 966 </g> 967 </svg> 968 </div> 969 <!-- Image info, comments and meta --> 970 <div class="jp-carousel-info"> 971 <div class="jp-carousel-info-footer"> 972 <div class="jp-carousel-pagination-container"> 973 <div class="jp-swiper-pagination swiper-pagination"></div> 974 <div class="jp-carousel-pagination"></div> 975 </div> 976 <div class="jp-carousel-photo-title-container"> 977 <div class="jp-carousel-photo-caption"></div> 978 </div> 979 <div class="jp-carousel-photo-icons-container"> 980 <a href="#" class="jp-carousel-icon-btn jp-carousel-icon-info" aria-label="Toggle photo metadata visibility"> 981 <span class="jp-carousel-icon"> 982 <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 983 <mask id="maskInfo" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20"> 984 <path fill-rule="evenodd" clip-rule="evenodd" d="M12.7537 2C7.26076 2 2.80273 6.48 2.80273 12C2.80273 17.52 7.26076 22 12.7537 22C18.2466 22 22.7046 17.52 22.7046 12C22.7046 6.48 18.2466 2 12.7537 2ZM11.7586 7V9H13.7488V7H11.7586ZM11.7586 11V17H13.7488V11H11.7586ZM4.79292 12C4.79292 16.41 8.36531 20 12.7537 20C17.142 20 20.7144 16.41 20.7144 12C20.7144 7.59 17.142 4 12.7537 4C8.36531 4 4.79292 7.59 4.79292 12Z" fill="white"/> 985 </mask> 986 <g mask="url(#maskInfo)"> 987 <rect x="0.8125" width="23.8823" height="24" fill="#FFFFFF"/> 988 </g> 989 </svg> 990 </span> 991 </a> 992 <a href="#" class="jp-carousel-icon-btn jp-carousel-icon-comments" aria-label="Toggle photo comments visibility"> 993 <span class="jp-carousel-icon"> 994 <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 995 <mask id="maskComments" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20"> 996 <path fill-rule="evenodd" clip-rule="evenodd" d="M4.3271 2H20.2486C21.3432 2 22.2388 2.9 22.2388 4V16C22.2388 17.1 21.3432 18 20.2486 18H6.31729L2.33691 22V4C2.33691 2.9 3.2325 2 4.3271 2ZM6.31729 16H20.2486V4H4.3271V18L6.31729 16Z" fill="white"/> 997 </mask> 998 <g mask="url(#maskComments)"> 999 <rect x="0.34668" width="23.8823" height="24" fill="#FFFFFF"/> 1000 </g> 1001 </svg> 1002 1003 <span class="jp-carousel-has-comments-indicator" aria-label="This image has comments."></span> 1004 </span> 1005 </a> 1006 </div>
1007 </div> 1008 <div class="jp-carousel-info-extra"> 1009 <div class="jp-carousel-info-content-wrapper"> 1010 <div class="jp-carousel-photo-title-container"> 1011 <div class="jp-carousel-photo-title"></div> 1012 </div> 1013 <div class="jp-carousel-comments-wrapper"> 1014 <div id="jp-carousel-comments-loading"> 1015 <span>Loading Comments...</span> 1016 </div> 1017 <div class="jp-carousel-comments"></div> 1018 <div id="jp-carousel-comment-form-container"> 1019 <span id="jp-carousel-comment-form-spinner"><svg class="jetpack-spinner" width="20" height="20" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span> 1020 <div id="jp-carousel-comment-post-results"></div> 1021 <form id="jp-carousel-comment-form"> 1022 <label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Write a Comment...</label> 1023 <textarea 1024 name="comment" 1025 class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea" 1026 id="jp-carousel-comment-form-comment-field" 1027 placeholder="Write a Comment..." 1028 ></textarea> 1029 <div id="jp-carousel-comment-form-submit-and-info-wrapper"> 1030 <div id="jp-carousel-comment-form-commenting-as"> 1031 <fieldset> 1032 <label for="jp-carousel-comment-form-email-field">Email (Required)</label> 1033 <input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" /> 1034 </fieldset> 1035 <fieldset> 1036 <label for="jp-carousel-comment-form-author-field">Name (Required)</label> 1037 <input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" /> 1038 </fieldset> 1039 <fieldset> 1040 <label for="jp-carousel-comment-form-url-field">Website</label> 1041 <input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" /> 1042 </fieldset> 1043 </div> 1044 <input 1045 type="submit" 1046 name="submit" 1047 class="jp-carousel-comment-form-button" 1048 id="jp-carousel-comment-form-button-submit" 1049 value="Post Comment" /> 1050 </div> 1051 </form> 1052 </div> 1053 </div> 1054 <div class="jp-carousel-image-meta"> 1055 <div class="jp-carousel-title-and-caption"> 1056 <div class="jp-carousel-photo-info"> 1057 <div class="jp-carousel-caption" itemprop="caption description"></div> 1058 </div> 1059 1060 <div class="jp-carousel-photo-description"></div> 1061 </div> 1062 <a class="jp-carousel-image-download" href="#" aria-label="Download image" target="_blank" style="display: none;"> 1063 <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1064 <mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="19" height="18"> 1065 <path fill-rule="evenodd" clip-rule="evenodd" d="M5.84615 5V19H19.7775V12H21.7677V19C21.7677 20.1 20.8721 21 19.7775 21H5.84615C4.74159 21 3.85596 20.1 3.85596 19V5C3.85596 3.9 4.74159 3 5.84615 3H12.8118V5H5.84615ZM14.802 5V3H21.7677V10H19.7775V6.41L9.99569 16.24L8.59261 14.83L18.3744 5H14.802Z" fill="white"/> 1066 </mask> 1067 <g mask="url(#mask0)"> 1068 <rect x="0.870605" width="23.8823" height="24" fill="#FFFFFF"/> 1069 </g> 1070 </svg> 1071 <span class="jp-carousel-download-text"></span> 1072 </a> 1073 <div class="jp-carousel-image-map" style="display: none;"></div> 1074 </div> 1075 </div>
1076 </div> 1077 </div> 1078 </div> 1079 1080 </div> 1081 1082
1082<script type="text/javascript"> 1083 window.WPCOM_sharing_counts = {"https://joannawng.com/bio/":41}; 1084 </script>
1084 1085 1086
1086<script type="text/javascript"> 1087 (function () { 1088 var wpcom_reblog = { 1089 source: 'toolbar', 1090 1091 toggle_reblog_box_flair: function (obj_id, post_id) { 1092 1093 // Go to site selector. This will redirect to their blog if they only have one. 1094 const postEndpoint = `https://wordpress.com/post`; 1095 1096 // Ideally we would use the permalink here, but fortunately this will be replaced with the 1097 // post permalink in the editor. 1098 const originalURL = `${ document.location.href }?page_id=${ post_id }`; 1099 1100 const url = 1101 postEndpoint + 1102 '?url=' + 1103 encodeURIComponent( originalURL ) + 1104 '&is_post_share=true' + 1105 '&v=5'; 1106 1107 const redirect = function () { 1108 if ( 1109 ! window.open( url, '_blank' ) 1110 ) { 1111 location.href = url; 1112 } 1113 }; 1114 1115 if ( /Firefox/.test( navigator.userAgent ) ) { 1116 setTimeout( redirect, 0 ); 1117 } else { 1118 redirect(); 1119 } 1120 }, 1121 }; 1122 1123 window.wpcom_reblog = wpcom_reblog; 1124 })(); 1125 </script>
vendor: 1 bytes, line 1125
1125
1126<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJx9jEsOwjAMBS9EcIuqdoU4i2msNKnzoXbI9ckO1AXbeTMPWjFrTkpJ4cnZmcLV+STQ8mHRilkZRUggdITK5n27BrnATxbrN/LWkQpQ7WvePRnGBkqxMCqd+J8f9nu3X5UqbZgs09HlR7yPyzxM0zyMS/gAPatD8g=='></script>
vendor: 1 bytes, line 1126
1126
1127<script id="wp-hooks-js" src="/wp-content/plugins/gutenberg-core/v24.0.0/build/scripts/hooks/index.min.js?m=1789650619i&ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 1127
1127
1128<script id="wp-i18n-js" src="/wp-content/plugins/gutenberg-core/v24.0.0/build/scripts/i18n/index.min.js?m=1789650619i&ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 1128
1128
1129<script id="wp-i18n-js-after"> 1130wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 1131//# sourceURL=wp-i18n-js-after 1132</script>
vendor: 1 bytes, line 1132
1132
1133<script id="verbum-settings-js-before"> 1134window.VerbumComments = {"Log in or provide your name and email to leave a reply.":"Log in or provide your name and email to leave a reply.","Log in or provide your name and email to leave a comment.":"Log in or provide your name and email to leave a comment.","Receive web and mobile notifications for posts on this site.":"Receive web and mobile notifications for posts on this site.","Name":"Name","Email (address never made public)":"Email (address never made public)","Website (optional)":"Website (optional)","Leave a reply. (log in optional)":"Leave a reply. (log in optional)","Leave a comment. (log in optional)":"Leave a comment. (log in optional)","Log in to leave a reply.":"Log in to leave a reply.","Log in to leave a comment.":"Log in to leave a comment.","Logged in via %s":"Logged in via %s","Log out":"Log out","Your browser is blocking the cookies needed to log in and comment here. Allow cookies in your privacy settings, then reload the page.":"Your browser is blocking the cookies needed to log in and comment here. Allow cookies in your privacy settings, then reload the page.","Email":"Email","(Address never made public)":"(Address never made public)","Instantly":"Instantly","Daily":"Daily","Reply":"Reply","Comment":"Comment","WordPress":"WordPress","Weekly":"Weekly","Notify me of new posts":"Notify me of new posts","Email me new posts":"Email me new posts","Email me new comments":"Email me new comments","Cancel":"Cancel","Write a comment...":"Write a comment...","Write a reply...":"Write a reply...","Website":"Website","Optional":"Optional","We'll keep you in the loop!":"We'll keep you in the loop!","Loading your comment...":"Loading your comment...","Discover more from":"Discover more from Joanna W. Ng","Subscribe now to keep reading and get access to the full archive.":"Subscribe now to keep reading and get access to the full archive.","Continue reading":"Continue reading","Never miss a beat!":"Never miss a beat!","Interested in getting blog post updates? Simply click the button below to stay in the loop!":"Interested in getting blog post updates? Simply click the button below to stay in the loop!","Enter your email address":"Enter your email address","Subscribe":"Subscribe","Comment sent successfully":"Comment sent successfully","Save my name, email, and website in this browser for the next time I comment.":"Save my name, email, and website in this browser for the next time I comment.","hovercardi18n":{"Edit your profile \u2192":"Edit your profile \u2192","View profile \u2192":"View profile \u2192","Contact":"Contact","Send money":"Send money","Gravatar not found.":"Gravatar not found.","This profile is private.":"This profile is private.","Too Many Requests.":"Too Many Requests.","Internal Server Error.":"Internal Server Error.","Sorry, we are unable to load this Gravatar profile.":"Sorry, we are unable to load this Gravatar profile."},"siteId":76957057,"postId":41,"mustLogIn":false,"requireNameEmail":true,"commentRegistration":false,"connectURL":"https://joannawng.wordpress.com/public.api/connect/?action=request\u0026domain=joannawng.com","logoutURL":"https://joannawng.wordpress.com/wp-login.php?action=logout\u0026_wpnonce=962768d208","homeURL":"https://joannawng.com/","subscribeToBlog":true,"subscribeToComment":true,"isJetpackCommentsLoggedIn":false,"jetpackUsername":"","jetpackUserId":0,"jetpackSignature":"","jetpackAvatar":"https://0.gravatar.com/avatar/?s=96\u0026amp;d=identicon\u0026amp;r=G","enableBlocks":true,"enableSubscriptionModal":true,"currentLocale":"en","isJetpackComments":false,"allowedBlocks":["core/paragraph","core/list","core/code","core/list-item","core/quote","core/image","core/embed","core/quote","core/code"],"embedNonce":"92b6f50323","verbumBundleUrl":"/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/features/verbum-comments/dist/index.js","isRTL":false,"vbeCacheBuster":1789740582,"iframeUniqueId":0,"colorScheme":false} 1135//# sourceURL=verbum-settings-js-before 1136</script>
vendor: 1 bytes, line 1136
1136
1137<script data-wp-strategy="defer" defer id="verbum-dynamic-loader-js" src="/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/assets/dynamic-loader.js?m=1772522099i&minify=false&ver=8b5296f9195db92c42e4"></script>
vendor: 1 bytes, line 1137
1137
1138<script id="comment-like-js-extra"> 1139var comment_like_text = {"loading":"Loading...","swipeUrl":"https://s2.wp.com/wp-content/mu-plugins/comment-likes/js/lib/swipe.js?m=1382645497i&ver=20131008"}; 1140//# sourceURL=comment-like-js-extra 1141</script>
vendor: 1 bytes, line 1141
1141
1142<script id="jetpack-carousel-js-extra"> 1143var jetpackSwiperLibraryPath = {"url":"/wp-content/mu-plugins/jetpack-plugin/sun/_inc/blocks/swiper.js"}; 1144var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"en","ajaxurl":"https://joannawng.com/wp-admin/admin-ajax.php","nonce":"a562d3056f","display_exif":"1","display_comments":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"Comment","post_comment":"Post Comment","write_comment":"Write a Comment...","loading_comments":"Loading Comments...","image_label":"Open image in full-screen.","download_original":"View full size \u003Cspan class=\"photo-size\"\u003E{0}\u003Cspan class=\"photo-size-times\"\u003E\u00d7\u003C/span\u003E{1}\u003C/span\u003E","no_comment_text":"Please be sure to submit some text with your comment.","no_comment_email":"Please provide an email address to comment.","no_comment_author":"Please provide your name to comment.","comment_post_error":"Sorry, but there was an error posting your comment. Please try again later.","comment_approved":"Your comment was approved.","comment_unapproved":"Your comment is in moderation.","camera":"Camera","aperture":"Aperture","shutter_speed":"Shutter Speed","focal_length":"Focal Length","copyright":"Copyright","comment_registration":"0","require_name_email":"1","login_url":"https://joannawng.wordpress.com/wp-login.php?redirect_to=https%3A%2F%2Fjoannawng.com%2Fbio%2F","blog_id":"76957057","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=76957057&v=wpcom&tz=0&user_id=0&subd=joannawng","is_public":"1"}; 1145//# sourceURL=jetpack-carousel-js-extra 1146</script>
vendor: 1 bytes, line 1146
1146
1147<script id="sharing-js-js-extra"> 1148var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"}; 1149//# sourceURL=sharing-js-js-extra 1150</script>
vendor: 1 bytes, line 1150
1150
1151<script id="jetpack-script-data-js-before"> 1152window.JetpackScriptData = {"site":{"host":"wpcom","is_wpcom_platform":true}}; 1153//# sourceURL=jetpack-script-data-js-before 1154</script>
vendor: 1 bytes, line 1154
1154
1155<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJydkN1uwjAMhV9oaVpNGnAx7VGQSQxzmz/FzirengiaakMTTLtLPp/jo2M9J2ViEAyifVHJlRMF1iZ6X5FyNCHr8Q50I7/oaqRgXLE/BRmTO3eeQhP9sn1ESWAmVdGcqnEZaC6hzfZfGGzMGopEDyJkVhcwo7A+FHJ2hWwyJVEWBP4Q/C1vX0ssuwzkWBjdKmvgSR2YiD2Keu3627oGjvkqtg+8LeJ2iLvvv5vwJ2S0YO35+qRwWip8+Pdhs+u3Qz+87cYLUfq/CQ=='></script>
vendor: 1 bytes, line 1155
1155
1156<script id="sharing-js-js-after"> 1157window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {}; 1158window.WPCOM_sharing_popups[ "twitter" ] = "menubar=1,resizable=1,width=600,height=350"; 1159window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {}; 1160window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400"; 1161//# sourceURL=sharing-js-js-after 1162</script>
vendor: 1 bytes, line 1162
1162
1163<script id="wp-emoji-settings" type="application/json"> 1164{"baseUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/","ext":".png","svgUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/","svgExt":".svg","source":{"concatemoji":"/wp-includes/js/wp-emoji-release.min.js?m=1783090810i&ver=7.2-alpha-63387"}} 1165</script>
vendor: 1 bytes, line 1165
1165
1166<script type="module"> 1167/*! This file is auto-generated */ 1168var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 1169//# sourceURL=/wp-includes/js/wp-emoji-loader.min.js 1170</script>
1170 1171 <iframe src='https://widgets.wp.com/likes/master.html?ver=20261001#ver=20261001' scrolling='no' id='likes-master' name='likes-master' style='display:none;'></iframe> 1172 <div id='likes-other-gravatars' role="dialog" aria-hidden="true" tabindex="-1"><div class="likes-text"><span>%d</span></div><ul class="wpl-avatars sd-like-gravatars"></ul></div> 1173
1173<script src="//stats.wp.com/w.js?69" defer></script>
1173
1173<script type="text/javascript"> 1174_tkq = window._tkq || []; 1175_stq = window._stq || []; 1176_tkq.push(['storeContext', {'blog_id':'76957057','blog_tz':'0','user_lang':'en','blog_lang':'en','user_id':'0'}]); 1177 // Prevent sending pageview tracking from WP-Admin pages. 1178 _stq.push(['view', {'blog':'76957057','v':'wpcom','tz':'0','user_id':'0','post':'41','subd':'joannawng'}]); 1179 _stq.push(['extra', {'crypt':'UE5XaGUuOTlwaD85flAmcm1mcmZsaDhkV11YdWtpP0NsWnVkPS9sL0ViLndld3BuVT01Uj14Ti1yYTBnX3xuYUQ3Qz1oblZbVHV3MTZoVXFwTTVDK2wuPT1KWzJNV19iQk9bTmF0PUUlUlYzbW1nYyxHTnlKQiUsT0hKb2tYK09aZkN6LzJmYVtxMGpoLT9rJnJRJXg4Y1EtVyt0byV1ZEltYS18OHxySHpSaWQ3N1pQTmdSTmdQa0clbjNJfltYZG84a0JaMj0zVU93JSUrNzgxNHlfczV5TEFSNz8zJXBUMWZ2WlRTVlVVLGQ4VH4rbHFhY2U0QVVRcjlRaWUxcU4wamNLJUcvVHV6LWp0M2hsfFdXY2ZBVV9XaWE9M2NTTHJhdWQtcm9acHddNGFmNXQydVUxLjZtS0d1fj1ORF04Sk5wUU1dP1dEVGh2MllUbD1lZFFQZl85'}]); 1180_stq.push([ 'clickTrackerInit', '76957057', '41' ]); 1181</script>
1181 1182<noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript> 1183<meta id="bilmur" property="bilmur:data" content="" data-provider="wordpress.com" data-service="simple" data-site-tz="Etc/GMT-0" data-custom-props="{"logged_in":"0","wptheme":"pub\/forever","wptheme_is_block":"0"}" > 1184
1184<script defer src="/wp-content/js/bilmur.min.js?i=19&m=202640"></script>
1184
1185<script> 1186(function() { 1187 'use strict'; 1188 1189 const fetches = {}; 1190 const promises = {}; 1191 const urls = { 1192 'wp-polyfill': '/wp-includes/js/dist/vendor/wp-polyfill.min.js?m=1786440387i&ver=3.15.0', 1193 'verbum': '/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.js?m=1790810169i&minify=false&ver=03e9edda7ccdfe9a67c4' 1194 }; 1195 const loaders = { 1196 'verbum': () => { 1197 fetchExternalScript('wp-polyfill'); 1198 fetchExternalScript('verbum'); 1199 promises['wp-polyfill'] = promises['wp-polyfill'] || loadWPScript('wp-polyfill'); 1200 promises['verbum'] = promises['verbum'] || promises['wp-polyfill'].then( () => loadWPScript('verbum') ); 1201 return promises['verbum']; 1202 }, 1203 1204 }; 1205 const scriptExtras = { 1206 1207 }; 1208 1209 window.WP_Enqueue_Dynamic_Script = { 1210 loadScript: (handle) => { 1211 if (!loaders[handle]) { 1212 console.error('WP_Enqueue_Dynamic_Script: unregistered script `' + handle + '`.'); 1213 } 1214 return loaders[handle](); 1215 } 1216 }; 1217 1218 function fetchExternalScript(handle) { 1219 if (!urls[handle]) { 1220 return Promise.resolve(); 1221 } 1222 1223 fetches[handle] = fetches[handle] || fetch(urls[handle], { mode: 'no-cors' }); 1224 return fetches[handle]; 1225 } 1226 1227 function runExtraScript(handle, type, index) { 1228 const id = 'wp-enqueue-dynamic-script:' + handle + ':' + type + ':' + (index + 1); 1229 const template = document.getElementById(id); 1230 if (!template) { 1231 return Promise.reject(); 1232 } 1233 1234 const script = document.createElement( 'script' ); 1235 script.innerHTML = template.innerHTML; 1236 document.body.appendChild( script ); 1237 return Promise.resolve(); 1238 } 1239 1240 function loadExternalScript(handle) { 1241 if (!urls[handle]) { 1242 return Promise.resolve(); 1243 } 1244 1245 return fetches[handle].then(() => { 1246 return new Promise((resolve, reject) => { 1247 const script = document.createElement('script'); 1248 script.onload = () => resolve(); 1249 script.onerror = (e) => reject(e); 1250 script.src = urls[handle]; 1251 document.body.appendChild(script); 1252 }); 1253 }); 1254 } 1255 1256 function loadExtra(handle, pos) { 1257 const count = (scriptExtras[handle] && scriptExtras[handle][pos]) || 0; 1258 let promise = Promise.resolve(); 1259 1260 for (let i = 0; i < count; i++) { 1261 promise = promise.then(() => runExtraScript(handle, pos, i)); 1262 } 1263 1264 return promise; 1265 } 1266 1267 function loadWPScript(handle) { 1268 // Core loads scripts in this order. See: https://github.com/WordPress/WordPress/blob/a59eb9d39c4fcba834b70c9e8dfd64feeec10ba6/wp-includes/class-wp-scripts.php#L428. 1269 return loadExtra(handle, 'translations') 1270 .then(() => loadExtra(handle, 'before')) 1271 .then(() => loadExternalScript(handle)) 1272 .then(() => loadExtra(handle, 'after')); 1273 } 1274} )(); 1275</script>
1275 1276 1277</body> 1278</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.