
Photo illustration by Liz Zonarich/Harvard Staff
Campus & Community
4 things we learned this week
How closely have you been following the Gazette? Take our quiz to find out.
AI is already changing the job market; doctors are people too; the digital divide is about more than internet access; support for the rule of law goes beyond merely not breaking it.
var gform;gform||(document.addEventListener(“gform_main_scripts_loaded”,function()gform.scriptsLoaded=!0),document.addEventListener(“gform/theme/scripts_loaded”,function()gform.themeScriptsLoaded=!0),window.addEventListener(“DOMContentLoaded”,function()gform.domLoaded=!0),gform=domLoaded:!1,scriptsLoaded:!1,themeScriptsLoaded:!1,isFormEditor:()=>”function”==typeof InitializeEditor,callIfLoaded:function(o)(gform.isFormEditor()&&console.warn(“The use of gform.initializeOnLoaded() is deprecated in the form editor context and will be removed in Gravity Forms 3.1.”),o(),0)),initializeOnLoaded:function(o),hooks:action:,filter:,addAction:function(o,r,e,t)gform.addHook(“action”,o,r,e,t),addFilter:function(o,r,e,t)gform.addHook(“filter”,o,r,e,t),doAction:function(o)gform.doHook(“action”,o,arguments),applyFilters:function(o)return gform.doHook(“filter”,o,arguments),removeAction:function(o,r)gform.removeHook(“action”,o,r),removeFilter:function(o,r,e)gform.removeHook(“filter”,o,r,e),addHook:function(o,r,e,t,n)null==gform.hooks[o][r]&&(gform.hooks[o][r]=[]);var d=gform.hooks[o][r];null==n&&(n=r+”_”+d.length),gform.hooks[o][r].push(tag:n,callable:e,priority:t=null==t?10:t),doHook:function(r,o,e)var t;if(e=Array.prototype.slice.call(e,1),null!=gform.hooks[r][o]&&((o=gform.hooks[r][o]).sort(function(o,r)return o.priority-r.priority),o.forEach(function(o)”function”!=typeof(t=o.callable)&&(t=window[t]),”action”==r?t.apply(null,e):e[0]=t.apply(null,e))),”filter”==r)return e[0],removeHook:function(o,r,t,n)var e;null!=gform.hooks[o][r]&&(e=(e=gform.hooks[o][r]).filter(function(o,r,e)return!!(null!=n&&n!=o.tag),gform.hooks[o][r]=e));



gform.initializeOnLoaded( function() {gformInitSpinner( 19, ‘https://news.harvard.edu/wp-content/plugins/gravityforms/images/spinner.svg’, true );jQuery(‘#gform_ajax_frame_19’).on(‘load’,function(){var contents = jQuery(this).contents().find(‘*’).html();var is_postback = contents.indexOf(‘GF_AJAX_POSTBACK’) >= 0;if(!is_postback)return;var form_content = jQuery(this).contents().find(‘#gform_wrapper_19’);var is_confirmation = jQuery(this).contents().find(‘#gform_confirmation_wrapper_19’).length > 0;var is_redirect = contents.indexOf(‘gformRedirect(){‘) >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery(‘html’).css(‘margin-top’), 10) + parseInt(jQuery(‘body’).css(‘margin-top’), 10) + 100;if(is_form)jQuery(‘#gform_wrapper_19’).html(form_content.html());if(form_content.hasClass(‘gform_validation_error’))jQuery(‘#gform_wrapper_19’).addClass(‘gform_validation_error’); else jQuery(‘#gform_wrapper_19’).removeClass(‘gform_validation_error’);setTimeout( function() /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery(‘#gform_wrapper_19’).offset().top – mt); , 50 );if(window[‘gformInitDatepicker’]) gformInitDatepicker();if(window[‘gformInitPriceFields’]) gformInitPriceFields();var current_page = jQuery(‘#gform_source_page_number_19’).val();gformInitSpinner( 19, ‘https://news.harvard.edu/wp-content/plugins/gravityforms/images/spinner.svg’, true );jQuery(document).trigger(‘gform_page_loaded’, [19, current_page]);window[‘gf_submitting_19’] = false;else if(!is_redirect)var confirmation_content = jQuery(this).contents().find(‘.GF_AJAX_POSTBACK’).html();if(!confirmation_content)confirmation_content = contents;jQuery(‘#gform_wrapper_19’).replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery(‘#gf_19’).offset().top – mt);jQuery(document).trigger(‘gform_confirmation_loaded’, [19]);window[‘gf_submitting_19’] = false;wp.a11y.speak(jQuery(‘#gform_confirmation_message_19’).text());elsejQuery(‘#gform_19’).append(contents);if(window[‘gformRedirect’]) gformRedirect();jQuery(document).trigger(“gform_pre_post_render”, [ formId: “19”, currentPage: “current_page”, abort: function() this.preventDefault(); ]); if (event && event.defaultPrevented) return; const gformWrapperDiv = document.getElementById( “gform_wrapper_19” ); if ( gformWrapperDiv ) const visibilitySpan = document.createElement( “span” ); visibilitySpan.id = “gform_visibility_test_19”; gformWrapperDiv.insertAdjacentElement( “afterend”, visibilitySpan ); const visibilityTestDiv = document.getElementById( “gform_visibility_test_19” ); let postRenderFired = false; function triggerPostRender() if ( postRenderFired ) return; postRenderFired = true; jQuery( document ).trigger( ‘gform_post_render’, [19, current_page] ); gform.utils.trigger( event: ‘gform/postRender’, native: false, data: formId: 19, currentPage: current_page ); gform.utils.trigger( event: ‘gform/post_render’, native: false, data: formId: 19, currentPage: current_page ); if ( visibilityTestDiv ) visibilityTestDiv.parentNode.removeChild( visibilityTestDiv ); function debounce( func, wait, immediate ) var timeout; return function() var context = this, args = arguments; var later = function() timeout = null; if ( !immediate ) func.apply( context, args ); ; var callNow = immediate && !timeout; clearTimeout( timeout ); timeout = setTimeout( later, wait ); if ( callNow ) func.apply( context, args ); ; const debouncedTriggerPostRender = debounce( function() triggerPostRender(); , 200 ); if ( visibilityTestDiv && visibilityTestDiv.offsetParent === null ) const observer = new MutationObserver( ( mutations ) => mutations.forEach( ( mutation ) => if ( mutation.type === ‘attributes’ && visibilityTestDiv.offsetParent !== null ) debouncedTriggerPostRender(); observer.disconnect(); ); ); observer.observe( document.body, attributes: true, childList: false, subtree: true, attributeFilter: [ ‘style’, ‘class’ ], ); else triggerPostRender(); } );} );