From 36c097796e3a22caa6e1f28c7254ab909258d20b Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Thu, 1 Aug 2024 08:38:17 -0400 Subject: [PATCH 01/10] Professional Education ETL pipeline based on old API --- learning_resources/etl/constants.py | 5 +- learning_resources/etl/mitpe.py | 479 +++++ learning_resources/etl/mitpe_test.py | 261 +++ learning_resources/etl/pipelines.py | 22 + learning_resources/etl/pipelines_test.py | 26 + learning_resources/etl/prolearn.py | 1 + .../commands/backpopulate_mitpe_data.py | 50 + learning_resources/tasks.py | 7 + learning_resources/tasks_test.py | 15 +- main/settings_celery.py | 4 + .../professional_ed_course_image_1.json | 133 ++ .../professional_ed_course_image_2.json | 59 + .../professional_ed_course_instructors.json | 316 +++ .../professional_ed_course_topics.json | 103 + .../professional_ed_program_image_1.json | 133 ++ .../professional_ed_program_image_2.json | 59 + .../professional_ed_program_instructors.json | 1760 +++++++++++++++++ .../professional_ed_program_topics.json | 103 + .../professional_ed_resources.json | 738 +++++++ 19 files changed, 4271 insertions(+), 3 deletions(-) create mode 100644 learning_resources/etl/mitpe.py create mode 100644 learning_resources/etl/mitpe_test.py create mode 100644 learning_resources/management/commands/backpopulate_mitpe_data.py create mode 100644 test_json/professional_ed/professional_ed_course_image_1.json create mode 100644 test_json/professional_ed/professional_ed_course_image_2.json create mode 100644 test_json/professional_ed/professional_ed_course_instructors.json create mode 100644 test_json/professional_ed/professional_ed_course_topics.json create mode 100644 test_json/professional_ed/professional_ed_program_image_1.json create mode 100644 test_json/professional_ed/professional_ed_program_image_2.json create mode 100644 test_json/professional_ed/professional_ed_program_instructors.json create mode 100644 test_json/professional_ed/professional_ed_program_topics.json create mode 100644 test_json/professional_ed/professional_ed_resources.json diff --git a/learning_resources/etl/constants.py b/learning_resources/etl/constants.py index fd1e7fcc6a..46e55a66bd 100644 --- a/learning_resources/etl/constants.py +++ b/learning_resources/etl/constants.py @@ -51,13 +51,14 @@ class ETLSource(ExtendedEnum): micromasters = "micromasters" mit_edx = "mit_edx" + mitpe = "mitpe" mitxonline = "mitxonline" oll = "oll" - xpro = "xpro" ocw = "ocw" prolearn = "prolearn" podcast = "podcast" see = "see" + xpro = "xpro" youtube = "youtube" @@ -81,6 +82,8 @@ class CourseNumberType(Enum): "": LearningResourceDelivery.online.name, "Blended": LearningResourceDelivery.hybrid.name, "In Person": LearningResourceDelivery.in_person.name, + "Live Virtual": LearningResourceDelivery.online.name, + "On Campus": LearningResourceDelivery.in_person.name, **{ value: LearningResourceDelivery(value).name for value in LearningResourceDelivery.values() diff --git a/learning_resources/etl/mitpe.py b/learning_resources/etl/mitpe.py new file mode 100644 index 0000000000..5d412c2ad9 --- /dev/null +++ b/learning_resources/etl/mitpe.py @@ -0,0 +1,479 @@ +"""Professional Education ETL""" + +import copy +import html +import json +import logging +from datetime import UTC, datetime +from hashlib import md5 +from urllib.parse import urljoin +from zoneinfo import ZoneInfo + +import requests +from django.conf import settings +from django.utils.html import strip_tags + +from learning_resources.constants import ( + CertificationType, + LearningResourceFormat, + LearningResourceType, + OfferedBy, + PlatformType, +) +from learning_resources.etl.constants import ETLSource +from learning_resources.etl.utils import transform_format, transform_topics +from main.utils import clean_data, now_in_utc + +log = logging.getLogger(__name__) + +BASE_URL = "https://professional.mit.edu/" +OFFERED_BY = {"code": OfferedBy.mitpe.name} +UNIQUE_FIELD = "url" + +LOCATION_TAGS_DICT = { + 11: "On Campus", + 12: "Online", + 50: "Blended", + 53: "Live Virtual", + 105: "In Person", +} + +# 14: open, 15: closed, 17: waitlisted +STATUS_DICT = {14: True, 15: False, 17: True} + + +def _fetch_data(url, params=None) -> list[dict]: + """ + Fetch data from the Professional Education API + + Args: + url(str): The url to fetch data from + params(dict): The query parameters to include in the request + + Yields: + list[dict]: A list of course or program data + """ + if not params: + params = {} + while url: + response = requests.get( + url, params=params, timeout=settings.REQUESTS_TIMEOUT + ).json() + results = response["data"] + + yield from results + url = response.get("links", {}).get("next", {}).get("href") + + +def get_related_object(url: str) -> dict: + """ + Get the related object data for a resource + + Args: + url(str): The url to fetch data from + + Yields: + dict: JSON data representing a related object + + """ + response = requests.get(url, timeout=settings.REQUESTS_TIMEOUT).json() + return response["data"] + + +def extract() -> list[dict]: + """ + Load the Professional Education data from an external API + + Returns: + list[dict]: list of raw course or program data + """ + if settings.PROFESSIONAL_EDUCATION_API_URL: + return list(_fetch_data(settings.PROFESSIONAL_EDUCATION_API_URL)) + else: + log.warning("Missing required setting PROFESSIONAL_EDUCATION_API_URL") + + return [] + + +def parse_topics(resource_data: dict) -> list[dict]: + """ + Get a list containing {"name": } dict objects + + Args: + resource_data: course or program data + + Returns: + list of dict: list containing topic dicts with a name attribute + """ + topic_names = [] + subtopic_names = [] + topic_relationships = resource_data["relationships"]["field_course_topics"] + topics_url = topic_relationships["links"].get("related", {}).get("href") + if topic_relationships["data"] and topics_url: + topic_details = _fetch_data(topics_url) + topic_names = [ + ":".join( + [ + topic_name.strip() + for topic_name in topic["attributes"]["name"].split(":") + ] + ) + for topic in topic_details + ] + subtopic_relationships = resource_data["relationships"]["field_subtopic"] + subtopics_url = subtopic_relationships["links"].get("related", {}).get("href") + if subtopic_relationships["data"] and subtopics_url: + subtopic_details = _fetch_data(subtopics_url) + subtopic_names = [ + ":".join( + [ + subtopic_name.strip() + for subtopic_name in strip_tags( + html.unescape( + subtopic["attributes"]["description"]["processed"] + ) + ).split(":") + ] + ) + for subtopic in subtopic_details + ] + return transform_topics( + [{"name": topic_name} for topic_name in (topic_names + subtopic_names)] + ) + + +def parse_instructors(resource_data: dict) -> list[dict]: + """ + Get a list of instructors for a resource + """ + instructors = [] + for attribute in ["field_lead_instructors", "field_instructors"]: + instructors_data = resource_data["relationships"][attribute] + instructors_url = instructors_data["links"].get("related", {}).get("href") + if instructors_data["data"] and instructors_url: + instructor_data = _fetch_data(instructors_url) + instructors.extend( + [ + { + "full_name": instructor["attributes"]["title"], + "last_name": instructor["attributes"]["field_last_name"], + "first_name": instructor["attributes"]["field_first_name"], + } + for instructor in instructor_data + ] + ) + return instructors + + +def parse_image(document: dict) -> dict or None: + """ + Create a dict object representing the resource image + + Args: + document: course or program data + + Returns: + dict: json representation of the image if it exists + """ + img_url = ( + document["relationships"] + .get("field_header_image", {}) + .get("links", {}) + .get("related", {}) + .get("href") + ) + img_metadata = get_related_object(img_url) + if img_metadata: + field_image = img_metadata["relationships"]["field_media_image"] + img_data_url = field_image["links"]["related"]["href"] + img_src_metadata = get_related_object(img_data_url) + if img_src_metadata: + img_path = img_src_metadata["attributes"]["uri"]["url"] + img_src = urljoin(BASE_URL, img_path) + return { + "alt": field_image.get("data", {}).get("meta", {}).get("alt"), + "description": field_image.get("data", {}).get("meta", {}).get("title"), + "url": img_src, + } + return None + + +def parse_date(date_str: str) -> datetime or None: + """ + Get a datetime value from a string + + Args: + date_str: string representing a date + + Returns: + datetime: start or end date + """ + if date_str: + return ( + datetime.strptime(date_str, "%Y-%m-%d") + .replace(tzinfo=ZoneInfo("US/Eastern")) + .astimezone(UTC) + ) + return None + + +def parse_format(location_tag: dict) -> list[str]: + """ + Convert a string to a list of resource learning formats + + Args: + location_tag: dict representing the resource lcoation tag + + Returns: + list of str: list of resource formats + """ + location_tag_id = ( + location_tag.get("data", {}).get("meta", {}).get("drupal_internal__target_id") + ) + if location_tag_id: + return transform_format(LOCATION_TAGS_DICT.get(location_tag_id)) + else: + return [LearningResourceFormat.online.name] + + +def parse_resource_url(resource_data: dict) -> str: + """ + Return the url for the resource + + Args: + resource_data: course or program data + + Returns: + str: url for the resource + """ + return urljoin(BASE_URL, resource_data["attributes"]["path"]["alias"]) + + +def parse_description(resource_data: dict) -> str: + """ + Return the description for the resource. Use summary field if not blank. + + Args: + resource_data: course or program data + + Returns: + str: description for the resource + """ + summary = resource_data["attributes"]["field_featured_course_summary"] + if summary: + return clean_data(summary) + return clean_data(resource_data["attributes"]["body"]["processed"]) + + +def parse_resource_type(resource_data: dict) -> str: + """ + Return the type of the resource based on certificate data + + Args: + resource_data: course or program data + + Returns: + str: type of the resource (course or program) + """ + course_certificate_id = 104 + certificate_ids = [ + cert["meta"]["drupal_internal__target_id"] + for cert in resource_data["relationships"]["field_course_certificate"]["data"] + ] + if course_certificate_id in certificate_ids: + return LearningResourceType.course.name + return LearningResourceType.program.name + + +def _transform_runs(resource_data: dict) -> list[dict]: + """ + Transform course/program runs into our normalized data structure + + Args: + resource_data (dict): course/program data + + Returns: + list[dict]: normalized course/program run data + """ + runs = [] + resource_dates = resource_data["attributes"]["field_course_dates"] + for resource_date in resource_dates: + start_date = parse_date(resource_date.get("value")) + end_date = parse_date(resource_date.get("end_value")) + enrollment_end_date = parse_date( + resource_data["attributes"]["field_registration_deadline"] + ) + dates_hash = md5(json.dumps(resource_dates).encode("utf-8")).hexdigest() # noqa: S324 + price = resource_data["attributes"]["field_course_fee"] + now = now_in_utc() + # Unpublish runs w/past enrollment end date or resource end date + published = not ( + (enrollment_end_date and enrollment_end_date < now) + or (end_date and end_date < now) + ) + if published: + runs.append( + { + "run_id": f'{resource_data["id"]}_{dates_hash}', + "title": resource_data["attributes"]["title"], + "start_date": start_date, + "end_date": end_date, + "enrollment_end": enrollment_end_date, + "published": published, + "prices": [price] if price else [], + "url": parse_resource_url(resource_data), + "instructors": parse_instructors(resource_data), + } + ) + return runs + + +def parse_published(resource_data: dict, runs: list[dict]) -> bool: + """ + Return the published status of the resource + + Args: + resource_data: course or program data + runs: list of course or program runs + + Returns: + bool: published status of the resource + """ + return ( + STATUS_DICT[ + resource_data["relationships"]["field_course_status"]["data"]["meta"][ + "drupal_internal__target_id" + ] + ] + and not resource_data["attributes"]["field_do_not_show_in_catalog"] + and len([run for run in runs if run["published"] is True]) > 0 + ) + + +def transform_course(resource_data: dict) -> dict or None: + """ + Transform raw resource data into a format suitable for + learning resources of type course + + Args: + resource_data(dict): raw course data + + Returns: + dict: transformed course data if it has any viable runs + """ + runs = _transform_runs(resource_data) + if runs: + return { + "readable_id": resource_data["id"], + "offered_by": copy.deepcopy(OFFERED_BY), + "platform": PlatformType.mitpe.name, + "etl_source": ETLSource.mitpe.name, + "professional": True, + "certification": True, + "certification_type": CertificationType.professional.name, + "title": resource_data["attributes"]["title"], + "url": parse_resource_url(resource_data), + "image": parse_image(resource_data), + "description": parse_description(resource_data), + "full_description": clean_data( + resource_data["attributes"]["body"]["processed"] + ), + "course": { + "course_numbers": [], + }, + "learning_format": parse_format( + resource_data["relationships"]["field_location_tag"] + ), + "published": parse_published(resource_data, runs), + "topics": parse_topics(resource_data), + "runs": runs, + "unique_field": UNIQUE_FIELD, + } + return None + + +def transform_program(resource_data: dict) -> dict or None: + """ + Transform raw resource data into a format suitable for the Program model + + Args: + resource_data(dict): raw program data + + Returns: + dict: transformed program data + """ + runs = _transform_runs(resource_data) + if runs: + return { + "readable_id": resource_data["id"], + "offered_by": copy.deepcopy(OFFERED_BY), + "platform": PlatformType.mitpe.name, + "etl_source": ETLSource.mitpe.name, + "professional": True, + "certification": True, + "certification_type": CertificationType.professional.name, + "title": resource_data["attributes"]["title"], + "url": parse_resource_url(resource_data), + "image": parse_image(resource_data), + "description": parse_description(resource_data), + "full_description": clean_data( + resource_data["attributes"]["body"]["processed"] + ), + "learning_format": parse_format( + resource_data["relationships"]["field_location_tag"] + ), + "published": parse_published(resource_data, runs), + "topics": parse_topics(resource_data), + "course_ids": [ + course["id"] + for course in resource_data["relationships"]["field_program_courses"][ + "data" + ] + ], + "runs": runs, + "unique_field": UNIQUE_FIELD, + } + return None + + +def transform_program_courses(programs: list[dict], courses_data: list[dict]): + """ + Transform the courses for a program, using the transformed course data + + Args: + programs(list[dict]): list of program data + courses_data(list[dict]): list of course data + """ + course_dict = {course["readable_id"]: course for course in courses_data} + for program in programs: + course_ids = program.pop("course_ids", []) + program["courses"] = [ + copy.deepcopy(course_dict[course_id]) + for course_id in course_ids + if course_id in course_dict + ] + + +def transform(data: list[dict]) -> tuple[list[dict], list[dict]]: + """ + Transform the Professional Education data into courses and programs + + Args: + data(dict): raw course and program data + + Returns: + tuple[list[dict], list[dict]]: tuple containing lists of course and program data + """ + programs = [] + courses = [] + for resource in data: + if parse_resource_type(resource) == LearningResourceType.program.name: + program = transform_program(resource) + if program: + programs.append(program) + else: + course = transform_course(resource) + if course: + courses.append(course) + transform_program_courses(programs, courses) + return courses, programs diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py new file mode 100644 index 0000000000..58b7504356 --- /dev/null +++ b/learning_resources/etl/mitpe_test.py @@ -0,0 +1,261 @@ +"""Tests for Professional Education ETL functions""" + +import datetime +import json +from pathlib import Path +from random import randint + +import pytest + +from learning_resources.constants import LearningResourceFormat +from learning_resources.etl import mitpe +from main.test_utils import any_instance_of, assert_json_equal +from main.utils import now_in_utc + +EXPECTED_COURSE = { + "readable_id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58", + "offered_by": {"code": "mitpe"}, + "platform": "mitpe", + "etl_source": "mitpe", + "professional": True, + "certification": True, + "certification_type": "professional", + "title": "Product Innovation in the Age of AI", + "url": "https://professional.mit.edu/course-catalog/product-innovation-age-ai", + "image": { + "alt": "product innovation in the age of AI", + "description": "", + "url": "https://professional.mit.edu/sites/default/files/2024-04/MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", + }, + "description": "The featured course summary.", + "full_description": "The full course description.", + "course": {"course_numbers": []}, + "learning_format": ["in_person"], + "published": True, + "topics": [{"name": "Innovation"}], + "runs": [ + { + "run_id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58_69fccd43e465859229fe22dc61f54b9a", + "title": "Product Innovation in the Age of AI", + "start_date": any_instance_of(datetime.datetime), + "end_date": any_instance_of(datetime.datetime), + "enrollment_end": any_instance_of(datetime.datetime), + "published": True, + "prices": [3600], + "url": "https://professional.mit.edu/course-catalog/product-innovation-age-ai", + "instructors": [ + { + "full_name": "Eric von Hippel", + "last_name": "von Hippel", + "first_name": "Eric", + }, + { + "full_name": "Erdin Beshimov", + "last_name": " Beshimov", + "first_name": "Erdin", + }, + ], + } + ], + "unique_field": "url", +} +EXPECTED_PROGRAM = { + "readable_id": "9c0692c9-7216-4be1-b432-fbeefec1da1f", + "offered_by": {"code": "mitpe"}, + "platform": "mitpe", + "etl_source": "mitpe", + "professional": True, + "certification": True, + "certification_type": "professional", + "title": "Professional Certificate Program in Innovation & Technology", + "url": "https://professional.mit.edu/course-catalog/professional-certificate-program-innovation-technology", + "image": { + "alt": "Innovation & Technology - Header Image", + "description": "", + "url": "https://professional.mit.edu/sites/default/files/2021-01/MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg", + }, + "description": "The featured program summary.", + "full_description": "The full program description.", + "learning_format": ["hybrid"], + "published": True, + "topics": [{"name": "Innovation"}], + "runs": [ + { + "run_id": "9c0692c9-7216-4be1-b432-fbeefec1da1f_5e5dcf98bcd8e20096b79a761de23dc6", + "title": "Professional Certificate Program in Innovation & Technology", + "start_date": any_instance_of(datetime.datetime), + "end_date": any_instance_of(datetime.datetime), + "enrollment_end": any_instance_of(datetime.datetime), + "published": True, + "prices": [28000], + "url": "https://professional.mit.edu/course-catalog/professional-certificate-program-innovation-technology", + "instructors": [ + { + "full_name": "Blade Kotelly", + "last_name": "Kotelly", + "first_name": "Blade", + }, + { + "full_name": "Reza Rahaman", + "last_name": "Rahaman", + "first_name": "Reza", + }, + { + "full_name": "Michael Davies", + "last_name": "Davies", + "first_name": "Michael", + }, + { + "full_name": "Sang-Gook Kim", + "last_name": "Kim", + "first_name": "Sang-Gook", + }, + { + "full_name": "Eric von Hippel", + "last_name": "von Hippel", + "first_name": "Eric", + }, + { + "full_name": "Erdin Beshimov", + "last_name": " Beshimov", + "first_name": "Erdin", + }, + { + "full_name": "Adam Berinsky", + "last_name": "Berinsky", + "first_name": "Adam", + }, + {"full_name": "David Niño", "last_name": "Niño", "first_name": "David"}, + { + "full_name": "Markus J. Buehler", + "last_name": "Buehler", + "first_name": "Markus J.", + }, + { + "full_name": "Edward Schiappa", + "last_name": "Schiappa", + "first_name": "Edward", + }, + {"full_name": "John Hart", "last_name": "Hart", "first_name": "John"}, + ], + } + ], + "courses": [EXPECTED_COURSE], + "unique_field": "url", +} + + +@pytest.fixture() +def prof_ed_settings(settings): + """Fixture to set Professional Education API URL""" + settings.PROFESSIONAL_EDUCATION_API_URL = "http://pro_edu_api.com" + return settings + + +@pytest.fixture() +def mock_fetch_data(mocker): + """Mock fetch_data function""" + + def read_json(file_path): + with Path.open(file_path, "r") as file: + return mocker.Mock(json=mocker.Mock(return_value=json.load(file))) + + return mocker.patch( + "learning_resources.etl.mitpe.requests.get", + side_effect=[ + read_json("./test_json/professional_ed/professional_ed_resources.json"), + read_json( + "./test_json/professional_ed/professional_ed_program_instructors.json" + ), + read_json( + "./test_json/professional_ed/professional_ed_program_image_1.json" + ), + read_json( + "./test_json/professional_ed/professional_ed_program_image_2.json" + ), + read_json( + "./test_json/professional_ed/professional_ed_program_topics.json" + ), + read_json( + "./test_json/professional_ed/professional_ed_course_instructors.json" + ), + read_json( + "./test_json/professional_ed/professional_ed_course_image_1.json" + ), + read_json( + "./test_json/professional_ed/professional_ed_course_image_2.json" + ), + read_json("./test_json/professional_ed/professional_ed_course_topics.json"), + ], + ) + + +@pytest.mark.parametrize("prof_ed_api_url", ["http://pro_edd_api.com", None]) +def test_extract(settings, mock_fetch_data, prof_ed_api_url): + """Test extract function""" + settings.PROFESSIONAL_EDUCATION_API_URL = prof_ed_api_url + with Path.open( + Path("./test_json/professional_ed/professional_ed_resources.json"), "r" + ) as file: + expected = json.load(file)["data"] + results = mitpe.extract() + if prof_ed_api_url: + assert len(results) == 2 + assert_json_equal(results, expected) + else: + assert len(results) == 0 + + +def test_transform(mocker, mock_fetch_data, prof_ed_settings): + """Test transform function, and effectivelu most other functions""" + mocker.patch( + "learning_resources.etl.mitpe.parse_date", + return_value=now_in_utc() + datetime.timedelta(days=randint(5, 10)), # noqa: S311 + ) + courses, programs = mitpe.transform(mitpe.extract()) + assert courses == [EXPECTED_COURSE] + assert programs == [EXPECTED_PROGRAM] + + +@pytest.mark.parametrize( + ("format_str", "expected"), + [ + ("On Campus", [LearningResourceFormat.in_person.name]), + ("Online", [LearningResourceFormat.online.name]), + ( + "Live Virtual OR On Campus", + [LearningResourceFormat.online.name, LearningResourceFormat.in_person.name], + ), + ( + "Live Virtual And On Campus", + [LearningResourceFormat.hybrid.name], + ), + ("Unrecognized", [LearningResourceFormat.online.name]), + ], +) +def test_parse_format(format_str, expected): + """Test parse_format function""" + assert sorted(mitpe.parse_format(format_str)) == sorted(expected) + + +@pytest.mark.parametrize( + ("enrollment_end", "end_date", "published_count"), + [ + (None, None, 1), + (None, "2020-01-01", 0), + ("2020-01-01", None, 0), + ("2020-01-01", "2120-01-01", 0), + ("2120-01-01", None, 1), + ("2120-01-01", "2020-01-01", 0), + ], +) +def test_transform_by_dates( + mock_fetch_data, prof_ed_settings, enrollment_end, end_date, published_count +): + """Transform should unpublish resources with past enrollment_end or end_dates""" + resource_data = mitpe.extract() + course_data = resource_data[1] + course_data["attributes"]["field_registration_deadline"] = enrollment_end + course_data["attributes"]["field_course_dates"][0]["end_value"] = end_date + courses = mitpe.transform([course_data])[0] + assert len(courses) == published_count diff --git a/learning_resources/etl/pipelines.py b/learning_resources/etl/pipelines.py index 023263e58b..864e01ee9f 100644 --- a/learning_resources/etl/pipelines.py +++ b/learning_resources/etl/pipelines.py @@ -12,6 +12,7 @@ micromasters, mit_edx, mit_edx_programs, + mitpe, mitxonline, ocw, oll, @@ -28,6 +29,7 @@ ProgramLoaderConfig, ) from learning_resources.etl.exceptions import ExtractException +from learning_resources.models import LearningResource log = logging.getLogger(__name__) @@ -191,3 +193,23 @@ def ocw_courses_etl( posthog.posthog_transform_lrd_view_events, posthog.posthog_extract_lrd_view_events, ) + + +def mitpe_etl() -> tuple[list[LearningResource], list[LearningResource]]: + """ + ETL for professional education courses and programs. + + This pipeline is structured a bit differently than others because the source API + and the transform/extract functions return both courses and programs. + """ + courses_data, programs_data = mitpe.transform(mitpe.extract()) + return ( + loaders.load_courses( + ETLSource.mitpe.name, courses_data, config=CourseLoaderConfig(prune=True) + ), + loaders.load_programs( + ETLSource.mitpe.name, + programs_data, + config=ProgramLoaderConfig(prune=True, courses=CourseLoaderConfig()), + ), + ) diff --git a/learning_resources/etl/pipelines_test.py b/learning_resources/etl/pipelines_test.py index cc6411c46d..2aff15a65e 100644 --- a/learning_resources/etl/pipelines_test.py +++ b/learning_resources/etl/pipelines_test.py @@ -379,6 +379,32 @@ def test_prolearn_programs_etl(): assert result == mock_load_programs.return_value +def test_mitpe_etl(mocker): + """Verify that the professional education etl pipeline executes correctly""" + mocker.patch("learning_resources.etl.mitpe.extract") + mock_transform = mocker.patch( + "learning_resources.etl.mitpe.transform", + return_value=( + [{"a": "b"}, {"c": "d"}], + [{"e": "f"}, {"g": "h"}], + ), + ) + mock_load_courses = mocker.patch("learning_resources.etl.loaders.load_courses") + mock_load_programs = mocker.patch("learning_resources.etl.loaders.load_programs") + results = pipelines.mitpe_etl() + mock_load_courses.assert_called_once_with( + ETLSource.mitpe.name, + mock_transform.return_value[0], + config=CourseLoaderConfig(prune=True), + ) + mock_load_programs.assert_called_once_with( + ETLSource.mitpe.name, + mock_transform.return_value[1], + config=ProgramLoaderConfig(prune=True, courses=CourseLoaderConfig()), + ) + assert results == (mock_load_courses.return_value, mock_load_programs.return_value) + + def test_prolearn_courses_etl(): """Verify that prolearn courses etl pipeline executes correctly""" with reload_mocked_pipeline( diff --git a/learning_resources/etl/prolearn.py b/learning_resources/etl/prolearn.py index 022aa6cc62..82d1c933a1 100644 --- a/learning_resources/etl/prolearn.py +++ b/learning_resources/etl/prolearn.py @@ -48,6 +48,7 @@ {operator: \"=\", name: \"field_course_or_program\", value: \"%s\"}, {operator: \"<>\", name: \"department\", value: \"MIT xPRO\"} %s + {operator: \"<>\", name: \"department\", value: \"MIT Professional Education\"} ] } ] diff --git a/learning_resources/management/commands/backpopulate_mitpe_data.py b/learning_resources/management/commands/backpopulate_mitpe_data.py new file mode 100644 index 0000000000..30c1b3c1bc --- /dev/null +++ b/learning_resources/management/commands/backpopulate_mitpe_data.py @@ -0,0 +1,50 @@ +"""Management command for populating professional education course/program data""" + +from django.core.management import BaseCommand + +from learning_resources.etl.constants import ETLSource +from learning_resources.models import LearningResource +from learning_resources.tasks import get_mitpe_data +from learning_resources.utils import resource_delete_actions +from main.utils import now_in_utc + + +class Command(BaseCommand): + """Populate professional education courses""" + + help = "Populate professional education courses" + + def add_arguments(self, parser): + parser.add_argument( + "--delete", + dest="delete", + action="store_true", + help="Delete all existing records first", + ) + super().add_arguments(parser) + + def handle(self, *args, **options): # noqa: ARG002 + """Run Populate professional education courses""" + if options["delete"]: + self.stdout.write( + "Deleting all existing Prof. Ed. courses from database and opensearch" + ) + for resource in LearningResource.objects.filter( + etl_source=ETLSource.mitpe.value + ): + resource_delete_actions(resource) + else: + task = get_mitpe_data.delay() + self.stdout.write( + f"Started task {task} to get professional education course/program data" + ) + self.stdout.write("Waiting on task...") + start = now_in_utc() + count = task.get() + total_seconds = (now_in_utc() - start).total_seconds() + self.stdout.write( + f"Population of Prof. Ed. data finished, took {total_seconds} seconds" + ) + self.stdout.write( + f"Populated {count} resources. See celery logs for details." + ) diff --git a/learning_resources/tasks.py b/learning_resources/tasks.py index 0fd1527a3e..61d8dcb6dd 100644 --- a/learning_resources/tasks.py +++ b/learning_resources/tasks.py @@ -91,6 +91,13 @@ def get_oll_data(sheets_id=None): return len(courses) +@app.task +def get_mitpe_data(): + """Execute the Professional Education ETL pipeline""" + courses, programs = pipelines.mitpe_etl() + return len(courses) + len(programs) + + @app.task def get_prolearn_data(): """Execute the ProLearn ETL pipelines""" diff --git a/learning_resources/tasks_test.py b/learning_resources/tasks_test.py index 7739374ae4..1d678ddded 100644 --- a/learning_resources/tasks_test.py +++ b/learning_resources/tasks_test.py @@ -113,9 +113,20 @@ def test_get_oll_data(mocker): mock_pipelines.oll_etl.assert_called_once_with(None) -def test_get_prolearn_data(mocker): - """Verify that the get_prolearn_data invokes the Prolearn ETL pipeline""" +def test_get_mitpe_data(mocker): + """Verify that the get_mitpe_data task invokes the Professional Ed pipeline""" mock_pipelines = mocker.patch("learning_resources.tasks.pipelines") + mock_pipelines.mitpe_etl.return_value = ( + LearningResourceFactory.create_batch(2), + LearningResourceFactory.create_batch(1), + ) + task = tasks.get_mitpe_data.delay() + mock_pipelines.mitpe_etl.assert_called_once_with() + assert task.result == 3 + + +def test_get_prolearn_data(mock_pipelines): + """Verify that the get_prolearn_data invokes the Prolearn ETL pipeline""" tasks.get_prolearn_data.delay() mock_pipelines.prolearn_programs_etl.assert_called_once_with() mock_pipelines.prolearn_courses_etl.assert_called_once_with() diff --git a/main/settings_celery.py b/main/settings_celery.py index 7fc24e41d4..6d3f8f58d8 100644 --- a/main/settings_celery.py +++ b/main/settings_celery.py @@ -53,6 +53,10 @@ "PODCAST_FETCH_SCHEDULE_SECONDS", 60 * 60 * 2 ), # default is every 2 hours }, + "update-professional-ed-resources-every-1-days": { + "task": "learning_resources.tasks.get_mitpe_data", + "schedule": crontab(minute=0, hour=21), # 5:00pm EST + }, "update-prolearn-courses-every-1-days": { "task": "learning_resources.tasks.get_prolearn_data", "schedule": crontab(minute=0, hour=5), # 1:00am EST diff --git a/test_json/professional_ed/professional_ed_course_image_1.json b/test_json/professional_ed/professional_ed_course_image_1.json new file mode 100644 index 0000000000..782e651e3c --- /dev/null +++ b/test_json/professional_ed/professional_ed_course_image_1.json @@ -0,0 +1,133 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": { + "type": "media--header_image", + "id": "0b8897cc-987c-4109-b46b-3227c23e0c00", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00?resourceVersion=id%3A1812" + } + }, + "attributes": { + "drupal_internal__mid": 1710, + "drupal_internal__vid": 1812, + "langcode": "en", + "revision_created": "2024-04-26T18:07:42+00:00", + "status": true, + "name": "MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", + "created": "2024-04-26T18:07:42+00:00", + "changed": "2024-04-26T18:07:42+00:00", + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": null, + "pid": null, + "langcode": "en" + } + }, + "relationships": { + "bundle": { + "data": { + "type": "media_type--media_type", + "id": "ae6c4031-0599-4953-847d-c6aeb0681305", + "meta": { + "drupal_internal__target_id": "header_image" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/bundle?resourceVersion=id%3A1812" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/bundle?resourceVersion=id%3A1812" + } + } + }, + "revision_user": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/revision_user?resourceVersion=id%3A1812" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/revision_user?resourceVersion=id%3A1812" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", + "meta": { + "drupal_internal__target_id": 82 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/uid?resourceVersion=id%3A1812" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/uid?resourceVersion=id%3A1812" + } + } + }, + "thumbnail": { + "data": { + "type": "file--file", + "id": "bcfd7978-367e-4aaf-a82d-b55d90f2b731", + "meta": { + "alt": "product innovation in the age of AI", + "title": null, + "width": 1600, + "height": 800, + "drupal_internal__target_id": 2582 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/thumbnail?resourceVersion=id%3A1812" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/thumbnail?resourceVersion=id%3A1812" + } + } + }, + "field_media_image": { + "data": { + "type": "file--file", + "id": "bcfd7978-367e-4aaf-a82d-b55d90f2b731", + "meta": { + "alt": "product innovation in the age of AI", + "title": "", + "width": 1600, + "height": 800, + "drupal_internal__target_id": 2582 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/field_media_image?resourceVersion=id%3A1812" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/field_media_image?resourceVersion=id%3A1812" + } + } + } + } + }, + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_header_image?resourceVersion=id%3A14212" + } + } +} diff --git a/test_json/professional_ed/professional_ed_course_image_2.json b/test_json/professional_ed/professional_ed_course_image_2.json new file mode 100644 index 0000000000..9af743d5bd --- /dev/null +++ b/test_json/professional_ed/professional_ed_course_image_2.json @@ -0,0 +1,59 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": { + "type": "file--file", + "id": "bcfd7978-367e-4aaf-a82d-b55d90f2b731", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/file/file/bcfd7978-367e-4aaf-a82d-b55d90f2b731" + } + }, + "attributes": { + "drupal_internal__fid": 2582, + "langcode": "en", + "filename": "MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", + "uri": { + "value": "public://2024-04/MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", + "url": "/sites/default/files/2024-04/MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg" + }, + "filemime": "image/jpeg", + "filesize": 890717, + "status": true, + "created": "2024-04-26T18:07:42+00:00", + "changed": "2024-04-26T18:07:58+00:00" + }, + "relationships": { + "uid": { + "data": { + "type": "user--user", + "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", + "meta": { + "drupal_internal__target_id": 82 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/file/file/bcfd7978-367e-4aaf-a82d-b55d90f2b731/uid" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/file/file/bcfd7978-367e-4aaf-a82d-b55d90f2b731/relationships/uid" + } + } + } + } + }, + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/field_media_image?resourceVersion=id%3A1812" + } + } +} diff --git a/test_json/professional_ed/professional_ed_course_instructors.json b/test_json/professional_ed/professional_ed_course_instructors.json new file mode 100644 index 0000000000..8147910ea6 --- /dev/null +++ b/test_json/professional_ed/professional_ed_course_instructors.json @@ -0,0 +1,316 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": [ + { + "type": "node--faculty", + "id": "0079dcfc-7828-49dc-b60a-abd147b6972e", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e?resourceVersion=id%3A10253" + } + }, + "attributes": { + "drupal_internal__nid": 1033, + "drupal_internal__vid": 10253, + "langcode": "en", + "revision_timestamp": "2022-11-18T22:43:49+00:00", + "status": true, + "title": "Eric von Hippel", + "created": "2022-11-18T22:43:05+00:00", + "changed": "2022-11-18T22:50:07+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/eric-von-hippel", + "pid": 1070, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr /\u003E\r\n\u003Cbr /\u003E\r\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr\u003E\n\u003Cbr\u003E\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": null, + "field_first_name": "Eric", + "field_last_name": "von Hippel", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", + "Professor of Management of Innovation and Engineering Systems, MIT Sloan School of Management" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/node_type?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/node_type?resourceVersion=id%3A10253" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/revision_uid?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/revision_uid?resourceVersion=id%3A10253" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/uid?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/uid?resourceVersion=id%3A10253" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_course_topics?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_course_topics?resourceVersion=id%3A10253" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "17e87485-4772-44dd-a046-a85499662e8e", + "meta": { + "drupal_internal__target_id": 1253 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_faculty_photo?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_faculty_photo?resourceVersion=id%3A10253" + } + } + }, + "field_programs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_programs?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_programs?resourceVersion=id%3A10253" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde?resourceVersion=id%3A10254" + } + }, + "attributes": { + "drupal_internal__nid": 1034, + "drupal_internal__vid": 10254, + "langcode": "en", + "revision_timestamp": "2022-11-18T23:56:30+00:00", + "status": true, + "title": "Erdin Beshimov", + "created": "2022-11-18T22:51:21+00:00", + "changed": "2022-11-18T23:57:54+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/erdin-beshimov", + "pid": 1072, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\r\n\r\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\n\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\n\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": null, + "field_first_name": "Erdin", + "field_last_name": " Beshimov", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", + "Innovation via the Lead User Method Lecturer and Senior Director, Experiential Learning, MIT Open Learning", + "Lecturer, Massachusetts Institute of Technology" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/node_type?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/node_type?resourceVersion=id%3A10254" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/revision_uid?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/revision_uid?resourceVersion=id%3A10254" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/uid?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/uid?resourceVersion=id%3A10254" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_course_topics?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_course_topics?resourceVersion=id%3A10254" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "7552a40a-6556-4061-beff-f4fac9dfebcc", + "meta": { + "drupal_internal__target_id": 1254 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_faculty_photo?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_faculty_photo?resourceVersion=id%3A10254" + } + } + }, + "field_programs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_programs?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_programs?resourceVersion=id%3A10254" + } + } + } + } + } + ], + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_lead_instructors?resourceVersion=id%3A14212" + } + } +} diff --git a/test_json/professional_ed/professional_ed_course_topics.json b/test_json/professional_ed/professional_ed_course_topics.json new file mode 100644 index 0000000000..2c8bf71fe5 --- /dev/null +++ b/test_json/professional_ed/professional_ed_course_topics.json @@ -0,0 +1,103 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7?resourceVersion=id%3A28" + } + }, + "attributes": { + "drupal_internal__tid": 28, + "drupal_internal__revision_id": 28, + "langcode": "en", + "revision_created": null, + "status": true, + "name": "Innovation", + "description": null, + "weight": 7, + "changed": "2022-02-02T11:13:28+00:00", + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": null, + "pid": null, + "langcode": "en" + } + }, + "relationships": { + "vid": { + "data": { + "type": "taxonomy_vocabulary--taxonomy_vocabulary", + "id": "2b2e5293-82a3-451e-9cdd-2a4d317a594e", + "meta": { + "drupal_internal__target_id": "topics" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/vid?resourceVersion=id%3A28" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/vid?resourceVersion=id%3A28" + } + } + }, + "revision_user": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/revision_user?resourceVersion=id%3A28" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/revision_user?resourceVersion=id%3A28" + } + } + }, + "parent": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "virtual", + "meta": { + "links": { + "help": { + "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", + "meta": { + "about": "Usage and meaning of the 'virtual' resource identifier." + } + } + } + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/parent?resourceVersion=id%3A28" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/parent?resourceVersion=id%3A28" + } + } + } + } + } + ], + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_topics?resourceVersion=id%3A14212" + } + } +} diff --git a/test_json/professional_ed/professional_ed_program_image_1.json b/test_json/professional_ed/professional_ed_program_image_1.json new file mode 100644 index 0000000000..9a350d6dda --- /dev/null +++ b/test_json/professional_ed/professional_ed_program_image_1.json @@ -0,0 +1,133 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": { + "type": "media--header_image", + "id": "ec734233-e506-47f6-bd87-93ca4a62f26e", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e?resourceVersion=id%3A653" + } + }, + "attributes": { + "drupal_internal__mid": 594, + "drupal_internal__vid": 653, + "langcode": "en", + "revision_created": "2021-01-30T02:04:01+00:00", + "status": true, + "name": "Innovation & Technology - Header Image", + "created": "2021-01-30T02:03:22+00:00", + "changed": "2021-01-30T02:04:01+00:00", + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": null, + "pid": null, + "langcode": "en" + } + }, + "relationships": { + "bundle": { + "data": { + "type": "media_type--media_type", + "id": "ae6c4031-0599-4953-847d-c6aeb0681305", + "meta": { + "drupal_internal__target_id": "header_image" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/bundle?resourceVersion=id%3A653" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/bundle?resourceVersion=id%3A653" + } + } + }, + "revision_user": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/revision_user?resourceVersion=id%3A653" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/revision_user?resourceVersion=id%3A653" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "36a239b4-cc6b-487f-b44c-1e98d92e4c19", + "meta": { + "drupal_internal__target_id": 46 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/uid?resourceVersion=id%3A653" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/uid?resourceVersion=id%3A653" + } + } + }, + "thumbnail": { + "data": { + "type": "file--file", + "id": "1689991a-7999-40f0-9063-7c739f8d81cb", + "meta": { + "alt": "Innovation & Technology - Header Image", + "title": null, + "width": 3200, + "height": 1600, + "drupal_internal__target_id": 875 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/thumbnail?resourceVersion=id%3A653" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/thumbnail?resourceVersion=id%3A653" + } + } + }, + "field_media_image": { + "data": { + "type": "file--file", + "id": "1689991a-7999-40f0-9063-7c739f8d81cb", + "meta": { + "alt": "Innovation & Technology - Header Image", + "title": "", + "width": 3200, + "height": 1600, + "drupal_internal__target_id": 875 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/field_media_image?resourceVersion=id%3A653" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/field_media_image?resourceVersion=id%3A653" + } + } + } + } + }, + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_header_image?resourceVersion=id%3A14202" + } + } +} diff --git a/test_json/professional_ed/professional_ed_program_image_2.json b/test_json/professional_ed/professional_ed_program_image_2.json new file mode 100644 index 0000000000..16427b9a5e --- /dev/null +++ b/test_json/professional_ed/professional_ed_program_image_2.json @@ -0,0 +1,59 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": { + "type": "file--file", + "id": "1689991a-7999-40f0-9063-7c739f8d81cb", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/file/file/1689991a-7999-40f0-9063-7c739f8d81cb" + } + }, + "attributes": { + "drupal_internal__fid": 875, + "langcode": "en", + "filename": "MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg", + "uri": { + "value": "public://2021-01/MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg", + "url": "/sites/default/files/2021-01/MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg" + }, + "filemime": "image/jpeg", + "filesize": 1031478, + "status": true, + "created": "2021-01-30T02:03:35+00:00", + "changed": "2021-01-30T02:04:01+00:00" + }, + "relationships": { + "uid": { + "data": { + "type": "user--user", + "id": "36a239b4-cc6b-487f-b44c-1e98d92e4c19", + "meta": { + "drupal_internal__target_id": 46 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/file/file/1689991a-7999-40f0-9063-7c739f8d81cb/uid" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/file/file/1689991a-7999-40f0-9063-7c739f8d81cb/relationships/uid" + } + } + } + } + }, + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/field_media_image?resourceVersion=id%3A653" + } + } +} diff --git a/test_json/professional_ed/professional_ed_program_instructors.json b/test_json/professional_ed/professional_ed_program_instructors.json new file mode 100644 index 0000000000..55fa99804d --- /dev/null +++ b/test_json/professional_ed/professional_ed_program_instructors.json @@ -0,0 +1,1760 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": [ + { + "type": "node--faculty", + "id": "0d18fecb-0274-4268-b4dd-6ea7ac6a36de", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de?resourceVersion=id%3A820" + } + }, + "attributes": { + "drupal_internal__nid": 286, + "drupal_internal__vid": 820, + "langcode": "en", + "revision_timestamp": "2019-05-01T18:03:52+00:00", + "status": true, + "title": "Blade Kotelly", + "created": "2019-05-01T18:01:34+00:00", + "changed": "2024-02-06T19:39:11+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/blade-kotelly", + "pid": 284, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003E\u003Ca href=\"http://www.bladekotelly.com\"\u003EBlade\u003C/a\u003E is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\u003Cp\u003EPrior to that, Blade led the Advanced Concept Lab at Sonos where he defined the future experience that will fill your home with music. Prior to joining Sonos, Blade was the VP Design & Consumer Experience at Jibo, Inc. where he was in charge of the industrial-design, human-factors, user-interface, brand, packaging, web experience supporting Jibo, the world’s first social robot for the home. Blade has also designed a variety of technologies including ones at Rapid7, an enterprise security-software company,  StorytellingMachines, a software firm enabling anyone to make high-impact movies, Endeca Technologies, a search and information access software technology company, Edify and SpeechWorks, companies that provided speech-recognition solutions to the Fortune 1000.\u003C/p\u003E\u003Cp\u003EBlade wrote the book on speech-recognition interface design (Addison Wesley, 2003), The Art and Business of Speech Recognition: Creating the Noble Voice and his work and thoughts have been featured in publications including The New York Times, the Wall Street Journal, and on media including TechTV, NPR, and the BBC.\u003Cbr\u003E \u003Cbr\u003ESince 2003, Blade has taught courses on design-thinking to thousands of students and professionals, and holds a Bachelors of Science in Human-Factors Engineering from Tufts University and a Master of Science in Engineering and Management from MIT.\u003C/p\u003E", + "format": "full_html", + "processed": "\u003Cp\u003E\u003Ca href=\"http://www.bladekotelly.com\"\u003EBlade\u003C/a\u003E is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\u003Cp\u003EPrior to that, Blade led the Advanced Concept Lab at Sonos where he defined the future experience that will fill your home with music. Prior to joining Sonos, Blade was the VP Design & Consumer Experience at Jibo, Inc. where he was in charge of the industrial-design, human-factors, user-interface, brand, packaging, web experience supporting Jibo, the world’s first social robot for the home. Blade has also designed a variety of technologies including ones at Rapid7, an enterprise security-software company,  StorytellingMachines, a software firm enabling anyone to make high-impact movies, Endeca Technologies, a search and information access software technology company, Edify and SpeechWorks, companies that provided speech-recognition solutions to the Fortune 1000.\u003C/p\u003E\u003Cp\u003EBlade wrote the book on speech-recognition interface design (Addison Wesley, 2003), The Art and Business of Speech Recognition: Creating the Noble Voice and his work and thoughts have been featured in publications including The New York Times, the Wall Street Journal, and on media including TechTV, NPR, and the BBC.\u003Cbr\u003E \u003Cbr\u003ESince 2003, Blade has taught courses on design-thinking to thousands of students and professionals, and holds a Bachelors of Science in Human-Factors Engineering from Tufts University and a Master of Science in Engineering and Management from MIT.\u003C/p\u003E", + "summary": "" + }, + "field_featured_card_summary": "Blade is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.", + "field_first_name": "Blade", + "field_last_name": "Kotelly", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EBlade is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EBlade is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Senior Lecturer, Bernard M. Gordon-MIT Engineering Leadership Program" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/node_type?resourceVersion=id%3A820" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/node_type?resourceVersion=id%3A820" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/revision_uid?resourceVersion=id%3A820" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/revision_uid?resourceVersion=id%3A820" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/uid?resourceVersion=id%3A820" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/uid?resourceVersion=id%3A820" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", + "meta": { + "drupal_internal__target_id": 25 + } + }, + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + }, + { + "type": "taxonomy_term--topics", + "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", + "meta": { + "drupal_internal__target_id": 29 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/field_course_topics?resourceVersion=id%3A820" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/field_course_topics?resourceVersion=id%3A820" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "886b8510-d2fa-42e6-8299-ecf785ca5b9b", + "meta": { + "drupal_internal__target_id": 185 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/field_faculty_photo?resourceVersion=id%3A820" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/field_faculty_photo?resourceVersion=id%3A820" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/field_programs?resourceVersion=id%3A820" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/field_programs?resourceVersion=id%3A820" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "9447ac66-9a89-400d-ac70-cdd1492f32c9", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9?resourceVersion=id%3A855" + } + }, + "attributes": { + "drupal_internal__nid": 319, + "drupal_internal__vid": 855, + "langcode": "en", + "revision_timestamp": "2019-05-22T13:36:49+00:00", + "status": true, + "title": "Reza Rahaman", + "created": "2019-05-22T13:33:16+00:00", + "changed": "2021-03-24T13:56:53+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/reza-rahaman", + "pid": 317, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EDr. \u003Ca href=\"https://gelp.mit.edu/about-gel/program-staff/reza-rahaman\" target=\"_blank\"\u003EReza Rahaman\u003C/a\u003E, is the Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. In that role he was accountable for developing innovation strategies for a diverse set of businesses and ensuring robust technology roadmaps and innovation pipelines to deliver growth and profit targets for 45% of the Clorox Company portfolio ($2.7bn in net customer sales). Among his businesses were Brita, Burt’s Bees, Glad, Hidden Valley Ranch, Fresh Step, and Kingsford Charcoal. Notable product platforms developed and launched under his leadership include Brita filter-as-you-pour, Burt’s Bees Natural Cosmetics, Glad Force Flex Plus and Force Flex Plus Advanced Protection (dual-layer technology), and Fresh Step Clean Paws.\u003C/p\u003E\r\n\r\n\u003Cp\u003EIn addition to his passion for developing leaders, Reza is passionate about workplace equality and is the Vice-Chair of the Board of Out & Equal Workplace Advocates, the world’s premier nonprofit promoting LGBT+ workplace equality. He and his husband James enjoy travel and hiking. Reza received his BSc.(Eng.) in Chemical Engineering from Imperial College, University of London, and his MSCEP in Chemical Engineering Practice and Ph.D. in Chemical Engineering from MIT.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EDr. \u003Ca href=\"https://gelp.mit.edu/about-gel/program-staff/reza-rahaman\" target=\"_blank\"\u003EReza Rahaman\u003C/a\u003E, is the Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. In that role he was accountable for developing innovation strategies for a diverse set of businesses and ensuring robust technology roadmaps and innovation pipelines to deliver growth and profit targets for 45% of the Clorox Company portfolio ($2.7bn in net customer sales). Among his businesses were Brita, Burt’s Bees, Glad, Hidden Valley Ranch, Fresh Step, and Kingsford Charcoal. Notable product platforms developed and launched under his leadership include Brita filter-as-you-pour, Burt’s Bees Natural Cosmetics, Glad Force Flex Plus and Force Flex Plus Advanced Protection (dual-layer technology), and Fresh Step Clean Paws.\u003C/p\u003E\n\n\u003Cp\u003EIn addition to his passion for developing leaders, Reza is passionate about workplace equality and is the Vice-Chair of the Board of Out & Equal Workplace Advocates, the world’s premier nonprofit promoting LGBT+ workplace equality. He and his husband James enjoy travel and hiking. Reza received his BSc.(Eng.) in Chemical Engineering from Imperial College, University of London, and his MSCEP in Chemical Engineering Practice and Ph.D. in Chemical Engineering from MIT.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": "Dr. Reza Rahaman, Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29 year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. ", + "field_first_name": "Reza", + "field_last_name": "Rahaman", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EDr. Reza Rahaman, Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. \u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EDr. Reza Rahaman, Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. \u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Bernard M. Gordon Industry Co-Director and senior lecturer, MIT" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/node_type?resourceVersion=id%3A855" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/node_type?resourceVersion=id%3A855" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/revision_uid?resourceVersion=id%3A855" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/revision_uid?resourceVersion=id%3A855" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/uid?resourceVersion=id%3A855" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/uid?resourceVersion=id%3A855" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/field_course_topics?resourceVersion=id%3A855" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/field_course_topics?resourceVersion=id%3A855" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "d227e5d0-9e69-4286-85b2-f0737cf4e8e8", + "meta": { + "drupal_internal__target_id": 206 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/field_faculty_photo?resourceVersion=id%3A855" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/field_faculty_photo?resourceVersion=id%3A855" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/field_programs?resourceVersion=id%3A855" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/field_programs?resourceVersion=id%3A855" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "0aba6bed-3f64-4f54-936c-c3e551eb003e", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e?resourceVersion=id%3A821" + } + }, + "attributes": { + "drupal_internal__nid": 287, + "drupal_internal__vid": 821, + "langcode": "en", + "revision_timestamp": "2019-05-01T18:09:02+00:00", + "status": true, + "title": "Michael Davies", + "created": "2019-05-01T18:06:06+00:00", + "changed": "2019-05-01T18:11:43+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/michael-davies", + "pid": 285, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003E\u003Ca href=\"http://mamd.mit.edu/\"\u003EMichael A M Davies\u003C/a\u003E teaches the engineering and business elements of the \u003Ca href=\"http://idm.mit.edu/\"\u003EIntegrated Design and Management\u003C/a\u003E (IDM) program at MIT.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe is the founder and chairman of \u003Ca href=\"http://endeavourpartners.net/\"\u003EEndeavour Partners\u003C/a\u003E, a boutique business strategy consulting firm that enables leaders in high-tech businesses and businesses being affected by technology worldwide to create value and drive growth through innovation. Endeavour Partners helps its clients anticipate, navigate, and innovate through insight and foresight in order to make better strategic decisions.Its clients include nearly all of the top-tier device vendors, network operators, service providers, and semiconductor businesses. Beyond high-tech, its clients include some of the world’s leading e-commerce, information services, oil and gas, packaging and logistics businesses, along with world-class sports teams.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems. Michael has spent his career helping top management make strategic decisions and drive innovation. Nowadays, he is focused on the rapid shift toward smartphones, cloud services, the Internet of Things, artificial intelligence, and robotics, particularly the forces driving this shift and its impact and implications over the next few years.\u003C/p\u003E\r\n\r\n\u003Cp\u003EMichael also runs the New Technology Ventures program at the London Business School. Additionally, he is an Advisor to the Department of Systems Engineering at the United States Military Academy at West Point.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe also is a co-founder and the Chairman of \u003Ca href=\"https://silverthreadinc.com/\"\u003Esilverthread, Inc.\u003C/a\u003E, and angel-baked business commercializing research on software engineering from MIT and Harvard Business School, a member of the Board of the Kendall Square Association, the business group for this world leading innovation hub, the Chairman of the Mobile Cluster for Massachusetts Technology Leadership Council and an advisor to several other companies on digital business.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003E\u003Ca href=\"http://mamd.mit.edu/\"\u003EMichael A M Davies\u003C/a\u003E teaches the engineering and business elements of the \u003Ca href=\"http://idm.mit.edu/\"\u003EIntegrated Design and Management\u003C/a\u003E (IDM) program at MIT.\u003C/p\u003E\n\n\u003Cp\u003EHe is the founder and chairman of \u003Ca href=\"http://endeavourpartners.net/\"\u003EEndeavour Partners\u003C/a\u003E, a boutique business strategy consulting firm that enables leaders in high-tech businesses and businesses being affected by technology worldwide to create value and drive growth through innovation. Endeavour Partners helps its clients anticipate, navigate, and innovate through insight and foresight in order to make better strategic decisions.Its clients include nearly all of the top-tier device vendors, network operators, service providers, and semiconductor businesses. Beyond high-tech, its clients include some of the world’s leading e-commerce, information services, oil and gas, packaging and logistics businesses, along with world-class sports teams.\u003C/p\u003E\n\n\u003Cp\u003EHe is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems. Michael has spent his career helping top management make strategic decisions and drive innovation. Nowadays, he is focused on the rapid shift toward smartphones, cloud services, the Internet of Things, artificial intelligence, and robotics, particularly the forces driving this shift and its impact and implications over the next few years.\u003C/p\u003E\n\n\u003Cp\u003EMichael also runs the New Technology Ventures program at the London Business School. Additionally, he is an Advisor to the Department of Systems Engineering at the United States Military Academy at West Point.\u003C/p\u003E\n\n\u003Cp\u003EHe also is a co-founder and the Chairman of \u003Ca href=\"https://silverthreadinc.com/\"\u003Esilverthread, Inc.\u003C/a\u003E, and angel-baked business commercializing research on software engineering from MIT and Harvard Business School, a member of the Board of the Kendall Square Association, the business group for this world leading innovation hub, the Chairman of the Mobile Cluster for Massachusetts Technology Leadership Council and an advisor to several other companies on digital business.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": "Michael A M Davies teaches the engineering and business elements of the Integrated Design and Management (IDM) program at MIT. He is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems. ", + "field_first_name": "Michael", + "field_last_name": "Davies", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EMichael A M Davies teaches the engineering and business elements of the Integrated Design and Management (IDM) program at MIT. He is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EMichael A M Davies teaches the engineering and business elements of the Integrated Design and Management (IDM) program at MIT. He is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Senior Lecturer, MIT", + "Founder and Chairman, Endeavour Partners", + "Co-founder and Chairman, silverthread, Inc." + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/node_type?resourceVersion=id%3A821" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/node_type?resourceVersion=id%3A821" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/revision_uid?resourceVersion=id%3A821" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/revision_uid?resourceVersion=id%3A821" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/uid?resourceVersion=id%3A821" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/uid?resourceVersion=id%3A821" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + }, + { + "type": "taxonomy_term--topics", + "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", + "meta": { + "drupal_internal__target_id": 29 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/field_course_topics?resourceVersion=id%3A821" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/field_course_topics?resourceVersion=id%3A821" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "1e94d940-8639-4049-8e0c-537638c5ba87", + "meta": { + "drupal_internal__target_id": 186 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/field_faculty_photo?resourceVersion=id%3A821" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/field_faculty_photo?resourceVersion=id%3A821" + } + } + }, + "field_programs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/field_programs?resourceVersion=id%3A821" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/field_programs?resourceVersion=id%3A821" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "0aa425c3-531b-4115-8dcb-efd680a81550", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550?resourceVersion=id%3A1974" + } + }, + "attributes": { + "drupal_internal__nid": 528, + "drupal_internal__vid": 1974, + "langcode": "en", + "revision_timestamp": "2020-02-05T21:41:04+00:00", + "status": true, + "title": "Sang-Gook Kim", + "created": "2020-02-05T21:37:18+00:00", + "changed": "2020-02-05T21:41:04+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/sang-gook-kim", + "pid": 526, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering.  He received his B.S. degree from Seoul National University (1978), M.S. from KAIST (1980), and Ph.D. from MIT (1985).  He held positions at Axiomatics Co., Cambridge, MA (1986) and Korea Institute of Science and Technology (1986-1991). Then he became a corporate executive director at Daewoo Corporation, Korea, and directed the Central Research Institute of Daewoo Electronics Co. until 2000 when he joined MIT. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. He is a fellow of CIRP (International Academy for Production Engineering), fellow of ASME, and overseas member of Korean National Academy of Engineering.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering.  He received his B.S. degree from Seoul National University (1978), M.S. from KAIST (1980), and Ph.D. from MIT (1985).  He held positions at Axiomatics Co., Cambridge, MA (1986) and Korea Institute of Science and Technology (1986-1991). Then he became a corporate executive director at Daewoo Corporation, Korea, and directed the Central Research Institute of Daewoo Electronics Co. until 2000 when he joined MIT. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. He is a fellow of CIRP (International Academy for Production Engineering), fellow of ASME, and overseas member of Korean National Academy of Engineering.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": "Sang-Gook Kim is a professor in the Department of Mechanical Engineering. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. ", + "field_first_name": "Sang-Gook", + "field_last_name": "Kim", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. \u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. \u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Professor of Mechanical Engineering, MIT" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/node_type?resourceVersion=id%3A1974" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/node_type?resourceVersion=id%3A1974" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/revision_uid?resourceVersion=id%3A1974" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/revision_uid?resourceVersion=id%3A1974" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/uid?resourceVersion=id%3A1974" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/uid?resourceVersion=id%3A1974" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", + "meta": { + "drupal_internal__target_id": 25 + } + }, + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/field_course_topics?resourceVersion=id%3A1974" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/field_course_topics?resourceVersion=id%3A1974" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "3a491f9b-1650-4c3a-ab14-5b459fc10ee9", + "meta": { + "drupal_internal__target_id": 417 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/field_faculty_photo?resourceVersion=id%3A1974" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/field_faculty_photo?resourceVersion=id%3A1974" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/field_programs?resourceVersion=id%3A1974" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/field_programs?resourceVersion=id%3A1974" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "0079dcfc-7828-49dc-b60a-abd147b6972e", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e?resourceVersion=id%3A10253" + } + }, + "attributes": { + "drupal_internal__nid": 1033, + "drupal_internal__vid": 10253, + "langcode": "en", + "revision_timestamp": "2022-11-18T22:43:49+00:00", + "status": true, + "title": "Eric von Hippel", + "created": "2022-11-18T22:43:05+00:00", + "changed": "2022-11-18T22:50:07+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/eric-von-hippel", + "pid": 1070, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr /\u003E\r\n\u003Cbr /\u003E\r\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr\u003E\n\u003Cbr\u003E\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": null, + "field_first_name": "Eric", + "field_last_name": "von Hippel", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", + "Professor of Management of Innovation and Engineering Systems, MIT Sloan School of Management" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/node_type?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/node_type?resourceVersion=id%3A10253" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/revision_uid?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/revision_uid?resourceVersion=id%3A10253" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/uid?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/uid?resourceVersion=id%3A10253" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_course_topics?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_course_topics?resourceVersion=id%3A10253" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "17e87485-4772-44dd-a046-a85499662e8e", + "meta": { + "drupal_internal__target_id": 1253 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_faculty_photo?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_faculty_photo?resourceVersion=id%3A10253" + } + } + }, + "field_programs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_programs?resourceVersion=id%3A10253" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_programs?resourceVersion=id%3A10253" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde?resourceVersion=id%3A10254" + } + }, + "attributes": { + "drupal_internal__nid": 1034, + "drupal_internal__vid": 10254, + "langcode": "en", + "revision_timestamp": "2022-11-18T23:56:30+00:00", + "status": true, + "title": "Erdin Beshimov", + "created": "2022-11-18T22:51:21+00:00", + "changed": "2022-11-18T23:57:54+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/erdin-beshimov", + "pid": 1072, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\r\n\r\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\n\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\n\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": null, + "field_first_name": "Erdin", + "field_last_name": " Beshimov", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", + "Innovation via the Lead User Method Lecturer and Senior Director, Experiential Learning, MIT Open Learning", + "Lecturer, Massachusetts Institute of Technology" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/node_type?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/node_type?resourceVersion=id%3A10254" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/revision_uid?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/revision_uid?resourceVersion=id%3A10254" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/uid?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/uid?resourceVersion=id%3A10254" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_course_topics?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_course_topics?resourceVersion=id%3A10254" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "7552a40a-6556-4061-beff-f4fac9dfebcc", + "meta": { + "drupal_internal__target_id": 1254 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_faculty_photo?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_faculty_photo?resourceVersion=id%3A10254" + } + } + }, + "field_programs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_programs?resourceVersion=id%3A10254" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_programs?resourceVersion=id%3A10254" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "6a2844f3-439d-4a1d-95b0-ab6fb41887ca", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca?resourceVersion=id%3A13116" + } + }, + "attributes": { + "drupal_internal__nid": 1171, + "drupal_internal__vid": 13116, + "langcode": "en", + "revision_timestamp": "2023-11-13T22:27:50+00:00", + "status": true, + "title": "Adam Berinsky", + "created": "2023-11-13T22:19:32+00:00", + "changed": "2023-11-13T22:31:11+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/adam-berinsky", + "pid": 1230, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": null, + "field_first_name": "Adam", + "field_last_name": "Berinsky", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + " Mitsui Professor of Political Science and Director of the MIT Political Experiments Research Lab (PERL)" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/node_type?resourceVersion=id%3A13116" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/node_type?resourceVersion=id%3A13116" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", + "meta": { + "drupal_internal__target_id": 82 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/revision_uid?resourceVersion=id%3A13116" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/revision_uid?resourceVersion=id%3A13116" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", + "meta": { + "drupal_internal__target_id": 82 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/uid?resourceVersion=id%3A13116" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/uid?resourceVersion=id%3A13116" + } + } + }, + "field_course_topics": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/field_course_topics?resourceVersion=id%3A13116" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/field_course_topics?resourceVersion=id%3A13116" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "4e5cb810-bce8-4739-af5f-3ee0a55d78c7", + "meta": { + "drupal_internal__target_id": 1525 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/field_faculty_photo?resourceVersion=id%3A13116" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/field_faculty_photo?resourceVersion=id%3A13116" + } + } + }, + "field_programs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/field_programs?resourceVersion=id%3A13116" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/field_programs?resourceVersion=id%3A13116" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "161081c5-3346-4ad0-b108-c5b6592d0098", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098?resourceVersion=id%3A11544" + } + }, + "attributes": { + "drupal_internal__nid": 340, + "drupal_internal__vid": 11544, + "langcode": "en", + "revision_timestamp": "2023-03-17T15:45:16+00:00", + "status": true, + "title": "David Niño", + "created": "2019-05-22T18:28:33+00:00", + "changed": "2024-05-24T21:18:53+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/david-nino", + "pid": 338, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually. David received a School of Engineering “Infinite Mile Award” for his work in establishing this program, which received a $10 million gift of support in 2022.\u003Cbr\u003E\u003Cbr\u003EIn addition to teaching academic classes, he has also served a leading role nationally in the emerging field of engineering leadership, most recently as Chair of the Engineering Leadership Development Division of the American Society of Engineering Education. This is the nation’s largest organization of engineering leadership educators.\u003Cbr\u003E\u003Cbr\u003EPrior to joining MIT, David was a faculty member in the schools of engineering and business at Rice University in Houston, Texas. He was Director of Rice’s university-wide leadership program and later played a leading role in designing and establishing the university’s first four-year academic certificate in engineering leadership. \u003Cbr\u003E\u003Cbr\u003EDavid consults with technology executives on topics related to developing leadership among engineers, researchers, and other technical experts. He has published on the topics of organizational culture, ethics, engineering leadership, and the development of management and leadership skills. David holds a Ph.D. in Management from the University of Texas at Austin, where he earned his B.A., B.B.A., and M.A. degrees. He lives in Weston Massachusetts with this wife and three children.\u003C/p\u003E", + "format": "full_html", + "processed": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually. David received a School of Engineering “Infinite Mile Award” for his work in establishing this program, which received a $10 million gift of support in 2022.\u003Cbr\u003E\u003Cbr\u003EIn addition to teaching academic classes, he has also served a leading role nationally in the emerging field of engineering leadership, most recently as Chair of the Engineering Leadership Development Division of the American Society of Engineering Education. This is the nation’s largest organization of engineering leadership educators.\u003Cbr\u003E\u003Cbr\u003EPrior to joining MIT, David was a faculty member in the schools of engineering and business at Rice University in Houston, Texas. He was Director of Rice’s university-wide leadership program and later played a leading role in designing and establishing the university’s first four-year academic certificate in engineering leadership. \u003Cbr\u003E\u003Cbr\u003EDavid consults with technology executives on topics related to developing leadership among engineers, researchers, and other technical experts. He has published on the topics of organizational culture, ethics, engineering leadership, and the development of management and leadership skills. David holds a Ph.D. in Management from the University of Texas at Austin, where he earned his B.A., B.B.A., and M.A. degrees. He lives in Weston Massachusetts with this wife and three children.\u003C/p\u003E", + "summary": "" + }, + "field_featured_card_summary": "David Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually.", + "field_first_name": "David", + "field_last_name": "Niño", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually.\u003C/p\u003E", + "format": "full_html", + "processed": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually.\u003C/p\u003E" + }, + "field_professional_titles": [ + "Senior Lecturer in the Daniel J. Riccio Graduate Engineering Leadership Program at MIT" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/node_type?resourceVersion=id%3A11544" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/node_type?resourceVersion=id%3A11544" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/revision_uid?resourceVersion=id%3A11544" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/revision_uid?resourceVersion=id%3A11544" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/uid?resourceVersion=id%3A11544" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/uid?resourceVersion=id%3A11544" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + }, + { + "type": "taxonomy_term--topics", + "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", + "meta": { + "drupal_internal__target_id": 29 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/field_course_topics?resourceVersion=id%3A11544" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/field_course_topics?resourceVersion=id%3A11544" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "238266bf-e43c-4727-a23a-5a3820d8e859", + "meta": { + "drupal_internal__target_id": 1729 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/field_faculty_photo?resourceVersion=id%3A11544" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/field_faculty_photo?resourceVersion=id%3A11544" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4fd60d67-5f72-4772-937e-9fdce34cfac9", + "meta": { + "drupal_internal__target_id": 39 + } + }, + { + "type": "taxonomy_term--programs", + "id": "9fabedbc-bb7b-4842-9e59-7ab6923d7b3b", + "meta": { + "drupal_internal__target_id": 36 + } + }, + { + "type": "taxonomy_term--programs", + "id": "8fcad186-e796-4503-b97e-0e304ad16a06", + "meta": { + "drupal_internal__target_id": 37 + } + }, + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/field_programs?resourceVersion=id%3A11544" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/field_programs?resourceVersion=id%3A11544" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "b6a1440a-6482-486b-b631-2d0feac530f8", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8?resourceVersion=id%3A13914" + } + }, + "attributes": { + "drupal_internal__nid": 302, + "drupal_internal__vid": 13914, + "langcode": "en", + "revision_timestamp": "2024-03-29T16:03:24+00:00", + "status": true, + "title": "Markus J. Buehler", + "created": "2019-05-03T20:31:11+00:00", + "changed": "2024-03-29T16:03:24+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/markus-j-buehler", + "pid": 300, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003E\u003Ca href=\"http://cee.mit.edu/buehler\" target=\"_blank\"\u003EMarkus J. Buehler\u003C/a\u003E is the McAfee Professor of Engineering at MIT. Involved with startups, innovation and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  He directs the \u003Ca href=\"http://web.mit.edu/mbuehler/www/\" target=\"_blank\"\u003ELaboratory for Atomistic and Molecular Mechanics\u003C/a\u003E (LAMM), and is Principal Investigator on numerous national and international research programs. He combines bio-inspired materials design with high-throughput approaches to create materials with architectural features from the nano- to the macro-scale, and applies them to various domains that include composites for vehicles, coatings for energy technologies, and innovative and sustainable biomaterials. Using an array of theoretical, computational and experimental methods, his work seeks to understand the means by which nature creates materials, with applications in bio-inspired engineering. His most recent book, Biomateriomics, presents a new design paradigm for the analysis of biomaterials using a categorization approach that translates insights from disparate fields. In recent work he has developed a new framework to compose music based on proteins – the basic molecules of all life, as well as other physical phenomena such as fracture singularities, to explore similarities and differences across species, scales and between philosophical and physical models.  One of his goals is to use musical and sound design, aided by AI, as an abstract way to model, optimize and create new forms of autonomous matter from the bottom up – across scales (e.g., from nano to macro) and species (e.g., from humans to spiders). His work spans multiple disciplines and straddles the interface of science and art in multiple dimensions, both as a tool to educate and as a tool to understand and design.\u003C/p\u003E\u003Cp\u003EBuehler is a sought-after lecturer and has given hundreds of invited, keynote, and plenary talks throughout the world. His scholarly work is highly-cited and includes more than 450 articles on computational materials science, biomaterials, and nanotechnology, many in high-impact journals such as Nature, and Proceedings of the National Academy of Sciences. He authored two monographs in the areas of computational materials science and bio-inspired materials design, and is a founder of the emerging research area of materiomics. He is a dedicated educator and a gifted teacher, and has appeared on numerous TV and radio shows to explain the impact of his research to broad audiences. Buehler is the recipient of many awards including the Harold E. Edgerton Faculty Achievement Award, the Alfred Noble Prize, the Feynman Prize in Nanotechnology, the Leonardo da Vinci Award, and the Thomas J.R. Hughes Young Investigator Award. He is a recipient of the National Science Foundation CAREER award, the United States Air Force Young Investigator Award, the Navy Young Investigator Award, and the Defense Advanced Research Projects Agency (DARPA) Young Faculty Award, as well as the Presidential Early Career Award for Scientists and Engineers (PECASE). In 2016 Prof. Buehler was awarded the the \u003Ca href=\"https://news.mit.edu/2016/markus-buehler-awarded-foresight-institute-feynman-prize-0524\"\u003EForesight Institute Feynman Prize\u003C/a\u003E for his advances in nanotechnology. In 2018, Buehler was selected as a Highly Cited Researcher by Clarivate Analytics. In 2019, he received the Materials Horizons Outstanding Paper Prize, and his work was recognized as a highly cited author by the Royal Society of Chemistry. A frequent collaborator with artists, he is a member of the MIT Center for Art, Science and Technology (CAST) Executive Committee. Buehler is heavily involved with startups and innovation, such as through his role on the Board of Directors of \u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E and as a member of the Scientific Advisor Board of \u003Ca href=\"https://www.safar.partners/#team\"\u003ESafar Partners\u003C/a\u003E (A Technology Venture Fund with Private Equity Vision). \u003C/p\u003E\u003Ch3\u003ELinks & Resources\u003C/h3\u003E\u003Cp\u003E\u003Ca href=\"https://www.rdworldonline.com/six-keys-to-generative-ai-success/\" title=\"Six keys to generative AI success\"\u003ESix keys to generative AI success\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2020/machine-learning-develop-materials-0520 \" title=\"Machine-learning tool could help develop tougher materials\"\u003EMachine-learning tool could help develop tougher materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"http://news.mit.edu/2020/qa-markus-buehler-setting-coronavirus-and-ai-inspired-proteins-to-music-0402\"\u003EQ&A: Markus Buehler on setting coronavirus and AI-inspired proteins to music\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.machinedesign.com/community/article/21120279/a-natural-approach-to-engineered-materials\"\u003EA “Natural” Approach to Engineered Materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/translating-proteins-music-0626\" title=\"Translating proteins into music, and back\"\u003ETranslating proteins into music, and back\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/conch-shells-better-helmets-body-armor-0526 \" title=\"Conch shells spill the secret to their toughness\"\u003EConch shells spill the secret to their toughness\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/paraffin-wrinkles-manufacture-graphene-0306\" title=\"Smoothing out the wrinkles in graphene\"\u003ESmoothing out the wrinkles in graphene\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/3-d-graphene-strongest-lightest-materials-0106\" title=\"Researchers design one of the strongest, lightest materials known\"\u003EResearchers design one of the strongest, lightest materials known\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2018/researchers-decode-molecule-gives-living-tissues-flexibility-0625\" title=\"Researchers decode molecule that gives living tissues their flexibility\"\u003EResearchers decode molecule that gives living tissues their flexibility\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/how-build-better-silk-1109\" title=\"How to build better silk\"\u003EHow to build better silk\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/bio-inspired-material-changes-shape-and-strengthens-in-response-to-environment-0320 \" title=\"Worm-inspired material strengthens, changes shape in response to its environment\"\u003EWorm-inspired material strengthens, changes shape in response to its environment\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2016/silk-based-filtration-material-breaks-barriers-0623 \" title=\"Silk-based filtration material breaks barriers\"\u003ESilk-based filtration material breaks barriers\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2015/collagen-mechanics-water-0122 \" title=\"New analysis explains collagen’s force\"\u003ENew analysis explains collagen’s force\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.safar.partners/#team \"\u003EScientific Advisor Board, Safar Partners (A Technology Venture Fund with Private Equity Vision)\u003C/a\u003E\u003Cbr\u003E \u003C/p\u003E", + "format": "full_html", + "processed": "\u003Cp\u003E\u003Ca href=\"http://cee.mit.edu/buehler\" target=\"_blank\"\u003EMarkus J. Buehler\u003C/a\u003E is the McAfee Professor of Engineering at MIT. Involved with startups, innovation and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  He directs the \u003Ca href=\"http://web.mit.edu/mbuehler/www/\" target=\"_blank\"\u003ELaboratory for Atomistic and Molecular Mechanics\u003C/a\u003E (LAMM), and is Principal Investigator on numerous national and international research programs. He combines bio-inspired materials design with high-throughput approaches to create materials with architectural features from the nano- to the macro-scale, and applies them to various domains that include composites for vehicles, coatings for energy technologies, and innovative and sustainable biomaterials. Using an array of theoretical, computational and experimental methods, his work seeks to understand the means by which nature creates materials, with applications in bio-inspired engineering. His most recent book, Biomateriomics, presents a new design paradigm for the analysis of biomaterials using a categorization approach that translates insights from disparate fields. In recent work he has developed a new framework to compose music based on proteins – the basic molecules of all life, as well as other physical phenomena such as fracture singularities, to explore similarities and differences across species, scales and between philosophical and physical models.  One of his goals is to use musical and sound design, aided by AI, as an abstract way to model, optimize and create new forms of autonomous matter from the bottom up – across scales (e.g., from nano to macro) and species (e.g., from humans to spiders). His work spans multiple disciplines and straddles the interface of science and art in multiple dimensions, both as a tool to educate and as a tool to understand and design.\u003C/p\u003E\u003Cp\u003EBuehler is a sought-after lecturer and has given hundreds of invited, keynote, and plenary talks throughout the world. His scholarly work is highly-cited and includes more than 450 articles on computational materials science, biomaterials, and nanotechnology, many in high-impact journals such as Nature, and Proceedings of the National Academy of Sciences. He authored two monographs in the areas of computational materials science and bio-inspired materials design, and is a founder of the emerging research area of materiomics. He is a dedicated educator and a gifted teacher, and has appeared on numerous TV and radio shows to explain the impact of his research to broad audiences. Buehler is the recipient of many awards including the Harold E. Edgerton Faculty Achievement Award, the Alfred Noble Prize, the Feynman Prize in Nanotechnology, the Leonardo da Vinci Award, and the Thomas J.R. Hughes Young Investigator Award. He is a recipient of the National Science Foundation CAREER award, the United States Air Force Young Investigator Award, the Navy Young Investigator Award, and the Defense Advanced Research Projects Agency (DARPA) Young Faculty Award, as well as the Presidential Early Career Award for Scientists and Engineers (PECASE). In 2016 Prof. Buehler was awarded the the \u003Ca href=\"https://news.mit.edu/2016/markus-buehler-awarded-foresight-institute-feynman-prize-0524\"\u003EForesight Institute Feynman Prize\u003C/a\u003E for his advances in nanotechnology. In 2018, Buehler was selected as a Highly Cited Researcher by Clarivate Analytics. In 2019, he received the Materials Horizons Outstanding Paper Prize, and his work was recognized as a highly cited author by the Royal Society of Chemistry. A frequent collaborator with artists, he is a member of the MIT Center for Art, Science and Technology (CAST) Executive Committee. Buehler is heavily involved with startups and innovation, such as through his role on the Board of Directors of \u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E and as a member of the Scientific Advisor Board of \u003Ca href=\"https://www.safar.partners/#team\"\u003ESafar Partners\u003C/a\u003E (A Technology Venture Fund with Private Equity Vision). \u003C/p\u003E\u003Ch3\u003ELinks & Resources\u003C/h3\u003E\u003Cp\u003E\u003Ca href=\"https://www.rdworldonline.com/six-keys-to-generative-ai-success/\" title=\"Six keys to generative AI success\"\u003ESix keys to generative AI success\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2020/machine-learning-develop-materials-0520 \" title=\"Machine-learning tool could help develop tougher materials\"\u003EMachine-learning tool could help develop tougher materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"http://news.mit.edu/2020/qa-markus-buehler-setting-coronavirus-and-ai-inspired-proteins-to-music-0402\"\u003EQ&A: Markus Buehler on setting coronavirus and AI-inspired proteins to music\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.machinedesign.com/community/article/21120279/a-natural-approach-to-engineered-materials\"\u003EA “Natural” Approach to Engineered Materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/translating-proteins-music-0626\" title=\"Translating proteins into music, and back\"\u003ETranslating proteins into music, and back\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/conch-shells-better-helmets-body-armor-0526 \" title=\"Conch shells spill the secret to their toughness\"\u003EConch shells spill the secret to their toughness\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/paraffin-wrinkles-manufacture-graphene-0306\" title=\"Smoothing out the wrinkles in graphene\"\u003ESmoothing out the wrinkles in graphene\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/3-d-graphene-strongest-lightest-materials-0106\" title=\"Researchers design one of the strongest, lightest materials known\"\u003EResearchers design one of the strongest, lightest materials known\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2018/researchers-decode-molecule-gives-living-tissues-flexibility-0625\" title=\"Researchers decode molecule that gives living tissues their flexibility\"\u003EResearchers decode molecule that gives living tissues their flexibility\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/how-build-better-silk-1109\" title=\"How to build better silk\"\u003EHow to build better silk\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/bio-inspired-material-changes-shape-and-strengthens-in-response-to-environment-0320 \" title=\"Worm-inspired material strengthens, changes shape in response to its environment\"\u003EWorm-inspired material strengthens, changes shape in response to its environment\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2016/silk-based-filtration-material-breaks-barriers-0623 \" title=\"Silk-based filtration material breaks barriers\"\u003ESilk-based filtration material breaks barriers\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2015/collagen-mechanics-water-0122 \" title=\"New analysis explains collagen’s force\"\u003ENew analysis explains collagen’s force\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.safar.partners/#team \"\u003EScientific Advisor Board, Safar Partners (A Technology Venture Fund with Private Equity Vision)\u003C/a\u003E\u003Cbr\u003E \u003C/p\u003E", + "summary": "" + }, + "field_featured_card_summary": "Markus J. Buehler is the McAfee Professor of Engineering and Head of the MIT Department of Civil and Environmental Engineering. His primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing, new manufacturing techniques, and advanced experimental testing.", + "field_first_name": "Markus J.", + "field_last_name": "Buehler", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp class=\"MsoNormal\"\u003E\u003Cspan style=\"font-size:12.0pt;font-family:"Arial",sans-serif\"\u003EMarkus J. Buehler is the McAfee Professor of Engineering. Involved with startups, innovation, and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  \u003Co:p\u003E\u003C/o:p\u003E\u003C/span\u003E\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp class=\"MsoNormal\"\u003E\u003Cspan style=\"font-size:12.0pt;font-family:"Arial",sans-serif\"\u003EMarkus J. Buehler is the McAfee Professor of Engineering. Involved with startups, innovation, and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  \u003Co:p\u003E\u003C/o:p\u003E\u003C/span\u003E\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Jerry McAfee (1940) Professor of Engineering, MIT" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/node_type?resourceVersion=id%3A13914" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/node_type?resourceVersion=id%3A13914" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", + "meta": { + "drupal_internal__target_id": 82 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/revision_uid?resourceVersion=id%3A13914" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/revision_uid?resourceVersion=id%3A13914" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/uid?resourceVersion=id%3A13914" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/uid?resourceVersion=id%3A13914" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", + "meta": { + "drupal_internal__target_id": 25 + } + }, + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/field_course_topics?resourceVersion=id%3A13914" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/field_course_topics?resourceVersion=id%3A13914" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "ec791786-4c3a-4e82-b217-4a20a9d88e00", + "meta": { + "drupal_internal__target_id": 195 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/field_faculty_photo?resourceVersion=id%3A13914" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/field_faculty_photo?resourceVersion=id%3A13914" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/field_programs?resourceVersion=id%3A13914" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/field_programs?resourceVersion=id%3A13914" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "734d2123-fc20-4582-b026-e6c78f428510", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510?resourceVersion=id%3A11545" + } + }, + "attributes": { + "drupal_internal__nid": 303, + "drupal_internal__vid": 11545, + "langcode": "en", + "revision_timestamp": "2023-03-17T15:49:45+00:00", + "status": true, + "title": "Edward Schiappa", + "created": "2019-05-06T14:35:44+00:00", + "changed": "2023-03-23T17:14:50+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/edward-schiappa", + "pid": 301, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003E\u003Ca href=\"http://cmsw.mit.edu/profile/ed-schiappa/\" target=\"_blank\"\u003EEdward Schiappa\u003C/a\u003E is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory. He has published 10 books and his research has appeared in such journals as \u003Cem\u003EPhilosophy & Rhetoric, Argumentation, Communication Monographs\u003C/em\u003E, and \u003Cem\u003ECommunication Theory\u003C/em\u003E. He has served as editor of Argumentation and Advocacy and has received the Douglas W. Ehninger Distinguished Rhetorical Scholar Award in 2000 and the Rhetorical and Communication Theory Distinguished Scholar Award in 2006. He was named a National Communication Association Distinguished Scholar in 2009.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003E\u003Ca href=\"http://cmsw.mit.edu/profile/ed-schiappa/\" target=\"_blank\"\u003EEdward Schiappa\u003C/a\u003E is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory. He has published 10 books and his research has appeared in such journals as \u003Cem\u003EPhilosophy & Rhetoric, Argumentation, Communication Monographs\u003C/em\u003E, and \u003Cem\u003ECommunication Theory\u003C/em\u003E. He has served as editor of Argumentation and Advocacy and has received the Douglas W. Ehninger Distinguished Rhetorical Scholar Award in 2000 and the Rhetorical and Communication Theory Distinguished Scholar Award in 2006. He was named a National Communication Association Distinguished Scholar in 2009.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": "Edward Schiappa is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory.", + "field_first_name": "Edward", + "field_last_name": "Schiappa", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EEdward Schiappa is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EEdward Schiappa is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "John E. Burchard Professor of Humanities and Co-chair of the Gender Equity Committee of the School of Humanities, Arts, & Social Sciences, MIT " + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/node_type?resourceVersion=id%3A11545" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/node_type?resourceVersion=id%3A11545" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/revision_uid?resourceVersion=id%3A11545" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/revision_uid?resourceVersion=id%3A11545" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/uid?resourceVersion=id%3A11545" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/uid?resourceVersion=id%3A11545" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", + "meta": { + "drupal_internal__target_id": 29 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/field_course_topics?resourceVersion=id%3A11545" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/field_course_topics?resourceVersion=id%3A11545" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "41e4a128-9190-4bf7-8d85-46e5f74a3bc5", + "meta": { + "drupal_internal__target_id": 196 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/field_faculty_photo?resourceVersion=id%3A11545" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/field_faculty_photo?resourceVersion=id%3A11545" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "9fabedbc-bb7b-4842-9e59-7ab6923d7b3b", + "meta": { + "drupal_internal__target_id": 36 + } + }, + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/field_programs?resourceVersion=id%3A11545" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/field_programs?resourceVersion=id%3A11545" + } + } + } + } + }, + { + "type": "node--faculty", + "id": "d0ff76b3-7150-47a5-8991-9924d3261a93", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93?resourceVersion=id%3A735" + } + }, + "attributes": { + "drupal_internal__nid": 251, + "drupal_internal__vid": 735, + "langcode": "en", + "revision_timestamp": "2019-04-29T14:08:22+00:00", + "status": true, + "title": "John Hart", + "created": "2019-04-29T14:07:12+00:00", + "changed": "2021-05-19T13:54:48+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/programs/faculty-profiles/john-hart", + "pid": 249, + "langcode": "en" + }, + "body": { + "value": "\u003Cp\u003E\u003Ca href=\"http://meche.mit.edu/people/faculty/ajhart@mit.edu\"\u003EJohn Hart\u003C/a\u003E is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\r\n\r\n\u003Cp\u003EJohn has published more than 125 papers in peer-reviewed journals and is co-inventor on over 50 patents, many of which have been licensed commercially. He has also co-founded three advanced manufacturing startup companies, including Desktop Metal. John has been recognized by prestigious awards from NSF, ONR, AFOSR, DARPA, ASME, and SME, by two R&D 100 awards, by several best paper awards, and most recently by the MIT Ruth and Joel Spira Award for Distinguished Teaching.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003E\u003Ca href=\"http://meche.mit.edu/people/faculty/ajhart@mit.edu\"\u003EJohn Hart\u003C/a\u003E is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\n\n\u003Cp\u003EJohn has published more than 125 papers in peer-reviewed journals and is co-inventor on over 50 patents, many of which have been licensed commercially. He has also co-founded three advanced manufacturing startup companies, including Desktop Metal. John has been recognized by prestigious awards from NSF, ONR, AFOSR, DARPA, ASME, and SME, by two R&D 100 awards, by several best paper awards, and most recently by the MIT Ruth and Joel Spira Award for Distinguished Teaching.\u003C/p\u003E\n", + "summary": "" + }, + "field_featured_card_summary": "John Hart is Associate Professor of Mechanical Engineering and Mitsui Career Development Professor of Contemporary Technology at MIT. John leads the Mechanosynthesis Group, which aims to accelerate the science and technology of advanced manufacturing in areas including additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.", + "field_first_name": "John", + "field_last_name": "Hart", + "field_meta_tags": null, + "field_person_summary": { + "value": "\u003Cp\u003EJohn Hart is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\r\n", + "format": "full_html", + "processed": "\u003Cp\u003EJohn Hart is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\n" + }, + "field_professional_titles": [ + "Professor of Mechanical Engineering, MIT", + "Mitsui Career Development Professor of Contemporary Technology, MIT" + ] + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "9ebc3566-c0be-4ad8-b407-138bee605352", + "meta": { + "drupal_internal__target_id": "faculty" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/node_type?resourceVersion=id%3A735" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/node_type?resourceVersion=id%3A735" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/revision_uid?resourceVersion=id%3A735" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/revision_uid?resourceVersion=id%3A735" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "2e1ed9b2-0539-45dc-8107-02714722578b", + "meta": { + "drupal_internal__target_id": 7 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/uid?resourceVersion=id%3A735" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/uid?resourceVersion=id%3A735" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", + "meta": { + "drupal_internal__target_id": 25 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/field_course_topics?resourceVersion=id%3A735" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/field_course_topics?resourceVersion=id%3A735" + } + } + }, + "field_faculty_photo": { + "data": { + "type": "media--person_photo", + "id": "20ef9f9a-7804-4521-9bd9-8d9f57d7b725", + "meta": { + "drupal_internal__target_id": 164 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/field_faculty_photo?resourceVersion=id%3A735" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/field_faculty_photo?resourceVersion=id%3A735" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/field_programs?resourceVersion=id%3A735" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/field_programs?resourceVersion=id%3A735" + } + } + } + } + } + ], + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_lead_instructors?resourceVersion=id%3A14202" + } + } +} diff --git a/test_json/professional_ed/professional_ed_program_topics.json b/test_json/professional_ed/professional_ed_program_topics.json new file mode 100644 index 0000000000..3d12234e21 --- /dev/null +++ b/test_json/professional_ed/professional_ed_program_topics.json @@ -0,0 +1,103 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7?resourceVersion=id%3A28" + } + }, + "attributes": { + "drupal_internal__tid": 28, + "drupal_internal__revision_id": 28, + "langcode": "en", + "revision_created": null, + "status": true, + "name": "Innovation", + "description": null, + "weight": 7, + "changed": "2022-02-02T11:13:28+00:00", + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": null, + "pid": null, + "langcode": "en" + } + }, + "relationships": { + "vid": { + "data": { + "type": "taxonomy_vocabulary--taxonomy_vocabulary", + "id": "2b2e5293-82a3-451e-9cdd-2a4d317a594e", + "meta": { + "drupal_internal__target_id": "topics" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/vid?resourceVersion=id%3A28" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/vid?resourceVersion=id%3A28" + } + } + }, + "revision_user": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/revision_user?resourceVersion=id%3A28" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/revision_user?resourceVersion=id%3A28" + } + } + }, + "parent": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "virtual", + "meta": { + "links": { + "help": { + "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", + "meta": { + "about": "Usage and meaning of the 'virtual' resource identifier." + } + } + } + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/parent?resourceVersion=id%3A28" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/parent?resourceVersion=id%3A28" + } + } + } + } + } + ], + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_topics?resourceVersion=id%3A14202" + } + } +} diff --git a/test_json/professional_ed/professional_ed_resources.json b/test_json/professional_ed/professional_ed_resources.json new file mode 100644 index 0000000000..eac2fdec82 --- /dev/null +++ b/test_json/professional_ed/professional_ed_resources.json @@ -0,0 +1,738 @@ +{ + "jsonapi": { + "version": "1.0", + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/" + } + } + } + }, + "data": [ + { + "type": "node--course", + "id": "9c0692c9-7216-4be1-b432-fbeefec1da1f", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f?resourceVersion=id%3A14202" + } + }, + "attributes": { + "drupal_internal__nid": 939, + "drupal_internal__vid": 14202, + "langcode": "en", + "revision_timestamp": "2024-04-29T16:47:58+00:00", + "status": true, + "title": "Professional Certificate Program in Innovation & Technology", + "created": "2022-10-26T16:21:34+00:00", + "changed": "2024-04-29T16:47:58+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/course-catalog/professional-certificate-program-innovation-technology", + "pid": 974, + "langcode": "en" + }, + "body": { + "value": "The full program description.", + "format": "full_html", + "processed": "The full program description.", + "summary": "The program summary description." + }, + "field_ceus": null, + "field_course_alert": { + "value": "\u003Ca href=\"https://event.on24.com/wcc/r/4433515/1DB80129B987F4A2E6E2F23BBFA641A4?partnerref=pe-website\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-ON24-OpenHouse-InnovationCertificate-Banner-900x250.jpg\" data-entity-uuid=\"64038f62-532b-4bc8-b07c-5f428e63f6d3\" data-entity-type=\"file\" alt=\"On Demand Open House Innovation\" width=\"900\" height=\"250\"\u003E\u003C/a\u003E", + "format": "full_html", + "processed": "\u003Ca href=\"https://event.on24.com/wcc/r/4433515/1DB80129B987F4A2E6E2F23BBFA641A4?partnerref=pe-website\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-ON24-OpenHouse-InnovationCertificate-Banner-900x250.jpg\" data-entity-uuid=\"64038f62-532b-4bc8-b07c-5f428e63f6d3\" data-entity-type=\"file\" alt=\"On Demand Open House Innovation\" width=\"900\" height=\"250\" loading=\"lazy\"\u003E\u003C/a\u003E" + }, + "field_course_dates": [ + { + "value": "2024-06-03", + "end_value": "2024-07-28" + } + ], + "field_course_fee": 28000, + "field_course_length": null, + "field_course_location": "On Campus and Live Virtual", + "field_course_tbd": null, + "field_course_updates_url": { + "uri": "https://professional.mit.edu/professional-certificate-program-innovation-technology-updates", + "title": "", + "options": [] + }, + "field_course_webinar_url": { + "uri": "https://event.on24.com/wcc/r/4140918/0A5FE67EA57D996728E57B0C3C51F49E?partenref=pewebsite", + "title": "", + "options": [] + }, + "field_custom_buttons": [], + "field_do_not_show_in_catalog": false, + "field_featured_course_summary": "The featured program summary.", + "field_meta_tags": null, + "field_registration_deadline": null, + "field_registration_url": { + "uri": "https://mitpe.force.com/portal/s/registration-programs?prcode=iCert", + "title": "", + "options": [] + }, + "field_searchable_keywords": "Professional Certificate Program in Innovation & Technology, English, Sang-Gook Kim, David Niño, John Hart, Reza Rahaman, Matthew Kressy, Blade Kotelly, Michael Davies, Edward Schiappa, Markus J. Buehler, Erdin Beshimov, Eric von Hippel" + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "81df3420-08d3-4f28-9f15-d0ede0484735", + "meta": { + "drupal_internal__target_id": "course" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/node_type?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/node_type?resourceVersion=id%3A14202" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "7c58ac47-e063-4ca3-945c-396f3947878a", + "meta": { + "drupal_internal__target_id": 83 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/revision_uid?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/revision_uid?resourceVersion=id%3A14202" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", + "meta": { + "drupal_internal__target_id": 78 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/uid?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/uid?resourceVersion=id%3A14202" + } + } + }, + "field_course_certificate": { + "data": [ + { + "type": "taxonomy_term--course_certificates", + "id": "9490f0f8-bd9d-4274-87ff-6d3ed50fe981", + "meta": { + "drupal_internal__target_id": 20 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_certificate?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_certificate?resourceVersion=id%3A14202" + } + } + }, + "field_course_flyer": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_flyer?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_flyer?resourceVersion=id%3A14202" + } + } + }, + "field_course_schedule": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_schedule?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_schedule?resourceVersion=id%3A14202" + } + } + }, + "field_course_status": { + "data": { + "type": "taxonomy_term--course_", + "id": "5d1c1a44-db2d-4a2e-b45f-f83e4636fbd9", + "meta": { + "drupal_internal__target_id": 14 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_status?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_status?resourceVersion=id%3A14202" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_topics?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_topics?resourceVersion=id%3A14202" + } + } + }, + "field_featured_course_image": { + "data": { + "type": "media--featured_course_image", + "id": "ee5380c6-259e-484c-aba5-1e43e2635acc", + "meta": { + "drupal_internal__target_id": 1216 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_featured_course_image?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_featured_course_image?resourceVersion=id%3A14202" + } + } + }, + "field_header_image": { + "data": { + "type": "media--header_image", + "id": "ec734233-e506-47f6-bd87-93ca4a62f26e", + "meta": { + "drupal_internal__target_id": 594 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_header_image?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_header_image?resourceVersion=id%3A14202" + } + } + }, + "field_instructors": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_instructors?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_instructors?resourceVersion=id%3A14202" + } + } + }, + "field_lead_instructors": { + "data": [ + { + "type": "node--faculty", + "id": "0d18fecb-0274-4268-b4dd-6ea7ac6a36de", + "meta": { + "drupal_internal__target_id": 286 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_lead_instructors?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_lead_instructors?resourceVersion=id%3A14202" + } + } + }, + "field_location_tag": { + "data": { + "type": "taxonomy_term--course_location", + "id": "71d611cf-0d3b-49c1-8a92-a9be3d004c0e", + "meta": { + "drupal_internal__target_id": 11 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_location_tag?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_location_tag?resourceVersion=id%3A14202" + } + } + }, + "field_paragraphs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_paragraphs?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_paragraphs?resourceVersion=id%3A14202" + } + } + }, + "field_program_courses": { + "data": [ + { + "type": "node--course", + "id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58", + "meta": { + "drupal_internal__target_id": 1239 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_program_courses?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_program_courses?resourceVersion=id%3A14202" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_programs?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_programs?resourceVersion=id%3A14202" + } + } + }, + "field_subtopic": { + "data": [ + { + "type": "taxonomy_term--subtopic", + "id": "dc2c3d2d-ab5f-4f28-bea7-31076c13b0c7", + "meta": { + "drupal_internal__target_id": 61 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_subtopic?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_subtopic?resourceVersion=id%3A14202" + } + } + }, + "field_tabbed_content": { + "data": { + "type": "paragraph--tabbed_content", + "id": "7a52085f-7c6f-4c7c-a6aa-827a363bb8eb", + "meta": { + "target_revision_id": 111155, + "drupal_internal__target_id": 4225 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_tabbed_content?resourceVersion=id%3A14202" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_tabbed_content?resourceVersion=id%3A14202" + } + } + } + } + }, + { + "type": "node--course", + "id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58", + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58?resourceVersion=id%3A14212" + } + }, + "attributes": { + "drupal_internal__nid": 1239, + "drupal_internal__vid": 14212, + "langcode": "en", + "revision_timestamp": "2024-04-30T18:34:50+00:00", + "status": true, + "title": "Product Innovation in the Age of AI", + "created": "2024-04-01T16:18:13+00:00", + "changed": "2024-04-30T18:34:50+00:00", + "promote": false, + "sticky": false, + "default_langcode": true, + "revision_translation_affected": true, + "metatag": null, + "path": { + "alias": "/course-catalog/product-innovation-age-ai", + "pid": 1306, + "langcode": "en" + }, + "body": { + "value": "The full course description.", + "format": "full_html", + "processed": "The full course description.", + "summary": "The course summary description." + }, + "field_ceus": "1.8", + "field_course_alert": { + "value": "\u003Ca href=\"https://mit.zoom.us/meeting/register/tJIuceqtrTItHdTqIqrsp6EfA9VWQimNxocj#/registration\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-OpenHouse-ProductInnovationInTheAgeOfAI-email-banner-600x150.jpg\" data-entity-uuid=\"03efb6ca-bbee-4369-a737-b82f965a4a02\" data-entity-type=\"file\" alt=\"open house\" width=\"601\" height=\"151\"\u003E\u003C/a\u003E", + "format": "full_html", + "processed": "\u003Ca href=\"https://mit.zoom.us/meeting/register/tJIuceqtrTItHdTqIqrsp6EfA9VWQimNxocj#/registration\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-OpenHouse-ProductInnovationInTheAgeOfAI-email-banner-600x150.jpg\" data-entity-uuid=\"03efb6ca-bbee-4369-a737-b82f965a4a02\" data-entity-type=\"file\" alt=\"open house\" width=\"601\" height=\"151\" loading=\"lazy\"\u003E\u003C/a\u003E" + }, + "field_course_dates": [ + { + "value": "2024-07-29", + "end_value": "2024-07-31" + } + ], + "field_course_fee": 3600, + "field_course_length": "3 Days", + "field_course_location": "On Campus", + "field_course_tbd": null, + "field_course_updates_url": { + "uri": "https://professional.mit.edu/product-innovation-age-ai-updates", + "title": "", + "options": [] + }, + "field_course_webinar_url": null, + "field_custom_buttons": [], + "field_do_not_show_in_catalog": false, + "field_featured_course_summary": "The featured course summary.", + "field_meta_tags": null, + "field_registration_deadline": "2024-07-08", + "field_registration_url": { + "uri": "https://mitpe.my.site.com/portal/s/registration-courses?cocode=PPISUM2024", + "title": "", + "options": [] + }, + "field_searchable_keywords": "Product Innovation, AI, Innovation, Practical Application, Short Programs, Technology, Eric von Hippel, Erdin Beshimov" + }, + "relationships": { + "node_type": { + "data": { + "type": "node_type--node_type", + "id": "81df3420-08d3-4f28-9f15-d0ede0484735", + "meta": { + "drupal_internal__target_id": "course" + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/node_type?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/node_type?resourceVersion=id%3A14212" + } + } + }, + "revision_uid": { + "data": { + "type": "user--user", + "id": "7c58ac47-e063-4ca3-945c-396f3947878a", + "meta": { + "drupal_internal__target_id": 83 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/revision_uid?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/revision_uid?resourceVersion=id%3A14212" + } + } + }, + "uid": { + "data": { + "type": "user--user", + "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", + "meta": { + "drupal_internal__target_id": 82 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/uid?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/uid?resourceVersion=id%3A14212" + } + } + }, + "field_course_certificate": { + "data": [ + { + "type": "taxonomy_term--course_certificates", + "id": "9490f0f8-bd9d-4274-87ff-6d3ed50fe981", + "meta": { + "drupal_internal__target_id": 20 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_certificate?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_certificate?resourceVersion=id%3A14212" + } + } + }, + "field_course_flyer": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_flyer?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_flyer?resourceVersion=id%3A14212" + } + } + }, + "field_course_schedule": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_schedule?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_schedule?resourceVersion=id%3A14212" + } + } + }, + "field_course_status": { + "data": { + "type": "taxonomy_term--course_", + "id": "5d1c1a44-db2d-4a2e-b45f-f83e4636fbd9", + "meta": { + "drupal_internal__target_id": 14 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_status?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_status?resourceVersion=id%3A14212" + } + } + }, + "field_course_topics": { + "data": [ + { + "type": "taxonomy_term--topics", + "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", + "meta": { + "drupal_internal__target_id": 28 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_topics?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_topics?resourceVersion=id%3A14212" + } + } + }, + "field_featured_course_image": { + "data": null, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_featured_course_image?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_featured_course_image?resourceVersion=id%3A14212" + } + } + }, + "field_header_image": { + "data": { + "type": "media--header_image", + "id": "0b8897cc-987c-4109-b46b-3227c23e0c00", + "meta": { + "drupal_internal__target_id": 1710 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_header_image?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_header_image?resourceVersion=id%3A14212" + } + } + }, + "field_instructors": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_instructors?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_instructors?resourceVersion=id%3A14212" + } + } + }, + "field_lead_instructors": { + "data": [ + { + "type": "node--faculty", + "id": "0079dcfc-7828-49dc-b60a-abd147b6972e", + "meta": { + "drupal_internal__target_id": 1033 + } + }, + { + "type": "node--faculty", + "id": "e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde", + "meta": { + "drupal_internal__target_id": 1034 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_lead_instructors?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_lead_instructors?resourceVersion=id%3A14212" + } + } + }, + "field_location_tag": { + "data": { + "type": "taxonomy_term--course_location", + "id": "71d611cf-0d3b-49c1-8a92-a9be3d004c0e", + "meta": { + "drupal_internal__target_id": 11 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_location_tag?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_location_tag?resourceVersion=id%3A14212" + } + } + }, + "field_paragraphs": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_paragraphs?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_paragraphs?resourceVersion=id%3A14212" + } + } + }, + "field_program_courses": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_program_courses?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_program_courses?resourceVersion=id%3A14212" + } + } + }, + "field_programs": { + "data": [ + { + "type": "taxonomy_term--programs", + "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", + "meta": { + "drupal_internal__target_id": 38 + } + } + ], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_programs?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_programs?resourceVersion=id%3A14212" + } + } + }, + "field_subtopic": { + "data": [], + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_subtopic?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_subtopic?resourceVersion=id%3A14212" + } + } + }, + "field_tabbed_content": { + "data": { + "type": "paragraph--tabbed_content", + "id": "e836c313-5d2b-4a5b-ae0e-9871e895ec40", + "meta": { + "target_revision_id": 111294, + "drupal_internal__target_id": 5286 + } + }, + "links": { + "related": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_tabbed_content?resourceVersion=id%3A14212" + }, + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_tabbed_content?resourceVersion=id%3A14212" + } + } + } + } + } + ], + "links": { + "self": { + "href": "https://professional.mit.edu/jsonapi/node/course" + } + } +} From f7c4259d56673a3a7dd01ced71cf46e68c9a7562 Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Thu, 1 Aug 2024 14:44:10 -0400 Subject: [PATCH 02/10] Use the new api endpoint for Professional Education --- learning_resources/etl/mitpe.py | 309 ++++++------------ learning_resources/etl/mitpe_test.py | 4 +- .../commands/transfer_list_resources.py | 17 +- learning_resources/utils.py | 9 +- 4 files changed, 110 insertions(+), 229 deletions(-) diff --git a/learning_resources/etl/mitpe.py b/learning_resources/etl/mitpe.py index 5d412c2ad9..bed7fdc0c5 100644 --- a/learning_resources/etl/mitpe.py +++ b/learning_resources/etl/mitpe.py @@ -2,47 +2,32 @@ import copy import html -import json import logging +import re from datetime import UTC, datetime -from hashlib import md5 from urllib.parse import urljoin from zoneinfo import ZoneInfo import requests from django.conf import settings -from django.utils.html import strip_tags from learning_resources.constants import ( CertificationType, - LearningResourceFormat, LearningResourceType, OfferedBy, PlatformType, ) from learning_resources.etl.constants import ETLSource from learning_resources.etl.utils import transform_format, transform_topics -from main.utils import clean_data, now_in_utc +from main.utils import clean_data log = logging.getLogger(__name__) BASE_URL = "https://professional.mit.edu/" OFFERED_BY = {"code": OfferedBy.mitpe.name} -UNIQUE_FIELD = "url" -LOCATION_TAGS_DICT = { - 11: "On Campus", - 12: "Online", - 50: "Blended", - 53: "Live Virtual", - 105: "In Person", -} -# 14: open, 15: closed, 17: waitlisted -STATUS_DICT = {14: True, 15: False, 17: True} - - -def _fetch_data(url, params=None) -> list[dict]: +def _fetch_data(url, page=0) -> list[dict]: """ Fetch data from the Professional Education API @@ -53,31 +38,15 @@ def _fetch_data(url, params=None) -> list[dict]: Yields: list[dict]: A list of course or program data """ - if not params: - params = {} - while url: - response = requests.get( + params = {"page": page} + has_results = True + while has_results: + results = requests.get( url, params=params, timeout=settings.REQUESTS_TIMEOUT ).json() - results = response["data"] - + has_results = len(results) > 0 yield from results - url = response.get("links", {}).get("next", {}).get("href") - - -def get_related_object(url: str) -> dict: - """ - Get the related object data for a resource - - Args: - url(str): The url to fetch data from - - Yields: - dict: JSON data representing a related object - - """ - response = requests.get(url, timeout=settings.REQUESTS_TIMEOUT).json() - return response["data"] + params["page"] += 1 def extract() -> list[dict]: @@ -87,10 +56,10 @@ def extract() -> list[dict]: Returns: list[dict]: list of raw course or program data """ - if settings.PROFESSIONAL_EDUCATION_API_URL: - return list(_fetch_data(settings.PROFESSIONAL_EDUCATION_API_URL)) + if settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL: + return list(_fetch_data(settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL)) else: - log.warning("Missing required setting PROFESSIONAL_EDUCATION_API_URL") + log.warning("Missing required setting PROFESSIONAL_EDUCATION_RESOURCES_API_URL") return [] @@ -105,40 +74,17 @@ def parse_topics(resource_data: dict) -> list[dict]: Returns: list of dict: list containing topic dicts with a name attribute """ - topic_names = [] - subtopic_names = [] - topic_relationships = resource_data["relationships"]["field_course_topics"] - topics_url = topic_relationships["links"].get("related", {}).get("href") - if topic_relationships["data"] and topics_url: - topic_details = _fetch_data(topics_url) - topic_names = [ - ":".join( - [ - topic_name.strip() - for topic_name in topic["attributes"]["name"].split(":") - ] - ) - for topic in topic_details - ] - subtopic_relationships = resource_data["relationships"]["field_subtopic"] - subtopics_url = subtopic_relationships["links"].get("related", {}).get("href") - if subtopic_relationships["data"] and subtopics_url: - subtopic_details = _fetch_data(subtopics_url) - subtopic_names = [ - ":".join( - [ - subtopic_name.strip() - for subtopic_name in strip_tags( - html.unescape( - subtopic["attributes"]["description"]["processed"] - ) - ).split(":") - ] - ) - for subtopic in subtopic_details - ] + extracted_topics = resource_data["topics"] + if not extracted_topics: + return [] + topics = [ + ":".join(topic.split(":")[1:]).strip() + for topic in extracted_topics.split("|") + if topic + ] return transform_topics( - [{"name": topic_name} for topic_name in (topic_names + subtopic_names)] + [{"name": html.unescape(topic_name)} for topic_name in topics if topic_name], + OfferedBy.mitpe.name, ) @@ -147,54 +93,32 @@ def parse_instructors(resource_data: dict) -> list[dict]: Get a list of instructors for a resource """ instructors = [] - for attribute in ["field_lead_instructors", "field_instructors"]: - instructors_data = resource_data["relationships"][attribute] - instructors_url = instructors_data["links"].get("related", {}).get("href") - if instructors_data["data"] and instructors_url: - instructor_data = _fetch_data(instructors_url) - instructors.extend( - [ - { - "full_name": instructor["attributes"]["title"], - "last_name": instructor["attributes"]["field_last_name"], - "first_name": instructor["attributes"]["field_first_name"], - } - for instructor in instructor_data - ] - ) + for attribute in ["lead_instructors", "instructors"]: + instructors.extend( + [ + {"full_name": html.unescape(instructor)} + for instructor in resource_data[attribute].split("|") + ] + ) return instructors -def parse_image(document: dict) -> dict or None: +def parse_image(resource_data: dict) -> dict or None: """ Create a dict object representing the resource image Args: - document: course or program data + resource_data: course or program data Returns: dict: json representation of the image if it exists """ - img_url = ( - document["relationships"] - .get("field_header_image", {}) - .get("links", {}) - .get("related", {}) - .get("href") - ) - img_metadata = get_related_object(img_url) - if img_metadata: - field_image = img_metadata["relationships"]["field_media_image"] - img_data_url = field_image["links"]["related"]["href"] - img_src_metadata = get_related_object(img_data_url) - if img_src_metadata: - img_path = img_src_metadata["attributes"]["uri"]["url"] - img_src = urljoin(BASE_URL, img_path) - return { - "alt": field_image.get("data", {}).get("meta", {}).get("alt"), - "description": field_image.get("data", {}).get("meta", {}).get("title"), - "url": img_src, - } + img_src = resource_data["image__src"] + if img_src: + return { + "alt": resource_data["image__alt"], + "url": urljoin(BASE_URL, img_src), + } return None @@ -217,36 +141,30 @@ def parse_date(date_str: str) -> datetime or None: return None -def parse_format(location_tag: dict) -> list[str]: +def parse_resource_url(resource_data: dict) -> str: """ - Convert a string to a list of resource learning formats + Return the url for the resource Args: - location_tag: dict representing the resource lcoation tag + resource_data: course or program data Returns: - list of str: list of resource formats + str: url for the resource """ - location_tag_id = ( - location_tag.get("data", {}).get("meta", {}).get("drupal_internal__target_id") - ) - if location_tag_id: - return transform_format(LOCATION_TAGS_DICT.get(location_tag_id)) - else: - return [LearningResourceFormat.online.name] + return urljoin(BASE_URL, resource_data["url"]) -def parse_resource_url(resource_data: dict) -> str: +def clean_title(title: str) -> str: """ - Return the url for the resource + Clean the title of the resource Args: - resource_data: course or program data + title: title of the resource Returns: - str: url for the resource + str: cleaned title """ - return urljoin(BASE_URL, resource_data["attributes"]["path"]["alias"]) + return html.unescape(title) def parse_description(resource_data: dict) -> str: @@ -259,10 +177,7 @@ def parse_description(resource_data: dict) -> str: Returns: str: description for the resource """ - summary = resource_data["attributes"]["field_featured_course_summary"] - if summary: - return clean_data(summary) - return clean_data(resource_data["attributes"]["body"]["processed"]) + return clean_data(resource_data["description"]) def parse_resource_type(resource_data: dict) -> str: @@ -275,14 +190,15 @@ def parse_resource_type(resource_data: dict) -> str: Returns: str: type of the resource (course or program) """ - course_certificate_id = 104 - certificate_ids = [ - cert["meta"]["drupal_internal__target_id"] - for cert in resource_data["relationships"]["field_course_certificate"]["data"] - ] - if course_certificate_id in certificate_ids: - return LearningResourceType.course.name - return LearningResourceType.program.name + if resource_data["resource_type"]: + return resource_data["resource_type"] + else: + # Determine based on certificate data + if "Certificate of Completion" in resource_data["course_certificate"].split( + "|" + ): + return LearningResourceType.course.name + return LearningResourceType.program.name def _transform_runs(resource_data: dict) -> list[dict]: @@ -295,59 +211,29 @@ def _transform_runs(resource_data: dict) -> list[dict]: Returns: list[dict]: normalized course/program run data """ - runs = [] - resource_dates = resource_data["attributes"]["field_course_dates"] - for resource_date in resource_dates: - start_date = parse_date(resource_date.get("value")) - end_date = parse_date(resource_date.get("end_value")) - enrollment_end_date = parse_date( - resource_data["attributes"]["field_registration_deadline"] - ) - dates_hash = md5(json.dumps(resource_dates).encode("utf-8")).hexdigest() # noqa: S324 - price = resource_data["attributes"]["field_course_fee"] - now = now_in_utc() - # Unpublish runs w/past enrollment end date or resource end date - published = not ( - (enrollment_end_date and enrollment_end_date < now) - or (end_date and end_date < now) - ) - if published: - runs.append( - { - "run_id": f'{resource_data["id"]}_{dates_hash}', - "title": resource_data["attributes"]["title"], - "start_date": start_date, - "end_date": end_date, - "enrollment_end": enrollment_end_date, - "published": published, - "prices": [price] if price else [], - "url": parse_resource_url(resource_data), - "instructors": parse_instructors(resource_data), - } - ) - return runs - - -def parse_published(resource_data: dict, runs: list[dict]) -> bool: - """ - Return the published status of the resource - - Args: - resource_data: course or program data - runs: list of course or program runs - - Returns: - bool: published status of the resource - """ - return ( - STATUS_DICT[ - resource_data["relationships"]["field_course_status"]["data"]["meta"][ - "drupal_internal__target_id" - ] - ] - and not resource_data["attributes"]["field_do_not_show_in_catalog"] - and len([run for run in runs if run["published"] is True]) > 0 + runs_data = zip( + resource_data["run__readable_id"].split("|"), + resource_data["start_date"].split("|"), + resource_data["end_date"].split("|"), + resource_data["enrollment_end_date"].split("|"), ) + return [ + { + "run_id": run_data[0], + "title": clean_title(resource_data["title"]), + "description": parse_description(resource_data), + "start_date": parse_date(run_data[1]), + "end_date": parse_date(run_data[2]), + "enrollment_end": parse_date(run_data[3]), + "published": True, + "prices": [re.sub(r"[^0-9\\.]", "", resource_data["price"])] + if resource_data["price"] + else [], + "url": parse_resource_url(resource_data), + "instructors": parse_instructors(resource_data), + } + for run_data in runs_data + ] def transform_course(resource_data: dict) -> dict or None: @@ -364,30 +250,24 @@ def transform_course(resource_data: dict) -> dict or None: runs = _transform_runs(resource_data) if runs: return { - "readable_id": resource_data["id"], + "readable_id": resource_data["uuid"], "offered_by": copy.deepcopy(OFFERED_BY), "platform": PlatformType.mitpe.name, "etl_source": ETLSource.mitpe.name, "professional": True, "certification": True, "certification_type": CertificationType.professional.name, - "title": resource_data["attributes"]["title"], + "title": clean_title(resource_data["title"]), "url": parse_resource_url(resource_data), "image": parse_image(resource_data), "description": parse_description(resource_data), - "full_description": clean_data( - resource_data["attributes"]["body"]["processed"] - ), "course": { "course_numbers": [], }, - "learning_format": parse_format( - resource_data["relationships"]["field_location_tag"] - ), - "published": parse_published(resource_data, runs), + "learning_format": transform_format(resource_data["learning_format"]), + "published": True, "topics": parse_topics(resource_data), "runs": runs, - "unique_field": UNIQUE_FIELD, } return None @@ -405,33 +285,26 @@ def transform_program(resource_data: dict) -> dict or None: runs = _transform_runs(resource_data) if runs: return { - "readable_id": resource_data["id"], + "readable_id": resource_data["uuid"], "offered_by": copy.deepcopy(OFFERED_BY), "platform": PlatformType.mitpe.name, "etl_source": ETLSource.mitpe.name, "professional": True, "certification": True, "certification_type": CertificationType.professional.name, - "title": resource_data["attributes"]["title"], + "title": clean_title(resource_data["title"]), "url": parse_resource_url(resource_data), "image": parse_image(resource_data), "description": parse_description(resource_data), - "full_description": clean_data( - resource_data["attributes"]["body"]["processed"] - ), - "learning_format": parse_format( - resource_data["relationships"]["field_location_tag"] - ), - "published": parse_published(resource_data, runs), - "topics": parse_topics(resource_data), "course_ids": [ - course["id"] - for course in resource_data["relationships"]["field_program_courses"][ - "data" - ] + course_id + for course_id in resource_data["courses"].split("|") + if course_id ], + "learning_format": transform_format(resource_data["learning_format"]), + "published": True, + "topics": parse_topics(resource_data), "runs": runs, - "unique_field": UNIQUE_FIELD, } return None diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index 58b7504356..1344ff5b37 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -148,7 +148,7 @@ @pytest.fixture() def prof_ed_settings(settings): """Fixture to set Professional Education API URL""" - settings.PROFESSIONAL_EDUCATION_API_URL = "http://pro_edu_api.com" + settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL = "http://pro_edu_api.com" return settings @@ -193,7 +193,7 @@ def read_json(file_path): @pytest.mark.parametrize("prof_ed_api_url", ["http://pro_edd_api.com", None]) def test_extract(settings, mock_fetch_data, prof_ed_api_url): """Test extract function""" - settings.PROFESSIONAL_EDUCATION_API_URL = prof_ed_api_url + settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL = prof_ed_api_url with Path.open( Path("./test_json/professional_ed/professional_ed_resources.json"), "r" ) as file: diff --git a/learning_resources/management/commands/transfer_list_resources.py b/learning_resources/management/commands/transfer_list_resources.py index 03b4ab4e36..29a6749aa2 100644 --- a/learning_resources/management/commands/transfer_list_resources.py +++ b/learning_resources/management/commands/transfer_list_resources.py @@ -15,7 +15,12 @@ class Command(BaseCommand): help = "Migrate relationships from unpublished resources to published resources." def add_arguments(self, parser): - parser.add_argument("resource_type", type=str, help="Resource type to migrate") + parser.add_argument( + "from_resource_type", type=str, help="Resource type to migrate from" + ) + parser.add_argument( + "to_resource_type", type=str, help="Resource type to migrate to" + ) parser.add_argument( "match_field", type=str, help="Resource field to match resources by" ) @@ -38,19 +43,21 @@ def handle(self, *args, **options): # noqa: ARG002 Migrate relationships in learningpaths and userlists from unpublished resources to published replacement resources. """ - resource_type = options["resource_type"] + from_resource_type = options["from_resource_type"] + to_resource_type = options["to_resource_type"] match_field = options["match_field"] from_source = options["from_source"] to_source = options["to_source"] delete = options["delete"] self.stdout.write( - f"Migrate {resource_type} relationships from " - f"{from_source} to {to_source}, matching on {match_field}" + f"Migrate {from_resource_type} relationships from {from_source}" + f" to {to_resource_type}:{to_source}, matching on {match_field}" ) start = now_in_utc() unpublished, matching = transfer_list_resources( - resource_type, + from_resource_type, + to_resource_type, match_field, from_source, to_source, diff --git a/learning_resources/utils.py b/learning_resources/utils.py index c0c52be7b6..c0297ca2fa 100644 --- a/learning_resources/utils.py +++ b/learning_resources/utils.py @@ -629,8 +629,9 @@ def add_parent_topics_to_learning_resource(resource): _walk_lr_topic_parents(resource, topic.parent) -def transfer_list_resources( - resource_type: str, +def transfer_list_resources( # noqa: PLR0913 + from_resource_type: str, + to_resource_type: str, matching_field: str, from_source: str, to_source: str, @@ -652,7 +653,7 @@ def transfer_list_resources( tuple[int, int]: the number of unpublished and matching published resources """ unpublished_resources = LearningResource.objects.filter( - resource_type=resource_type, published=False, etl_source=from_source + resource_type=from_resource_type, published=False, etl_source=from_source ) unpublished_count = 0 published_count = 0 @@ -661,7 +662,7 @@ def transfer_list_resources( unique_value = getattr(resource, matching_field) published_replacement = LearningResource.objects.filter( **{matching_field: unique_value}, - resource_type=resource_type, + resource_type=to_resource_type, published=True, etl_source=to_source, ).first() From 392daf25aaf3cda385dc01de17f8e0f342d83c27 Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Thu, 1 Aug 2024 15:17:58 -0400 Subject: [PATCH 03/10] fix tests --- learning_resources/etl/mitpe_test.py | 388 ++-- .../professional_ed_course_image_1.json | 133 -- .../professional_ed_course_image_2.json | 59 - .../professional_ed_course_instructors.json | 316 --- .../professional_ed_course_topics.json | 103 - .../professional_ed_program_image_1.json | 133 -- .../professional_ed_program_image_2.json | 59 - .../professional_ed_program_instructors.json | 1760 ----------------- .../professional_ed_program_topics.json | 103 - .../professional_ed_resources.json | 738 ------- .../professional_ed_resources_0.json | 52 + .../professional_ed_resources_1.json | 27 + .../professional_ed_resources_2.json | 1 + 13 files changed, 256 insertions(+), 3616 deletions(-) delete mode 100644 test_json/professional_ed/professional_ed_course_image_1.json delete mode 100644 test_json/professional_ed/professional_ed_course_image_2.json delete mode 100644 test_json/professional_ed/professional_ed_course_instructors.json delete mode 100644 test_json/professional_ed/professional_ed_course_topics.json delete mode 100644 test_json/professional_ed/professional_ed_program_image_1.json delete mode 100644 test_json/professional_ed/professional_ed_program_image_2.json delete mode 100644 test_json/professional_ed/professional_ed_program_instructors.json delete mode 100644 test_json/professional_ed/professional_ed_program_topics.json delete mode 100644 test_json/professional_ed/professional_ed_resources.json create mode 100644 test_json/professional_ed/professional_ed_resources_0.json create mode 100644 test_json/professional_ed/professional_ed_resources_1.json create mode 100644 test_json/professional_ed/professional_ed_resources_2.json diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index 1344ff5b37..37a33db2e3 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -3,146 +3,172 @@ import datetime import json from pathlib import Path -from random import randint import pytest -from learning_resources.constants import LearningResourceFormat from learning_resources.etl import mitpe -from main.test_utils import any_instance_of, assert_json_equal -from main.utils import now_in_utc - -EXPECTED_COURSE = { - "readable_id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58", - "offered_by": {"code": "mitpe"}, - "platform": "mitpe", - "etl_source": "mitpe", - "professional": True, - "certification": True, - "certification_type": "professional", - "title": "Product Innovation in the Age of AI", - "url": "https://professional.mit.edu/course-catalog/product-innovation-age-ai", - "image": { - "alt": "product innovation in the age of AI", - "description": "", - "url": "https://professional.mit.edu/sites/default/files/2024-04/MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", +from main.test_utils import assert_json_equal + +EXPECTED_COURSES = [ + { + "readable_id": "a44c8b47-552c-45f9-b91b-854172201889", + "offered_by": {"code": "mitpe"}, + "platform": "mitpe", + "etl_source": "mitpe", + "professional": True, + "certification": True, + "certification_type": "professional", + "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", + "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", + "image": { + "alt": " Persuasive Communication Critical Thinking -web banner", + "url": "https://professional.mit.edu/sites/default/files/2022-01/1600x800.png", + }, + "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", + "course": {"course_numbers": []}, + "learning_format": ["online"], + "published": True, + "topics": [], + "runs": [ + { + "run_id": "7802023070620230907", + "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", + "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", + "start_date": datetime.datetime(2023, 7, 6, 4, 0, tzinfo=datetime.UTC), + "end_date": datetime.datetime(2023, 9, 7, 4, 0, tzinfo=datetime.UTC), + "enrollment_end": datetime.datetime( + 2023, 4, 25, 4, 0, tzinfo=datetime.UTC + ), + "published": True, + "prices": ["1870"], + "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", + "instructors": [{"full_name": "Edward Schiappa"}, {"full_name": ""}], + } + ], }, - "description": "The featured course summary.", - "full_description": "The full course description.", - "course": {"course_numbers": []}, - "learning_format": ["in_person"], - "published": True, - "topics": [{"name": "Innovation"}], - "runs": [ - { - "run_id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58_69fccd43e465859229fe22dc61f54b9a", - "title": "Product Innovation in the Age of AI", - "start_date": any_instance_of(datetime.datetime), - "end_date": any_instance_of(datetime.datetime), - "enrollment_end": any_instance_of(datetime.datetime), - "published": True, - "prices": [3600], - "url": "https://professional.mit.edu/course-catalog/product-innovation-age-ai", - "instructors": [ - { - "full_name": "Eric von Hippel", - "last_name": "von Hippel", - "first_name": "Eric", - }, - { - "full_name": "Erdin Beshimov", - "last_name": " Beshimov", - "first_name": "Erdin", - }, - ], - } - ], - "unique_field": "url", -} -EXPECTED_PROGRAM = { - "readable_id": "9c0692c9-7216-4be1-b432-fbeefec1da1f", - "offered_by": {"code": "mitpe"}, - "platform": "mitpe", - "etl_source": "mitpe", - "professional": True, - "certification": True, - "certification_type": "professional", - "title": "Professional Certificate Program in Innovation & Technology", - "url": "https://professional.mit.edu/course-catalog/professional-certificate-program-innovation-technology", - "image": { - "alt": "Innovation & Technology - Header Image", - "description": "", - "url": "https://professional.mit.edu/sites/default/files/2021-01/MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg", + { + "readable_id": "e3be75f6-f7c9-432b-9c24-70c7132e1583", + "offered_by": {"code": "mitpe"}, + "platform": "mitpe", + "etl_source": "mitpe", + "professional": True, + "certification": True, + "certification_type": "professional", + "title": "Design-Thinking and Innovation for Technical Leaders", + "url": "https://professional.mit.edu/course-catalog/design-thinking-and-innovation-technical-leaders", + "image": { + "alt": "Mastering Innovation &amp; Design-Thinking header ", + "url": "https://professional.mit.edu/sites/default/files/2020-08/MITPE-MasteringInnovationDesignThinking-website-banner-1600x800.jpg", + }, + "description": "Become a stronger leader of innovation and design-thinking in your workplace. Join us for a highly interactive and engaging course that will teach you powerful new approaches for creating innovative solutions, crafting vision that gets buy-in, and developing solutions that people love. You'll learn our proven 10-Step Design Process and gain the strategies and hands-on experience to make your mark as a leader of innovation. Don't miss this opportunity to take your leadership capabilities to the next level.\n\nThis course may be taken individually or as part of the Professional Certificate Program in Innovation and Technology.\n", + "course": {"course_numbers": []}, + "learning_format": ["in_person"], + "published": True, + "topics": [], + "runs": [ + { + "run_id": "4172023071720230719", + "title": "Design-Thinking and Innovation for Technical Leaders", + "description": "Become a stronger leader of innovation and design-thinking in your workplace. Join us for a highly interactive and engaging course that will teach you powerful new approaches for creating innovative solutions, crafting vision that gets buy-in, and developing solutions that people love. You'll learn our proven 10-Step Design Process and gain the strategies and hands-on experience to make your mark as a leader of innovation. Don't miss this opportunity to take your leadership capabilities to the next level.\n\nThis course may be taken individually or as part of the Professional Certificate Program in Innovation and Technology.\n", + "start_date": datetime.datetime(2023, 7, 17, 4, 0, tzinfo=datetime.UTC), + "end_date": datetime.datetime(2023, 7, 19, 4, 0, tzinfo=datetime.UTC), + "enrollment_end": datetime.datetime( + 2023, 6, 17, 4, 0, tzinfo=datetime.UTC + ), + "published": True, + "prices": ["3600"], + "url": "https://professional.mit.edu/course-catalog/design-thinking-and-innovation-technical-leaders", + "instructors": [ + {"full_name": "Blade Kotelly"}, + {"full_name": "Reza Rahaman"}, + {"full_name": ""}, + ], + } + ], }, - "description": "The featured program summary.", - "full_description": "The full program description.", - "learning_format": ["hybrid"], - "published": True, - "topics": [{"name": "Innovation"}], - "runs": [ - { - "run_id": "9c0692c9-7216-4be1-b432-fbeefec1da1f_5e5dcf98bcd8e20096b79a761de23dc6", - "title": "Professional Certificate Program in Innovation & Technology", - "start_date": any_instance_of(datetime.datetime), - "end_date": any_instance_of(datetime.datetime), - "enrollment_end": any_instance_of(datetime.datetime), - "published": True, - "prices": [28000], - "url": "https://professional.mit.edu/course-catalog/professional-certificate-program-innovation-technology", - "instructors": [ - { - "full_name": "Blade Kotelly", - "last_name": "Kotelly", - "first_name": "Blade", - }, - { - "full_name": "Reza Rahaman", - "last_name": "Rahaman", - "first_name": "Reza", - }, - { - "full_name": "Michael Davies", - "last_name": "Davies", - "first_name": "Michael", - }, - { - "full_name": "Sang-Gook Kim", - "last_name": "Kim", - "first_name": "Sang-Gook", - }, - { - "full_name": "Eric von Hippel", - "last_name": "von Hippel", - "first_name": "Eric", - }, - { - "full_name": "Erdin Beshimov", - "last_name": " Beshimov", - "first_name": "Erdin", - }, - { - "full_name": "Adam Berinsky", - "last_name": "Berinsky", - "first_name": "Adam", - }, - {"full_name": "David Niño", "last_name": "Niño", "first_name": "David"}, - { - "full_name": "Markus J. Buehler", - "last_name": "Buehler", - "first_name": "Markus J.", - }, - { - "full_name": "Edward Schiappa", - "last_name": "Schiappa", - "first_name": "Edward", +] +EXPECTED_PROGRAMS = [ + { + "readable_id": "790a82a4-8967-4b77-9342-4f6be5809abd", + "offered_by": {"code": "mitpe"}, + "platform": "mitpe", + "etl_source": "mitpe", + "professional": True, + "certification": True, + "certification_type": "professional", + "title": "Manufatura Inteligente: Produção na Indústria 4.0 (Portuguese)", + "url": "https://professional.mit.edu/course-catalog/manufatura-inteligente-producao-na-industria-40-portuguese", + "image": { + "alt": "Smart Manufacturing Header Image", + "url": "https://professional.mit.edu/sites/default/files/2020-08/Smart%20Manufacturing.jpg", + }, + "description": "A fábrica do futuro já está aqui. Participe do programa online Manufatura Inteligente: Produção na Indústria 4.0 e aproveite a experiência de mais de cem anos de colaboração do MIT com vários setores. Aprenda as chaves para criar uma indústria inteligente em qualquer escala e saiba como software, sensores e sistemas são integrados para essa finalidade. Com este programa interativo, você passará da criação de modelos a sistemas de fabricação e análise avançada de dados para desenvolver estratégias que gerem uma vantagem competitiva.\n", + "learning_format": ["online"], + "published": True, + "topics": [], + "runs": [ + { + "run_id": "7192023070620230914", + "title": "Manufatura Inteligente: Produção na Indústria 4.0 (Portuguese)", + "description": "A fábrica do futuro já está aqui. Participe do programa online Manufatura Inteligente: Produção na Indústria 4.0 e aproveite a experiência de mais de cem anos de colaboração do MIT com vários setores. Aprenda as chaves para criar uma indústria inteligente em qualquer escala e saiba como software, sensores e sistemas são integrados para essa finalidade. Com este programa interativo, você passará da criação de modelos a sistemas de fabricação e análise avançada de dados para desenvolver estratégias que gerem uma vantagem competitiva.\n", + "start_date": datetime.datetime(2023, 7, 6, 4, 0, tzinfo=datetime.UTC), + "end_date": datetime.datetime(2023, 9, 14, 4, 0, tzinfo=datetime.UTC), + "enrollment_end": datetime.datetime( + 2023, 7, 6, 4, 0, tzinfo=datetime.UTC + ), + "published": True, + "prices": ["1870"], + "url": "https://professional.mit.edu/course-catalog/manufatura-inteligente-producao-na-industria-40-portuguese", + "instructors": [{"full_name": ""}, {"full_name": "Brian Anthony"}], + } + ], + "courses": [ + { + "readable_id": "a44c8b47-552c-45f9-b91b-854172201889", + "offered_by": {"code": "mitpe"}, + "platform": "mitpe", + "etl_source": "mitpe", + "professional": True, + "certification": True, + "certification_type": "professional", + "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", + "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", + "image": { + "alt": " Persuasive Communication Critical Thinking -web banner", + "url": "https://professional.mit.edu/sites/default/files/2022-01/1600x800.png", }, - {"full_name": "John Hart", "last_name": "Hart", "first_name": "John"}, - ], - } - ], - "courses": [EXPECTED_COURSE], - "unique_field": "url", -} + "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", + "course": {"course_numbers": []}, + "learning_format": ["online"], + "published": True, + "topics": [], + "runs": [ + { + "run_id": "7802023070620230907", + "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", + "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", + "start_date": datetime.datetime( + 2023, 7, 6, 4, 0, tzinfo=datetime.UTC + ), + "end_date": datetime.datetime( + 2023, 9, 7, 4, 0, tzinfo=datetime.UTC + ), + "enrollment_end": datetime.datetime( + 2023, 4, 25, 4, 0, tzinfo=datetime.UTC + ), + "published": True, + "prices": ["1870"], + "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", + "instructors": [ + {"full_name": "Edward Schiappa"}, + {"full_name": ""}, + ], + } + ], + } + ], + } +] @pytest.fixture() @@ -163,29 +189,9 @@ def read_json(file_path): return mocker.patch( "learning_resources.etl.mitpe.requests.get", side_effect=[ - read_json("./test_json/professional_ed/professional_ed_resources.json"), - read_json( - "./test_json/professional_ed/professional_ed_program_instructors.json" - ), - read_json( - "./test_json/professional_ed/professional_ed_program_image_1.json" - ), - read_json( - "./test_json/professional_ed/professional_ed_program_image_2.json" - ), - read_json( - "./test_json/professional_ed/professional_ed_program_topics.json" - ), - read_json( - "./test_json/professional_ed/professional_ed_course_instructors.json" - ), - read_json( - "./test_json/professional_ed/professional_ed_course_image_1.json" - ), - read_json( - "./test_json/professional_ed/professional_ed_course_image_2.json" - ), - read_json("./test_json/professional_ed/professional_ed_course_topics.json"), + read_json("./test_json/professional_ed/professional_ed_resources_0.json"), + read_json("./test_json/professional_ed/professional_ed_resources_1.json"), + read_json("./test_json/professional_ed/professional_ed_resources_2.json"), ], ) @@ -194,68 +200,26 @@ def read_json(file_path): def test_extract(settings, mock_fetch_data, prof_ed_api_url): """Test extract function""" settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL = prof_ed_api_url - with Path.open( - Path("./test_json/professional_ed/professional_ed_resources.json"), "r" - ) as file: - expected = json.load(file)["data"] + expected = [] + for page in range(3): + with Path.open( + Path(f"./test_json/professional_ed/professional_ed_resources_{page}.json"), + "r", + ) as file: + expected.extend(json.load(file)) results = mitpe.extract() if prof_ed_api_url: - assert len(results) == 2 + assert len(results) == 3 assert_json_equal(results, expected) else: assert len(results) == 0 +@pytest.mark.django_db() def test_transform(mocker, mock_fetch_data, prof_ed_settings): """Test transform function, and effectivelu most other functions""" - mocker.patch( - "learning_resources.etl.mitpe.parse_date", - return_value=now_in_utc() + datetime.timedelta(days=randint(5, 10)), # noqa: S311 - ) - courses, programs = mitpe.transform(mitpe.extract()) - assert courses == [EXPECTED_COURSE] - assert programs == [EXPECTED_PROGRAM] - - -@pytest.mark.parametrize( - ("format_str", "expected"), - [ - ("On Campus", [LearningResourceFormat.in_person.name]), - ("Online", [LearningResourceFormat.online.name]), - ( - "Live Virtual OR On Campus", - [LearningResourceFormat.online.name, LearningResourceFormat.in_person.name], - ), - ( - "Live Virtual And On Campus", - [LearningResourceFormat.hybrid.name], - ), - ("Unrecognized", [LearningResourceFormat.online.name]), - ], -) -def test_parse_format(format_str, expected): - """Test parse_format function""" - assert sorted(mitpe.parse_format(format_str)) == sorted(expected) - - -@pytest.mark.parametrize( - ("enrollment_end", "end_date", "published_count"), - [ - (None, None, 1), - (None, "2020-01-01", 0), - ("2020-01-01", None, 0), - ("2020-01-01", "2120-01-01", 0), - ("2120-01-01", None, 1), - ("2120-01-01", "2020-01-01", 0), - ], -) -def test_transform_by_dates( - mock_fetch_data, prof_ed_settings, enrollment_end, end_date, published_count -): - """Transform should unpublish resources with past enrollment_end or end_dates""" - resource_data = mitpe.extract() - course_data = resource_data[1] - course_data["attributes"]["field_registration_deadline"] = enrollment_end - course_data["attributes"]["field_course_dates"][0]["end_value"] = end_date - courses = mitpe.transform([course_data])[0] - assert len(courses) == published_count + extracted = mitpe.extract() + assert len(extracted) == 3 + courses, programs = mitpe.transform(extracted) + assert courses == EXPECTED_COURSES + assert programs == EXPECTED_PROGRAMS diff --git a/test_json/professional_ed/professional_ed_course_image_1.json b/test_json/professional_ed/professional_ed_course_image_1.json deleted file mode 100644 index 782e651e3c..0000000000 --- a/test_json/professional_ed/professional_ed_course_image_1.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": { - "type": "media--header_image", - "id": "0b8897cc-987c-4109-b46b-3227c23e0c00", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00?resourceVersion=id%3A1812" - } - }, - "attributes": { - "drupal_internal__mid": 1710, - "drupal_internal__vid": 1812, - "langcode": "en", - "revision_created": "2024-04-26T18:07:42+00:00", - "status": true, - "name": "MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", - "created": "2024-04-26T18:07:42+00:00", - "changed": "2024-04-26T18:07:42+00:00", - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": null, - "pid": null, - "langcode": "en" - } - }, - "relationships": { - "bundle": { - "data": { - "type": "media_type--media_type", - "id": "ae6c4031-0599-4953-847d-c6aeb0681305", - "meta": { - "drupal_internal__target_id": "header_image" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/bundle?resourceVersion=id%3A1812" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/bundle?resourceVersion=id%3A1812" - } - } - }, - "revision_user": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/revision_user?resourceVersion=id%3A1812" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/revision_user?resourceVersion=id%3A1812" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", - "meta": { - "drupal_internal__target_id": 82 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/uid?resourceVersion=id%3A1812" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/uid?resourceVersion=id%3A1812" - } - } - }, - "thumbnail": { - "data": { - "type": "file--file", - "id": "bcfd7978-367e-4aaf-a82d-b55d90f2b731", - "meta": { - "alt": "product innovation in the age of AI", - "title": null, - "width": 1600, - "height": 800, - "drupal_internal__target_id": 2582 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/thumbnail?resourceVersion=id%3A1812" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/thumbnail?resourceVersion=id%3A1812" - } - } - }, - "field_media_image": { - "data": { - "type": "file--file", - "id": "bcfd7978-367e-4aaf-a82d-b55d90f2b731", - "meta": { - "alt": "product innovation in the age of AI", - "title": "", - "width": 1600, - "height": 800, - "drupal_internal__target_id": 2582 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/field_media_image?resourceVersion=id%3A1812" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/relationships/field_media_image?resourceVersion=id%3A1812" - } - } - } - } - }, - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_header_image?resourceVersion=id%3A14212" - } - } -} diff --git a/test_json/professional_ed/professional_ed_course_image_2.json b/test_json/professional_ed/professional_ed_course_image_2.json deleted file mode 100644 index 9af743d5bd..0000000000 --- a/test_json/professional_ed/professional_ed_course_image_2.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": { - "type": "file--file", - "id": "bcfd7978-367e-4aaf-a82d-b55d90f2b731", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/file/file/bcfd7978-367e-4aaf-a82d-b55d90f2b731" - } - }, - "attributes": { - "drupal_internal__fid": 2582, - "langcode": "en", - "filename": "MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", - "uri": { - "value": "public://2024-04/MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg", - "url": "/sites/default/files/2024-04/MITPE-ProductInnovationAgeOfAI-website-banner-1600x800.jpg" - }, - "filemime": "image/jpeg", - "filesize": 890717, - "status": true, - "created": "2024-04-26T18:07:42+00:00", - "changed": "2024-04-26T18:07:58+00:00" - }, - "relationships": { - "uid": { - "data": { - "type": "user--user", - "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", - "meta": { - "drupal_internal__target_id": 82 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/file/file/bcfd7978-367e-4aaf-a82d-b55d90f2b731/uid" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/file/file/bcfd7978-367e-4aaf-a82d-b55d90f2b731/relationships/uid" - } - } - } - } - }, - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/0b8897cc-987c-4109-b46b-3227c23e0c00/field_media_image?resourceVersion=id%3A1812" - } - } -} diff --git a/test_json/professional_ed/professional_ed_course_instructors.json b/test_json/professional_ed/professional_ed_course_instructors.json deleted file mode 100644 index 8147910ea6..0000000000 --- a/test_json/professional_ed/professional_ed_course_instructors.json +++ /dev/null @@ -1,316 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": [ - { - "type": "node--faculty", - "id": "0079dcfc-7828-49dc-b60a-abd147b6972e", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e?resourceVersion=id%3A10253" - } - }, - "attributes": { - "drupal_internal__nid": 1033, - "drupal_internal__vid": 10253, - "langcode": "en", - "revision_timestamp": "2022-11-18T22:43:49+00:00", - "status": true, - "title": "Eric von Hippel", - "created": "2022-11-18T22:43:05+00:00", - "changed": "2022-11-18T22:50:07+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/eric-von-hippel", - "pid": 1070, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr /\u003E\r\n\u003Cbr /\u003E\r\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr\u003E\n\u003Cbr\u003E\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": null, - "field_first_name": "Eric", - "field_last_name": "von Hippel", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", - "Professor of Management of Innovation and Engineering Systems, MIT Sloan School of Management" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/node_type?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/node_type?resourceVersion=id%3A10253" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/revision_uid?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/revision_uid?resourceVersion=id%3A10253" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/uid?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/uid?resourceVersion=id%3A10253" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_course_topics?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_course_topics?resourceVersion=id%3A10253" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "17e87485-4772-44dd-a046-a85499662e8e", - "meta": { - "drupal_internal__target_id": 1253 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_faculty_photo?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_faculty_photo?resourceVersion=id%3A10253" - } - } - }, - "field_programs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_programs?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_programs?resourceVersion=id%3A10253" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde?resourceVersion=id%3A10254" - } - }, - "attributes": { - "drupal_internal__nid": 1034, - "drupal_internal__vid": 10254, - "langcode": "en", - "revision_timestamp": "2022-11-18T23:56:30+00:00", - "status": true, - "title": "Erdin Beshimov", - "created": "2022-11-18T22:51:21+00:00", - "changed": "2022-11-18T23:57:54+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/erdin-beshimov", - "pid": 1072, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\r\n\r\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\n\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\n\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": null, - "field_first_name": "Erdin", - "field_last_name": " Beshimov", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", - "Innovation via the Lead User Method Lecturer and Senior Director, Experiential Learning, MIT Open Learning", - "Lecturer, Massachusetts Institute of Technology" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/node_type?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/node_type?resourceVersion=id%3A10254" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/revision_uid?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/revision_uid?resourceVersion=id%3A10254" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/uid?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/uid?resourceVersion=id%3A10254" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_course_topics?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_course_topics?resourceVersion=id%3A10254" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "7552a40a-6556-4061-beff-f4fac9dfebcc", - "meta": { - "drupal_internal__target_id": 1254 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_faculty_photo?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_faculty_photo?resourceVersion=id%3A10254" - } - } - }, - "field_programs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_programs?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_programs?resourceVersion=id%3A10254" - } - } - } - } - } - ], - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_lead_instructors?resourceVersion=id%3A14212" - } - } -} diff --git a/test_json/professional_ed/professional_ed_course_topics.json b/test_json/professional_ed/professional_ed_course_topics.json deleted file mode 100644 index 2c8bf71fe5..0000000000 --- a/test_json/professional_ed/professional_ed_course_topics.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7?resourceVersion=id%3A28" - } - }, - "attributes": { - "drupal_internal__tid": 28, - "drupal_internal__revision_id": 28, - "langcode": "en", - "revision_created": null, - "status": true, - "name": "Innovation", - "description": null, - "weight": 7, - "changed": "2022-02-02T11:13:28+00:00", - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": null, - "pid": null, - "langcode": "en" - } - }, - "relationships": { - "vid": { - "data": { - "type": "taxonomy_vocabulary--taxonomy_vocabulary", - "id": "2b2e5293-82a3-451e-9cdd-2a4d317a594e", - "meta": { - "drupal_internal__target_id": "topics" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/vid?resourceVersion=id%3A28" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/vid?resourceVersion=id%3A28" - } - } - }, - "revision_user": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/revision_user?resourceVersion=id%3A28" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/revision_user?resourceVersion=id%3A28" - } - } - }, - "parent": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "virtual", - "meta": { - "links": { - "help": { - "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", - "meta": { - "about": "Usage and meaning of the 'virtual' resource identifier." - } - } - } - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/parent?resourceVersion=id%3A28" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/parent?resourceVersion=id%3A28" - } - } - } - } - } - ], - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_topics?resourceVersion=id%3A14212" - } - } -} diff --git a/test_json/professional_ed/professional_ed_program_image_1.json b/test_json/professional_ed/professional_ed_program_image_1.json deleted file mode 100644 index 9a350d6dda..0000000000 --- a/test_json/professional_ed/professional_ed_program_image_1.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": { - "type": "media--header_image", - "id": "ec734233-e506-47f6-bd87-93ca4a62f26e", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e?resourceVersion=id%3A653" - } - }, - "attributes": { - "drupal_internal__mid": 594, - "drupal_internal__vid": 653, - "langcode": "en", - "revision_created": "2021-01-30T02:04:01+00:00", - "status": true, - "name": "Innovation & Technology - Header Image", - "created": "2021-01-30T02:03:22+00:00", - "changed": "2021-01-30T02:04:01+00:00", - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": null, - "pid": null, - "langcode": "en" - } - }, - "relationships": { - "bundle": { - "data": { - "type": "media_type--media_type", - "id": "ae6c4031-0599-4953-847d-c6aeb0681305", - "meta": { - "drupal_internal__target_id": "header_image" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/bundle?resourceVersion=id%3A653" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/bundle?resourceVersion=id%3A653" - } - } - }, - "revision_user": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/revision_user?resourceVersion=id%3A653" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/revision_user?resourceVersion=id%3A653" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "36a239b4-cc6b-487f-b44c-1e98d92e4c19", - "meta": { - "drupal_internal__target_id": 46 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/uid?resourceVersion=id%3A653" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/uid?resourceVersion=id%3A653" - } - } - }, - "thumbnail": { - "data": { - "type": "file--file", - "id": "1689991a-7999-40f0-9063-7c739f8d81cb", - "meta": { - "alt": "Innovation & Technology - Header Image", - "title": null, - "width": 3200, - "height": 1600, - "drupal_internal__target_id": 875 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/thumbnail?resourceVersion=id%3A653" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/thumbnail?resourceVersion=id%3A653" - } - } - }, - "field_media_image": { - "data": { - "type": "file--file", - "id": "1689991a-7999-40f0-9063-7c739f8d81cb", - "meta": { - "alt": "Innovation & Technology - Header Image", - "title": "", - "width": 3200, - "height": 1600, - "drupal_internal__target_id": 875 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/field_media_image?resourceVersion=id%3A653" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/relationships/field_media_image?resourceVersion=id%3A653" - } - } - } - } - }, - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_header_image?resourceVersion=id%3A14202" - } - } -} diff --git a/test_json/professional_ed/professional_ed_program_image_2.json b/test_json/professional_ed/professional_ed_program_image_2.json deleted file mode 100644 index 16427b9a5e..0000000000 --- a/test_json/professional_ed/professional_ed_program_image_2.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": { - "type": "file--file", - "id": "1689991a-7999-40f0-9063-7c739f8d81cb", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/file/file/1689991a-7999-40f0-9063-7c739f8d81cb" - } - }, - "attributes": { - "drupal_internal__fid": 875, - "langcode": "en", - "filename": "MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg", - "uri": { - "value": "public://2021-01/MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg", - "url": "/sites/default/files/2021-01/MITPE-InnovationCertificateProgram-website-banner-1600x800.jpg" - }, - "filemime": "image/jpeg", - "filesize": 1031478, - "status": true, - "created": "2021-01-30T02:03:35+00:00", - "changed": "2021-01-30T02:04:01+00:00" - }, - "relationships": { - "uid": { - "data": { - "type": "user--user", - "id": "36a239b4-cc6b-487f-b44c-1e98d92e4c19", - "meta": { - "drupal_internal__target_id": 46 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/file/file/1689991a-7999-40f0-9063-7c739f8d81cb/uid" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/file/file/1689991a-7999-40f0-9063-7c739f8d81cb/relationships/uid" - } - } - } - } - }, - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/media/header_image/ec734233-e506-47f6-bd87-93ca4a62f26e/field_media_image?resourceVersion=id%3A653" - } - } -} diff --git a/test_json/professional_ed/professional_ed_program_instructors.json b/test_json/professional_ed/professional_ed_program_instructors.json deleted file mode 100644 index 55fa99804d..0000000000 --- a/test_json/professional_ed/professional_ed_program_instructors.json +++ /dev/null @@ -1,1760 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": [ - { - "type": "node--faculty", - "id": "0d18fecb-0274-4268-b4dd-6ea7ac6a36de", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de?resourceVersion=id%3A820" - } - }, - "attributes": { - "drupal_internal__nid": 286, - "drupal_internal__vid": 820, - "langcode": "en", - "revision_timestamp": "2019-05-01T18:03:52+00:00", - "status": true, - "title": "Blade Kotelly", - "created": "2019-05-01T18:01:34+00:00", - "changed": "2024-02-06T19:39:11+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/blade-kotelly", - "pid": 284, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003E\u003Ca href=\"http://www.bladekotelly.com\"\u003EBlade\u003C/a\u003E is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\u003Cp\u003EPrior to that, Blade led the Advanced Concept Lab at Sonos where he defined the future experience that will fill your home with music. Prior to joining Sonos, Blade was the VP Design & Consumer Experience at Jibo, Inc. where he was in charge of the industrial-design, human-factors, user-interface, brand, packaging, web experience supporting Jibo, the world’s first social robot for the home. Blade has also designed a variety of technologies including ones at Rapid7, an enterprise security-software company,  StorytellingMachines, a software firm enabling anyone to make high-impact movies, Endeca Technologies, a search and information access software technology company, Edify and SpeechWorks, companies that provided speech-recognition solutions to the Fortune 1000.\u003C/p\u003E\u003Cp\u003EBlade wrote the book on speech-recognition interface design (Addison Wesley, 2003), The Art and Business of Speech Recognition: Creating the Noble Voice and his work and thoughts have been featured in publications including The New York Times, the Wall Street Journal, and on media including TechTV, NPR, and the BBC.\u003Cbr\u003E \u003Cbr\u003ESince 2003, Blade has taught courses on design-thinking to thousands of students and professionals, and holds a Bachelors of Science in Human-Factors Engineering from Tufts University and a Master of Science in Engineering and Management from MIT.\u003C/p\u003E", - "format": "full_html", - "processed": "\u003Cp\u003E\u003Ca href=\"http://www.bladekotelly.com\"\u003EBlade\u003C/a\u003E is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\u003Cp\u003EPrior to that, Blade led the Advanced Concept Lab at Sonos where he defined the future experience that will fill your home with music. Prior to joining Sonos, Blade was the VP Design & Consumer Experience at Jibo, Inc. where he was in charge of the industrial-design, human-factors, user-interface, brand, packaging, web experience supporting Jibo, the world’s first social robot for the home. Blade has also designed a variety of technologies including ones at Rapid7, an enterprise security-software company,  StorytellingMachines, a software firm enabling anyone to make high-impact movies, Endeca Technologies, a search and information access software technology company, Edify and SpeechWorks, companies that provided speech-recognition solutions to the Fortune 1000.\u003C/p\u003E\u003Cp\u003EBlade wrote the book on speech-recognition interface design (Addison Wesley, 2003), The Art and Business of Speech Recognition: Creating the Noble Voice and his work and thoughts have been featured in publications including The New York Times, the Wall Street Journal, and on media including TechTV, NPR, and the BBC.\u003Cbr\u003E \u003Cbr\u003ESince 2003, Blade has taught courses on design-thinking to thousands of students and professionals, and holds a Bachelors of Science in Human-Factors Engineering from Tufts University and a Master of Science in Engineering and Management from MIT.\u003C/p\u003E", - "summary": "" - }, - "field_featured_card_summary": "Blade is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.", - "field_first_name": "Blade", - "field_last_name": "Kotelly", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EBlade is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EBlade is an innovation and user-experience expert & Senior Lecturer at MIT on Design-Thinking and Innovation. Blade provides consulting service in Design-Thinking and helps top brands to innovate radically on their product and services, and teaches corporate teams how to create solutions that customers love. Customers include Bose, CPI International, Whirlpool, Lufthansa, The D.C. Department of Homeland Security and Emergency Management, and others.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Senior Lecturer, Bernard M. Gordon-MIT Engineering Leadership Program" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/node_type?resourceVersion=id%3A820" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/node_type?resourceVersion=id%3A820" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/revision_uid?resourceVersion=id%3A820" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/revision_uid?resourceVersion=id%3A820" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/uid?resourceVersion=id%3A820" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/uid?resourceVersion=id%3A820" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", - "meta": { - "drupal_internal__target_id": 25 - } - }, - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - }, - { - "type": "taxonomy_term--topics", - "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", - "meta": { - "drupal_internal__target_id": 29 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/field_course_topics?resourceVersion=id%3A820" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/field_course_topics?resourceVersion=id%3A820" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "886b8510-d2fa-42e6-8299-ecf785ca5b9b", - "meta": { - "drupal_internal__target_id": 185 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/field_faculty_photo?resourceVersion=id%3A820" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/field_faculty_photo?resourceVersion=id%3A820" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/field_programs?resourceVersion=id%3A820" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0d18fecb-0274-4268-b4dd-6ea7ac6a36de/relationships/field_programs?resourceVersion=id%3A820" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "9447ac66-9a89-400d-ac70-cdd1492f32c9", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9?resourceVersion=id%3A855" - } - }, - "attributes": { - "drupal_internal__nid": 319, - "drupal_internal__vid": 855, - "langcode": "en", - "revision_timestamp": "2019-05-22T13:36:49+00:00", - "status": true, - "title": "Reza Rahaman", - "created": "2019-05-22T13:33:16+00:00", - "changed": "2021-03-24T13:56:53+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/reza-rahaman", - "pid": 317, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EDr. \u003Ca href=\"https://gelp.mit.edu/about-gel/program-staff/reza-rahaman\" target=\"_blank\"\u003EReza Rahaman\u003C/a\u003E, is the Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. In that role he was accountable for developing innovation strategies for a diverse set of businesses and ensuring robust technology roadmaps and innovation pipelines to deliver growth and profit targets for 45% of the Clorox Company portfolio ($2.7bn in net customer sales). Among his businesses were Brita, Burt’s Bees, Glad, Hidden Valley Ranch, Fresh Step, and Kingsford Charcoal. Notable product platforms developed and launched under his leadership include Brita filter-as-you-pour, Burt’s Bees Natural Cosmetics, Glad Force Flex Plus and Force Flex Plus Advanced Protection (dual-layer technology), and Fresh Step Clean Paws.\u003C/p\u003E\r\n\r\n\u003Cp\u003EIn addition to his passion for developing leaders, Reza is passionate about workplace equality and is the Vice-Chair of the Board of Out & Equal Workplace Advocates, the world’s premier nonprofit promoting LGBT+ workplace equality. He and his husband James enjoy travel and hiking. Reza received his BSc.(Eng.) in Chemical Engineering from Imperial College, University of London, and his MSCEP in Chemical Engineering Practice and Ph.D. in Chemical Engineering from MIT.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EDr. \u003Ca href=\"https://gelp.mit.edu/about-gel/program-staff/reza-rahaman\" target=\"_blank\"\u003EReza Rahaman\u003C/a\u003E, is the Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. In that role he was accountable for developing innovation strategies for a diverse set of businesses and ensuring robust technology roadmaps and innovation pipelines to deliver growth and profit targets for 45% of the Clorox Company portfolio ($2.7bn in net customer sales). Among his businesses were Brita, Burt’s Bees, Glad, Hidden Valley Ranch, Fresh Step, and Kingsford Charcoal. Notable product platforms developed and launched under his leadership include Brita filter-as-you-pour, Burt’s Bees Natural Cosmetics, Glad Force Flex Plus and Force Flex Plus Advanced Protection (dual-layer technology), and Fresh Step Clean Paws.\u003C/p\u003E\n\n\u003Cp\u003EIn addition to his passion for developing leaders, Reza is passionate about workplace equality and is the Vice-Chair of the Board of Out & Equal Workplace Advocates, the world’s premier nonprofit promoting LGBT+ workplace equality. He and his husband James enjoy travel and hiking. Reza received his BSc.(Eng.) in Chemical Engineering from Imperial College, University of London, and his MSCEP in Chemical Engineering Practice and Ph.D. in Chemical Engineering from MIT.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": "Dr. Reza Rahaman, Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29 year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. ", - "field_first_name": "Reza", - "field_last_name": "Rahaman", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EDr. Reza Rahaman, Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. \u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EDr. Reza Rahaman, Bernard M. Gordon Industry Co-Director and Senior Lecturer. Dr. Rahaman returned to MIT in 2018 after a 29-year career in the Consumer Packaged Goods, Pharmaceuticals, and Agricultural Chemical Industries. Immediately prior to MIT, Reza was the Vice-president of Research, Development, and Innovation for the Specialty Division of the Clorox Company. \u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Bernard M. Gordon Industry Co-Director and senior lecturer, MIT" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/node_type?resourceVersion=id%3A855" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/node_type?resourceVersion=id%3A855" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/revision_uid?resourceVersion=id%3A855" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/revision_uid?resourceVersion=id%3A855" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/uid?resourceVersion=id%3A855" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/uid?resourceVersion=id%3A855" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/field_course_topics?resourceVersion=id%3A855" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/field_course_topics?resourceVersion=id%3A855" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "d227e5d0-9e69-4286-85b2-f0737cf4e8e8", - "meta": { - "drupal_internal__target_id": 206 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/field_faculty_photo?resourceVersion=id%3A855" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/field_faculty_photo?resourceVersion=id%3A855" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/field_programs?resourceVersion=id%3A855" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/9447ac66-9a89-400d-ac70-cdd1492f32c9/relationships/field_programs?resourceVersion=id%3A855" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "0aba6bed-3f64-4f54-936c-c3e551eb003e", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e?resourceVersion=id%3A821" - } - }, - "attributes": { - "drupal_internal__nid": 287, - "drupal_internal__vid": 821, - "langcode": "en", - "revision_timestamp": "2019-05-01T18:09:02+00:00", - "status": true, - "title": "Michael Davies", - "created": "2019-05-01T18:06:06+00:00", - "changed": "2019-05-01T18:11:43+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/michael-davies", - "pid": 285, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003E\u003Ca href=\"http://mamd.mit.edu/\"\u003EMichael A M Davies\u003C/a\u003E teaches the engineering and business elements of the \u003Ca href=\"http://idm.mit.edu/\"\u003EIntegrated Design and Management\u003C/a\u003E (IDM) program at MIT.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe is the founder and chairman of \u003Ca href=\"http://endeavourpartners.net/\"\u003EEndeavour Partners\u003C/a\u003E, a boutique business strategy consulting firm that enables leaders in high-tech businesses and businesses being affected by technology worldwide to create value and drive growth through innovation. Endeavour Partners helps its clients anticipate, navigate, and innovate through insight and foresight in order to make better strategic decisions.Its clients include nearly all of the top-tier device vendors, network operators, service providers, and semiconductor businesses. Beyond high-tech, its clients include some of the world’s leading e-commerce, information services, oil and gas, packaging and logistics businesses, along with world-class sports teams.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems. Michael has spent his career helping top management make strategic decisions and drive innovation. Nowadays, he is focused on the rapid shift toward smartphones, cloud services, the Internet of Things, artificial intelligence, and robotics, particularly the forces driving this shift and its impact and implications over the next few years.\u003C/p\u003E\r\n\r\n\u003Cp\u003EMichael also runs the New Technology Ventures program at the London Business School. Additionally, he is an Advisor to the Department of Systems Engineering at the United States Military Academy at West Point.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe also is a co-founder and the Chairman of \u003Ca href=\"https://silverthreadinc.com/\"\u003Esilverthread, Inc.\u003C/a\u003E, and angel-baked business commercializing research on software engineering from MIT and Harvard Business School, a member of the Board of the Kendall Square Association, the business group for this world leading innovation hub, the Chairman of the Mobile Cluster for Massachusetts Technology Leadership Council and an advisor to several other companies on digital business.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003E\u003Ca href=\"http://mamd.mit.edu/\"\u003EMichael A M Davies\u003C/a\u003E teaches the engineering and business elements of the \u003Ca href=\"http://idm.mit.edu/\"\u003EIntegrated Design and Management\u003C/a\u003E (IDM) program at MIT.\u003C/p\u003E\n\n\u003Cp\u003EHe is the founder and chairman of \u003Ca href=\"http://endeavourpartners.net/\"\u003EEndeavour Partners\u003C/a\u003E, a boutique business strategy consulting firm that enables leaders in high-tech businesses and businesses being affected by technology worldwide to create value and drive growth through innovation. Endeavour Partners helps its clients anticipate, navigate, and innovate through insight and foresight in order to make better strategic decisions.Its clients include nearly all of the top-tier device vendors, network operators, service providers, and semiconductor businesses. Beyond high-tech, its clients include some of the world’s leading e-commerce, information services, oil and gas, packaging and logistics businesses, along with world-class sports teams.\u003C/p\u003E\n\n\u003Cp\u003EHe is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems. Michael has spent his career helping top management make strategic decisions and drive innovation. Nowadays, he is focused on the rapid shift toward smartphones, cloud services, the Internet of Things, artificial intelligence, and robotics, particularly the forces driving this shift and its impact and implications over the next few years.\u003C/p\u003E\n\n\u003Cp\u003EMichael also runs the New Technology Ventures program at the London Business School. Additionally, he is an Advisor to the Department of Systems Engineering at the United States Military Academy at West Point.\u003C/p\u003E\n\n\u003Cp\u003EHe also is a co-founder and the Chairman of \u003Ca href=\"https://silverthreadinc.com/\"\u003Esilverthread, Inc.\u003C/a\u003E, and angel-baked business commercializing research on software engineering from MIT and Harvard Business School, a member of the Board of the Kendall Square Association, the business group for this world leading innovation hub, the Chairman of the Mobile Cluster for Massachusetts Technology Leadership Council and an advisor to several other companies on digital business.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": "Michael A M Davies teaches the engineering and business elements of the Integrated Design and Management (IDM) program at MIT. He is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems. ", - "field_first_name": "Michael", - "field_last_name": "Davies", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EMichael A M Davies teaches the engineering and business elements of the Integrated Design and Management (IDM) program at MIT. He is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EMichael A M Davies teaches the engineering and business elements of the Integrated Design and Management (IDM) program at MIT. He is an expert on the connections between technology, innovation, product development, consumer choice and behavior, the adoption and diffusion of new products, intellectual property, and the emergence and evolution of platforms and business ecosystems.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Senior Lecturer, MIT", - "Founder and Chairman, Endeavour Partners", - "Co-founder and Chairman, silverthread, Inc." - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/node_type?resourceVersion=id%3A821" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/node_type?resourceVersion=id%3A821" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/revision_uid?resourceVersion=id%3A821" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/revision_uid?resourceVersion=id%3A821" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/uid?resourceVersion=id%3A821" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/uid?resourceVersion=id%3A821" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - }, - { - "type": "taxonomy_term--topics", - "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", - "meta": { - "drupal_internal__target_id": 29 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/field_course_topics?resourceVersion=id%3A821" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/field_course_topics?resourceVersion=id%3A821" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "1e94d940-8639-4049-8e0c-537638c5ba87", - "meta": { - "drupal_internal__target_id": 186 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/field_faculty_photo?resourceVersion=id%3A821" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/field_faculty_photo?resourceVersion=id%3A821" - } - } - }, - "field_programs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/field_programs?resourceVersion=id%3A821" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aba6bed-3f64-4f54-936c-c3e551eb003e/relationships/field_programs?resourceVersion=id%3A821" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "0aa425c3-531b-4115-8dcb-efd680a81550", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550?resourceVersion=id%3A1974" - } - }, - "attributes": { - "drupal_internal__nid": 528, - "drupal_internal__vid": 1974, - "langcode": "en", - "revision_timestamp": "2020-02-05T21:41:04+00:00", - "status": true, - "title": "Sang-Gook Kim", - "created": "2020-02-05T21:37:18+00:00", - "changed": "2020-02-05T21:41:04+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/sang-gook-kim", - "pid": 526, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering.  He received his B.S. degree from Seoul National University (1978), M.S. from KAIST (1980), and Ph.D. from MIT (1985).  He held positions at Axiomatics Co., Cambridge, MA (1986) and Korea Institute of Science and Technology (1986-1991). Then he became a corporate executive director at Daewoo Corporation, Korea, and directed the Central Research Institute of Daewoo Electronics Co. until 2000 when he joined MIT. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. He is a fellow of CIRP (International Academy for Production Engineering), fellow of ASME, and overseas member of Korean National Academy of Engineering.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering.  He received his B.S. degree from Seoul National University (1978), M.S. from KAIST (1980), and Ph.D. from MIT (1985).  He held positions at Axiomatics Co., Cambridge, MA (1986) and Korea Institute of Science and Technology (1986-1991). Then he became a corporate executive director at Daewoo Corporation, Korea, and directed the Central Research Institute of Daewoo Electronics Co. until 2000 when he joined MIT. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. He is a fellow of CIRP (International Academy for Production Engineering), fellow of ASME, and overseas member of Korean National Academy of Engineering.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": "Sang-Gook Kim is a professor in the Department of Mechanical Engineering. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. ", - "field_first_name": "Sang-Gook", - "field_last_name": "Kim", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. \u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003ESang-Gook Kim is a professor in the Department of Mechanical Engineering. He is currently the Micro/Nano Area Head of the Department of Mechanical Engineering at MIT. Prof. Kim’s research has been in the field of product realization throughout his career at both the industry and academia. His recent research includes piezoelectric MEMS energy harvesting, micro ultrasonic transducers and nano-engineered energy conversion for carbon neutrality and solar water splitting systems. \u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Professor of Mechanical Engineering, MIT" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/node_type?resourceVersion=id%3A1974" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/node_type?resourceVersion=id%3A1974" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/revision_uid?resourceVersion=id%3A1974" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/revision_uid?resourceVersion=id%3A1974" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/uid?resourceVersion=id%3A1974" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/uid?resourceVersion=id%3A1974" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", - "meta": { - "drupal_internal__target_id": 25 - } - }, - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/field_course_topics?resourceVersion=id%3A1974" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/field_course_topics?resourceVersion=id%3A1974" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "3a491f9b-1650-4c3a-ab14-5b459fc10ee9", - "meta": { - "drupal_internal__target_id": 417 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/field_faculty_photo?resourceVersion=id%3A1974" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/field_faculty_photo?resourceVersion=id%3A1974" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/field_programs?resourceVersion=id%3A1974" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0aa425c3-531b-4115-8dcb-efd680a81550/relationships/field_programs?resourceVersion=id%3A1974" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "0079dcfc-7828-49dc-b60a-abd147b6972e", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e?resourceVersion=id%3A10253" - } - }, - "attributes": { - "drupal_internal__nid": 1033, - "drupal_internal__vid": 10253, - "langcode": "en", - "revision_timestamp": "2022-11-18T22:43:49+00:00", - "status": true, - "title": "Eric von Hippel", - "created": "2022-11-18T22:43:05+00:00", - "changed": "2022-11-18T22:50:07+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/eric-von-hippel", - "pid": 1070, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr /\u003E\r\n\u003Cbr /\u003E\r\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Author of eight books and numerous articles, he has spent his career investigating the impact of user innovation communities on product development—a topic he explores in-depth in Democratizing Innovation (MIT Press, 2005). In his most recent book, Free Innovation (MIT Press, 2017), he examines the phenomenon of consumers giving away their designs for free, and the positive impact this can have on social welfare.\u003Cbr\u003E\n\u003Cbr\u003E\nProfessor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. He holds a BA in economics from Harvard College, an SM in mechanical engineering from MIT, and a PhD in business and engineering from Carnegie Mellon University.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": null, - "field_first_name": "Eric", - "field_last_name": "von Hippel", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EThe T. Wilson (1953) Professor of Management of Innovation and Engineering Systems at MIT Sloan School of Management, Professor Eric von Hippel’s research focuses on patterns of innovation across industries. Professor von Hippel’s current work focuses on the nature and economics of distributed and free innovation. He also develops and teaches practical methods that individuals, open user communities, and organizations can use to enhance innovation processes. \u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", - "Professor of Management of Innovation and Engineering Systems, MIT Sloan School of Management" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/node_type?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/node_type?resourceVersion=id%3A10253" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/revision_uid?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/revision_uid?resourceVersion=id%3A10253" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/uid?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/uid?resourceVersion=id%3A10253" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_course_topics?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_course_topics?resourceVersion=id%3A10253" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "17e87485-4772-44dd-a046-a85499662e8e", - "meta": { - "drupal_internal__target_id": 1253 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_faculty_photo?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_faculty_photo?resourceVersion=id%3A10253" - } - } - }, - "field_programs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/field_programs?resourceVersion=id%3A10253" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/0079dcfc-7828-49dc-b60a-abd147b6972e/relationships/field_programs?resourceVersion=id%3A10253" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde?resourceVersion=id%3A10254" - } - }, - "attributes": { - "drupal_internal__nid": 1034, - "drupal_internal__vid": 10254, - "langcode": "en", - "revision_timestamp": "2022-11-18T23:56:30+00:00", - "status": true, - "title": "Erdin Beshimov", - "created": "2022-11-18T22:51:21+00:00", - "changed": "2022-11-18T23:57:54+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/erdin-beshimov", - "pid": 1072, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\r\n\r\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\r\n\r\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning. He also co-developed MIT’s open online courses in entrepreneurship, which have enrolled hundreds of thousands of learners from around the world. \u003C/p\u003E\n\n\u003Cp\u003EBeshimov is a graduate of the MIT Sloan School of Management, where he earned the Patrick J. McGovern Entrepreneurship Award for his contributions to student life, as well as the Carol and Howard Anderson Fellowship and the MIT Sloan Peer Recognition Award. Before joining MIT’s faculty, he served as Principal at Flagship Pioneering, where he focused on ventures in water, energy, and materials. He also co-founded Ubiquitous Energy—a solar technologies spinout from MIT.\u003C/p\u003E\n\n\u003Cp\u003EHe holds an MA in area studies of the former Soviet Union from Harvard University, and a BA in development and peace studies from the University of Bradford. \u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": null, - "field_first_name": "Erdin", - "field_last_name": " Beshimov", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EA Lecturer at MIT and a Senior Director of Experiential Learning at MIT Open Learning, Erdin Beshimov is committed to creating new pathways for learners worldwide to study innovation, technology, and entrepreneurship. He founded MIT Bootcamps and the MITxMicroMasters program, and the Incubation Group in the Office of Digital Learning.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Lead Instructor, Entrepreneurship and Product Innovation via the Lead User Method", - "Innovation via the Lead User Method Lecturer and Senior Director, Experiential Learning, MIT Open Learning", - "Lecturer, Massachusetts Institute of Technology" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/node_type?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/node_type?resourceVersion=id%3A10254" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/revision_uid?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/revision_uid?resourceVersion=id%3A10254" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/uid?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/uid?resourceVersion=id%3A10254" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_course_topics?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_course_topics?resourceVersion=id%3A10254" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "7552a40a-6556-4061-beff-f4fac9dfebcc", - "meta": { - "drupal_internal__target_id": 1254 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_faculty_photo?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_faculty_photo?resourceVersion=id%3A10254" - } - } - }, - "field_programs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/field_programs?resourceVersion=id%3A10254" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde/relationships/field_programs?resourceVersion=id%3A10254" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "6a2844f3-439d-4a1d-95b0-ab6fb41887ca", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca?resourceVersion=id%3A13116" - } - }, - "attributes": { - "drupal_internal__nid": 1171, - "drupal_internal__vid": 13116, - "langcode": "en", - "revision_timestamp": "2023-11-13T22:27:50+00:00", - "status": true, - "title": "Adam Berinsky", - "created": "2023-11-13T22:19:32+00:00", - "changed": "2023-11-13T22:31:11+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/adam-berinsky", - "pid": 1230, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": null, - "field_first_name": "Adam", - "field_last_name": "Berinsky", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EAdam Berinsky is the Mitsui Professor of Political Science at MIT and serves as the director of the MIT Political Experiments Research Lab (PERL). He is also a Faculty Affiliate at the Institute for Data, Systems, and Society (IDSS). Berinsky received his PhD from the University of Michigan in 2000. He is the author of \"In Time of War: Understanding American Public Opinion from World War II to Iraq\" (University of Chicago Press, 2009). He is also the author of \"Silent Voices: Public Opinion and Political Participation in America\u003Cem\u003E\"\u003C/em\u003E (Princeton University Press, 2004) and has published articles in many journals.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - " Mitsui Professor of Political Science and Director of the MIT Political Experiments Research Lab (PERL)" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/node_type?resourceVersion=id%3A13116" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/node_type?resourceVersion=id%3A13116" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", - "meta": { - "drupal_internal__target_id": 82 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/revision_uid?resourceVersion=id%3A13116" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/revision_uid?resourceVersion=id%3A13116" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", - "meta": { - "drupal_internal__target_id": 82 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/uid?resourceVersion=id%3A13116" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/uid?resourceVersion=id%3A13116" - } - } - }, - "field_course_topics": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/field_course_topics?resourceVersion=id%3A13116" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/field_course_topics?resourceVersion=id%3A13116" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "4e5cb810-bce8-4739-af5f-3ee0a55d78c7", - "meta": { - "drupal_internal__target_id": 1525 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/field_faculty_photo?resourceVersion=id%3A13116" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/field_faculty_photo?resourceVersion=id%3A13116" - } - } - }, - "field_programs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/field_programs?resourceVersion=id%3A13116" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/6a2844f3-439d-4a1d-95b0-ab6fb41887ca/relationships/field_programs?resourceVersion=id%3A13116" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "161081c5-3346-4ad0-b108-c5b6592d0098", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098?resourceVersion=id%3A11544" - } - }, - "attributes": { - "drupal_internal__nid": 340, - "drupal_internal__vid": 11544, - "langcode": "en", - "revision_timestamp": "2023-03-17T15:45:16+00:00", - "status": true, - "title": "David Niño", - "created": "2019-05-22T18:28:33+00:00", - "changed": "2024-05-24T21:18:53+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/david-nino", - "pid": 338, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually. David received a School of Engineering “Infinite Mile Award” for his work in establishing this program, which received a $10 million gift of support in 2022.\u003Cbr\u003E\u003Cbr\u003EIn addition to teaching academic classes, he has also served a leading role nationally in the emerging field of engineering leadership, most recently as Chair of the Engineering Leadership Development Division of the American Society of Engineering Education. This is the nation’s largest organization of engineering leadership educators.\u003Cbr\u003E\u003Cbr\u003EPrior to joining MIT, David was a faculty member in the schools of engineering and business at Rice University in Houston, Texas. He was Director of Rice’s university-wide leadership program and later played a leading role in designing and establishing the university’s first four-year academic certificate in engineering leadership. \u003Cbr\u003E\u003Cbr\u003EDavid consults with technology executives on topics related to developing leadership among engineers, researchers, and other technical experts. He has published on the topics of organizational culture, ethics, engineering leadership, and the development of management and leadership skills. David holds a Ph.D. in Management from the University of Texas at Austin, where he earned his B.A., B.B.A., and M.A. degrees. He lives in Weston Massachusetts with this wife and three children.\u003C/p\u003E", - "format": "full_html", - "processed": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually. David received a School of Engineering “Infinite Mile Award” for his work in establishing this program, which received a $10 million gift of support in 2022.\u003Cbr\u003E\u003Cbr\u003EIn addition to teaching academic classes, he has also served a leading role nationally in the emerging field of engineering leadership, most recently as Chair of the Engineering Leadership Development Division of the American Society of Engineering Education. This is the nation’s largest organization of engineering leadership educators.\u003Cbr\u003E\u003Cbr\u003EPrior to joining MIT, David was a faculty member in the schools of engineering and business at Rice University in Houston, Texas. He was Director of Rice’s university-wide leadership program and later played a leading role in designing and establishing the university’s first four-year academic certificate in engineering leadership. \u003Cbr\u003E\u003Cbr\u003EDavid consults with technology executives on topics related to developing leadership among engineers, researchers, and other technical experts. He has published on the topics of organizational culture, ethics, engineering leadership, and the development of management and leadership skills. David holds a Ph.D. in Management from the University of Texas at Austin, where he earned his B.A., B.B.A., and M.A. degrees. He lives in Weston Massachusetts with this wife and three children.\u003C/p\u003E", - "summary": "" - }, - "field_featured_card_summary": "David Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually.", - "field_first_name": "David", - "field_last_name": "Niño", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually.\u003C/p\u003E", - "format": "full_html", - "processed": "\u003Cp\u003EDavid Niño is a Senior Lecturer in MIT’s Daniel J. Riccio Graduate Program in Engineering Leadership. He has served in this role since 2015, when he launched this program to provide academic leadership education for MIT graduate students in engineering and other disciplines. Under his leadership, the program has grown from one graduate class and to a variety of highly-rated academic classes and workshops that educate over 200 graduate students annually.\u003C/p\u003E" - }, - "field_professional_titles": [ - "Senior Lecturer in the Daniel J. Riccio Graduate Engineering Leadership Program at MIT" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/node_type?resourceVersion=id%3A11544" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/node_type?resourceVersion=id%3A11544" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/revision_uid?resourceVersion=id%3A11544" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/revision_uid?resourceVersion=id%3A11544" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/uid?resourceVersion=id%3A11544" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/uid?resourceVersion=id%3A11544" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - }, - { - "type": "taxonomy_term--topics", - "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", - "meta": { - "drupal_internal__target_id": 29 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/field_course_topics?resourceVersion=id%3A11544" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/field_course_topics?resourceVersion=id%3A11544" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "238266bf-e43c-4727-a23a-5a3820d8e859", - "meta": { - "drupal_internal__target_id": 1729 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/field_faculty_photo?resourceVersion=id%3A11544" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/field_faculty_photo?resourceVersion=id%3A11544" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4fd60d67-5f72-4772-937e-9fdce34cfac9", - "meta": { - "drupal_internal__target_id": 39 - } - }, - { - "type": "taxonomy_term--programs", - "id": "9fabedbc-bb7b-4842-9e59-7ab6923d7b3b", - "meta": { - "drupal_internal__target_id": 36 - } - }, - { - "type": "taxonomy_term--programs", - "id": "8fcad186-e796-4503-b97e-0e304ad16a06", - "meta": { - "drupal_internal__target_id": 37 - } - }, - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/field_programs?resourceVersion=id%3A11544" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/161081c5-3346-4ad0-b108-c5b6592d0098/relationships/field_programs?resourceVersion=id%3A11544" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "b6a1440a-6482-486b-b631-2d0feac530f8", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8?resourceVersion=id%3A13914" - } - }, - "attributes": { - "drupal_internal__nid": 302, - "drupal_internal__vid": 13914, - "langcode": "en", - "revision_timestamp": "2024-03-29T16:03:24+00:00", - "status": true, - "title": "Markus J. Buehler", - "created": "2019-05-03T20:31:11+00:00", - "changed": "2024-03-29T16:03:24+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/markus-j-buehler", - "pid": 300, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003E\u003Ca href=\"http://cee.mit.edu/buehler\" target=\"_blank\"\u003EMarkus J. Buehler\u003C/a\u003E is the McAfee Professor of Engineering at MIT. Involved with startups, innovation and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  He directs the \u003Ca href=\"http://web.mit.edu/mbuehler/www/\" target=\"_blank\"\u003ELaboratory for Atomistic and Molecular Mechanics\u003C/a\u003E (LAMM), and is Principal Investigator on numerous national and international research programs. He combines bio-inspired materials design with high-throughput approaches to create materials with architectural features from the nano- to the macro-scale, and applies them to various domains that include composites for vehicles, coatings for energy technologies, and innovative and sustainable biomaterials. Using an array of theoretical, computational and experimental methods, his work seeks to understand the means by which nature creates materials, with applications in bio-inspired engineering. His most recent book, Biomateriomics, presents a new design paradigm for the analysis of biomaterials using a categorization approach that translates insights from disparate fields. In recent work he has developed a new framework to compose music based on proteins – the basic molecules of all life, as well as other physical phenomena such as fracture singularities, to explore similarities and differences across species, scales and between philosophical and physical models.  One of his goals is to use musical and sound design, aided by AI, as an abstract way to model, optimize and create new forms of autonomous matter from the bottom up – across scales (e.g., from nano to macro) and species (e.g., from humans to spiders). His work spans multiple disciplines and straddles the interface of science and art in multiple dimensions, both as a tool to educate and as a tool to understand and design.\u003C/p\u003E\u003Cp\u003EBuehler is a sought-after lecturer and has given hundreds of invited, keynote, and plenary talks throughout the world. His scholarly work is highly-cited and includes more than 450 articles on computational materials science, biomaterials, and nanotechnology, many in high-impact journals such as Nature, and Proceedings of the National Academy of Sciences. He authored two monographs in the areas of computational materials science and bio-inspired materials design, and is a founder of the emerging research area of materiomics. He is a dedicated educator and a gifted teacher, and has appeared on numerous TV and radio shows to explain the impact of his research to broad audiences. Buehler is the recipient of many awards including the Harold E. Edgerton Faculty Achievement Award, the Alfred Noble Prize, the Feynman Prize in Nanotechnology, the Leonardo da Vinci Award, and the Thomas J.R. Hughes Young Investigator Award. He is a recipient of the National Science Foundation CAREER award, the United States Air Force Young Investigator Award, the Navy Young Investigator Award, and the Defense Advanced Research Projects Agency (DARPA) Young Faculty Award, as well as the Presidential Early Career Award for Scientists and Engineers (PECASE). In 2016 Prof. Buehler was awarded the the \u003Ca href=\"https://news.mit.edu/2016/markus-buehler-awarded-foresight-institute-feynman-prize-0524\"\u003EForesight Institute Feynman Prize\u003C/a\u003E for his advances in nanotechnology. In 2018, Buehler was selected as a Highly Cited Researcher by Clarivate Analytics. In 2019, he received the Materials Horizons Outstanding Paper Prize, and his work was recognized as a highly cited author by the Royal Society of Chemistry. A frequent collaborator with artists, he is a member of the MIT Center for Art, Science and Technology (CAST) Executive Committee. Buehler is heavily involved with startups and innovation, such as through his role on the Board of Directors of \u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E and as a member of the Scientific Advisor Board of \u003Ca href=\"https://www.safar.partners/#team\"\u003ESafar Partners\u003C/a\u003E (A Technology Venture Fund with Private Equity Vision). \u003C/p\u003E\u003Ch3\u003ELinks & Resources\u003C/h3\u003E\u003Cp\u003E\u003Ca href=\"https://www.rdworldonline.com/six-keys-to-generative-ai-success/\" title=\"Six keys to generative AI success\"\u003ESix keys to generative AI success\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2020/machine-learning-develop-materials-0520 \" title=\"Machine-learning tool could help develop tougher materials\"\u003EMachine-learning tool could help develop tougher materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"http://news.mit.edu/2020/qa-markus-buehler-setting-coronavirus-and-ai-inspired-proteins-to-music-0402\"\u003EQ&A: Markus Buehler on setting coronavirus and AI-inspired proteins to music\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.machinedesign.com/community/article/21120279/a-natural-approach-to-engineered-materials\"\u003EA “Natural” Approach to Engineered Materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/translating-proteins-music-0626\" title=\"Translating proteins into music, and back\"\u003ETranslating proteins into music, and back\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/conch-shells-better-helmets-body-armor-0526 \" title=\"Conch shells spill the secret to their toughness\"\u003EConch shells spill the secret to their toughness\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/paraffin-wrinkles-manufacture-graphene-0306\" title=\"Smoothing out the wrinkles in graphene\"\u003ESmoothing out the wrinkles in graphene\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/3-d-graphene-strongest-lightest-materials-0106\" title=\"Researchers design one of the strongest, lightest materials known\"\u003EResearchers design one of the strongest, lightest materials known\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2018/researchers-decode-molecule-gives-living-tissues-flexibility-0625\" title=\"Researchers decode molecule that gives living tissues their flexibility\"\u003EResearchers decode molecule that gives living tissues their flexibility\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/how-build-better-silk-1109\" title=\"How to build better silk\"\u003EHow to build better silk\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/bio-inspired-material-changes-shape-and-strengthens-in-response-to-environment-0320 \" title=\"Worm-inspired material strengthens, changes shape in response to its environment\"\u003EWorm-inspired material strengthens, changes shape in response to its environment\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2016/silk-based-filtration-material-breaks-barriers-0623 \" title=\"Silk-based filtration material breaks barriers\"\u003ESilk-based filtration material breaks barriers\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2015/collagen-mechanics-water-0122 \" title=\"New analysis explains collagen’s force\"\u003ENew analysis explains collagen’s force\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.safar.partners/#team \"\u003EScientific Advisor Board, Safar Partners (A Technology Venture Fund with Private Equity Vision)\u003C/a\u003E\u003Cbr\u003E \u003C/p\u003E", - "format": "full_html", - "processed": "\u003Cp\u003E\u003Ca href=\"http://cee.mit.edu/buehler\" target=\"_blank\"\u003EMarkus J. Buehler\u003C/a\u003E is the McAfee Professor of Engineering at MIT. Involved with startups, innovation and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  He directs the \u003Ca href=\"http://web.mit.edu/mbuehler/www/\" target=\"_blank\"\u003ELaboratory for Atomistic and Molecular Mechanics\u003C/a\u003E (LAMM), and is Principal Investigator on numerous national and international research programs. He combines bio-inspired materials design with high-throughput approaches to create materials with architectural features from the nano- to the macro-scale, and applies them to various domains that include composites for vehicles, coatings for energy technologies, and innovative and sustainable biomaterials. Using an array of theoretical, computational and experimental methods, his work seeks to understand the means by which nature creates materials, with applications in bio-inspired engineering. His most recent book, Biomateriomics, presents a new design paradigm for the analysis of biomaterials using a categorization approach that translates insights from disparate fields. In recent work he has developed a new framework to compose music based on proteins – the basic molecules of all life, as well as other physical phenomena such as fracture singularities, to explore similarities and differences across species, scales and between philosophical and physical models.  One of his goals is to use musical and sound design, aided by AI, as an abstract way to model, optimize and create new forms of autonomous matter from the bottom up – across scales (e.g., from nano to macro) and species (e.g., from humans to spiders). His work spans multiple disciplines and straddles the interface of science and art in multiple dimensions, both as a tool to educate and as a tool to understand and design.\u003C/p\u003E\u003Cp\u003EBuehler is a sought-after lecturer and has given hundreds of invited, keynote, and plenary talks throughout the world. His scholarly work is highly-cited and includes more than 450 articles on computational materials science, biomaterials, and nanotechnology, many in high-impact journals such as Nature, and Proceedings of the National Academy of Sciences. He authored two monographs in the areas of computational materials science and bio-inspired materials design, and is a founder of the emerging research area of materiomics. He is a dedicated educator and a gifted teacher, and has appeared on numerous TV and radio shows to explain the impact of his research to broad audiences. Buehler is the recipient of many awards including the Harold E. Edgerton Faculty Achievement Award, the Alfred Noble Prize, the Feynman Prize in Nanotechnology, the Leonardo da Vinci Award, and the Thomas J.R. Hughes Young Investigator Award. He is a recipient of the National Science Foundation CAREER award, the United States Air Force Young Investigator Award, the Navy Young Investigator Award, and the Defense Advanced Research Projects Agency (DARPA) Young Faculty Award, as well as the Presidential Early Career Award for Scientists and Engineers (PECASE). In 2016 Prof. Buehler was awarded the the \u003Ca href=\"https://news.mit.edu/2016/markus-buehler-awarded-foresight-institute-feynman-prize-0524\"\u003EForesight Institute Feynman Prize\u003C/a\u003E for his advances in nanotechnology. In 2018, Buehler was selected as a Highly Cited Researcher by Clarivate Analytics. In 2019, he received the Materials Horizons Outstanding Paper Prize, and his work was recognized as a highly cited author by the Royal Society of Chemistry. A frequent collaborator with artists, he is a member of the MIT Center for Art, Science and Technology (CAST) Executive Committee. Buehler is heavily involved with startups and innovation, such as through his role on the Board of Directors of \u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E and as a member of the Scientific Advisor Board of \u003Ca href=\"https://www.safar.partners/#team\"\u003ESafar Partners\u003C/a\u003E (A Technology Venture Fund with Private Equity Vision). \u003C/p\u003E\u003Ch3\u003ELinks & Resources\u003C/h3\u003E\u003Cp\u003E\u003Ca href=\"https://www.rdworldonline.com/six-keys-to-generative-ai-success/\" title=\"Six keys to generative AI success\"\u003ESix keys to generative AI success\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2020/machine-learning-develop-materials-0520 \" title=\"Machine-learning tool could help develop tougher materials\"\u003EMachine-learning tool could help develop tougher materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"http://news.mit.edu/2020/qa-markus-buehler-setting-coronavirus-and-ai-inspired-proteins-to-music-0402\"\u003EQ&A: Markus Buehler on setting coronavirus and AI-inspired proteins to music\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.machinedesign.com/community/article/21120279/a-natural-approach-to-engineered-materials\"\u003EA “Natural” Approach to Engineered Materials\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/translating-proteins-music-0626\" title=\"Translating proteins into music, and back\"\u003ETranslating proteins into music, and back\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/conch-shells-better-helmets-body-armor-0526 \" title=\"Conch shells spill the secret to their toughness\"\u003EConch shells spill the secret to their toughness\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2019/paraffin-wrinkles-manufacture-graphene-0306\" title=\"Smoothing out the wrinkles in graphene\"\u003ESmoothing out the wrinkles in graphene\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/3-d-graphene-strongest-lightest-materials-0106\" title=\"Researchers design one of the strongest, lightest materials known\"\u003EResearchers design one of the strongest, lightest materials known\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2018/researchers-decode-molecule-gives-living-tissues-flexibility-0625\" title=\"Researchers decode molecule that gives living tissues their flexibility\"\u003EResearchers decode molecule that gives living tissues their flexibility\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/how-build-better-silk-1109\" title=\"How to build better silk\"\u003EHow to build better silk\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2017/bio-inspired-material-changes-shape-and-strengthens-in-response-to-environment-0320 \" title=\"Worm-inspired material strengthens, changes shape in response to its environment\"\u003EWorm-inspired material strengthens, changes shape in response to its environment\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2016/silk-based-filtration-material-breaks-barriers-0623 \" title=\"Silk-based filtration material breaks barriers\"\u003ESilk-based filtration material breaks barriers\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://news.mit.edu/2015/collagen-mechanics-water-0122 \" title=\"New analysis explains collagen’s force\"\u003ENew analysis explains collagen’s force\u003C/a\u003E\u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.sweetwater.us/sweetwater-energy-announces-dr-markus-buehler-of-mit-as-newest-board-member/\"\u003ESweetwater Energy, Inc.\u003C/a\u003E \u003C/p\u003E\u003Cp\u003E\u003Ca href=\"https://www.safar.partners/#team \"\u003EScientific Advisor Board, Safar Partners (A Technology Venture Fund with Private Equity Vision)\u003C/a\u003E\u003Cbr\u003E \u003C/p\u003E", - "summary": "" - }, - "field_featured_card_summary": "Markus J. Buehler is the McAfee Professor of Engineering and Head of the MIT Department of Civil and Environmental Engineering. His primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing, new manufacturing techniques, and advanced experimental testing.", - "field_first_name": "Markus J.", - "field_last_name": "Buehler", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp class=\"MsoNormal\"\u003E\u003Cspan style=\"font-size:12.0pt;font-family:"Arial",sans-serif\"\u003EMarkus J. Buehler is the McAfee Professor of Engineering. Involved with startups, innovation, and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  \u003Co:p\u003E\u003C/o:p\u003E\u003C/span\u003E\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp class=\"MsoNormal\"\u003E\u003Cspan style=\"font-size:12.0pt;font-family:"Arial",sans-serif\"\u003EMarkus J. Buehler is the McAfee Professor of Engineering. Involved with startups, innovation, and a frequent collaborator with industry, his primary research interest is to identify and apply innovative approaches to design better materials from less, using a combination of high-performance computing and AI, new manufacturing techniques, and advanced experimental testing.  \u003Co:p\u003E\u003C/o:p\u003E\u003C/span\u003E\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Jerry McAfee (1940) Professor of Engineering, MIT" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/node_type?resourceVersion=id%3A13914" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/node_type?resourceVersion=id%3A13914" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", - "meta": { - "drupal_internal__target_id": 82 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/revision_uid?resourceVersion=id%3A13914" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/revision_uid?resourceVersion=id%3A13914" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/uid?resourceVersion=id%3A13914" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/uid?resourceVersion=id%3A13914" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", - "meta": { - "drupal_internal__target_id": 25 - } - }, - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/field_course_topics?resourceVersion=id%3A13914" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/field_course_topics?resourceVersion=id%3A13914" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "ec791786-4c3a-4e82-b217-4a20a9d88e00", - "meta": { - "drupal_internal__target_id": 195 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/field_faculty_photo?resourceVersion=id%3A13914" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/field_faculty_photo?resourceVersion=id%3A13914" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/field_programs?resourceVersion=id%3A13914" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/b6a1440a-6482-486b-b631-2d0feac530f8/relationships/field_programs?resourceVersion=id%3A13914" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "734d2123-fc20-4582-b026-e6c78f428510", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510?resourceVersion=id%3A11545" - } - }, - "attributes": { - "drupal_internal__nid": 303, - "drupal_internal__vid": 11545, - "langcode": "en", - "revision_timestamp": "2023-03-17T15:49:45+00:00", - "status": true, - "title": "Edward Schiappa", - "created": "2019-05-06T14:35:44+00:00", - "changed": "2023-03-23T17:14:50+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/edward-schiappa", - "pid": 301, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003E\u003Ca href=\"http://cmsw.mit.edu/profile/ed-schiappa/\" target=\"_blank\"\u003EEdward Schiappa\u003C/a\u003E is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory. He has published 10 books and his research has appeared in such journals as \u003Cem\u003EPhilosophy & Rhetoric, Argumentation, Communication Monographs\u003C/em\u003E, and \u003Cem\u003ECommunication Theory\u003C/em\u003E. He has served as editor of Argumentation and Advocacy and has received the Douglas W. Ehninger Distinguished Rhetorical Scholar Award in 2000 and the Rhetorical and Communication Theory Distinguished Scholar Award in 2006. He was named a National Communication Association Distinguished Scholar in 2009.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003E\u003Ca href=\"http://cmsw.mit.edu/profile/ed-schiappa/\" target=\"_blank\"\u003EEdward Schiappa\u003C/a\u003E is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory. He has published 10 books and his research has appeared in such journals as \u003Cem\u003EPhilosophy & Rhetoric, Argumentation, Communication Monographs\u003C/em\u003E, and \u003Cem\u003ECommunication Theory\u003C/em\u003E. He has served as editor of Argumentation and Advocacy and has received the Douglas W. Ehninger Distinguished Rhetorical Scholar Award in 2000 and the Rhetorical and Communication Theory Distinguished Scholar Award in 2006. He was named a National Communication Association Distinguished Scholar in 2009.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": "Edward Schiappa is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory.", - "field_first_name": "Edward", - "field_last_name": "Schiappa", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EEdward Schiappa is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EEdward Schiappa is Professor and former Head of Comparative Media Studies/Writing and is MIT’s John E. Burchard Professor of the Humanities. He conducts research in argumentation, persuasion, media influence, and contemporary rhetorical theory.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "John E. Burchard Professor of Humanities and Co-chair of the Gender Equity Committee of the School of Humanities, Arts, & Social Sciences, MIT " - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/node_type?resourceVersion=id%3A11545" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/node_type?resourceVersion=id%3A11545" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/revision_uid?resourceVersion=id%3A11545" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/revision_uid?resourceVersion=id%3A11545" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/uid?resourceVersion=id%3A11545" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/uid?resourceVersion=id%3A11545" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "6feeb1ce-0162-4836-93b8-705d73800cb6", - "meta": { - "drupal_internal__target_id": 29 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/field_course_topics?resourceVersion=id%3A11545" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/field_course_topics?resourceVersion=id%3A11545" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "41e4a128-9190-4bf7-8d85-46e5f74a3bc5", - "meta": { - "drupal_internal__target_id": 196 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/field_faculty_photo?resourceVersion=id%3A11545" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/field_faculty_photo?resourceVersion=id%3A11545" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "9fabedbc-bb7b-4842-9e59-7ab6923d7b3b", - "meta": { - "drupal_internal__target_id": 36 - } - }, - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/field_programs?resourceVersion=id%3A11545" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/734d2123-fc20-4582-b026-e6c78f428510/relationships/field_programs?resourceVersion=id%3A11545" - } - } - } - } - }, - { - "type": "node--faculty", - "id": "d0ff76b3-7150-47a5-8991-9924d3261a93", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93?resourceVersion=id%3A735" - } - }, - "attributes": { - "drupal_internal__nid": 251, - "drupal_internal__vid": 735, - "langcode": "en", - "revision_timestamp": "2019-04-29T14:08:22+00:00", - "status": true, - "title": "John Hart", - "created": "2019-04-29T14:07:12+00:00", - "changed": "2021-05-19T13:54:48+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/programs/faculty-profiles/john-hart", - "pid": 249, - "langcode": "en" - }, - "body": { - "value": "\u003Cp\u003E\u003Ca href=\"http://meche.mit.edu/people/faculty/ajhart@mit.edu\"\u003EJohn Hart\u003C/a\u003E is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\r\n\r\n\u003Cp\u003EJohn has published more than 125 papers in peer-reviewed journals and is co-inventor on over 50 patents, many of which have been licensed commercially. He has also co-founded three advanced manufacturing startup companies, including Desktop Metal. John has been recognized by prestigious awards from NSF, ONR, AFOSR, DARPA, ASME, and SME, by two R&D 100 awards, by several best paper awards, and most recently by the MIT Ruth and Joel Spira Award for Distinguished Teaching.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003E\u003Ca href=\"http://meche.mit.edu/people/faculty/ajhart@mit.edu\"\u003EJohn Hart\u003C/a\u003E is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\n\n\u003Cp\u003EJohn has published more than 125 papers in peer-reviewed journals and is co-inventor on over 50 patents, many of which have been licensed commercially. He has also co-founded three advanced manufacturing startup companies, including Desktop Metal. John has been recognized by prestigious awards from NSF, ONR, AFOSR, DARPA, ASME, and SME, by two R&D 100 awards, by several best paper awards, and most recently by the MIT Ruth and Joel Spira Award for Distinguished Teaching.\u003C/p\u003E\n", - "summary": "" - }, - "field_featured_card_summary": "John Hart is Associate Professor of Mechanical Engineering and Mitsui Career Development Professor of Contemporary Technology at MIT. John leads the Mechanosynthesis Group, which aims to accelerate the science and technology of advanced manufacturing in areas including additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.", - "field_first_name": "John", - "field_last_name": "Hart", - "field_meta_tags": null, - "field_person_summary": { - "value": "\u003Cp\u003EJohn Hart is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\r\n", - "format": "full_html", - "processed": "\u003Cp\u003EJohn Hart is Professor of Mechanical Engineering and Director of the Laboratory for Manufacturing and Productivity and Center for Additive and Digital Advanced Production Technologies (APT) at MIT. John’s research focuses on additive manufacturing, nanostructured materials, and the integration of computation and automation in process discovery.\u003C/p\u003E\n" - }, - "field_professional_titles": [ - "Professor of Mechanical Engineering, MIT", - "Mitsui Career Development Professor of Contemporary Technology, MIT" - ] - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "9ebc3566-c0be-4ad8-b407-138bee605352", - "meta": { - "drupal_internal__target_id": "faculty" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/node_type?resourceVersion=id%3A735" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/node_type?resourceVersion=id%3A735" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/revision_uid?resourceVersion=id%3A735" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/revision_uid?resourceVersion=id%3A735" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "2e1ed9b2-0539-45dc-8107-02714722578b", - "meta": { - "drupal_internal__target_id": 7 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/uid?resourceVersion=id%3A735" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/uid?resourceVersion=id%3A735" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "b4e13512-ed69-4bbc-8d07-a61ac9fa59e6", - "meta": { - "drupal_internal__target_id": 25 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/field_course_topics?resourceVersion=id%3A735" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/field_course_topics?resourceVersion=id%3A735" - } - } - }, - "field_faculty_photo": { - "data": { - "type": "media--person_photo", - "id": "20ef9f9a-7804-4521-9bd9-8d9f57d7b725", - "meta": { - "drupal_internal__target_id": 164 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/field_faculty_photo?resourceVersion=id%3A735" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/field_faculty_photo?resourceVersion=id%3A735" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/field_programs?resourceVersion=id%3A735" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/faculty/d0ff76b3-7150-47a5-8991-9924d3261a93/relationships/field_programs?resourceVersion=id%3A735" - } - } - } - } - } - ], - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_lead_instructors?resourceVersion=id%3A14202" - } - } -} diff --git a/test_json/professional_ed/professional_ed_program_topics.json b/test_json/professional_ed/professional_ed_program_topics.json deleted file mode 100644 index 3d12234e21..0000000000 --- a/test_json/professional_ed/professional_ed_program_topics.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7?resourceVersion=id%3A28" - } - }, - "attributes": { - "drupal_internal__tid": 28, - "drupal_internal__revision_id": 28, - "langcode": "en", - "revision_created": null, - "status": true, - "name": "Innovation", - "description": null, - "weight": 7, - "changed": "2022-02-02T11:13:28+00:00", - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": null, - "pid": null, - "langcode": "en" - } - }, - "relationships": { - "vid": { - "data": { - "type": "taxonomy_vocabulary--taxonomy_vocabulary", - "id": "2b2e5293-82a3-451e-9cdd-2a4d317a594e", - "meta": { - "drupal_internal__target_id": "topics" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/vid?resourceVersion=id%3A28" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/vid?resourceVersion=id%3A28" - } - } - }, - "revision_user": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/revision_user?resourceVersion=id%3A28" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/revision_user?resourceVersion=id%3A28" - } - } - }, - "parent": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "virtual", - "meta": { - "links": { - "help": { - "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", - "meta": { - "about": "Usage and meaning of the 'virtual' resource identifier." - } - } - } - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/parent?resourceVersion=id%3A28" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/taxonomy_term/topics/cf85788c-a012-4683-ae98-686e9d89a2b7/relationships/parent?resourceVersion=id%3A28" - } - } - } - } - } - ], - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_topics?resourceVersion=id%3A14202" - } - } -} diff --git a/test_json/professional_ed/professional_ed_resources.json b/test_json/professional_ed/professional_ed_resources.json deleted file mode 100644 index eac2fdec82..0000000000 --- a/test_json/professional_ed/professional_ed_resources.json +++ /dev/null @@ -1,738 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "links": { - "self": { - "href": "http://jsonapi.org/format/1.0/" - } - } - } - }, - "data": [ - { - "type": "node--course", - "id": "9c0692c9-7216-4be1-b432-fbeefec1da1f", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f?resourceVersion=id%3A14202" - } - }, - "attributes": { - "drupal_internal__nid": 939, - "drupal_internal__vid": 14202, - "langcode": "en", - "revision_timestamp": "2024-04-29T16:47:58+00:00", - "status": true, - "title": "Professional Certificate Program in Innovation & Technology", - "created": "2022-10-26T16:21:34+00:00", - "changed": "2024-04-29T16:47:58+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/course-catalog/professional-certificate-program-innovation-technology", - "pid": 974, - "langcode": "en" - }, - "body": { - "value": "The full program description.", - "format": "full_html", - "processed": "The full program description.", - "summary": "The program summary description." - }, - "field_ceus": null, - "field_course_alert": { - "value": "\u003Ca href=\"https://event.on24.com/wcc/r/4433515/1DB80129B987F4A2E6E2F23BBFA641A4?partnerref=pe-website\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-ON24-OpenHouse-InnovationCertificate-Banner-900x250.jpg\" data-entity-uuid=\"64038f62-532b-4bc8-b07c-5f428e63f6d3\" data-entity-type=\"file\" alt=\"On Demand Open House Innovation\" width=\"900\" height=\"250\"\u003E\u003C/a\u003E", - "format": "full_html", - "processed": "\u003Ca href=\"https://event.on24.com/wcc/r/4433515/1DB80129B987F4A2E6E2F23BBFA641A4?partnerref=pe-website\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-ON24-OpenHouse-InnovationCertificate-Banner-900x250.jpg\" data-entity-uuid=\"64038f62-532b-4bc8-b07c-5f428e63f6d3\" data-entity-type=\"file\" alt=\"On Demand Open House Innovation\" width=\"900\" height=\"250\" loading=\"lazy\"\u003E\u003C/a\u003E" - }, - "field_course_dates": [ - { - "value": "2024-06-03", - "end_value": "2024-07-28" - } - ], - "field_course_fee": 28000, - "field_course_length": null, - "field_course_location": "On Campus and Live Virtual", - "field_course_tbd": null, - "field_course_updates_url": { - "uri": "https://professional.mit.edu/professional-certificate-program-innovation-technology-updates", - "title": "", - "options": [] - }, - "field_course_webinar_url": { - "uri": "https://event.on24.com/wcc/r/4140918/0A5FE67EA57D996728E57B0C3C51F49E?partenref=pewebsite", - "title": "", - "options": [] - }, - "field_custom_buttons": [], - "field_do_not_show_in_catalog": false, - "field_featured_course_summary": "The featured program summary.", - "field_meta_tags": null, - "field_registration_deadline": null, - "field_registration_url": { - "uri": "https://mitpe.force.com/portal/s/registration-programs?prcode=iCert", - "title": "", - "options": [] - }, - "field_searchable_keywords": "Professional Certificate Program in Innovation & Technology, English, Sang-Gook Kim, David Niño, John Hart, Reza Rahaman, Matthew Kressy, Blade Kotelly, Michael Davies, Edward Schiappa, Markus J. Buehler, Erdin Beshimov, Eric von Hippel" - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "81df3420-08d3-4f28-9f15-d0ede0484735", - "meta": { - "drupal_internal__target_id": "course" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/node_type?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/node_type?resourceVersion=id%3A14202" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "7c58ac47-e063-4ca3-945c-396f3947878a", - "meta": { - "drupal_internal__target_id": 83 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/revision_uid?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/revision_uid?resourceVersion=id%3A14202" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "791d42b0-c13c-4d92-8f6a-5c337a4fb5c0", - "meta": { - "drupal_internal__target_id": 78 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/uid?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/uid?resourceVersion=id%3A14202" - } - } - }, - "field_course_certificate": { - "data": [ - { - "type": "taxonomy_term--course_certificates", - "id": "9490f0f8-bd9d-4274-87ff-6d3ed50fe981", - "meta": { - "drupal_internal__target_id": 20 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_certificate?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_certificate?resourceVersion=id%3A14202" - } - } - }, - "field_course_flyer": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_flyer?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_flyer?resourceVersion=id%3A14202" - } - } - }, - "field_course_schedule": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_schedule?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_schedule?resourceVersion=id%3A14202" - } - } - }, - "field_course_status": { - "data": { - "type": "taxonomy_term--course_", - "id": "5d1c1a44-db2d-4a2e-b45f-f83e4636fbd9", - "meta": { - "drupal_internal__target_id": 14 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_status?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_status?resourceVersion=id%3A14202" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_course_topics?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_course_topics?resourceVersion=id%3A14202" - } - } - }, - "field_featured_course_image": { - "data": { - "type": "media--featured_course_image", - "id": "ee5380c6-259e-484c-aba5-1e43e2635acc", - "meta": { - "drupal_internal__target_id": 1216 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_featured_course_image?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_featured_course_image?resourceVersion=id%3A14202" - } - } - }, - "field_header_image": { - "data": { - "type": "media--header_image", - "id": "ec734233-e506-47f6-bd87-93ca4a62f26e", - "meta": { - "drupal_internal__target_id": 594 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_header_image?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_header_image?resourceVersion=id%3A14202" - } - } - }, - "field_instructors": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_instructors?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_instructors?resourceVersion=id%3A14202" - } - } - }, - "field_lead_instructors": { - "data": [ - { - "type": "node--faculty", - "id": "0d18fecb-0274-4268-b4dd-6ea7ac6a36de", - "meta": { - "drupal_internal__target_id": 286 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_lead_instructors?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_lead_instructors?resourceVersion=id%3A14202" - } - } - }, - "field_location_tag": { - "data": { - "type": "taxonomy_term--course_location", - "id": "71d611cf-0d3b-49c1-8a92-a9be3d004c0e", - "meta": { - "drupal_internal__target_id": 11 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_location_tag?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_location_tag?resourceVersion=id%3A14202" - } - } - }, - "field_paragraphs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_paragraphs?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_paragraphs?resourceVersion=id%3A14202" - } - } - }, - "field_program_courses": { - "data": [ - { - "type": "node--course", - "id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58", - "meta": { - "drupal_internal__target_id": 1239 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_program_courses?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_program_courses?resourceVersion=id%3A14202" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_programs?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_programs?resourceVersion=id%3A14202" - } - } - }, - "field_subtopic": { - "data": [ - { - "type": "taxonomy_term--subtopic", - "id": "dc2c3d2d-ab5f-4f28-bea7-31076c13b0c7", - "meta": { - "drupal_internal__target_id": 61 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_subtopic?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_subtopic?resourceVersion=id%3A14202" - } - } - }, - "field_tabbed_content": { - "data": { - "type": "paragraph--tabbed_content", - "id": "7a52085f-7c6f-4c7c-a6aa-827a363bb8eb", - "meta": { - "target_revision_id": 111155, - "drupal_internal__target_id": 4225 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/field_tabbed_content?resourceVersion=id%3A14202" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/9c0692c9-7216-4be1-b432-fbeefec1da1f/relationships/field_tabbed_content?resourceVersion=id%3A14202" - } - } - } - } - }, - { - "type": "node--course", - "id": "6d8f9727-beb3-4def-bfb6-bc0f7e270d58", - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58?resourceVersion=id%3A14212" - } - }, - "attributes": { - "drupal_internal__nid": 1239, - "drupal_internal__vid": 14212, - "langcode": "en", - "revision_timestamp": "2024-04-30T18:34:50+00:00", - "status": true, - "title": "Product Innovation in the Age of AI", - "created": "2024-04-01T16:18:13+00:00", - "changed": "2024-04-30T18:34:50+00:00", - "promote": false, - "sticky": false, - "default_langcode": true, - "revision_translation_affected": true, - "metatag": null, - "path": { - "alias": "/course-catalog/product-innovation-age-ai", - "pid": 1306, - "langcode": "en" - }, - "body": { - "value": "The full course description.", - "format": "full_html", - "processed": "The full course description.", - "summary": "The course summary description." - }, - "field_ceus": "1.8", - "field_course_alert": { - "value": "\u003Ca href=\"https://mit.zoom.us/meeting/register/tJIuceqtrTItHdTqIqrsp6EfA9VWQimNxocj#/registration\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-OpenHouse-ProductInnovationInTheAgeOfAI-email-banner-600x150.jpg\" data-entity-uuid=\"03efb6ca-bbee-4369-a737-b82f965a4a02\" data-entity-type=\"file\" alt=\"open house\" width=\"601\" height=\"151\"\u003E\u003C/a\u003E", - "format": "full_html", - "processed": "\u003Ca href=\"https://mit.zoom.us/meeting/register/tJIuceqtrTItHdTqIqrsp6EfA9VWQimNxocj#/registration\"\u003E\u003Cimg src=\"/sites/default/files/inline-images/MITPE-OpenHouse-ProductInnovationInTheAgeOfAI-email-banner-600x150.jpg\" data-entity-uuid=\"03efb6ca-bbee-4369-a737-b82f965a4a02\" data-entity-type=\"file\" alt=\"open house\" width=\"601\" height=\"151\" loading=\"lazy\"\u003E\u003C/a\u003E" - }, - "field_course_dates": [ - { - "value": "2024-07-29", - "end_value": "2024-07-31" - } - ], - "field_course_fee": 3600, - "field_course_length": "3 Days", - "field_course_location": "On Campus", - "field_course_tbd": null, - "field_course_updates_url": { - "uri": "https://professional.mit.edu/product-innovation-age-ai-updates", - "title": "", - "options": [] - }, - "field_course_webinar_url": null, - "field_custom_buttons": [], - "field_do_not_show_in_catalog": false, - "field_featured_course_summary": "The featured course summary.", - "field_meta_tags": null, - "field_registration_deadline": "2024-07-08", - "field_registration_url": { - "uri": "https://mitpe.my.site.com/portal/s/registration-courses?cocode=PPISUM2024", - "title": "", - "options": [] - }, - "field_searchable_keywords": "Product Innovation, AI, Innovation, Practical Application, Short Programs, Technology, Eric von Hippel, Erdin Beshimov" - }, - "relationships": { - "node_type": { - "data": { - "type": "node_type--node_type", - "id": "81df3420-08d3-4f28-9f15-d0ede0484735", - "meta": { - "drupal_internal__target_id": "course" - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/node_type?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/node_type?resourceVersion=id%3A14212" - } - } - }, - "revision_uid": { - "data": { - "type": "user--user", - "id": "7c58ac47-e063-4ca3-945c-396f3947878a", - "meta": { - "drupal_internal__target_id": 83 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/revision_uid?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/revision_uid?resourceVersion=id%3A14212" - } - } - }, - "uid": { - "data": { - "type": "user--user", - "id": "5b74860c-679a-46f8-876b-56fdcceca3a2", - "meta": { - "drupal_internal__target_id": 82 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/uid?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/uid?resourceVersion=id%3A14212" - } - } - }, - "field_course_certificate": { - "data": [ - { - "type": "taxonomy_term--course_certificates", - "id": "9490f0f8-bd9d-4274-87ff-6d3ed50fe981", - "meta": { - "drupal_internal__target_id": 20 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_certificate?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_certificate?resourceVersion=id%3A14212" - } - } - }, - "field_course_flyer": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_flyer?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_flyer?resourceVersion=id%3A14212" - } - } - }, - "field_course_schedule": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_schedule?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_schedule?resourceVersion=id%3A14212" - } - } - }, - "field_course_status": { - "data": { - "type": "taxonomy_term--course_", - "id": "5d1c1a44-db2d-4a2e-b45f-f83e4636fbd9", - "meta": { - "drupal_internal__target_id": 14 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_status?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_status?resourceVersion=id%3A14212" - } - } - }, - "field_course_topics": { - "data": [ - { - "type": "taxonomy_term--topics", - "id": "cf85788c-a012-4683-ae98-686e9d89a2b7", - "meta": { - "drupal_internal__target_id": 28 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_course_topics?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_course_topics?resourceVersion=id%3A14212" - } - } - }, - "field_featured_course_image": { - "data": null, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_featured_course_image?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_featured_course_image?resourceVersion=id%3A14212" - } - } - }, - "field_header_image": { - "data": { - "type": "media--header_image", - "id": "0b8897cc-987c-4109-b46b-3227c23e0c00", - "meta": { - "drupal_internal__target_id": 1710 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_header_image?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_header_image?resourceVersion=id%3A14212" - } - } - }, - "field_instructors": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_instructors?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_instructors?resourceVersion=id%3A14212" - } - } - }, - "field_lead_instructors": { - "data": [ - { - "type": "node--faculty", - "id": "0079dcfc-7828-49dc-b60a-abd147b6972e", - "meta": { - "drupal_internal__target_id": 1033 - } - }, - { - "type": "node--faculty", - "id": "e07c7ecd-4c5e-4510-8bb3-ee8d4f79adde", - "meta": { - "drupal_internal__target_id": 1034 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_lead_instructors?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_lead_instructors?resourceVersion=id%3A14212" - } - } - }, - "field_location_tag": { - "data": { - "type": "taxonomy_term--course_location", - "id": "71d611cf-0d3b-49c1-8a92-a9be3d004c0e", - "meta": { - "drupal_internal__target_id": 11 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_location_tag?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_location_tag?resourceVersion=id%3A14212" - } - } - }, - "field_paragraphs": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_paragraphs?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_paragraphs?resourceVersion=id%3A14212" - } - } - }, - "field_program_courses": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_program_courses?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_program_courses?resourceVersion=id%3A14212" - } - } - }, - "field_programs": { - "data": [ - { - "type": "taxonomy_term--programs", - "id": "4b48c28f-fae1-402f-ac3d-8bf97af6baf3", - "meta": { - "drupal_internal__target_id": 38 - } - } - ], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_programs?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_programs?resourceVersion=id%3A14212" - } - } - }, - "field_subtopic": { - "data": [], - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_subtopic?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_subtopic?resourceVersion=id%3A14212" - } - } - }, - "field_tabbed_content": { - "data": { - "type": "paragraph--tabbed_content", - "id": "e836c313-5d2b-4a5b-ae0e-9871e895ec40", - "meta": { - "target_revision_id": 111294, - "drupal_internal__target_id": 5286 - } - }, - "links": { - "related": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/field_tabbed_content?resourceVersion=id%3A14212" - }, - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course/6d8f9727-beb3-4def-bfb6-bc0f7e270d58/relationships/field_tabbed_content?resourceVersion=id%3A14212" - } - } - } - } - } - ], - "links": { - "self": { - "href": "https://professional.mit.edu/jsonapi/node/course" - } - } -} diff --git a/test_json/professional_ed/professional_ed_resources_0.json b/test_json/professional_ed/professional_ed_resources_0.json new file mode 100644 index 0000000000..4175d620a2 --- /dev/null +++ b/test_json/professional_ed/professional_ed_resources_0.json @@ -0,0 +1,52 @@ +[ + { + "uuid": "790a82a4-8967-4b77-9342-4f6be5809abd", + "title": "Manufatura Inteligente: Produção na Indústria 4.0 (Portuguese)", + "url": "/course-catalog/manufatura-inteligente-producao-na-industria-40-portuguese", + "description": "A fábrica do futuro já está aqui. Participe do programa online Manufatura Inteligente: Produção na Indústria 4.0 e aproveite a experiência de mais de cem anos de colaboração do MIT com vários setores. Aprenda as chaves para criar uma indústria inteligente em qualquer escala e saiba como software, sensores e sistemas são integrados para essa finalidade. Com este programa interativo, você passará da criação de modelos a sistemas de fabricação e análise avançada de dados para desenvolver estratégias que gerem uma vantagem competitiva.\n", + "learning_format": "Online", + "resource_type": "program", + "course_certificate": "", + "topics": "Technology: Technology Innovation", + "image__src": "/sites/default/files/2020-08/Smart%20Manufacturing.jpg", + "image__alt": "Smart Manufacturing Header Image", + "courses": "a44c8b47-552c-45f9-b91b-854172201889", + "start_date": "2023-07-06", + "end_date": "2023-09-14", + "enrollment_end_date": "2023-07-06", + "price": "$1870", + "lead_instructors": "", + "instructors": "Brian Anthony", + "language": "", + "node_id": "719", + "location": "Online", + "duration": "10 semanas", + "continuing_ed_credits": "8", + "run__readable_id": "7192023070620230914" + }, + { + "uuid": "a44c8b47-552c-45f9-b91b-854172201889", + "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", + "url": "/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", + "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", + "learning_format": "Online", + "resource_type": "", + "course_certificate": "Chief Digital Officer|Digital Transformation|Industry 4.0|Certificate of Completion", + "topics": "Technology: Data Science", + "image__src": "/sites/default/files/2022-01/1600x800.png", + "image__alt": " Persuasive Communication Critical Thinking -web banner", + "courses": "", + "start_date": "2023-07-06", + "end_date": "2023-09-07", + "enrollment_end_date": "2023-04-25", + "price": "$1870", + "lead_instructors": "Edward Schiappa", + "instructors": "", + "language": "", + "node_id": "780", + "location": "online", + "duration": "9 semanas", + "continuing_ed_credits": "7.2", + "run__readable_id": "7802023070620230907" + } +] diff --git a/test_json/professional_ed/professional_ed_resources_1.json b/test_json/professional_ed/professional_ed_resources_1.json new file mode 100644 index 0000000000..e70ea3a444 --- /dev/null +++ b/test_json/professional_ed/professional_ed_resources_1.json @@ -0,0 +1,27 @@ +[ + { + "uuid": "e3be75f6-f7c9-432b-9c24-70c7132e1583", + "title": "Design-Thinking and Innovation for Technical Leaders", + "url": "/course-catalog/design-thinking-and-innovation-technical-leaders", + "description": "Become a stronger leader of innovation and design-thinking in your workplace. Join us for a highly interactive and engaging course that will teach you powerful new approaches for creating innovative solutions, crafting vision that gets buy-in, and developing solutions that people love. You'll learn our proven 10-Step Design Process and gain the strategies and hands-on experience to make your mark as a leader of innovation. Don't miss this opportunity to take your leadership capabilities to the next level.\n\nThis course may be taken individually or as part of the Professional Certificate Program in Innovation and Technology.\n", + "learning_format": "On Campus", + "resource_type": "", + "course_certificate": "Certificate of Completion", + "topics": "Technology: Data Science|Technology: Technology Innovation", + "image__src": "/sites/default/files/2020-08/MITPE-MasteringInnovationDesignThinking-website-banner-1600x800.jpg", + "image__alt": "Mastering Innovation &amp; Design-Thinking header ", + "courses": "", + "start_date": "2023-07-17|2025-09-01", + "end_date": "2023-07-19|2025-12-01", + "enrollment_end_date": "2023-06-17|2025-09-01", + "price": "$3600", + "lead_instructors": "Blade Kotelly|Reza Rahaman", + "instructors": "", + "language": "", + "node_id": "417", + "location": "On Campus", + "duration": "3 Days", + "continuing_ed_credits": "2.0 CEUs", + "run__readable_id": "4172023071720230719" + } +] diff --git a/test_json/professional_ed/professional_ed_resources_2.json b/test_json/professional_ed/professional_ed_resources_2.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/test_json/professional_ed/professional_ed_resources_2.json @@ -0,0 +1 @@ +[] From 4e10be5e6ce7f10b5765a3974d5a7bcdfe058fff Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Thu, 1 Aug 2024 15:47:48 -0400 Subject: [PATCH 04/10] topic mappings for tests --- learning_resources/etl/mitpe_test.py | 74 +++++++++------------------- 1 file changed, 24 insertions(+), 50 deletions(-) diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index 37a33db2e3..349b25086d 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -7,6 +7,11 @@ import pytest from learning_resources.etl import mitpe +from learning_resources.factories import ( + LearningResourceOfferorFactory, + LearningResourceTopicFactory, + LearningResourceTopicMappingFactory, +) from main.test_utils import assert_json_equal EXPECTED_COURSES = [ @@ -28,7 +33,7 @@ "course": {"course_numbers": []}, "learning_format": ["online"], "published": True, - "topics": [], + "topics": [{"name": "Data Science"}], "runs": [ { "run_id": "7802023070620230907", @@ -64,7 +69,7 @@ "course": {"course_numbers": []}, "learning_format": ["in_person"], "published": True, - "topics": [], + "topics": [{"name": "Data Science"}, {"name": "Product Innovation"}], "runs": [ { "run_id": "4172023071720230719", @@ -105,7 +110,7 @@ "description": "A fábrica do futuro já está aqui. Participe do programa online Manufatura Inteligente: Produção na Indústria 4.0 e aproveite a experiência de mais de cem anos de colaboração do MIT com vários setores. Aprenda as chaves para criar uma indústria inteligente em qualquer escala e saiba como software, sensores e sistemas são integrados para essa finalidade. Com este programa interativo, você passará da criação de modelos a sistemas de fabricação e análise avançada de dados para desenvolver estratégias que gerem uma vantagem competitiva.\n", "learning_format": ["online"], "published": True, - "topics": [], + "topics": [{"name": "Product Innovation"}], "runs": [ { "run_id": "7192023070620230914", @@ -122,51 +127,7 @@ "instructors": [{"full_name": ""}, {"full_name": "Brian Anthony"}], } ], - "courses": [ - { - "readable_id": "a44c8b47-552c-45f9-b91b-854172201889", - "offered_by": {"code": "mitpe"}, - "platform": "mitpe", - "etl_source": "mitpe", - "professional": True, - "certification": True, - "certification_type": "professional", - "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", - "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", - "image": { - "alt": " Persuasive Communication Critical Thinking -web banner", - "url": "https://professional.mit.edu/sites/default/files/2022-01/1600x800.png", - }, - "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", - "course": {"course_numbers": []}, - "learning_format": ["online"], - "published": True, - "topics": [], - "runs": [ - { - "run_id": "7802023070620230907", - "title": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)", - "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", - "start_date": datetime.datetime( - 2023, 7, 6, 4, 0, tzinfo=datetime.UTC - ), - "end_date": datetime.datetime( - 2023, 9, 7, 4, 0, tzinfo=datetime.UTC - ), - "enrollment_end": datetime.datetime( - 2023, 4, 25, 4, 0, tzinfo=datetime.UTC - ), - "published": True, - "prices": ["1870"], - "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", - "instructors": [ - {"full_name": "Edward Schiappa"}, - {"full_name": ""}, - ], - } - ], - } - ], + "courses": [EXPECTED_COURSES[0]], } ] @@ -218,8 +179,21 @@ def test_extract(settings, mock_fetch_data, prof_ed_api_url): @pytest.mark.django_db() def test_transform(mocker, mock_fetch_data, prof_ed_settings): """Test transform function, and effectivelu most other functions""" + offeror = LearningResourceOfferorFactory.create(code="mitpe") + LearningResourceTopicMappingFactory.create( + offeror=offeror, + topic=LearningResourceTopicFactory.create(name="Product Innovation"), + topic_name="Technology Innovation", + ) + LearningResourceTopicMappingFactory.create( + offeror=offeror, + topic=LearningResourceTopicFactory.create(name="Data Science"), + topic_name="Data Science", + ) extracted = mitpe.extract() assert len(extracted) == 3 courses, programs = mitpe.transform(extracted) - assert courses == EXPECTED_COURSES - assert programs == EXPECTED_PROGRAMS + assert_json_equal( + sorted(courses, key=lambda course: course["readable_id"]), EXPECTED_COURSES + ) + assert_json_equal(programs, EXPECTED_PROGRAMS) From 5cf5a4572d2be8011126b94aea69be111fd0da5a Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Thu, 1 Aug 2024 16:08:15 -0400 Subject: [PATCH 05/10] fix broken test --- learning_resources/utils_test.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/learning_resources/utils_test.py b/learning_resources/utils_test.py index 071bd115e9..0a860d1db6 100644 --- a/learning_resources/utils_test.py +++ b/learning_resources/utils_test.py @@ -540,7 +540,12 @@ def test_transfer_list_resources( ] results = transfer_list_resources( - "podcast", matching_field, from_source, to_source, delete_unpublished=delete_old + "podcast", + "podcast", + matching_field, + from_source, + to_source, + delete_unpublished=delete_old, ) podcast_path.refresh_from_db() podcast_list.refresh_from_db() From 1b21e72ce5126920699e592493c3c08b03d32caa Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Wed, 7 Aug 2024 10:50:51 -0400 Subject: [PATCH 06/10] Some updates based on news/events PR --- learning_resources/etl/mitpe.py | 13 +++++++------ learning_resources/etl/mitpe_test.py | 5 +++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/learning_resources/etl/mitpe.py b/learning_resources/etl/mitpe.py index bed7fdc0c5..54c34c37f5 100644 --- a/learning_resources/etl/mitpe.py +++ b/learning_resources/etl/mitpe.py @@ -27,18 +27,17 @@ OFFERED_BY = {"code": OfferedBy.mitpe.name} -def _fetch_data(url, page=0) -> list[dict]: +def _fetch_data(url) -> list[dict]: """ Fetch data from the Professional Education API Args: url(str): The url to fetch data from - params(dict): The query parameters to include in the request Yields: list[dict]: A list of course or program data """ - params = {"page": page} + params = {"page": 0} has_results = True while has_results: results = requests.get( @@ -56,10 +55,12 @@ def extract() -> list[dict]: Returns: list[dict]: list of raw course or program data """ - if settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL: - return list(_fetch_data(settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL)) + if settings.MITPE_BASE_API_URL: + return list( + _fetch_data(urljoin(settings.MITPE_BASE_API_URL, "/feeds/courses/")) + ) else: - log.warning("Missing required setting PROFESSIONAL_EDUCATION_RESOURCES_API_URL") + log.warning("Missing required setting MITPE_BASE_API_URL") return [] diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index 349b25086d..7ad308311c 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -160,7 +160,7 @@ def read_json(file_path): @pytest.mark.parametrize("prof_ed_api_url", ["http://pro_edd_api.com", None]) def test_extract(settings, mock_fetch_data, prof_ed_api_url): """Test extract function""" - settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL = prof_ed_api_url + settings.MITPE_BASE_API_URL = prof_ed_api_url expected = [] for page in range(3): with Path.open( @@ -177,8 +177,9 @@ def test_extract(settings, mock_fetch_data, prof_ed_api_url): @pytest.mark.django_db() -def test_transform(mocker, mock_fetch_data, prof_ed_settings): +def test_transform(settings, mock_fetch_data, prof_ed_settings): """Test transform function, and effectivelu most other functions""" + settings.MITPE_BASE_API_URL = "http://pro_edu_api.edu" offeror = LearningResourceOfferorFactory.create(code="mitpe") LearningResourceTopicMappingFactory.create( offeror=offeror, From 8329fa984fd251ef8902b60386f06216df66acf8 Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Fri, 9 Aug 2024 08:42:55 -0400 Subject: [PATCH 07/10] courses field from MITPE API will be pipe-delimited list of titles --- learning_resources/etl/mitpe.py | 22 ++++++++++--------- learning_resources/etl/mitpe_test.py | 2 +- .../professional_ed_resources_0.json | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/learning_resources/etl/mitpe.py b/learning_resources/etl/mitpe.py index 54c34c37f5..9064242687 100644 --- a/learning_resources/etl/mitpe.py +++ b/learning_resources/etl/mitpe.py @@ -165,7 +165,7 @@ def clean_title(title: str) -> str: Returns: str: cleaned title """ - return html.unescape(title) + return html.unescape(title.strip()) def parse_description(resource_data: dict) -> str: @@ -297,10 +297,10 @@ def transform_program(resource_data: dict) -> dict or None: "url": parse_resource_url(resource_data), "image": parse_image(resource_data), "description": parse_description(resource_data), - "course_ids": [ - course_id - for course_id in resource_data["courses"].split("|") - if course_id + "course_titles": [ + course_title + for course_title in resource_data["courses"].split("|") + if course_title ], "learning_format": transform_format(resource_data["learning_format"]), "published": True, @@ -318,13 +318,15 @@ def transform_program_courses(programs: list[dict], courses_data: list[dict]): programs(list[dict]): list of program data courses_data(list[dict]): list of course data """ - course_dict = {course["readable_id"]: course for course in courses_data} + course_dict = {course["title"]: course for course in courses_data} for program in programs: - course_ids = program.pop("course_ids", []) + course_titles = [ + clean_title(title) for title in program.pop("course_titles", []) + ] program["courses"] = [ - copy.deepcopy(course_dict[course_id]) - for course_id in course_ids - if course_id in course_dict + copy.deepcopy(course_dict[course_title]) + for course_title in course_titles + if course_title in course_dict ] diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index 7ad308311c..1509ee8498 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -127,7 +127,7 @@ "instructors": [{"full_name": ""}, {"full_name": "Brian Anthony"}], } ], - "courses": [EXPECTED_COURSES[0]], + "courses": [EXPECTED_COURSES[0], EXPECTED_COURSES[1]], } ] diff --git a/test_json/professional_ed/professional_ed_resources_0.json b/test_json/professional_ed/professional_ed_resources_0.json index 4175d620a2..7e51b93a6b 100644 --- a/test_json/professional_ed/professional_ed_resources_0.json +++ b/test_json/professional_ed/professional_ed_resources_0.json @@ -10,7 +10,7 @@ "topics": "Technology: Technology Innovation", "image__src": "/sites/default/files/2020-08/Smart%20Manufacturing.jpg", "image__alt": "Smart Manufacturing Header Image", - "courses": "a44c8b47-552c-45f9-b91b-854172201889", + "courses": "Comunicação Persuasiva: Pensamento Crítico para Aprimorar a Mensagem (Portuguese)|Design-Thinking and Innovation for Technical Leaders", "start_date": "2023-07-06", "end_date": "2023-09-14", "enrollment_end_date": "2023-07-06", From ce85f14b8f5bd6995971ffeb1e3768f1c571ec20 Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Wed, 28 Aug 2024 08:46:44 -0400 Subject: [PATCH 08/10] Flag to enable MITPE ETL or not --- app.json | 4 +++ learning_resources/etl/mitpe.py | 17 +++++----- learning_resources/etl/mitpe_test.py | 9 +++--- learning_resources/etl/prolearn.py | 42 +++++++++++++++---------- learning_resources/etl/prolearn_test.py | 10 ++++-- main/settings_course_etl.py | 1 + 6 files changed, 53 insertions(+), 30 deletions(-) diff --git a/app.json b/app.json index 4fe3feccae..94af26e112 100644 --- a/app.json +++ b/app.json @@ -225,6 +225,10 @@ "description": "URL to MicroMasters catalog API", "required": "false" }, + "MITPE_API_ENABLED": { + "description": "Whether MIT Professional Education ETL should be enabled", + "required": "false" + }, "MITPE_BASE_URL": { "description": "Base URL for MIT Professional Education website", "required": "false" diff --git a/learning_resources/etl/mitpe.py b/learning_resources/etl/mitpe.py index 9064242687..60b9dde67b 100644 --- a/learning_resources/etl/mitpe.py +++ b/learning_resources/etl/mitpe.py @@ -55,14 +55,15 @@ def extract() -> list[dict]: Returns: list[dict]: list of raw course or program data """ - if settings.MITPE_BASE_API_URL: - return list( - _fetch_data(urljoin(settings.MITPE_BASE_API_URL, "/feeds/courses/")) - ) - else: - log.warning("Missing required setting MITPE_BASE_API_URL") - - return [] + required_settings = [ + "MITPE_BASE_API_URL", + "MITPE_API_ENABLED", + ] + for setting in required_settings: + if not getattr(settings, setting): + log.warning("Missing required setting %s", setting) + return [] + return list(_fetch_data(urljoin(settings.MITPE_BASE_API_URL, "/feeds/courses/"))) def parse_topics(resource_data: dict) -> list[dict]: diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index 1509ee8498..bb081aa2e8 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -132,14 +132,15 @@ ] -@pytest.fixture() +@pytest.fixture def prof_ed_settings(settings): """Fixture to set Professional Education API URL""" - settings.PROFESSIONAL_EDUCATION_RESOURCES_API_URL = "http://pro_edu_api.com" + settings.MITPE_BASE_API_URL = "http://pro_edu_api.com" + settings.MITPE_API_ENABLED = True return settings -@pytest.fixture() +@pytest.fixture def mock_fetch_data(mocker): """Mock fetch_data function""" @@ -176,7 +177,7 @@ def test_extract(settings, mock_fetch_data, prof_ed_api_url): assert len(results) == 0 -@pytest.mark.django_db() +@pytest.mark.django_db def test_transform(settings, mock_fetch_data, prof_ed_settings): """Test transform function, and effectivelu most other functions""" settings.MITPE_BASE_API_URL = "http://pro_edu_api.edu" diff --git a/learning_resources/etl/prolearn.py b/learning_resources/etl/prolearn.py index 82d1c933a1..ea4d37f40c 100644 --- a/learning_resources/etl/prolearn.py +++ b/learning_resources/etl/prolearn.py @@ -32,32 +32,37 @@ SEE_EXCLUSION = ( '{operator: "<>", name: "department", value: "MIT Sloan Executive Education"}' ) +MITPE_EXCLUSION = ( + '{operator: "<>", name: "department", value: "MIT Professional Education"}' +) + # Performs the query made on https://prolearn.mit.edu/graphql, with a filter for program or course # noqa: E501 PROLEARN_QUERY = """ -query { +query {{ searchAPISearch( index_id:\"default_solr_index\", - range:{limit: 999, offset: 0}, - condition_group: { + range:{{limit: 999, offset: 0}}, + condition_group: {{ conjunction: AND, groups: [ - { + {{ conjunction: AND, conditions: [ - {operator: \"=\", name: \"field_course_or_program\", value: \"%s\"}, - {operator: \"<>\", name: \"department\", value: \"MIT xPRO\"} - %s - {operator: \"<>\", name: \"department\", value: \"MIT Professional Education\"} + {{operator: \"=\", name: \"field_course_or_program\", value: \"{course_or_program}\"}}, + {{operator: \"<>\", name: \"department\", value: \"MIT xPRO\"}} + {see_exclusion} + {mitpe_exclusion} + {{operator: \"<>\", name: \"department\", value: \"MIT Professional Education\"}} ] - } + }} ] - } - ) { + }} + ) {{ result_count - documents {... on DefaultSolrIndexDoc {%s}} - } -} + documents {{... on DefaultSolrIndexDoc {{query_fields}}}} + }} +}} """ # noqa: E501 UNIQUE_FIELD = "url" @@ -202,11 +207,16 @@ def extract_data(course_or_program: str) -> list[dict]: """ # noqa: D401, E501 if settings.PROLEARN_CATALOG_API_URL: sloan_filter = SEE_EXCLUSION if settings.SEE_API_ENABLED else "" + mitpe_filter = MITPE_EXCLUSION if settings.MITPE_API_ENABLED else "" response = requests.post( settings.PROLEARN_CATALOG_API_URL, json={ - "query": PROLEARN_QUERY - % (course_or_program, sloan_filter, PROLEARN_QUERY_FIELDS) + "query": PROLEARN_QUERY.format( + course_or_program=course_or_program, + see_exclusion=sloan_filter, + mitpe_exclusion=mitpe_filter, + query_fields=PROLEARN_QUERY_FIELDS, + ) }, timeout=30, ).json() diff --git a/learning_resources/etl/prolearn_test.py b/learning_resources/etl/prolearn_test.py index 9390b73a48..44908620ed 100644 --- a/learning_resources/etl/prolearn_test.py +++ b/learning_resources/etl/prolearn_test.py @@ -18,6 +18,7 @@ ) from learning_resources.etl.constants import ETLSource from learning_resources.etl.prolearn import ( + MITPE_EXCLUSION, PROLEARN_BASE_URL, SEE_EXCLUSION, UNIQUE_FIELD, @@ -420,11 +421,16 @@ def test_update_delivery( @pytest.mark.parametrize("sloan_api_enabled", [True, False]) -def test_sloan_exclusion(settings, mocker, sloan_api_enabled): - """Slaon exclusion should be included if sloan api enabled""" +@pytest.mark.parametrize("mitpe_api_enabled", [True, False]) +def test_sloan_exclusion(settings, mocker, sloan_api_enabled, mitpe_api_enabled): + """Slaon/MITPE exclusion should be included if respective api enabled""" settings.SEE_API_ENABLED = sloan_api_enabled + settings.MITPE_API_ENABLED = mitpe_api_enabled mock_post = mocker.patch("learning_resources.etl.sloan.requests.post") extract_data("course") assert ( SEE_EXCLUSION in mock_post.call_args[1]["json"]["query"] ) is sloan_api_enabled + assert ( + MITPE_EXCLUSION in mock_post.call_args[1]["json"]["query"] + ) is mitpe_api_enabled diff --git a/main/settings_course_etl.py b/main/settings_course_etl.py index 519a241683..581a971594 100644 --- a/main/settings_course_etl.py +++ b/main/settings_course_etl.py @@ -77,6 +77,7 @@ SEE_BASE_URL = get_string("SEE_BASE_URL", None) MITPE_BASE_URL = get_string("MITPE_BASE_URL", "https://professional.mit.edu/") MITPE_BASE_API_URL = get_string("MITPE_BASE_API_URL", None) +MITPE_API_ENABLED = get_bool("MITPE_API_ENABLED", default=False) # course catalog video etl settings OPEN_VIDEO_DATA_BRANCH = get_string("OPEN_VIDEO_DATA_BRANCH", "master") From 979058d8885a26bdd38b2dc829c505909c469289 Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Wed, 28 Aug 2024 10:15:46 -0400 Subject: [PATCH 09/10] Fix tests --- learning_resources/etl/mitpe_test.py | 1 + learning_resources/etl/prolearn.py | 1 - learning_resources/etl/prolearn_test.py | 36 +++++++++++++------------ learning_resources/tasks_test.py | 3 ++- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index bb081aa2e8..cbadde7ea7 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -162,6 +162,7 @@ def read_json(file_path): def test_extract(settings, mock_fetch_data, prof_ed_api_url): """Test extract function""" settings.MITPE_BASE_API_URL = prof_ed_api_url + settings.MITPE_API_ENABLED = True expected = [] for page in range(3): with Path.open( diff --git a/learning_resources/etl/prolearn.py b/learning_resources/etl/prolearn.py index ea4d37f40c..c2fbd3dcce 100644 --- a/learning_resources/etl/prolearn.py +++ b/learning_resources/etl/prolearn.py @@ -53,7 +53,6 @@ {{operator: \"<>\", name: \"department\", value: \"MIT xPRO\"}} {see_exclusion} {mitpe_exclusion} - {{operator: \"<>\", name: \"department\", value: \"MIT Professional Education\"}} ] }} ] diff --git a/learning_resources/etl/prolearn_test.py b/learning_resources/etl/prolearn_test.py index 44908620ed..29c80bbeab 100644 --- a/learning_resources/etl/prolearn_test.py +++ b/learning_resources/etl/prolearn_test.py @@ -3,6 +3,7 @@ import json from datetime import UTC, datetime from decimal import Decimal +from pathlib import Path from urllib.parse import urljoin, urlparse import pytest @@ -62,22 +63,23 @@ def _mock_offerors_platforms(): @pytest.fixture(autouse=True) -def mock_prolearn_api_setting(settings): # noqa: PT004 +def mock_prolearn_api_setting(settings): """Set the prolearn api url""" settings.PROLEARN_CATALOG_API_URL = "http://localhost/test/programs/api" + return settings @pytest.fixture def mock_csail_programs_data(): """Mock prolearn CSAIL programs data""" - with open("./test_json/prolearn_csail_programs.json") as f: # noqa: PTH123 + with Path.open("./test_json/prolearn_csail_programs.json") as f: return json.loads(f.read()) @pytest.fixture def mock_mitpe_courses_data(): """Mock prolearn MIT Professional Education courses data""" - with open("./test_json/prolearn_mitpe_courses.json") as f: # noqa: PTH123 + with Path.open("./test_json/prolearn_mitpe_courses.json") as f: return json.loads(f.read()) @@ -283,8 +285,8 @@ def test_prolearn_transform_courses(mock_mitpe_courses_data): @pytest.mark.parametrize( ("date_int", "expected_dt"), [ - [1670932800, datetime(2022, 12, 13, 12, 0, tzinfo=UTC)], # noqa: PT007 - [None, None], # noqa: PT007 + (1670932800, datetime(2022, 12, 13, 12, 0, tzinfo=UTC)), + (None, None), ], ) def test_parse_date(date_int, expected_dt): @@ -295,10 +297,10 @@ def test_parse_date(date_int, expected_dt): @pytest.mark.parametrize( ("price_str", "price_list"), [ - ["$5,342", [round(Decimal(5342), 2)]], # noqa: PT007 - ["5.34", [round(Decimal(5.34), 2)]], # noqa: PT007 - [None, []], # noqa: PT007 - ["", []], # noqa: PT007 + ("$5,342", [round(Decimal(5342), 2)]), + ("5.34", [round(Decimal(5.34), 2)]), + (None, []), + ("", []), ], ) def test_parse_price(price_str, price_list): @@ -310,10 +312,10 @@ def test_parse_price(price_str, price_list): @pytest.mark.parametrize( ("topic", "expected"), [ - ["Blockchain", "Blockchain"], # noqa: PT007 - ["Systems Engineering", "Systems Engineering"], # noqa: PT007 - ["Other Business", "Management"], # noqa: PT007 - ["Other Technology", "Digital Business & IT"], # noqa: PT007 + ("Blockchain", "Blockchain"), + ("Systems Engineering", "Systems Engineering"), + ("Other Business", "Management"), + ("Other Technology", "Digital Business & IT"), ], ) def test_parse_topic(topic, expected): @@ -368,9 +370,9 @@ def test_parse_platform(department, platform_name): @pytest.mark.parametrize( ("featured_image_url", "expected_url"), [ - ["/a/b/c.jog", "http://localhost/a/b/c.jog"], # noqa: PT007 - ["", None], # noqa: PT007 - [None, None], # noqa: PT007 + ("/a/b/c.jog", "http://localhost/a/b/c.jog"), + ("", None), + (None, None), ], ) def test_parse_image(featured_image_url, expected_url): @@ -426,7 +428,7 @@ def test_sloan_exclusion(settings, mocker, sloan_api_enabled, mitpe_api_enabled) """Slaon/MITPE exclusion should be included if respective api enabled""" settings.SEE_API_ENABLED = sloan_api_enabled settings.MITPE_API_ENABLED = mitpe_api_enabled - mock_post = mocker.patch("learning_resources.etl.sloan.requests.post") + mock_post = mocker.patch("learning_resources.etl.prolearn.requests.post") extract_data("course") assert ( SEE_EXCLUSION in mock_post.call_args[1]["json"]["query"] diff --git a/learning_resources/tasks_test.py b/learning_resources/tasks_test.py index 1d678ddded..92efd90482 100644 --- a/learning_resources/tasks_test.py +++ b/learning_resources/tasks_test.py @@ -125,8 +125,9 @@ def test_get_mitpe_data(mocker): assert task.result == 3 -def test_get_prolearn_data(mock_pipelines): +def test_get_prolearn_data(mocker): """Verify that the get_prolearn_data invokes the Prolearn ETL pipeline""" + mock_pipelines = mocker.patch("learning_resources.tasks.pipelines") tasks.get_prolearn_data.delay() mock_pipelines.prolearn_programs_etl.assert_called_once_with() mock_pipelines.prolearn_courses_etl.assert_called_once_with() From 41770bb7481b5171766aa746bf0050cb322ac7a0 Mon Sep 17 00:00:00 2001 From: Matt Bertrand Date: Tue, 24 Sep 2024 11:08:23 -0400 Subject: [PATCH 10/10] Rename learning_format to delivery; add availability, pace, format --- learning_resources/etl/mitpe.py | 18 +++++++++++++++--- learning_resources/etl/mitpe_test.py | 25 ++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/learning_resources/etl/mitpe.py b/learning_resources/etl/mitpe.py index 60b9dde67b..69dec14bcf 100644 --- a/learning_resources/etl/mitpe.py +++ b/learning_resources/etl/mitpe.py @@ -12,13 +12,16 @@ from django.conf import settings from learning_resources.constants import ( + Availability, CertificationType, + Format, LearningResourceType, OfferedBy, + Pace, PlatformType, ) from learning_resources.etl.constants import ETLSource -from learning_resources.etl.utils import transform_format, transform_topics +from learning_resources.etl.utils import transform_delivery, transform_topics from main.utils import clean_data log = logging.getLogger(__name__) @@ -233,6 +236,9 @@ def _transform_runs(resource_data: dict) -> list[dict]: else [], "url": parse_resource_url(resource_data), "instructors": parse_instructors(resource_data), + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } for run_data in runs_data ] @@ -266,10 +272,13 @@ def transform_course(resource_data: dict) -> dict or None: "course": { "course_numbers": [], }, - "learning_format": transform_format(resource_data["learning_format"]), + "delivery": transform_delivery(resource_data["learning_format"]), "published": True, "topics": parse_topics(resource_data), "runs": runs, + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } return None @@ -303,10 +312,13 @@ def transform_program(resource_data: dict) -> dict or None: for course_title in resource_data["courses"].split("|") if course_title ], - "learning_format": transform_format(resource_data["learning_format"]), + "delivery": transform_delivery(resource_data["learning_format"]), "published": True, "topics": parse_topics(resource_data), "runs": runs, + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } return None diff --git a/learning_resources/etl/mitpe_test.py b/learning_resources/etl/mitpe_test.py index cbadde7ea7..29a8e16316 100644 --- a/learning_resources/etl/mitpe_test.py +++ b/learning_resources/etl/mitpe_test.py @@ -6,6 +6,7 @@ import pytest +from learning_resources.constants import Availability, Format, Pace from learning_resources.etl import mitpe from learning_resources.factories import ( LearningResourceOfferorFactory, @@ -31,7 +32,7 @@ }, "description": "Profissionais de áreas técnicas estão acostumados a falar ou apresentar dados para perfis que compartem os mesmos interesses e campo de atuação, mas podem encontrar dificuldades em transmitir suas ideias para pessoas de outros setores.\n", "course": {"course_numbers": []}, - "learning_format": ["online"], + "delivery": ["online"], "published": True, "topics": [{"name": "Data Science"}], "runs": [ @@ -48,8 +49,14 @@ "prices": ["1870"], "url": "https://professional.mit.edu/course-catalog/comunicacao-persuasiva-pensamento-critico-para-aprimorar-mensagem-portuguese", "instructors": [{"full_name": "Edward Schiappa"}, {"full_name": ""}], + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } ], + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, }, { "readable_id": "e3be75f6-f7c9-432b-9c24-70c7132e1583", @@ -67,7 +74,7 @@ }, "description": "Become a stronger leader of innovation and design-thinking in your workplace. Join us for a highly interactive and engaging course that will teach you powerful new approaches for creating innovative solutions, crafting vision that gets buy-in, and developing solutions that people love. You'll learn our proven 10-Step Design Process and gain the strategies and hands-on experience to make your mark as a leader of innovation. Don't miss this opportunity to take your leadership capabilities to the next level.\n\nThis course may be taken individually or as part of the Professional Certificate Program in Innovation and Technology.\n", "course": {"course_numbers": []}, - "learning_format": ["in_person"], + "delivery": ["in_person"], "published": True, "topics": [{"name": "Data Science"}, {"name": "Product Innovation"}], "runs": [ @@ -88,8 +95,14 @@ {"full_name": "Reza Rahaman"}, {"full_name": ""}, ], + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } ], + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, }, ] EXPECTED_PROGRAMS = [ @@ -108,7 +121,7 @@ "url": "https://professional.mit.edu/sites/default/files/2020-08/Smart%20Manufacturing.jpg", }, "description": "A fábrica do futuro já está aqui. Participe do programa online Manufatura Inteligente: Produção na Indústria 4.0 e aproveite a experiência de mais de cem anos de colaboração do MIT com vários setores. Aprenda as chaves para criar uma indústria inteligente em qualquer escala e saiba como software, sensores e sistemas são integrados para essa finalidade. Com este programa interativo, você passará da criação de modelos a sistemas de fabricação e análise avançada de dados para desenvolver estratégias que gerem uma vantagem competitiva.\n", - "learning_format": ["online"], + "delivery": ["online"], "published": True, "topics": [{"name": "Product Innovation"}], "runs": [ @@ -125,9 +138,15 @@ "prices": ["1870"], "url": "https://professional.mit.edu/course-catalog/manufatura-inteligente-producao-na-industria-40-portuguese", "instructors": [{"full_name": ""}, {"full_name": "Brian Anthony"}], + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } ], "courses": [EXPECTED_COURSES[0], EXPECTED_COURSES[1]], + "format": [Format.asynchronous.name], + "pace": [Pace.instructor_paced.name], + "availability": Availability.dated.name, } ]