<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="static/chat.css"></link>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script type="text/javascript" src="https://assets.calendly.com/assets/external/widget.js"></script>
    <script src="static/chatbot.js"></script>
    <script src="https://platform.linkedin.com/badges/js/profile.js" async defer type="text/javascript"></script>
    <title>Mark Bochner - Projects</title>
    <style>
        #close-browser {
            position: absolute;
            top: 10px;
            right: 10px;
            cursor: pointer;
        }
        .white {
            color: white;
        }
        body {
            line-height: 1.6;
            margin: 0;
            padding: 0;
            color: #333;
            font-family: "Geist Mono Variable", sans-serif;
            background-color: #c4e1e7;
        }
        .page-container {
            margin: 0 auto;
            padding: 20px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            display: flex;
            flex-direction: row;
        }
        .page-container div {
        }
        h1 {
            text-align: center;
            color: #333;
            font-size: 2.5em;
            margin-bottom: 30px;
        }
        .section {
            margin-bottom: 20px;
            padding: 15px;
            background-color: #f9f9f9;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s;
            border: 1px solid #e0e0e0;
            max-width: 800px;
        }
        .s{
            margin-bottom: 20px;
            background-color: #F0F0F0;
            cursor: pointer;
            transition: background-color 0.3s;
            border: 2px solid #000000;
            max-width: 588px;
            font-weight: bold;
            color: #000000;
            font-size: 18px;
        }
        .chatbot-sidebar {
            max-width: 400px;
            height: 100vh;
            position: fixed;
            right: 0;
            top: 0;
            background-color: #0F68B6;
            padding: 20px;
            box-sizing: border-box;
            display: flex;
            flex-direction: column;
        }
        .section:hover {
            background-color: #e9e9e9;
        }
        .section h2 {
            margin-top: 0;
            color: #2c3e50;
            font-size: 1.5em;
        }
        .modal {
            display: none;
            position: fixed;
            z-index: 1;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0,0,0,0.4);
        }
        .modal-content {
            background-color: #c4e1e7;
            margin: 5% auto;
            padding: 20px;
            border: 1px solid #888;
            width: 80%;
            max-width: 900px;
            border-radius: 5px;
            height: 80%;
            overflow-y: auto;
        }
        .close {
            color: #aaa;
            float: right;
            font-size: 28px;
            font-weight: bold;
            cursor: pointer;
        }
        .close:hover,
        .close:focus {
            color: black;
            text-decoration: none;
            cursor: pointer;
        }
        .modal-content h2 {
            color: #2c3e50;
            border-bottom: 2px solid #2c3e50;
            padding-bottom: 10px;
        }
        .modal-content h3 {
            color: #34495e;
        }
        .modal-content ul {
            padding-left: 20px;
        }
        .modal-content li {
            margin-bottom: 10px;
        }
        .links-container {
            align-items: center;
            position: relative;
            width: 100%;
        }
        .links-container div {
            margin: 8px;
            width: auto;
        }
        .chat-messages {
          flex: 1;
          overflow-y: auto;
          border: 1px solid #ccc;
          padding: 1rem;
          margin-bottom: 1rem;
          color: white;
            width: auto;
        }
        .buttons-container {
            display: flex;
            flex-direction: row;
            flex-wrap: wrap;
        }
        .button{
            display: inline-flex;
            padding: 10px 20px;
            font-size: 16px;
            font-weight: bold;
            text-align: center;
            text-decoration: none;
            border-radius: 5px;
            transition: all 0.3s ease;
            cursor: pointer;
        }
        .b{
            display: inline-flex;
            border-radius: 5px;
            margin-left: 16px;
            transition: all 0.3s ease;
            cursor: pointer;
            height: 100%
        }

    </style>
</head>
<body>
    <div class="page-container">
        <div class="links-container">
        <h1>Projects</h1>
        <div class="section" onclick="openModal('MovieReadme')">
            <h2>Movie Script Analysis</h2>
            <div class="buttons-container">
                <button class='button' onclick="openModal('BechdelTest');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Initial Data Collection</button>
                <button class='button' onclick="openModal('NaiveBayes');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Genre Classification with Naive Bayes</button>
                <button class='button' onclick="openModal('PredictiveModeling');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Predictive Modeling</button>
                <button class='button' onclick="openModal('DistilBERT');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Building a Classifier with DistilBERT</button>
                <button class='button' onclick="openModal('DataCard');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/huggingface-logo.svg">
                    Data Card
                </button>

            </div>
        </div>
        <div class="section" onclick="openModal('WebsiteReadme')">
            <h2>View the Code Behind this Website</h2>
            <div class="buttons-container">
                <button class='button' onclick="openModal('AppPy');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/python-logo.svg">
                Server-Side Scripts</button>
                <button class='button' onclick="openModal('ThisPage');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/html-logo.svg">
                This Page</button>
                <button class='button' onclick="openModal('ChatBot');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/js-logo.svg">
                Chatbot Script</button>
                <button class='button' onclick="openModal('ChatCSS');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/css-3-logo.svg">
                Chatbot Style</button>
                <button class='button' onclick="openModal('LangchainNB');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Custom Implementation of the LangChain Embeddings Class</button>
                <button class='button' onclick="openModal('TDBR');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/python-logo.svg">
                TinyDBRetriever - A Custom Retriever for TinyDB and LangChain</button>
                <button class='button' onclick="openModal('TDBR_NB');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Building a Local Database for RAG with TinyDB</button>
            </div>
        </div>
        <div class="section" onclick="openModal('QuantStudyReadme')">
            <h2>Quantitative Analysis Replication</h2>
            <div class="buttons-container">
                <button class='button' onclick="openModal('DataPython');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/jupyter-logo.svg">
                Data Cleaning and Exploration in Python</button>
                <button class='button' onclick="openModal('DataR');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/R-logo.svg">
                Modeling in R</button>
            </div>
        </div>
        <div class="section" onclick="openModal('TikTok')">
            <h2>TikTok Comment Analysis</h2>
            <div class="buttons-container">
                <button class='button' onclick="openModal('TikTokData');event.stopPropagation()">
                    <img style="height:16px;width:16px;margin-right:16px;" src="../static/datalore-logo.svg">
                Data Sample</button>
            </div>
        </div>
        <div class="section" onclick="openModal('ConsoleReporter')">
            <h2>ConsoleReporter</h2>
            <p>A short script that uses generative AI to turn a pycharm console session into an annotated Jupyter notebook. Most of the time, it works every time.</p>

        </div>
        </div>
        <div class="chatbot-container">
    <div id="calendly">
        <div id="calendly-embed" class="calendly" style="min-width:1px;min-height:1px;display:inline-flex;"></div>
        <button id="close-browser" onclick="closeCalendly()">Close</button>
    </div>
    <div class="chatbot-sidebar">
        <div style="display:flex;flex-direction:row;">
            <a href="./Resume"><button>Resume</button></a>
            <a href="./"><button>Home</button></a>
        </div>
        <h3 class="white">Mark Botner, Office Manager</h3>
        <div class="chat-messages" id="chatMessages"></div>
        <div class="chat-input">
            <input type="text" id="userInput" placeholder="Type your message...">
            <button onclick="sendMessage()">Send</button>
        </div>
    </div>
    </div>
    </div>

    <div id="BechdelTestModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('BechdelTest')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FMovie-Script-Data-Analysis%2Fblob%2Fmaster%2FBechdel%2520Test.ipynb&style=default&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="DataCardModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('DataCard')">&times;</span>
            <iframe src="https://huggingface.co/datasets/mocboch/movie_scripts/embed/viewer/default/train"
              frameborder="2"
              width="100%"
              height="560px"></iframe>
        </div>
    </div>
    <div id="NaiveBayesModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('NaiveBayes')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FMovie-Script-Data-Analysis%2Fblob%2Fmaster%2FNaive%2520Bayes%2520for%2520Genre%2520Identification.ipynb&style=default&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="DistilBERTModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('DistilBERT')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FMovie-Script-Data-Analysis%2Fblob%2Fmaster%2FBuilding%2520a%2520Classifier%2520with%2520DistilBert.ipynb&style=routeros&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="PredictiveModelingModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('PredictiveModeling')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FMovie-Script-Data-Analysis%2Fblob%2Fmaster%2FData%2520Exploration.ipynb&style=routeros&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="AppPyModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('AppPy')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2Fapp.py&style=intellij-light&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="ChatBotModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('ChatBot')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2Fstatic%2Fchatbot.js&style=intellij-light&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="ThisPageModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('ThisPage')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2Ftemplates%2Fprojects.html&style=intellij-light&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="ChatCSSModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('ChatCSS')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2Fstatic%2Fchat.css&style=intellij-light&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="ConsoleReporterModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('ConsoleReporter')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FConsole-Reporter%2Fblob%2Fmaster%2FConsoleReporter.py&style=intellij-light&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="DataPythonModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('DataPython')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FStudy-Replication%2Fblob%2Fmain%2FQuantitative%2520Study%2520Replication.ipynb&style=intellij-light&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="DataRModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('DataR')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2FStudy-Replication%2Fblob%2Fmain%2FQuantitative%2520Study%2520Replication.rmd&style=intellij-light&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="TikTokDataModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('TikTokData')">&times;</span>
            <iframe style="width:100%;height:100%;overflow:scroll"src="https://datalore.jetbrains.com/report/embed/vuaFxFrLZ4lQPRqnFZ8JlN/SP2PYD4RKXnuuh5wkeWv4a/f3XiYK62JKF1bIb1nyAqF9?height=517" frameborder="0"></iframe>
        </div>
    </div>
    <div id="LangchainPyModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('LangchainPy')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2FGoogleEmbeddings.py&style=default&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
            </div>
    </div>
    <div id="LangchainNBModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('LangchainNB')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2FBuilding%2520a%2520Custom%2520Implementation%2520of%2520the%2520LangChain%2520Embeddings%2520Class.ipynb&style=default&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="TDBRModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('TDBR')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2FTinyDBRetriever.py&style=default&type=code&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>
    <div id="TDBR_NBModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('TDBR_NB')">&times;</span>
            <script src="https://emgithub.com/embed-v2.js?target=https%3A%2F%2Fgithub.com%2Fmocboch%2Fwebsite%2Fblob%2Fmaster%2FSetting%2520Up%2520a%2520Local%2520Database%2520in%2520TinyDB.ipynb&style=default&type=ipynb&showBorder=on&showLineNumbers=on&showFileMeta=on&showFullPath=on&showCopy=on"></script>
        </div>
    </div>

    <div id="WebsiteReadmeModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('WebsiteReadme')">&times;</span>
            <h2>Created a Website Controlled by Natural Language</h2>
            <ul>
                <li>Created a website controlled by natural language prompts using Flask</li>
                <li>Integrated Google Gemini for function calling to control navigation and other UX elements</li>
                <li>Built a NoSQL database with MongoDB Atlas including a vector search index with Hugging Face embeddings</li>
                <li>Used Langchain for retrieval augmented generation to provide context for certain responses</li>
                <li>Integrated Calendly and Sendgrid to establish communication with users</li>
                <li>Deployed to Amazon Web Services using Elastic Beanstalk</li>
            </ul>
        </div>
    </div>
    <div id="TikTokModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('TikTok')">&times;</span>
            <h2>Collecting and Analyzing a set of TikTok Comments</h2>
            <ul>
                <li>Scraping a set of millions of TikTok comments from political accounts such as @kamalaharris and @realdonaldtrump</li>
                <li>Using polling data from 538 as targets, will analyze comments' sentiments and try to predict changes in polling results</li>
                <li>Ongoing project- check back for more soon!</li>
            </ul>
        </div>
    </div>
    <div id="MovieReadmeModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('MovieReadme')">&times;</span>
            <h2>Collecting and Analyzing Unstructured Movie Script Data</h2>
            <ul>
                <li>Integrated data from various sources into a PostgreSQL database using web scraping and APIs</li>
                <li>Created visualizations in matplotlib and seaborn</li>
                <li>Cleaned and analyzed a large volume of structured and unstructured data, applying a variety of ML and NLP techniques</li>
            </ul>
        </div>
    </div>
    <div id="QuantStudyReadmeModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('QuantStudyReadme')">&times;</span>
            <h2>Replicated the Analytical Process of a Published Paper</h2>
            <ul>
                <li>Applied the same and modified processes to new data</li>
                <li>Cleaned and transformed data according to established procedures</li>
            </ul>
        </div>
    </div>
    <div id="LangchainReadmeModal" class="modal">
        <div class="modal-content">
            <span class="close" onclick="closeModal('LangchainReadme')">&times;</span>
            <h2>Built a Custom Implementation of the LangChain Embeddings Class</h2>
            <ul>
                <li>Custom class is very lightweight and will run on a small AWS server</li>
                <li>Vector search using only 64-dimensional vectors will power RAG for Mr. Botner</li>
                <li>More to come!</li>
               </ul>
        </div>
    </div>
    <div id="contact">
        <div id="contact-embed" class="contact" style="min-width:320px;height:500px;display:inline-flex;">

            <img src="https://genqrcode.com/embedded?style=7&inner_eye_style=3&outer_eye_style=5&logo=de7388f4e7d5c492aebc315844138144&color=%230f68b6FF&background_color=%23c4e1e7FF&inner_eye_color=%230f68b6&outer_eye_color=%23000000&imageformat=svg&language=en&frame_style=0&frame_text=SCAN%20ME&frame_color=%23000000&invert_colors=false&gradient_style=0&gradient_color_start=%230057B8&gradient_color_end=%23FFD700&gradient_start_offset=50&gradient_end_offset=50&stl_type=1&logo_remove_background=false&stl_size=100&stl_qr_height=1.5&stl_base_height=2&stl_qr_magnet_type=3&stl_qr_magnet_count=0&type=0&text=https%3A%2F%2Fqri.lu%2FN9HzcOI&width=500&height=500&bordersize=2" alt="qr code" />
            <div class="contact-details">
                <div class="github-card" data-github="mocboch" data-width="400" data-height="150" data-theme="default"></div>
                <script src="//cdn.jsdelivr.net/github-cards/latest/widget.js"></script>
                <br><span>(908) 403-1660</span><br>
                <span>markbochner1@gmail.com</span><br>
                <script src="https://platform.linkedin.com/badges/js/profile.js" async defer type="text/javascript"></script>
                <div class="badge-base LI-profile-badge" data-locale="en_US" data-size="large" data-theme="light" data-type="HORIZONTAL" data-vanity="mark-bochner-618071263" data-version="v1"><a class="badge-base__link LI-simple-link" href="https://www.linkedin.com/in/mark-bochner-618071263?trk=profile-badge">LinkedIn</a></div>


            </div>
        </div>
        <button id="close-browser" onclick="closeContact()">Close</button>
    </div>


    <script>
        function openModal(id) {
            document.getElementById(id + 'Modal').style.display = 'block';
        }

        function closeModal(id) {
            document.getElementById(id + 'Modal').style.display = 'none';
        }

        window.onclick = function(event) {
            if (event.target.className === 'modal') {
                event.target.style.display = 'none';
            }

        }
    </script>
</body>
</html>