{"id":38698255,"url":"https://github.com/txoof/resume","last_synced_at":"2026-01-17T10:43:46.651Z","repository":{"id":113296275,"uuid":"572632841","full_name":"txoof/resume","owner":"txoof","description":"Featured projects for employment","archived":false,"fork":false,"pushed_at":"2025-11-18T09:06:09.000Z","size":56,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-18T11:13:13.566Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/txoof.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-30T17:33:28.000Z","updated_at":"2025-11-18T09:06:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"373f7165-7725-49c4-94ef-4763a93ca165","html_url":"https://github.com/txoof/resume","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/txoof/resume","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fresume","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fresume/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fresume/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fresume/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/txoof","download_url":"https://codeload.github.com/txoof/resume/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fresume/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28506593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T10:25:30.148Z","status":"ssl_error","status_checked_at":"2026-01-17T10:25:29.718Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-17T10:43:46.585Z","updated_at":"2026-01-17T10:43:46.643Z","avatar_url":"https://github.com/txoof.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aaron Ciuffo\n\nI'm a maker, mender, and hacker of things. I love an interesting challenge or the opportunity to hack something into more than it was intended. I most definitely can't resist being [nerd sniped](https://xkcd.com/356/).\n\n | ![Top Langs](https://github-readme-stats.vercel.app/api/top-langs/?username=txoof\u0026theme=gruvbox) | ![Aaron's GitHub stats](https://github-readme-stats.vercel.app/api?username=txoof\u0026theme=gruvbox\u0026show_icons=true) |\n | ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |\n |                                                                                                  |                                                                                                                  |\n\n# Project Summary\n\n*Featured Professional and Personal Repositories*\n\nThis selection of repositories contains some of my best work. There are great examples of complete projects, libraries written to support projects, problem solving and great documentation.\n\n- [Aaron Ciuffo](#aaron-ciuffo)\n- [Project Summary](#project-summary)\n  - [Machine Learning Projects](#machine-learning-projects)\n  - [Work Related Projects](#work-related-projects)\n  - [My Favorites](#my-favorites)\n  - [Hobby Projects](#hobby-projects)\n\n## Machine Learning Projects\n\n### [LLM Story Evaluation](https://github.com/txoof/Story_Evaluation#)\n\nA comparative analysis of three prompt engineering strategies for evaluating the quality of detective fiction. Using a corpus of 24 detective stories spanning reasonable, mediocre and degraded text, I test weather large language models can discriminate between quality levels.\n\n### [Graph 2 Table](https://github.com/txoof/graph2table#)\n\nGraph2Table is a machine learning project that automatically classifies chart types and extracts tabular data from images of graphs and charts. The system uses computer vision and OCR techniques to convert visual data representations back into structured, machine-readable formats.\n\n## Work Related Projects\n\n### [psd2l-plugin](https://github.com/txoof/PowerQuery)\n\nPowerSchool Student Information System (SIS) PowerQuery PL/SQL plugins for integrating course, teacher, student and parent data into D2L/Brightspace Learning Management System (LMS). There is no off-the-shelf integration between these products. A customized solution is required to maintain accurate synchronization of these two systems. This synchronization occurs regularly and ensures that staff, parents and students are connected to the appropriate classes and any changes to student schedules such as a schedule or class change are managed.\n\nThe queries are written in a combination of Oracle SQL and managed through XML documents. Once packaged and installed on the SIS server, the plugin can be accessed through automation processes and set to synchronize comma separated value (CSV) data to the D2l/Brightspace instance in the cloud. \n\n### [gdrive_audit](https://github.com/txoof/gdrive_audit)\n\nAudit ownership of all files in a Google Drive folder.\n\nGDrive Audit produces a google sheet that shows all the files within a folder and their owners. This tool can aid google super admins migrating folders into a Google Shared Drive. Run the audit tool to verify that all items contained within the shared folder are owned by the team and are suitable for migrating into a Google Shared Drive.\n\nRemember: When super-admins migrate a folder into a Shared Drive, all ownership of the files is transferred to the organization. This is strictly a ONE WAY process and cannot be undone. If items that are meant for organization-wide consumption are migrated, the rest of the organization may lose access. Each item must be individually restored to the original owner. There is no undo. **Migrate with caution!**\n\n### [insertFiles](https://github.com/txoof/insertFiles)\n\nQuikcly insert files by grade-level into Student Cumulative Folders on Google Drive. This can assist in adding standardized test scores, report cards or similar documents into Student Cumulative Folders.\n\n### [PortfolioCreator](https://github.com/txoof/portfolioCreator)\n\nCreate student cumulative folders on Google Drive using Google FileStream and student information exports from PowerSchool.\n\n### [calendar_csv](https://github.com/txoof/calendar_csv)\n\nPython script for generating files suitable for import into Google Calendar based on .csv schedule files for N-day rotating block schedules for schools. This script will produce one CSV for each unique event as well as a CSV for each day in the block rotation.\n\nIf your schedule has \"Block A, Block B, Block C, Lunch, Break 1, Break 2\" seven CSV files will be produced, one for each event in the rotation: e.g. Block A, Block B, Block C, lunch, breaks. Each file produced will contain all of the calendar events for all days that match that event.\n\n### [codesign](https://github.com/txoof/codesign)\n\nPython3 script for signing, packaging, notarizing and stapling Apple command line binaries using altool. This script only requires Python3 and uses only standard libraries.\n\nThis script is specifically targeted at codesigning, notarizing, creating .pkg files and stapling the notarization onto commandline tools written and compiled outside of Apple Xcode. This was created specifically for notarizing and signing python tools created with PyInstaller.\n\nAs of MacOS Catalina, all distributed binaries must be signed and notarized using an apple developer account. This account costs $99 per year.\n\nApple's documentation for this process is ABSOLUTELY terrible. For a guide to doing this manually see [Signing_and_Notarizing_HOWTO](https://github.com/txoof/codesign/blob/main/Signing_and_Notarizing_HOWTO.md)\n\n### [IMSCC_scripts](https://github.com/txoof/IMSCC_scripts)\n\nExtract all regular files from Learning Management Platform Common Cartridge files (IMSCC). This can help you locate individual files that are contained within an IMSCC archive downloaded from platforms such as Canvas, Brightspace, Moodle or PowerSchool Learning.\n\n### [pdfEdit](https://github.com/txoof/pdfEdit)\n\nEdits individual PDF reports into a single file ready for Alert Solutions in PowerSchool.\n\nAlert Solutions can read a large PDF file containing information on multiple students and parse that file into individual emails. To distinguish one record from the next Alert Solutions looks for the following text (exactly and with absolutely no flexibility) where XXXXXX is the student number: StudentID:XXXXXX\n\nThis script searches individual MAP test results in PDF Format or the line \"Student ID: XXXXXX\" and replaces it with the Alert Solutions expectation and then combines the edited PDFs into a single large PDF file that Alert Solutions can use.\n\n### [pyPDF_split](https://github.com/txoof/pyPDF_split)\n\nSplit PDFs with multiple student records into individual PDFs. This can aide in preparing PDF files for mail merges or sharing in Google Drive.\n\npyPDF_split searches a PDF for the string StudentID:NNNNNNN and splits the PDF into individual PDFs in a sub-folder with the StudentID embedded in the new file name.\n\npyPDF_split can handle student IDs in the following formats:\n\nStudentID:123456; StudentId:123456; STUDENTID:123456; studentid:123456\nupper/lower case is ignored in all cases\nStudent ID:123456; Student ID: 123456\npyPDF_split pairs nicely with the insertFiles and create_folders scripts.\n\n## My Favorites\n\n### [PaperPi](https://github.com/txoof/PaperPi#paperpi-v3-)\n\nPaperPi is a lovely, quiet, *slow internet* e-Paper radio. There are no loud colors, no busy animations, just a lovely selection of the information you want without buzz and distraction. PaperPi rotates through your choice of plugin screens at the pace you choose.\n\n![PaperPi Video](https://github.com/txoof/PaperPi/blob/main/documentation/images/paperpiV3.gif)\n\n### [epdlib](https://github.com/txoof/epdlib)\n\nEpdLib is a library hosted on [PyPi](https://pypi.org/project/epdlib/) for creating dynamically scaled screen layouts for frame-buffered devices such as e-paper/e-ink displays. Complex layouts are created by defining image, drawing or text blocks. By Using epdlib blocks makes it trivial to develop for different display resolutions as layouts are aware of their resolution and scale the blocks dynamically to match the available area at a given resolution.\n\n### [psd2l-plugin](https://github.com/txoof/PowerQuery)\n\nPowerSchool Student Information System (SIS) PowerQuery PL/SQL plugins for integrating course, teacher, student and parent data into D2L/Brightspace Learning Management System (LMS). There is no off-the-shelf integration between these products. A customized solution is required to maintain accurate synchronization of these two systems. This synchronization occurs regularly and ensures that staff, parents and students are connected to the appropriate classes and any changes to student schedules such as a schedule or class change are managed.\n\nThe queries are written in a combination of Oracle SQL and managed through XML documents. Once packaged and installed on the SIS server, the plugin can be accessed through automation processes and set to synchronize comma separated value (CSV) data to the D2l/Brightspace instance in the cloud.\n\n### [codesign](https://github.com/txoof/codesign)\n\nPython3 script for signing, packaging, notarizing and stapling Apple command line binaries using altool. This script only requires Python3 and uses only standard libraries.\n\nApple's documentation for this process is ABSOLUTELY terrible for tools created outside of their approved workflows. For a step-by-step guide to do this manually see [Signing_and_Notarizing_HOWTO](https://github.com/txoof/codesign/blob/main/Signing_and_Notarizing_HOWTO.md)\n\n### [Finger Joint Box](https://github.com/txoof/fingerjoint)\n\nThis OpenSCAD library creates customizable boxes using comb joints to assemble the faces. This project is used heavily in the Useless Machine project below.\n\n![Finger Joint Box](https://github.com/txoof/fingerjoint/blob/master/assets/fingerjoint.gif)\n\n### [ItsyBitsy Useless Machine](https://github.com/txoof/Useless_Machine)\n\n***Absolutely Useless, Completely Necessary***\n\nIt's pretty useless. It defies logic and your will. It's a machine that has exactly one purpose, to turn its self off. For something so absolutely useless, why is it so entertaining?\n\n![Usless Machine Animation](https://github.com/txoof/Useless_Machine/blob/main/Useless_Machine.gif)\n\n## Hobby Projects\n\n### [PaperPi](https://github.com/txoof/PaperPi#paperpi-v3-)\n\nPaperPi is a lovely, quiet, *slow internet* e-Paper radio. There are no loud colors, no busy animations, just a lovely selection of the information you want without buzz and distraction. PaperPi rotates through your choice of plugin screens at the pace you choose.\n\n![PaperPi Video](https://github.com/txoof/PaperPi/blob/main/documentation/images/paperpiV3.gif)\n\n### [ItsyBitsy Useless Machine](https://github.com/txoof/Useless_Machine)\n\n***Absolutely Useless, Completely Necessary***\n\nIt's pretty useless. It defies logic and your will. It's a machine that has exactly one purpose, to turn its self off. For something so absolutely useless, why is it so entertaining?\n\n![Usless Machine Animation](https://github.com/txoof/Useless_Machine/blob/main/Useless_Machine.gif)\n\n### [Audio Sensor irBlaster](https://github.com/txoof/audioSensor)\n\n Let's face it: nobody knows how to operate your stereo receiver. Your kids, husband, sister-in-law all just want to start music playing and have sound come out of the speakers. It should *just work*, not be an exercise in frustrated button mashing.\n\nIt's a mystery which remote turns on the stereo. It's an even bigger mystery which button switches it so Spotify or the CD player plays. The irBlaster helps solve this problem by listening to two channels such as a CD Player and Media PC with Spotify, Movies, etc.\n\nThe irBlaster listens to the line-level audio over the RCA jacks. When audio traffic is detected on one of the channels, it sends a POWER ON Infrared (IR) code to the receiver. After a few seconds wait for the reciever to power up, the irBlaster then sends the IR code for the active input. When the audio traffic stops, the irBlasters sends the POWER OFF IR code to the receiver.\n![irBlaster Image](https://github.com/txoof/audioSensor/blob/master/irBlaster.jpg)\n\n### [Raspberry Pi Case](https://github.com/txoof/pi4_case)\n\nCustomizable, laser cut case for Raspberry Pi 3 and 4 written in OpenSCAD. This case has room for a Pi and HiFi Berry DAC+ HAT. The case provides access to all Pi IO ports as well as the RCA connectors and GPIO pins on the HiFi Berry.\n\n| | |\n|-|-|\n|\u003cimg src=\"https://github.com/txoof/pi4_case/blob/master/pi4_case_back.png\" alt=\"pi4 case render\" width=\"400\"/\u003e|\u003cimg src=\"https://github.com/txoof/pi4_case/blob/master/pi_4_back.jpg\" alt=\"pi4 case photo\" width=\"400\"/\u003e\n\n### [Ansible](https://github.com/txoof/ansible)\n\nAnsible playbooks for configuring, deploying and managing Raspberry Pi devices. \n\nThese playbooks make it easy to spin up a Raspberry Pi from a scratch image and install relevant tools and setup development environments.\n\n### [epdlib](https://github.com/txoof/epdlib)\n\nEpdLib is a library hosted on [PyPi](https://pypi.org/project/epdlib/) for creating dynamically scaled screen layouts for frame-buffered devices such as e-paper/e-ink displays. Complex layouts are created by defining image, drawing or text blocks. By Using epdlib blocks makes it trivial to develop for different display resolutions as layouts are aware of their resolution and scale the blocks dynamically to match the available area at a given resolution.\n\n#### Example of scaled layout\n\n| | |\n|-|-|\n|![500x500 Layout](https://github.com/txoof/epdlib/blob/master/docs/weather_5x5.png)\u003cbr/\u003e 500x500 Layout| ![300x200 Layout](https://github.com/txoof/epdlib/blob/master/docs/weather_3x2.png) \u003cbr/\u003e 300x200 Layout|\n\n### [QueryLMS](https://github.com/txoof/querylms)\n\nManage queries to an Logitech Media Server for a single player instance. A QueryLMS object can be used to query server or player status information and control an LMS player.\n\nThis is based heavily on the [LMSQuery](https://github.com/roberteinhaus/lmsquery) library and reuses significant portions of the code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftxoof%2Fresume","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftxoof%2Fresume","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftxoof%2Fresume/lists"}