{"id":664,"date":"2024-01-12T12:53:52","date_gmt":"2024-01-12T12:53:52","guid":{"rendered":"https:\/\/demosites.royal-elementor-addons.com\/developer-portfolio-v1\/?page_id=7"},"modified":"2024-11-29T18:19:43","modified_gmt":"2024-11-29T18:19:43","slug":"home-developer-portfolio-v1","status":"publish","type":"page","link":"https:\/\/colmsam.com\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"664\" class=\"elementor elementor-664\">\n\t\t\t\t<div class=\"elementor-element elementor-element-62c2509 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"62c2509\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-d9fea4f e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"d9fea4f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2a94902 elementor-widget elementor-widget-text-editor\" data-id=\"2a94902\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Hello, I&#8217;m<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24f6ce3 wpr-advanced-text-style-animated wpr-fancy-text-typing wpr-animated-text-infinite-yes elementor-widget elementor-widget-wpr-advanced-text\" data-id=\"24f6ce3\" data-element_type=\"widget\" data-settings=\"{&quot;anim_loop&quot;:&quot;yes&quot;}\" data-widget_type=\"wpr-advanced-text.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\n\t\t<h3 class=\"wpr-advanced-text\">\n\n\t\t\t\t\t\n\t\t\t\n\t\t<span class=\"wpr-anim-text wpr-anim-text-type-typing wpr-anim-text-letters\" data-anim-duration=\"200,7000\" data-anim-loop=\"yes\">\n\t\t\t<span class=\"wpr-anim-text-inner\">\n\t\t\t\t\t\t\t\t\t<b>Colm Sam<\/b>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t<span class=\"wpr-anim-text-cursor\">|<\/span>\t\t<\/span>\n\n\t\t\t\t\n\t\t<\/h3>\n\t\t\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a09a506 elementor-widget elementor-widget-text-editor\" data-id=\"a09a506\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Leveraging a background in particle physics and machine learning from projects at CERN and the LHC, I am now focused on using data and AI to build cool things.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7b91ff8 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"7b91ff8\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-157e82b elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"157e82b\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/github.com\/Colmmm\" id=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-github\" viewBox=\"0 0 496 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Github<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79360f5 elementor-button-info elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"79360f5\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.linkedin.com\/in\/colm-sam\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-linkedin\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">LinkedIn<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ff6f977 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"ff6f977\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2b266dc elementor-widget elementor-widget-image\" data-id=\"2b266dc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1250\" height=\"1250\" src=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/circle_cropped_colm.png\" class=\"attachment-full size-full wp-image-1052\" alt=\"\" srcset=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/circle_cropped_colm.png 1250w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/circle_cropped_colm-300x300.png 300w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/circle_cropped_colm-1024x1024.png 1024w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/circle_cropped_colm-150x150.png 150w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/circle_cropped_colm-768x768.png 768w\" sizes=\"(max-width: 1250px) 100vw, 1250px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a29c6cb e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"a29c6cb\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-227234e elementor-widget elementor-widget-heading\" data-id=\"227234e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Recent Projects<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-46fa715 animated-slow e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no elementor-invisible e-con e-parent\" data-id=\"46fa715\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56b3bd6 elementor-widget elementor-widget-heading\" data-id=\"56b3bd6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">1) Notes2Flash<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e8dd754 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"e8dd754\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-77d3e73 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"77d3e73\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b7c94dc elementor-widget elementor-widget-image\" data-id=\"b7c94dc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/notes2flash_demo.gif\" class=\"attachment-full size-full wp-image-1076\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4748cc2 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"4748cc2\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-396626d elementor-widget-laptop__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"396626d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>While living in Taiwan and learning Mandarin, I constantly encountered new words, phrases, and grammar that were unfamiliar to me. To remember them while on the go, I would jot them down in a Google Doc, with the overly optimistic idea that I\u2019d later organize these notes into Anki flashcards. That Google Doc has since grown to over 60 pages, and I\u2019ve yet to manually create a single flashcard, which led to Notes2Flash. With just a click of a button, I can now retrieve new content from my Google Docs\u2014while tracking any changes\u2014group and process it intelligently, and turn it into flashcards. Notes2Flash also supports notes written in Notion and Obsidian. It\u2019s built with a focus on user flexibility, allowing users to customize their workflows by choosing from a range of LLMs (e.g., ChatGPT, Llama, Gemini), adding additional user inputs, and even chaining prompts together for more advanced workflows.<\/p><p><strong>Tech stack<\/strong>: Python, LLMs, APIs<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-10e0bad animated-slow e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no elementor-invisible e-con e-parent\" data-id=\"10e0bad\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a540eda elementor-widget elementor-widget-heading\" data-id=\"a540eda\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">2) Xue-Xinwen.com<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5d9ea7d e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"5d9ea7d\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-83c663f e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"83c663f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eb2f692 elementor-widget-laptop__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"eb2f692\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>One of my favorite ways to procrastinate is by reading the news, so I decided to combine that with my passion for learning Mandarin. However, news websites for native speakers can be quite tricky for learners, with a more formal writing style and lots of niche, topic-specific words that non-natives struggle to understand. That\u2019s why I developed Xue-Xinwen.com (where &#8220;Xue&#8221; means &#8220;to learn&#8221; and &#8220;xinwen&#8221; means &#8220;news&#8221;). It uses news-scraping APIs and NLP-driven language simplification to create a news website tailored for Mandarin learners.<br \/><strong>Tech stack<\/strong>: OpenAI API (NLP), AWS (cloud computing), SQL + Flask (backend), React.js (frontend), Docker (containerization)<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-86ffe8f e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"86ffe8f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fdb0044 elementor-widget elementor-widget-image\" data-id=\"fdb0044\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"974\" height=\"546\" src=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/xue_xinwen_logo-e1732561726642.png\" class=\"attachment-full size-full wp-image-1097\" alt=\"\" srcset=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/xue_xinwen_logo-e1732561726642.png 974w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/xue_xinwen_logo-e1732561726642-300x168.png 300w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/xue_xinwen_logo-e1732561726642-768x431.png 768w\" sizes=\"(max-width: 974px) 100vw, 974px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dbf1889 animated-slow e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no elementor-invisible e-con e-parent\" data-id=\"dbf1889\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4bd1e17 elementor-widget elementor-widget-heading\" data-id=\"4bd1e17\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">3) Cine Critic Pal - A letterboxd Sentiment Analysis<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6f55b60 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"6f55b60\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-ad8f44e e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"ad8f44e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0fc6c79 elementor-widget-laptop__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"0fc6c79\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>I have a friend who\u2019s a film major and obsessed with documenting films on Letterboxd, but he refuses to assign star ratings to his reviews because, according to him, it\u2019s too hard and causes him to overthink. This inspired me to build <em>CineCriticPal<\/em>, a machine learning model that assigns a rating based on a written review. The first step was building a dataset by using Selenium to scrape 100,000+ movie reviews and metadata from Letterboxd, like popularity, genre, and release date. After that, I fine-tuned a pre-trained large model (LLM) to predict movie ratings from 0.5 to 5 stars based on both the review and the metadata.<br \/><strong>Tech stack<\/strong>: Selenium, Playwright (web scraping), sklearn, NLTK, Hugging Face, PyTorch (model training), Docker (containerization)<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b09ff82 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"b09ff82\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e0076eb elementor-widget elementor-widget-image\" data-id=\"e0076eb\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"540\" src=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/letterboxd-logo-v-neg-rgb-1000px.png\" class=\"attachment-full size-full wp-image-1099\" alt=\"\" srcset=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/letterboxd-logo-v-neg-rgb-1000px.png 1000w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/letterboxd-logo-v-neg-rgb-1000px-300x162.png 300w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/letterboxd-logo-v-neg-rgb-1000px-768x415.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b416062 animated-slow e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no elementor-invisible e-con e-parent\" data-id=\"b416062\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b531bb elementor-widget elementor-widget-heading\" data-id=\"0b531bb\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">4) Distraction Deflector<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3885296 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"3885296\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-7bb12b2 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"7bb12b2\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2122fd9 elementor-widget elementor-widget-image\" data-id=\"2122fd9\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/new_distraction_deflector_logo.png\" class=\"attachment-large size-large wp-image-1093\" alt=\"\" srcset=\"https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/new_distraction_deflector_logo.png 1024w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/new_distraction_deflector_logo-300x300.png 300w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/new_distraction_deflector_logo-150x150.png 150w, https:\/\/colmsam.com\/wp-content\/uploads\/2024\/11\/new_distraction_deflector_logo-768x768.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-79c0def e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"79c0def\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96dc5ba elementor-widget-laptop__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"96dc5ba\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>As mentioned with <em>Xue-Xinwen.com<\/em>, I tend to procrastinate by reading the news. And while staying informed is great, it sometimes distracts me from more pressing tasks. Enter <em>Distraction Deflector<\/em>, a productivity browser extension that helps users stay focused by redirecting them away from distracting websites (like news sites) and toward things they need to get done\u2014such as reading news on <em>Xue-Xinwen.com<\/em>, which yes is also a news site but conveniently doubles as language practice too.<br \/><strong>Tech stack<\/strong>: React, JavaScript, HTML, CSS<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-69c1430 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"69c1430\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Hello, I&#8217;m Colm Sam | Leveraging a background in particle physics and machine learning from projects at CERN and the LHC, I am now focused on using data and AI to build cool things. Github LinkedIn Recent Projects 1) Notes2Flash While living in Taiwan and learning Mandarin, I constantly encountered new words, phrases, and grammar that were unfamiliar to me. To remember them while on the go, I would jot them down in a Google Doc, with the overly optimistic idea that I\u2019d later organize these notes into Anki flashcards. That Google Doc has since grown to over 60 pages, and I\u2019ve yet to manually create a single flashcard, which led to Notes2Flash. With just a click of a button, I can now retrieve new content from my Google Docs\u2014while tracking any changes\u2014group and process it intelligently, and turn it into flashcards. Notes2Flash also supports notes written in Notion and Obsidian. It\u2019s built with a focus on user flexibility, allowing users to customize their workflows by choosing from a range of LLMs (e.g., ChatGPT, Llama, Gemini), adding additional user inputs, and even chaining prompts together for more advanced workflows. Tech stack: Python, LLMs, APIs 2) Xue-Xinwen.com One of my favorite ways to procrastinate is by reading the news, so I decided to combine that with my passion for learning Mandarin. However, news websites for native speakers can be quite tricky for learners, with a more formal writing style and lots of niche, topic-specific words that non-natives struggle to understand. That\u2019s why I developed Xue-Xinwen.com (where &#8220;Xue&#8221; means &#8220;to learn&#8221; and &#8220;xinwen&#8221; means &#8220;news&#8221;). It uses news-scraping APIs and NLP-driven language simplification to create a news website tailored for Mandarin learners.Tech stack: OpenAI API (NLP), AWS (cloud computing), SQL + Flask (backend), React.js (frontend), Docker (containerization) 3) Cine Critic Pal &#8211; A letterboxd Sentiment Analysis I have a friend who\u2019s a film major and obsessed with documenting films on Letterboxd, but he refuses to assign star ratings to his reviews because, according to him, it\u2019s too hard and causes him to overthink. This inspired me to build CineCriticPal, a machine learning model that assigns a rating based on a written review. The first step was building a dataset by using Selenium to scrape 100,000+ movie reviews and metadata from Letterboxd, like popularity, genre, and release date. After that, I fine-tuned a pre-trained large model (LLM) to predict movie ratings from 0.5 to 5 stars based on both the review and the metadata.Tech stack: Selenium, Playwright (web scraping), sklearn, NLTK, Hugging Face, PyTorch (model training), Docker (containerization) 4) Distraction Deflector As mentioned with Xue-Xinwen.com, I tend to procrastinate by reading the news. And while staying informed is great, it sometimes distracts me from more pressing tasks. Enter Distraction Deflector, a productivity browser extension that helps users stay focused by redirecting them away from distracting websites (like news sites) and toward things they need to get done\u2014such as reading news on Xue-Xinwen.com, which yes is also a news site but conveniently doubles as language practice too.Tech stack: React, JavaScript, HTML, CSS<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-664","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/colmsam.com\/index.php?rest_route=\/wp\/v2\/pages\/664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/colmsam.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/colmsam.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/colmsam.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/colmsam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=664"}],"version-history":[{"count":240,"href":"https:\/\/colmsam.com\/index.php?rest_route=\/wp\/v2\/pages\/664\/revisions"}],"predecessor-version":[{"id":1171,"href":"https:\/\/colmsam.com\/index.php?rest_route=\/wp\/v2\/pages\/664\/revisions\/1171"}],"wp:attachment":[{"href":"https:\/\/colmsam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}