{"id":278,"date":"2018-09-04T21:55:15","date_gmt":"2018-09-04T21:55:15","guid":{"rendered":"https:\/\/segal-gould.com\/?p=278"},"modified":"2018-11-09T01:56:36","modified_gmt":"2018-11-09T01:56:36","slug":"redesigned-course-catalog-project-the-server","status":"publish","type":"post","link":"https:\/\/segal-gould.com\/index.php\/2018\/09\/04\/redesigned-course-catalog-project-the-server\/","title":{"rendered":"Redesigned Course Catalog Project: The Server"},"content":{"rendered":"<h2>The Context<\/h2>\n<p>My initial goal in the summer of 2017 was for the combined features of the course catalog parser and server to come together as my senior project. I aimed to implement improved search functionality as well as a scheduling system for identifying courses which were available to fit within one&#8217;s own schedule. Because I did not ultimately make this my senior project, I only implemented a limited number of these features.<\/p>\n<p>Utilizing some of my experience with the <a href=\"https:\/\/developer.twitter.com\/en\/docs.html\">Twitter JSON API<\/a>, I knew I wanted to use the <a href=\"http:\/\/flask.pocoo.org\/\">Flask web development microframework<\/a> to make one of my own. <a href=\"https:\/\/www.json.org\/\">JSON<\/a> is a human-and-machine-readable format and I really liked the idea of some developer one day wanting to use this service to make an application of their own. If such a day ever came, my API would be of use to them.<\/p>\n<p><a href=\"https:\/\/www.mongodb.com\/\">MongoDB<\/a> had the kind of searchable database that seemed to scale and interface well with Flask, so I read enough documentation to get it working. Some queries happening in the backend for sorting results were particularly difficult to figure out.<\/p>\n<p>The responsive templates I set up for use with Flask were not intended to be permanent solutions. I have very limited web design experience, and making my site look better than the official one was not particularly difficult. Some day soon, I would like to give the site a more modern feel.<\/p>\n<figure id=\"attachment_292\" aria-describedby=\"caption-attachment-292\" style=\"width: 776px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/courses-site-example.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-292 size-full\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/courses-site-example.png\" alt=\"\" width=\"776\" height=\"298\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/courses-site-example.png 776w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/courses-site-example-300x115.png 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/courses-site-example-768x295.png 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/courses-site-example-600x230.png 600w\" sizes=\"(max-width: 776px) 100vw, 776px\" \/><\/a><figcaption id=\"caption-attachment-292\" class=\"wp-caption-text\">The redesigned course catalog home page<\/figcaption><\/figure>\n<h2>Features<\/h2>\n<p>The site is live at <a href=\"https:\/\/courses.segal-gould.com\/\">courses.segal-gould.com<\/a>. If your browser can handle the loading time, check out all 3900 courses currently in the database at\u00a0<a href=\"https:\/\/courses.segal-gould.com\/all\">courses.segal-gould.com\/all<\/a>.<\/p>\n<h4>Semesters<\/h4>\n<p><a href=\"https:\/\/courses.segal-gould.com\/semesters\">Browse the list of all semesters&#8217; courses available in the database.<\/a> Currently the oldest semester available is Fall 2014 due to limitations in the <a href=\"https:\/\/segal-gould.com\/index.php\/2018\/09\/04\/redesigned-course-catalog-project-the-parser\/\">parser<\/a>.<\/p>\n<figure id=\"attachment_314\" aria-describedby=\"caption-attachment-314\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-314 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example-1024x742.jpg\" alt=\"\" width=\"560\" height=\"406\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example-1024x742.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example-300x217.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example-768x556.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example-1200x869.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example-600x435.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/semesters-list-example.jpg 1784w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-314\" class=\"wp-caption-text\">Semesters list from Fall 2014 to Fall 2018.<\/figcaption><\/figure>\n<p>Then <a href=\"https:\/\/courses.segal-gould.com\/semesters\/spring2016\">browse all the courses taught in each department during that semester<\/a>. The names of these departments are the same as the names used to identify them in the URLs of the official course list.<\/p>\n<figure id=\"attachment_315\" aria-describedby=\"caption-attachment-315\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-315 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example-e1536355669951-1024x846.jpg\" alt=\"\" width=\"560\" height=\"463\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example-e1536355669951-1024x846.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example-e1536355669951-300x248.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example-e1536355669951-768x635.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example-e1536355669951-600x496.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/departments-in-semester-example-e1536355669951.jpg 1141w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-315\" class=\"wp-caption-text\">Example list of departments per semester.<\/figcaption><\/figure>\n<h4>Departments<\/h4>\n<p>Another way to browse by department is to ignore each semester and <a href=\"https:\/\/courses.segal-gould.com\/departments\">view everything in the database from each department<\/a>. For instance, there are currently 116 <a href=\"https:\/\/courses.segal-gould.com\/departments\/anthropology\">anthropology courses<\/a> in the database across all semesters.<\/p>\n<h4>Professors<\/h4>\n<p>If you are looking for a particular course instructor, you can browse <a href=\"https:\/\/courses.segal-gould.com\/professors\">the list of all professors in the database of courses<\/a>. Right now,\u00a0577 professors are in the database. Duplicates exist because often professors collaborate with each other to instruct a course, and the system treats the names of multiple professors as one single item.<\/p>\n<figure id=\"attachment_316\" aria-describedby=\"caption-attachment-316\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-316 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example-1024x494.jpg\" alt=\"\" width=\"560\" height=\"270\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example-1024x494.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example-300x145.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example-768x371.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example-1200x579.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example-600x289.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/professors-list-example.jpg 1936w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-316\" class=\"wp-caption-text\">The alphabetically sorted list of professors. When the official course list shows an instructor as &#8220;TBA&#8221; it is reflected here.<\/figcaption><\/figure>\n<h4>Locations<\/h4>\n<p><a href=\"https:\/\/courses.segal-gould.com\/locations\">Browse by all classrooms<\/a>. Sometimes courses meet in different locations on different days of the week for lab sessions.<\/p>\n<figure id=\"attachment_317\" aria-describedby=\"caption-attachment-317\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-317 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example-1024x545.jpg\" alt=\"\" width=\"560\" height=\"298\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example-1024x545.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example-300x160.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example-768x409.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example-1200x639.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example-600x320.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/locations-list-example.jpg 1926w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-317\" class=\"wp-caption-text\">The locations list page. There are currently 348 classroom locations in the database.<\/figcaption><\/figure>\n<h4>Course Codes<\/h4>\n<p>The official course list utilizes a system of course codes formatted as three or four letter department identifiers followed by three or four digit course identifiers (e.g. &#8220;<a href=\"https:\/\/courses.segal-gould.com\/course_codes\/CMSC%20360\">CMSC 360<\/a>&#8220;). You can <a href=\"https:\/\/courses.segal-gould.com\/course_codes\">browse all courses codes<\/a> and see which courses have used them.<\/p>\n<figure id=\"attachment_318\" aria-describedby=\"caption-attachment-318\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-318 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example-1024x654.jpg\" alt=\"\" width=\"560\" height=\"358\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example-1024x654.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example-300x192.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example-768x490.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example-1200x766.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example-600x383.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-codes-example.jpg 1516w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-318\" class=\"wp-caption-text\">The list of course codes. There are currently 2,236 course codes in the database.<\/figcaption><\/figure>\n<h4>Distributions<\/h4>\n<p>Bard College requires that students complete a specific number of credits from several <a href=\"http:\/\/www.bard.edu\/undergraduate\/curriculum\/requirements\/\">distributions<\/a>. In recent years, the institution modified their distribution requirements naming system from using four characters (e.g. &#8220;AART&#8221;) to using two characters (e.g. &#8220;AA&#8221;). I developed the redesigned course catalog to work with both naming systems. Often one course fulfills multiple requirements and thus you will find duplicates.<\/p>\n<p><a href=\"https:\/\/courses.segal-gould.com\/old_distributions\">You can browse by all courses which fulfill requirements within the old distributions naming system.<\/a><\/p>\n<figure id=\"attachment_320\" aria-describedby=\"caption-attachment-320\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-320 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example-1024x505.jpg\" alt=\"\" width=\"560\" height=\"276\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example-1024x505.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example-300x148.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example-768x378.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example-1200x591.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example-600x296.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/old-distributions-example.jpg 1920w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-320\" class=\"wp-caption-text\">The list of old distributions. There are 39 results in this list but only 10 distributions were officially in use.<\/figcaption><\/figure>\n<p><a href=\"https:\/\/courses.segal-gould.com\/new_distributions\">And you can browse using the new distributions naming system.<\/a><\/p>\n<figure id=\"attachment_321\" aria-describedby=\"caption-attachment-321\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-321 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example-1024x547.jpg\" alt=\"\" width=\"560\" height=\"299\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example-1024x547.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example-300x160.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example-768x410.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example-1200x641.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example-600x320.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/new-distributions-example.jpg 1910w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-321\" class=\"wp-caption-text\">The list of new distributions. There are 31 results in this list but only 11 distributions are officially in use.<\/figcaption><\/figure>\n<h4>Users<\/h4>\n<p>I implemented a system for <a href=\"https:\/\/courses.segal-gould.com\/register\">registering<\/a> accounts with safely hashed passwords using <code>bcrypt<\/code>. You can login after registering and also add or remove courses from <a href=\"https:\/\/courses.segal-gould.com\/users\/noahsegalgould\">your list of favorites<\/a>. All users may view <a href=\"https:\/\/courses.segal-gould.com\/users\">the list of users<\/a> as well as all their favorite courses.<\/p>\n<figure id=\"attachment_323\" aria-describedby=\"caption-attachment-323\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-323 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example-1024x526.jpg\" alt=\"\" width=\"560\" height=\"288\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example-1024x526.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example-300x154.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example-768x394.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example-1200x616.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/favorites-list-example-600x308.jpg 600w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-323\" class=\"wp-caption-text\">Example list of a user&#8217;s favorite courses.<\/figcaption><\/figure>\n<h4>Sorting<\/h4>\n<p>All lists of courses can be sorted alphabetically by the following criteria:<\/p>\n<ul>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=course_registration_number\">Course Registration Number (CRN)<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=course_code\">Course Code<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=new_distributions\">New Distributions<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=old_distributions\">Old Distributions<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=department\">Department<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=semester\">Semester<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=course_title\">Course Title<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=professors\">Professors<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=locations\">Locations<\/a><\/li>\n<li><a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?sort=schedules\">Schedules<\/a><\/li>\n<\/ul>\n<figure id=\"attachment_324\" aria-describedby=\"caption-attachment-324\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-324 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons-1024x104.jpg\" alt=\"\" width=\"560\" height=\"57\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons-1024x104.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons-300x30.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons-768x78.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons-1200x122.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/sort-buttons-600x61.jpg 600w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-324\" class=\"wp-caption-text\">Buttons used for sorting.<\/figcaption><\/figure>\n<h4>Search<\/h4>\n<p>You can use the search bar on almost any page to look for keywords, descriptions, course titles, scheduled meeting times, and any other information associated with courses. For example, <a href=\"https:\/\/courses.segal-gould.com\/departments\/computer?search=machine\">here<\/a> are the results for a search for &#8220;machine&#8221; among all computer science courses.<\/p>\n<figure id=\"attachment_326\" aria-describedby=\"caption-attachment-326\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-326 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example-1024x226.jpg\" alt=\"\" width=\"560\" height=\"124\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example-1024x226.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example-300x66.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example-768x169.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example-1200x265.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example-600x132.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/search-example.jpg 1742w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-326\" class=\"wp-caption-text\">Example search box.<\/figcaption><\/figure>\n<h4>RateMyProfessors Integration<\/h4>\n<p>Every course has a link in its description which will take you to a <a href=\"https:\/\/www.ratemyprofessors.com\/\">RateMyProfessors<\/a> search for its instructor. I am not affiliated with RateMyProfessors.<\/p>\n<figure id=\"attachment_327\" aria-describedby=\"caption-attachment-327\" style=\"width: 1022px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/rate-my-professors-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-327 size-full\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/rate-my-professors-example.jpg\" alt=\"\" width=\"1022\" height=\"494\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/rate-my-professors-example.jpg 1022w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/rate-my-professors-example-300x145.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/rate-my-professors-example-768x371.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/rate-my-professors-example-600x290.jpg 600w\" sizes=\"(max-width: 1022px) 100vw, 1022px\" \/><\/a><figcaption id=\"caption-attachment-327\" class=\"wp-caption-text\">Example link to a search for an instructor on RateMyProfessors.<\/figcaption><\/figure>\n<h4>Course Registration Numbers<\/h4>\n<p>If you need to know a course&#8217;s CRN for clerical purposes, the redesigned course catalog lets you access a list of all courses which use a specific CRN <a href=\"https:\/\/courses.segal-gould.com\/crn\/91761\">through a link in every course table<\/a>. Although course registration numbers are five digits, the official course catalog still has duplicates.<\/p>\n<figure id=\"attachment_328\" aria-describedby=\"caption-attachment-328\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-328 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example-1024x535.jpg\" alt=\"\" width=\"560\" height=\"293\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example-1024x535.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example-300x157.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example-768x401.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example-1200x627.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/course-registration-numbers-list-example-600x313.jpg 600w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-328\" class=\"wp-caption-text\">Example list of courses matching course registration number 91761 for which there are two results from totally different departments.<\/figcaption><\/figure>\n<h4>Application Programming Interface<\/h4>\n<p>The JSON API is totally free and currently has no rate limits. Each JSON it returns is structured as a string <code>\"result\"<\/code> mapped to an array of course objects. To access the API result for any redesigned course catalog page, just insert <code>\/api\/<\/code> into the URL. For example, the result for a specific course registration number is normally formatted like <a href=\"https:\/\/courses.segal-gould.com\/crn\/91761\">courses.segal-gould.com\/crn\/91761<\/a>. To access the API result for the same content the URL would be\u00a0<a href=\"https:\/\/courses.segal-gould.com\/api\/crn\/91761\">courses.segal-gould.com\/api\/crn\/91761<\/a>.<\/p>\n<figure id=\"attachment_329\" aria-describedby=\"caption-attachment-329\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-329 size-large\" src=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example-1024x933.jpg\" alt=\"\" width=\"560\" height=\"510\" srcset=\"https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example-1024x933.jpg 1024w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example-300x273.jpg 300w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example-768x699.jpg 768w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example-1200x1093.jpg 1200w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example-600x546.jpg 600w, https:\/\/segal-gould.com\/wp-content\/uploads\/2018\/09\/API-response-JSON-example.jpg 1300w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-329\" class=\"wp-caption-text\">JSON result example.<\/figcaption><\/figure>\n<p><span style=\"font-size: 1.8em; font-weight: 600;\">Future Features to Implement<\/span><\/p>\n<p>I managed to implement most of the features I had in mind over that one summer. Since then, I got some nice feedback on the site and have had a few more ideas about what I&#8217;d like to add to the project.<\/p>\n<p>Using something like <a href=\"https:\/\/www.seleniumhq.org\/\">Selenium<\/a> to automate gathering data on <a href=\"https:\/\/bard.bncollege.com\">currently offered courses&#8217; required textbooks<\/a>, it should be possible to match those results with official course titles. It would be really easy to find out what books to purchase for a class if Amazon links and ISBNs were available directly from the course list.<\/p>\n<p>I would like to add some means of leaving comments on courses, preferably as verified course instructors. In my experience, details such as class sizes can vary in how set in stone they are depending on the professor. Maybe additional information such as a course&#8217;s syllabus could be left as a comment as well.<\/p>\n<p>An interactive map could serve to direct students to their classrooms, and schedule-based searches would be really convenient. Under the official system, there is no easy way to identify courses which fit within one&#8217;s own schedule.<\/p>\n<p>Read more about the documentation and code for this project on <a href=\"https:\/\/github.com\/segalgouldn\/course-catalog-server\">GitHub<\/a>. If you&#8217;re interested in what I chose to pursue as my actual senior project, you can read up about that on <a href=\"https:\/\/github.com\/segalgouldn\/Senior-Project-Subtweets\">GitHub<\/a> as well.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Context My initial goal in the summer of 2017 was for the combined features of the course catalog parser and server to come together as my senior project. I aimed to implement improved search functionality as well as a scheduling system for identifying courses which were available to fit within one&#8217;s own schedule. Because [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4,20,25],"tags":[16,23,28,22,26,9,10,27],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pa3xYj-4u","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/posts\/278"}],"collection":[{"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":16,"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":302,"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/posts\/278\/revisions\/302"}],"wp:attachment":[{"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/segal-gould.com\/index.php\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}