<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://AaronScherf.github.io/</link><atom:link href="https://AaronScherf.github.io/index.xml" rel="self" type="application/rss+xml"/><description/><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Mon, 24 Oct 2022 00:00:00 +0000</lastBuildDate><image><url>https://AaronScherf.github.io/media/sharing.jpg</url><title/><link>https://AaronScherf.github.io/</link></image><item><title>Multi-Agent Development Workflow</title><link>https://AaronScherf.github.io/projects/multi_agent_project/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/multi_agent_project/</guid><description>&lt;p&gt;For a website revision, I can give an agent the editorial guide and a set of pages, then review the resulting changes before publishing. That work happens in its own working copy, so another task can proceed without sharing the same files. The handoff carries the branch, changes, checks, and remaining questions.&lt;/p&gt;
&lt;p&gt;Git calls these separate working copies &lt;strong&gt;worktrees&lt;/strong&gt;. Each writing task gets one branch and one writer; a designated integrator combines finished changes. The files and staging areas are separate, but Git&amp;rsquo;s underlying history and branch references are shared. Isolation reduces accidental overwrites while leaving conflicts and incompatible changes for review.&lt;/p&gt;
&lt;p&gt;The workspace&amp;rsquo;s routing guide assigns defaults by task. Claude handles architecture and decisions that depend on earlier context. Gemini handles pipeline operation, documentation, writing, and large source reviews. Codex handles routine code maintenance, tests, and Git mechanics. An explicit assignment can override those defaults—as it does when I ask Codex to revise these pages.&lt;/p&gt;
&lt;p&gt;The routing instructions live in one shared document, linked from each agent&amp;rsquo;s entry file. That avoids maintaining three copies that can drift apart. Continuity comes from the context and records supplied in this workspace; it should not be assumed to be automatic or shared between products.&lt;/p&gt;
&lt;p&gt;A completed task still needs integration approval. Its handoff identifies what was changed, what was checked, and what remains uncertain. A passing test suite does not establish that two independently sensible changes will work well together.&lt;/p&gt;
&lt;p&gt;This remains a convention the participants must follow. Worktrees do not isolate a shared notes vault, an external service, or a sync process. The
and
describe the boundaries and approval rules.&lt;/p&gt;</description></item><item><title>Resume Manager</title><link>https://AaronScherf.github.io/projects/resume_manager/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/resume_manager/</guid><description>&lt;p&gt;A useful tailored resume changes the emphasis without changing the experience. Resume Manager keeps a master record of my roles, projects, and accomplishments, then uses a job description to select relevant experience and rewrite its bullets. Employer names, dates, and locations are copied by code from the master; the model supplies bullet wording rather than rebuilding the whole document.&lt;/p&gt;
&lt;p&gt;The most effective change was removing AI from the first step. My source resume already had recognizable sections, but model-based extraction misplaced fields and omitted information. A conventional parser that reads those sections reduced the recorded bootstrap time from over 90 minutes to about 1.5 seconds on my resume. Language generation remains useful for tailoring; it was unnecessary for reading a layout the code could recognize directly.&lt;/p&gt;
&lt;h2 id="what-tailoring-can-change"&gt;What tailoring can change&lt;/h2&gt;
&lt;p&gt;An &lt;strong&gt;illustrative example for a hypothetical applicant&lt;/strong&gt; applying to a monitoring role:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Master:&lt;/strong&gt; Prepared monthly monitoring reports in Excel covering 12 projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tailored for a role emphasizing Excel:&lt;/strong&gt; Prepared Excel monitoring reports for 12 projects each month.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The revised bullet puts Excel first while keeping the frequency, activity, and project count fixed. It adds no claim of managing those projects or improving their results. That is the kind of distinction I still review in the actual output; fixed dates alone cannot protect every factual implication of a rewritten sentence.&lt;/p&gt;
&lt;p&gt;The ordinary workflow uses a saved job description and a local model. Optional questions let me explain priorities before tailoring, and the application folder keeps that guidance alongside the job description, draft, PDF, and validation report. A separate route can interpret a rough opportunity description and request a cloud-based relevance brainstorm. That route may send resume material to Gemini; the saved-description route does not require it.&lt;/p&gt;
&lt;h2 id="check-what-survived-the-rewrite"&gt;Check what survived the rewrite&lt;/h2&gt;
&lt;p&gt;Checks flag possible invented or dropped numbers, repeated openings, similar bullets, and some unsupported responsibility wording. Explicitly supplied facts can include required phrases or acceptable alternatives, making omissions easier to spot. These are advisory checks, not a full understanding of whether the resume is faithful.&lt;/p&gt;
&lt;p&gt;The September 2026 application trials showed why that matters: a rewrite dropped a financial figure, and another output omitted qualitative guidance despite a clean numeric report. Newer checks cover more of those cases, but word matching and similarity tests can still miss changes in meaning.&lt;/p&gt;
&lt;p&gt;Page fitting ranks candidate experience and measures rendered drafts against a target length, so content selection responds to the available space. I still inspect the final PDF for readable layout and omissions. The master remains maintained by hand, and tailoring never submits an application. The
explains the current entry points and review outputs.&lt;/p&gt;</description></item><item><title>Novel Omnibus Normality Test</title><link>https://AaronScherf.github.io/projects/math_thesis/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/math_thesis/</guid><description>&lt;p&gt;My mathematics thesis explored a way to test whether data depart from a bell-shaped, or normal, distribution. It transforms an ordered sample into a pattern of departures from what normal data would produce, then looks for structure beyond random fluctuation. The aim was to detect different kinds of departure through one flexible test.&lt;/p&gt;
&lt;p&gt;In the small-sample simulations, the method performed similarly to the established Shapiro–Wilk test for two families of distributions, but fell behind for two others. The result was a proof of concept with room to investigate the construction further. It did not establish a generally stronger normality test.&lt;/p&gt;
&lt;h2 id="turning-a-sample-into-a-pattern"&gt;Turning a sample into a pattern&lt;/h2&gt;
&lt;p&gt;An ordered sample contains information about where it departs from the expected shape. After the transformation, normal samples fluctuate around zero. Other distributions can produce a systematic bend or a different pattern of departures. Keeping their direction as well as their size is the useful part of the approach.&lt;/p&gt;
&lt;p&gt;I fitted those departures with a penalized generalized least squares model, or PGLS. The penalty discourages the model from simply tracing every noisy point, much as smoothing a jagged line can reveal its broader shape. The model also accounts for how the transformed observations vary together. Its fitted coefficients supply a measure of departure, and simulations of normal samples establish a rejection threshold.&lt;/p&gt;
&lt;h2 id="what-the-simulations-showed"&gt;What the simulations showed&lt;/h2&gt;
&lt;p&gt;The comparison used samples of 20 observations and 10,000 simulations per tested setting. &lt;strong&gt;Power&lt;/strong&gt; is the proportion of non-normal samples a test correctly identifies under those conditions.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Simulated distribution&lt;/th&gt;
&lt;th&gt;Proposed test compared with Shapiro–Wilk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;t-distribution&lt;/td&gt;
&lt;td&gt;Similar, generally slightly lower power&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generalized Pareto&lt;/td&gt;
&lt;td&gt;Similar patterns across the tested shape settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gamma&lt;/td&gt;
&lt;td&gt;Lower power, by about 10–20 percentage points in the reported comparisons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chi-square&lt;/td&gt;
&lt;td&gt;A larger gap, favoring Shapiro–Wilk over most tested settings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As distributions became harder to distinguish from normal, detection became difficult for both methods. The
describe these conditions and the remaining choices: how strongly to smooth, which patterns to fit, and how to construct the final statistic.&lt;/p&gt;
&lt;p&gt;This was my master&amp;rsquo;s thesis at Indiana State University, advised by Dr. Mark Inlow. The
includes the report and R implementation.&lt;/p&gt;</description></item><item><title>Academic Hub</title><link>https://AaronScherf.github.io/projects/academic-hub-overview/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub-overview/</guid><description>&lt;p&gt;As a PhD student, a common problem is having too many learning resources and not enough time to explore them all. Synthesizing information from textbooks, lecture slides, recitation notes, past exams, and external content and distilling the most important lessons is a massive challenge, especially for multiple overlapping courses. A question I jotted down during lecture in my handwritten notes may require leafing through a textbook index, cross-checking against the notation used by my specific faculty, and connecting back to an example from a past semester&amp;rsquo;s problem set. Online searches or generic AI responses are faster, but lack the specific context from my own materials; usually LLM responses are based on other disciplines or invoke concepts far out of scope for my course.&lt;/p&gt;
&lt;p&gt;My solution is the Academic Hub: a complete system for organizing my notes and course materials in a machine-readable format that a locally based AI agent can use to serve as my personal librarian and tutor. An interconnected group of customizable coding pipelines take my disorganized notes, slides, and syllabi and turns them into a fully searchable corpus of data, complete with metadata tags, which a local or low-cost AI model can use to generate customized study guides, practice problems, and Socratic tutor agents. The entire system is built to be reproducible for any course and any type of input: handwritten notes, slides, scans of textbooks, typeset PDFs&amp;ndash;just drop a collection of study materials into a course directory, use a local agent to run the conversion and tagging pipelines, then start building custom materials from the resulting knowledge corpus. The system is also built to prioritize free or low-cost methods for transcribing content, relying on local LLMs or subscription models where possible and falling back to APIs if necessary, to ensure complete customizable to the user&amp;rsquo;s cost sensitivity and preferred LLM environment.&lt;/p&gt;
&lt;p&gt;The common foundation for every course is a collection of materials transcribed into a machine-readable format, typically markdown or JSON databases. Converting notes or slides preserves the text, mathematical notation, and page context; the
makes that material searchable by a local agent or using backlinks in a notes aggregator like Obsidian. From there I can ask a question, develop custom study guides, or explore how course concepts depend on one another through interactive concept maps. Creating this as a customized local pipeline rather than relying on a commercial study system or a cloud-based retrieval-augmented generation approach like Gemini&amp;rsquo;s Notebooks gives me complete flexibility to create and modify my own study tools, without worrying about releasing potentially copyrighted material to a third-party.&lt;/p&gt;
&lt;h2 id="prepare-the-materials"&gt;Prepare the materials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
preserves equations, figure descriptions, and page references;
handles shorter documents and handwriting.&lt;/li&gt;
&lt;li&gt;
flags suspicious extracted text and compares it with source images before changing it.&lt;/li&gt;
&lt;li&gt;
turns lecture recordings into study notes. Reliable references from each concept back to its exact moment in a video remain unfinished.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="find-an-explanation"&gt;Find an explanation&lt;/h2&gt;
&lt;p&gt;
uses retrieved passages to answer a question with references I can open and check. I can save an answer or a session recap as a study note;
can return to its recorded passages to develop the explanation further.&lt;/p&gt;
&lt;p&gt;
uses the shared source material to map relationships between ideas, including the assumptions that make a conclusion follow. Its first full graph covers part of a microeconomics course. A graph helps trace those dependencies; a guide explains a topic in sequence. Both contain drafted material that needs review.&lt;/p&gt;
&lt;h2 id="study-and-practice"&gt;Study and practice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
starts from a topic list, selects indexed sources, drafts a guide, and proposes edits for review. Its optional enhancement step adds the same fuller explanations and worked examples available to an existing summary.&lt;/li&gt;
&lt;li&gt;
gives hints and feedback on an attempt. The separate
tracks progress during a conversation, but its strict checks have struggled with teaching unfamiliar material.&lt;/li&gt;
&lt;li&gt;
keeps my reasoning, agent derivations, and tutoring work distinct for comparison.&lt;/li&gt;
&lt;li&gt;
stores extracted exercises with their provenance.
currently retrieves its own style examples; integration with that stored bank remains separate work.&lt;/li&gt;
&lt;li&gt;
can accompany an explanation, while
turns notes into spoken episodes. A generated chart or recording still needs checking for its intended use.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="maintain-the-collection"&gt;Maintain the collection&lt;/h2&gt;
&lt;p&gt;
keeps working notes available across devices.
reports missing or stale outputs for review, and
helps prioritize the next work.&lt;/p&gt;
&lt;p&gt;The
links to each tool&amp;rsquo;s current evidence and limits. A useful study session still involves choosing the material, checking coverage, and comparing generated explanations with their sources. The shared source trail makes those checks possible; it does not settle whether an explanation is correct.&lt;/p&gt;</description></item><item><title>AI Research Assistant</title><link>https://AaronScherf.github.io/projects/ai-research-assistant-overview/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/ai-research-assistant-overview/</guid><description>&lt;p&gt;AI Research Assistant brings paper discovery, document conversion, and search into the same research workflow. It can compare candidate abstracts with a description of my research question before trying to obtain the full articles. Converted papers can then be searched alongside my own research notes using the tools developed for Academic Hub.&lt;/p&gt;
&lt;p&gt;For an &lt;strong&gt;illustrative research question&lt;/strong&gt; such as &amp;ldquo;How do researchers measure displacement after a disaster?&amp;rdquo;, the starting point is more specific than a keyword search for disasters. I can ask the discovery tool to favor empirical measurement over policy commentary, then inspect the candidates before building a reading collection.&lt;/p&gt;
&lt;p&gt;The three current tools handle different parts of that work:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;
.&lt;/strong&gt; Search an academic-publication catalog by researcher or topic, then score abstracts against the research description using a model running locally. The tool tries several sources for full text and records papers that need manual retrieval. Finding a relevant paper does not guarantee access to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;
.&lt;/strong&gt; Convert available PDFs to text with references back to their pages. The converter reuses the course-notes tools, choosing local extraction or AI transcription according to the document. Equations, figures, and imperfect extraction still need checking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;
.&lt;/strong&gt; Convert Word documents, including research ideas and application essays, while retaining headings and basic formatting. Their text and the papers enter the same search catalog, making it possible to look for a topic across both.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The shared
can query the research collection and
together.
can use those retrieved passages for an answer with source references. Each collection keeps its own records, so a paper, my research note, and a lecture explanation remain distinguishable when they match the same question.&lt;/p&gt;
&lt;p&gt;These tools support a literature review that I direct: choosing the question, reviewing papers, obtaining restricted articles, and interpreting the evidence remain part of my work. The
give the current capabilities and limits of each stage.&lt;/p&gt;</description></item><item><title>Predicting Wheat Yields in New Environments</title><link>https://AaronScherf.github.io/projects/wheat_yield_prediction/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/wheat_yield_prediction/</guid><description>&lt;p&gt;Choosing a wheat variety is partly a question of where it will grow. My master&amp;rsquo;s thesis tested whether satellite measurements of the environment and accessible machine learning tools could help predict yields where field-trial information is limited. I compared those measurements with field records, using wheat trials from CIMMYT, an international crop-research organization.&lt;/p&gt;
&lt;p&gt;The results separated two questions that can easily get mixed together. Machine learning models outperformed the study&amp;rsquo;s linear mixed-model baseline on held-out observations. Satellite data helped that baseline, but the machine learning models performed better with the manually collected environmental data. A stronger model and a more accessible data source did not automatically make the best combination.&lt;/p&gt;
&lt;h2 id="what-was-compared"&gt;What was compared&lt;/h2&gt;
&lt;p&gt;Google Earth Engine supplied environmental measurements such as soil moisture, precipitation, and vapor pressure. Field records supplied another view of growing conditions and management. I also tested adding pedigree information describing relationships between wheat varieties.&lt;/p&gt;
&lt;p&gt;Four approaches predicted yields: a Bayesian linear mixed model, random forest, gradient boosting, and a neural network. Fifteen percent of observations were held out for the final comparison, with varieties represented across that sample. This tests predictions within the study&amp;rsquo;s data; use in new regions would need further validation.&lt;/p&gt;
&lt;p&gt;For a direct comparison using environmental data alone:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Environmental information&lt;/th&gt;
&lt;th&gt;Random forest R²&lt;/th&gt;
&lt;th&gt;Linear mixed-model R²&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Field records&lt;/td&gt;
&lt;td&gt;0.829&lt;/td&gt;
&lt;td&gt;0.113&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Satellite-derived data&lt;/td&gt;
&lt;td&gt;0.746&lt;/td&gt;
&lt;td&gt;0.243&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;R² measures how much of the variation in the held-out yields the predictions account for relative to predicting the average. It is not the percentage accuracy of an individual yield prediction. The
gives the full comparison, including pedigree information.&lt;/p&gt;
&lt;h2 id="accessibility-mattered-too"&gt;Accessibility mattered too&lt;/h2&gt;
&lt;p&gt;The machine learning models ran on freely available Google Colab resources, though some calculations took hours. The mixed model&amp;rsquo;s large genetic covariance matrices required a specialized machine with roughly a terabyte of memory. Computing requirements were therefore part of the comparison, alongside prediction quality.&lt;/p&gt;
&lt;p&gt;The code is public, but restricted pedigree data prevents full reproduction from public inputs alone. The project is a research proof of concept, with further work needed on location precision, model settings, and validation before using its predictions to make planting decisions.&lt;/p&gt;
&lt;p&gt;This was my Spring 2020 thesis for UC Berkeley&amp;rsquo;s Master of Development Practice, advised by Professor David Zilberman. The
contains the code and full report.&lt;/p&gt;</description></item><item><title>A Course Map Where the Arrows Have to Explain Themselves</title><link>https://AaronScherf.github.io/blog/concept_map_conditions/</link><pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/concept_map_conditions/</guid><description>&lt;p&gt;Putting two ideas next to each other on a map says they are related. It does not explain what connects them. My
asks more of an arrow: what claim is it making, which assumption does it need, and where in the course material can I check it?&lt;/p&gt;
&lt;p&gt;The package&amp;rsquo;s sample graph gives a compact example. A partial order can leave some pairs of items unranked relative to one another. Requiring every pair to be comparable gives a total order. Writing that condition on the connection makes the change visible. It is the kind of detail that can disappear when a map is just a collection of terms joined by lines.&lt;/p&gt;
&lt;p&gt;By the October 15 checkpoint, the
contained 104 concepts and 159 connections across eight sections of graduate microeconomics. Selecting a concept opens its explanation and mathematical statement; selecting a connection exposes the claim and its conditions. Section filters and alternative layouts help narrow the view when the whole map becomes crowded. The counts describe its scale, not how much of the course I have mastered.&lt;/p&gt;
&lt;p&gt;The map grows out of the same foundation as the
: converted textbooks, lecture notes, assignments, and passages found through the
. A guide develops an explanation in sequence. The graph gives me another way to explore the material by following what an idea depends on and what it helps establish. They are separate uses of the collection; generating one does not automatically create the other.&lt;/p&gt;
&lt;p&gt;There is also a useful division of labor behind the graph. Code prepares task cards containing source passages. Gemini in Antigravity drafts the explanations and connections, and a submission step checks their structure and references before adding them. The new material stays marked as proposed until a person reviews it. This separates a model&amp;rsquo;s fluent suggestion from an accepted part of the map.&lt;/p&gt;
&lt;p&gt;Those checks have limits. A reference can point to a real passage while the explanation misreads it. The drafting model also critiques its own connections, which makes its generous verdicts worth questioning. Section summaries remain drafts, and the GitHub route for submitting reviewer proposals had not yet been exercised from start to finish at this checkpoint.&lt;/p&gt;
&lt;p&gt;What makes the graph promising is the opportunity to ask a precise question at a confusing junction. If I cannot follow an arrow, I can examine the claim, the assumption, and the passage behind it. That gives me a concrete starting point for studying—or for correcting the map itself.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Retrospective account prepared October 16, 2026, covering the October 15 checkpoint. The
records the counts and open checks. The live graph and project pages may have changed since.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Concept Graph</title><link>https://AaronScherf.github.io/projects/academic-hub/concept_graph/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/concept_graph/</guid><description>&lt;p&gt;Concept Graph maps the ideas in a course and the conditions that connect them. An arrow can say that one idea implies another, but it also records the assumption needed to make that claim. Selecting it gives me a sentence to examine and references to the course material behind it.&lt;/p&gt;
&lt;p&gt;For example, the package&amp;rsquo;s sample graph connects a &lt;strong&gt;partial order&lt;/strong&gt; to a &lt;strong&gt;total order&lt;/strong&gt; when every pair can be compared. A partial order can leave two items unranked relative to one another; adding that comparison requirement produces a total order. The condition on the arrow explains what changed, rather than leaving me to infer it from two nearby boxes.&lt;/p&gt;
&lt;p&gt;The first full graph covers the first half of a graduate microeconomic theory sequence:
. As of October 15, 2026, it contains 104 concepts and 159 connections across eight course sections. A second graph now covers a graduate econometrics course:
. Completed on October 21, 2026, it contains 112 concepts and 135 connections across eight course sections, all awaiting the owner&amp;rsquo;s review. Those counts describe each draft&amp;rsquo;s scale; every concept and connection remains marked as proposed until reviewed.&lt;/p&gt;
&lt;h2 id="following-an-idea"&gt;Following an idea&lt;/h2&gt;
&lt;p&gt;Each box represents an idea, such as a definition, theorem, or example. Selecting it opens an explanation, its mathematical statement, and its connections written out in words. Course-section filters and several layouts help narrow a crowded graph to the part I want to study.&lt;/p&gt;
&lt;p&gt;That makes the graph useful for tracing a result back through the assumptions and definitions it depends on. Section summaries offer another way in, though those summaries are AI drafts and some wording is looser than the underlying theory.&lt;/p&gt;
&lt;h2 id="building-and-reviewing-the-connections"&gt;Building and reviewing the connections&lt;/h2&gt;
&lt;p&gt;An AI agent drafts explanations and connections from task cards containing passages found through the
. The
and
tools prepare the notes, slides, assignments, and books it searches. Code then checks the submitted structure: references must come from the supplied passages, required conditions must be present, and circular definition chains are rejected. A cited passage can still be misinterpreted.&lt;/p&gt;
&lt;p&gt;The same collection supports the
. A guide develops a topic through explanations and examples; the graph exposes the relationships and assumptions between ideas. They have separate drafting workflows, so building one does not automatically produce the other.&lt;/p&gt;
&lt;p&gt;The drafts remain marked as proposed until a person accepts or edits them. Reviewers can comment, reject a connection, or suggest a missing idea through the page. Suggestions from several reviewers are combined before the maintainer handles them. Submission through GitHub has not yet been tested from start to finish.&lt;/p&gt;
&lt;h2 id="what-a-second-course-taught"&gt;What a second course taught&lt;/h2&gt;
&lt;p&gt;Applying the drafting pipeline to econometrics revealed where a data-driven statistics course differs from a theory course:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Checking against the syllabus:&lt;/strong&gt; Initial drafting from lecture notes and textbook passages missed 21 key concepts, including an entire syllabus topic on dynamic causal effects. Adding an explicit gap check that compares the course syllabus against the drafted concept list caught those omissions before review.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specialized connection types:&lt;/strong&gt; The original vocabulary grouped too many relationships into generic categories. Econometrics required two new connection types—one (&lt;code&gt;defined_via&lt;/code&gt;) for concepts formally defined in terms of other concepts, and another (&lt;code&gt;assumption_of&lt;/code&gt;) to separate the conditions an empirical estimator requires from the mathematical premises of a theorem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rotating agent roles:&lt;/strong&gt; To prevent a model from approving its own blind spots, the pipeline rotates responsibilities: Gemini drafts nodes and connections from source passages, Codex evaluates whether each proposed link is supported or weak, and Claude reviews vocabulary additions and structural repairs. The agent that drafted or corrected an item no longer critiques it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Separating source data from publication:&lt;/strong&gt; The graph&amp;rsquo;s source data and review history stay in a private repository, and only the built interactive page is published to a public site.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="evidence-and-limits"&gt;Evidence and limits&lt;/h2&gt;
&lt;p&gt;The October 15 status records 331 Python tests, 45 viewer tests, browser checks, and a graph built from actual course materials. These establish different things: the tests exercise the software, while the graph shows what the drafting process produced. Neither establishes a learning benefit.&lt;/p&gt;
&lt;p&gt;For the microeconomics graph, connections were drafted and critiqued by the same model, and that critic approved almost every connection (154 of 155), so its review may be lenient. The econometrics graph used a separate critic, but no model replaces subject-matter judgment: every item in both graphs remains proposed until a person reviews it. The
records the open issues; the
explains how the graph is built and reviewed.&lt;/p&gt;</description></item><item><title>Corpus Health</title><link>https://AaronScherf.github.io/projects/academic-hub/corpus_health/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/corpus_health/</guid><description>&lt;p&gt;Having a converted lecture note on disk does not mean its latest text is available in search. Corpus Health checks for gaps between source documents, converted text, and the
, then presents specific findings for review. It remembers declined or deferred findings so the same unchanged item does not keep appearing as a new problem.&lt;/p&gt;
&lt;p&gt;The repair scope is deliberately small: it can rebuild searchable passages for one identified document whose search record is already current. Before acting, it checks that the document and record still match the reviewed finding. Afterward, it audits the result. A changed source needs another check rather than relying on an old approval.&lt;/p&gt;
&lt;p&gt;For an &lt;strong&gt;illustrative case&lt;/strong&gt;, a transcript may have been updated while its searchable passages still reflect the earlier version. The scan flags the mismatch. I can accept, decline, or defer it on a local review page; running accepted repairs is a separate step. Rebuilding those passages can incur an AI embedding charge, so acceptance is recorded for each source.&lt;/p&gt;
&lt;p&gt;Keeping those passages current matters to the
and
that read them. A missing source may look like a gap in the model&amp;rsquo;s explanation when the material was never available to search.&lt;/p&gt;
&lt;p&gt;The scanner itself makes no model calls or edits to course materials. Repair uses a shared lock to coordinate with participating tools, but some writers, including Obsidian sync, do not follow that protocol. They must not write to the same destination during a repair. Transcription, textbook conversion, and broader catalog rebuilds remain outside the enabled repair action.&lt;/p&gt;
&lt;p&gt;Initial live scans on October 9, 2026 took about 21–28 seconds, but their roughly 305 findings still needed sample review to distinguish genuine gaps from classification mistakes. A daily discovery-only trial was scheduled for October 10–16. An October 16 read-only check found completed reports for several days alongside empty logs for others; the observation period still needs review before claiming reliable daily operation. The scheduled task performs no repairs.&lt;/p&gt;
&lt;p&gt;The
separates fixture tests from live observations. The
documents the scan policies and current repair boundary.&lt;/p&gt;</description></item><item><title>Guided Solutions</title><link>https://AaronScherf.github.io/projects/academic-hub/guided_solutions/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/guided_solutions/</guid><description>&lt;p&gt;Guided Solutions brings three contributions to a problem set together: an AI-written derivation, space for my own intuition, and a proof developed through tutoring. Each has its own labelled block, so I can compare approaches and see whose reasoning I am reading.&lt;/p&gt;
&lt;p&gt;The separation matters when the routes differ. In the recorded microeconomics run, the agent supplied detailed reference proofs; later tutoring on two questions produced more compact proofs following the student&amp;rsquo;s approach. Both were kept, with room for the student&amp;rsquo;s interpretation alongside them.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;illustrative layout&lt;/strong&gt;, rather than an excerpt from the private coursework, looks like this:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;My reasoning:&lt;/strong&gt; I think adding another option changes the chance of choosing the default, but I need to identify why.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent derivation:&lt;/strong&gt; Work through the choice probabilities under the question&amp;rsquo;s stated rule, showing the intermediate steps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;After tutoring:&lt;/strong&gt; Record the proof developed during the discussion and compare its key step with the reference derivation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To prepare a document, I use the assignment and a question-by-question hints sheet to organize the work. The
make lecture notes available to the
, which finds the course&amp;rsquo;s definitions and notation alongside textbook passages. The agent is instructed to show its algebra and assumptions, while leaving the student&amp;rsquo;s writing intact. A later audit checks the document&amp;rsquo;s structure and mathematical work.&lt;/p&gt;
&lt;p&gt;This is a procedure I direct using the existing conversion, search, and tutoring tools. The
records one completed problem-set run and its tutoring follow-up. It provides a playbook for another assignment; each new solution still needs review. The course documents remain private, and the workflow has no dedicated automated test suite.&lt;/p&gt;</description></item><item><title>Project Steering</title><link>https://AaronScherf.github.io/projects/academic-hub/project_steering/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/project_steering/</guid><description>&lt;p&gt;Project Steering helps me choose the next task from a long project list. I review each task&amp;rsquo;s impact, urgency, effort, and dependencies; the tool uses those decisions to produce an explained shortlist. Tasks that still need estimates stay visible in a separate queue.&lt;/p&gt;
&lt;p&gt;Each task keeps its identity when it moves within the list, but suggestions are tied to its wording. If the description changes after an AI agent proposes an estimate or assignment, that proposal becomes stale and needs a fresh review. That keeps an old suggestion from being approved for changed work.&lt;/p&gt;
&lt;p&gt;The review page also lets me hold a task until a chosen date without changing its priority score. Reviewing
, for example, can remain important while staying out of today&amp;rsquo;s shortlist until the trial finishes. Suggested assignments to coding agents have their own approval step, separate from priority estimates.&lt;/p&gt;
&lt;p&gt;Scanning the list makes no AI or network calls and does not edit the source tracker. AI-generated estimates and assignments can be imported for review, but the software never treats them as approved decisions. Choosing or ranking a task does not start its implementation.&lt;/p&gt;
&lt;p&gt;An October 10, 2026 scan accounted for 69 active tasks with no unresolved parsing warnings. That establishes coverage of that list, while the quality of the priorities still depends on the estimates and decisions I supply. Many estimates remained unfinished at that checkpoint. Scans currently run on demand; unattended scheduling is still planned. The
and
describe the current review rules.&lt;/p&gt;</description></item><item><title>Socratic Tutor</title><link>https://AaronScherf.github.io/projects/academic-hub/socratic_tutor/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/socratic_tutor/</guid><description>&lt;p&gt;The Socratic Tutor gives an AI study conversation a record of which steps the student has established. Before the tutor sends a reply, a local program checks it against that record and rules intended to hold back unreached solution steps. The conversation can then be reviewed against what the student actually said.&lt;/p&gt;
&lt;p&gt;That restraint also exposed the central difficulty. In two recorded sessions on one microeconomics problem set, the tutor followed several session rules but struggled to teach unfamiliar material: an explanation could itself reveal a step the student had not reached. The system was better at assessing existing understanding than helping a learner build it.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;illustrative version of that failure pattern&lt;/strong&gt; is:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Student:&lt;/strong&gt; I don&amp;rsquo;t understand why this condition matters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tutor:&lt;/strong&gt; Which part of the condition could you use?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another question preserves the student&amp;rsquo;s chance to solve the problem, but it may provide little help with the missing concept. A more permissive teaching mode is still a design direction, not an observed solution to this problem.&lt;/p&gt;
&lt;h2 id="what-the-program-keeps-track-of"&gt;What the program keeps track of&lt;/h2&gt;
&lt;p&gt;An AI agent conducts the dialogue; the Python program maintains the session record and checks proposed replies locally, without asking another model to judge every turn. Preparation defines the problem&amp;rsquo;s key claims, reference steps, glossary, and review criteria. During the conversation, word-pattern checks look for evidence that the student has established a claim or encountered a known pitfall.&lt;/p&gt;
&lt;p&gt;When enough progress has been recorded, the reference steps are released for a comparison using quotations from the student&amp;rsquo;s messages. Pausing saves the transcript, summary, and learner record. Skip and defer rules allow incomplete parts to be parked, though the live runs found that returning to a parked question was too rigid.&lt;/p&gt;
&lt;p&gt;The checks have limits: unfamiliar wording can be missed, unrelated phrases can trigger a match, and an agent can credit weak evidence. They provide an inspectable record rather than a guarantee against revealing an answer or misjudging understanding. Automated tests exercise the session rules; the
explain what happened in the two sessions. The
documents the current workflow.&lt;/p&gt;
&lt;p&gt;For a hint or feedback on a single attempt,
offers those tools within RAG Analysis.
describes a document workflow for keeping my reasoning and later tutoring work beside an agent&amp;rsquo;s reference derivation. Those are useful alternatives when I need a specific study task rather than a tracked conversation.&lt;/p&gt;</description></item><item><title>Study Guide Pipeline</title><link>https://AaronScherf.github.io/projects/academic-hub/study_guide_pipeline/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/study_guide_pipeline/</guid><description>&lt;p&gt;The Study Guide Pipeline builds a guide from selected course materials, then lets me review proposed edits before they change the text. Topics can draw on named textbook sections, particular lecture notes, or newly discovered passages. Keeping that source selection explicit makes it easier to investigate a gap in the finished guide.&lt;/p&gt;
&lt;p&gt;One early run exposed a useful mismatch: a requested textbook section did not cover the statistical test it was supposed to explain. The stronger expanded guide described what that section actually contained and developed the topic from other relevant material. That was more useful than repeating the requested reference as though it were correct.&lt;/p&gt;
&lt;h2 id="from-materials-to-a-reviewed-guide"&gt;From materials to a reviewed guide&lt;/h2&gt;
&lt;p&gt;I start with a topic list, instructions, and rules for choosing sources. The
supplies passages from the converted
and
. Those passages need to be in the search catalog before guide planning can use them.&lt;/p&gt;
&lt;p&gt;The tool assembles a source plan; newly discovered passages normally wait for review before drafting. The draft records which passages were supplied for each topic, and an optional
can develop explanations and worked examples further. For tracing relationships between ideas rather than reading a topic in sequence,
uses the same source foundation in a separate drafting workflow.&lt;/p&gt;
&lt;p&gt;Revision is a separate step. It proposes specific changes for relevance, repetition, correctness, and organization. I can accept or reject them individually. Applying the decisions writes a new guide and checks that untouched passages remain unchanged and that no new page citations have appeared. It also refuses to apply an old review if the guide has changed underneath it.&lt;/p&gt;
&lt;p&gt;That approach makes a long guide easier to refine without asking the model to regenerate every section. Spending limits can stop a run between sections or review tasks, and saved revision work can be resumed when its inputs are unchanged.&lt;/p&gt;
&lt;h2 id="what-changed-in-practice"&gt;What changed in practice&lt;/h2&gt;
&lt;p&gt;In the first econometrics comparison, three draft-only variants were too short and conceptual for the intended study use. The expanded version supplied deeper derivations and examples, though it still lacked some of the exam-focused structure I wanted. Later topic-based drafts improved the worked problems but also wandered into irrelevant software discussion.&lt;/p&gt;
&lt;p&gt;A subsequent review of one draft accepted 27 of 30 proposals. Applying the review made 18 text edits; other accepted items included advisory notes. The run reduced repetition, repaired headings, and added cross-references. An accepted warning can still leave a mathematical issue unresolved when it calls for investigation rather than supplying a correction.&lt;/p&gt;
&lt;p&gt;A later microeconomics guide made the remaining gap clear: comparison against the assignment found missing material and errors the revision pass had missed. That check led to hand repairs. The
and
record the observations; the
documents the current workflow. A generated guide still needs that final coverage and correctness review before I rely on it.&lt;/p&gt;</description></item><item><title>Summary Enhancement</title><link>https://AaronScherf.github.io/projects/academic-hub/summary_enhancement/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/summary_enhancement/</guid><description>&lt;p&gt;A short summary can name a result without giving me enough detail to use it. Summary Enhancement returns to the exact textbook and note passages recorded by an existing AI-generated summary, then develops fuller explanations by topic. It can also add worked examples whose arithmetic is computed by running code.&lt;/p&gt;
&lt;p&gt;The useful expansion is in the reasoning between the result and its application. For a statistical test, for example, a section can explain its assumptions, derive the formula, and walk through a small numerical calculation. An introductory description of what a test measures can then become something I can work through step by step.&lt;/p&gt;
&lt;p&gt;The starting document can be a saved
, or a draft from the
. It needs the recorded passage references those tools write. The enhancer uses them to reopen the same material in the
, rather than search again and possibly choose different evidence.&lt;/p&gt;
&lt;p&gt;The tool can plan the topics itself or use a list I supply. It writes a separate expanded guide, leaving the original intact. Long equations get their own lines and long paragraphs are split to make the result easier to read.&lt;/p&gt;
&lt;p&gt;One important distinction is preserved behind the reading text: which paragraphs draw on the sources, which add broader explanation, and which contain generated examples. A source map records the passages used by each section. This keeps the main text readable while giving me a way to inspect where its explanations came from.&lt;/p&gt;
&lt;p&gt;Those records support review; they do not establish that every claim follows from its source. The validator checks that source labels exist, and code execution checks the example&amp;rsquo;s arithmetic. A person still needs to inspect the reasoning and interpretation around those calculations.&lt;/p&gt;
&lt;p&gt;This is useful when I already have the right sources but need a fuller explanation. Starting a guide from a topic list also requires source selection and drafting, which the broader Study Guide Pipeline handles. The
documents the current interface; the linked status record describes earlier implementation and testing.&lt;/p&gt;</description></item><item><title>A Long Study Guide Still Needs to Answer the Right Questions</title><link>https://AaronScherf.github.io/blog/reviewable_study_guides/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/reviewable_study_guides/</guid><description>&lt;p&gt;The first microeconomics run of my study-guide pipeline produced eleven topics of explanations, but missed material needed for one of the assignment questions. It also imported language about statistical tests from an earlier econometrics prompt. A guide can be substantial, well organized, and still leave the reader unprepared for the problem in front of them.&lt;/p&gt;
&lt;p&gt;There was a useful advance here as well. The
could now assemble a guide from an explicit source plan, expand a chosen topic, and propose revisions for review. I could inspect what it planned to read and decide which edits to keep, instead of asking for a complete rewrite and trying to spot everything that had changed.&lt;/p&gt;
&lt;p&gt;That source plan connects the visible study aid to the less visible infrastructure. The
prepare textbooks and course notes; the
locates passages within them. For a guide, I can name particular sources and sections as well as request a bounded search. Newly discovered passages normally wait for review before drafting.&lt;/p&gt;
&lt;p&gt;Revision works on specific changes. It can suggest removing an irrelevant passage, consolidating repeated explanations, correcting a claim, or reorganizing a section. Applying accepted edits creates a revised copy and checks that untouched blocks remain unchanged. It also refuses a review if the guide has changed since the review was prepared. Those checks make edits traceable; mathematical judgment still has to come from examining the content.&lt;/p&gt;
&lt;p&gt;The microeconomics run made that distinction concrete. Its audit identified several real issues, but some were recorded as notes rather than supplied with corrections. Accepting a warning did not repair the underlying argument. A later comparison with the assignment found additional errors, including a worked example whose construction could not demonstrate what it claimed. Missing coverage had to be written by hand and checked numerically.&lt;/p&gt;
&lt;p&gt;The finished guide became usable through that combination of generated material, reviewed changes, and hand repairs. It also exposed a generalization problem: a prompt built around one statistical topic had carried assumptions into another subject. A more neutral prompt and course-specific relevance settings were follow-up work at this point.&lt;/p&gt;
&lt;p&gt;The practical payoff is a guide I can investigate. If a topic is thin, I can examine the source plan. If a paragraph changes, I can inspect the proposed edit. If the guide is meant to prepare me for an assignment, that assignment supplies a final coverage check. Each makes the next revision more focused than simply asking the model for a better guide.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Retrospective account prepared October 16, 2026, covering the October 9 milestone. The
and
distinguish implemented steps from proposed improvements. Project links include later developments.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Giving the Questions in My Lecture Notes Somewhere to Go</title><link>https://AaronScherf.github.io/blog/questions_in_lecture_notes/</link><pubDate>Sun, 04 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/questions_in_lecture_notes/</guid><description>&lt;p&gt;A question in the margin of a lecture note can be the most useful thing on the page—and one of the easiest things to forget. The new question resolver gives those questions a follow-up: it finds the marked questions in transcribed handwriting, searches the course collection, and saves an explanation beside the note. Its first recorded run answered seven questions, with a useful distinction: four had supporting course passages and three did not.&lt;/p&gt;
&lt;p&gt;This builds on the handwritten workflow I described in my
. Excalidraw automatically saves an SVG image when I save a drawing. The
makes the handwriting searchable and marks questions it finds. The resolver is a separate command at this milestone; saving a drawing does not automatically answer everything written on it.&lt;/p&gt;
&lt;p&gt;Searching for an answer raises an awkward possibility: the system might find the question itself and treat that as evidence. The resolver excludes the note&amp;rsquo;s own files when looking for supporting passages. If nothing suitable remains, it can still offer a general explanation, but labels it as not sourced from the course. That label describes the evidence available to the tool; it does not certify the other answers as correct.&lt;/p&gt;
&lt;p&gt;Keeping the explanation beside the note matters too. The expanded transcript can be regenerated as the transcription tools improve. Pasting an answer into that generated text would put it at risk of disappearing on the next run. Instead, each question gets an identity, its answer lives in a companion file, and the note carries a link back to it. The original question remains available for comparison.&lt;/p&gt;
&lt;p&gt;The first live run covered four microeconomics notes. All seven answers were saved, and file-level search could find the companion files afterward. One spot-checked explanation correctly distinguished a necessary condition from a sufficient one and pointed to the relevant course material. The three answers without course backing stayed visibly labelled. Passage-level search still needed a separate chunking step, so this was not yet a fully connected search workflow.&lt;/p&gt;
&lt;p&gt;That last gap is a useful reminder of how the pieces fit together. Transcription makes the question readable; the
makes related material findable; the answering tool connects them. Keeping the source trail visible lets me decide which explanation to pursue, which to check, and where the collection itself is missing something.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Retrospective account prepared October 16, 2026, covering the milestone recorded October 4. Implementation began October 3; the
records the live run. The transcription and indexer project pages describe later work too.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Tidying Up Academic Hub's Plumbing</title><link>https://AaronScherf.github.io/blog/academic_hub_infrastructure_cleanup/</link><pubDate>Sat, 03 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/academic_hub_infrastructure_cleanup/</guid><description>&lt;p&gt;Two recent changes to Academic Hub were about making the everyday work easier: keeping notes in sync and finding my way around the software.&lt;/p&gt;
&lt;p&gt;I separated large reference files from the handwritten notes that need to sync between devices. Before that, PDFs had slipped into the notes&amp;rsquo; saved history, so downloading the notes also brought along old copies of large files. Removing them from that history shrank the notes repository from about 217 MB to 35 MB in the September cleanup. The source documents moved to a separate archive, leaving the tablet to sync the working notes and drawings.&lt;/p&gt;
&lt;p&gt;Moving the files also meant preserving their connection to searchable transcripts. The search catalog uses a fingerprint of each source file&amp;rsquo;s contents, so a renamed or moved PDF can retain its identity. Its recorded location still needs updating, but it does not have to become a new document just because its folder changed.&lt;/p&gt;
&lt;p&gt;I also grouped the software tools by what they do: converting documents, finding papers, helping with study, or providing functions the other tools share. That gives me a clearer place to look when I need to change something.&lt;/p&gt;
&lt;p&gt;The reorganization was intended to preserve how the tools work. The full automated test suite passed after the move. The
describes the sync setup, and the
shows how the tools fit together.&lt;/p&gt;</description></item><item><title>Turning Dense Math Notes into Commute Podcasts</title><link>https://AaronScherf.github.io/blog/audio_generator_podcasts/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/audio_generator_podcasts/</guid><description>&lt;p&gt;I built the
to make course notes available away from a screen. Reading a mathematical document aloud requires more than sending its text to a speech engine: formula commands need to become spoken language first. As an illustrative example, E[X] should become &amp;ldquo;the expected value of X,&amp;rdquo; not a recital of brackets and formatting commands.&lt;/p&gt;
&lt;p&gt;The first complete recording exposed a different problem: it was three hours and 22 minutes long. Generating a valid MP3 had solved file production, but left navigation through a long set of notes unresolved. I changed the output to separate episodes grouped around headings, with an index showing which sections went into each file.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This October 1, 2026 post describes the September development run. The dated update below separates later changes from that result.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="translate-the-notation-before-speaking"&gt;Translate the notation before speaking&lt;/h2&gt;
&lt;p&gt;Simple replacements left too much raw formula syntax behind. A local model could rewrite the notation, but the recorded test on a roughly 122,000-character note took about six hours. The next version sent mathematical passages to cloud models while leaving plain prose alone. Cleanup and speech synthesis stayed local.&lt;/p&gt;
&lt;p&gt;The amount of notation determined which model handled each passage. Shorter requests could run concurrently, and a later change let sections share one dispatch queue rather than waiting for each section in turn. That brought preparation of the narration text to 3.8 minutes in the September 9 run.&lt;/p&gt;
&lt;h2 id="separate-preparation-from-production"&gt;Separate preparation from production&lt;/h2&gt;
&lt;p&gt;Speech synthesis took another 19.4 minutes with three local Piper workers. The complete run therefore took 23.2 minutes and produced nine files. Those numbers describe one difficult input, not how long every course&amp;rsquo;s notes will take.&lt;/p&gt;
&lt;p&gt;The episodes targeted 10-20 minutes, but one section with no internal headings became an episode of about 62 minutes. The result was not nine uniformly short recordings. It also did not establish whether listening would help me understand or retain the material; that needs listening and content review, beyond generating files.&lt;/p&gt;
&lt;p&gt;Regeneration works at the source-file level: the saved state uses a fingerprint of the whole note. Editing any part regenerates all its episodes, while unchanged source files can be skipped.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update, October 16, 2026:&lt;/strong&gt; the current code can divide oversized sections at paragraph boundaries, following an October 10 fix. One indivisible paragraph can still exceed the target, and a new listening check is needed to assess the changed output. The saved narration text provides a way to inspect formula rewrites before relying on the audio. The
covers output locations, textbook behavior, and the remaining limits.&lt;/p&gt;</description></item><item><title>An AI Tutor That Gives Hints and Checks Your Reasoning</title><link>https://AaronScherf.github.io/blog/pedagogical_rag_hints/</link><pubDate>Tue, 29 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/pedagogical_rag_hints/</guid><description>&lt;p&gt;An AI assistant can produce a complete solution quickly. That is not always what a student needs. When I am stuck, a useful hint can help me make progress while leaving the reasoning in my hands.&lt;/p&gt;
&lt;p&gt;I built the
to support that kind of study. It uses course materials to suggest a direction and can compare a student&amp;rsquo;s reasoning with a reference explanation. For a second check, a separate solver gets the question without the tutor&amp;rsquo;s earlier answer or the source passages used to build it.&lt;/p&gt;
&lt;p&gt;The hint feature aims to point toward a useful idea without giving away the conclusion. For a claim that is meant to hold in every case, an illustrative hint could be: &amp;ldquo;Try the simplest case you can think of. Which assumption does your argument use?&amp;rdquo; That gives me something to test while leaving the reasoning to me.&lt;/p&gt;
&lt;p&gt;That fresh view gives the second solver a chance to spot a missing assumption instead of following the same argument. In one recorded coursework trial, it identified a condition about the regression model that the first response had omitted.&lt;/p&gt;
&lt;p&gt;When I share an attempt, the draft check gives separate scores for whether the conclusion is right, whether each step is justified, and whether it uses the course&amp;rsquo;s definitions and methods. A correct result with a gap in the proof needs different feedback from an otherwise sound argument that uses unfamiliar notation. If the source material does not cover a point, the tutor should make that gap clear.&lt;/p&gt;
&lt;p&gt;I still have to examine the arguments; agreement between two answers does not settle whether they are right. The
describes the recorded tests, limits, and ongoing development.&lt;/p&gt;</description></item><item><title>Tutor Diagnosis &amp; Hint Generator</title><link>https://AaronScherf.github.io/projects/academic-hub/tutor_diagnosis/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/tutor_diagnosis/</guid><description>&lt;p&gt;A correct conclusion can hide a gap in the argument, while an otherwise sound attempt may use a method the course has not introduced. Tutor Diagnosis examines those differences separately: whether the result is right, whether the steps are justified, and whether the explanation fits the course&amp;rsquo;s definitions and methods. Its scores are model feedback for review, not instructor grades.&lt;/p&gt;
&lt;p&gt;The tool can also give a hint before I have a full attempt. It searches course material for a useful direction and aims to leave the final derivation to me. When the available passages do not cover the topic, it labels a general hint instead of attaching an unsupported course reference.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;illustrative learning loop&lt;/strong&gt;, not a transcript or a new test result:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Claim:&lt;/strong&gt; Every even integer is divisible by four.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attempt:&lt;/strong&gt; It works for 4 and 8, so it must hold for all even integers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; What would you need to check beyond those two examples?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Revision:&lt;/strong&gt; Two is even but not divisible by four. One counterexample disproves the claim.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The point is to identify the reasoning gap: examples that support a claim do not establish that it holds in every case. For course problems, the tool compares an attempt with a reference answer and retrieved passages, then names the most important gap to revisit.&lt;/p&gt;
&lt;h2 id="a-fresh-solution-for-comparison"&gt;A fresh solution for comparison&lt;/h2&gt;
&lt;p&gt;A separate solver receives the question without the tutor&amp;rsquo;s earlier answer or the source passages used to write it. In a recorded econometrics trial, this second solution identified an intercept condition the first answer had omitted. The user still compares both arguments; agreement or disagreement is not automatically resolved into a verdict.&lt;/p&gt;
&lt;p&gt;Other recorded checks included identifying an intentionally flawed regression argument and producing a hint on a microeconomics problem without a final derivation. Those are limited examples of the workflow, not evidence that feedback will be accurate on every assignment.&lt;/p&gt;
&lt;p&gt;Course-scoped logs preserve attempts, hints, feedback, and solution comparisons for later summaries. The
describes the trials. This is a set of tools within
; the separate
tracks an interactive session and applies different conversation rules.&lt;/p&gt;</description></item><item><title>Why I Use Obsidian and Excalidraw for Academic Notes</title><link>https://AaronScherf.github.io/blog/obsidian_excalidraw_notes/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/obsidian_excalidraw_notes/</guid><description>&lt;p&gt;I take many of my academic notes by hand. Diagrams, equations, and quick annotations are often easier to draw than type, but handwritten pages are hard to search and connect to related material later.&lt;/p&gt;
&lt;p&gt;I use &lt;strong&gt;Obsidian&lt;/strong&gt;, a notes app, with &lt;strong&gt;Excalidraw&lt;/strong&gt;, a drawing tool that lets me write and sketch inside it. Saving a note automatically creates an SVG image of the drawing. My Notes Transcription Pipeline reads those images and turns the handwriting into text that can be searched alongside my other course materials.&lt;/p&gt;
&lt;p&gt;OneNote and GoodNotes made writing feel natural, but their file-type limits got in the way of my processing workflow. This setup keeps my handwritten work alongside lecture slides, textbooks, and other course materials, with links between related notes.&lt;/p&gt;
&lt;p&gt;Customization was another major reason to choose this setup. I can edit the source code for Obsidian plugins, which let me add an eraser button and translate a pen-tool menu. When the tablet&amp;rsquo;s gesture bar covered the zoom and undo controls, I changed the interface styles to move them within reach. Being able to fix those details myself was an advantage over my experience with OneNote.&lt;/p&gt;
&lt;p&gt;I keep large reference files out of the notes sync so the tablet only needs to download the working notes and drawings. Some plugin settings and customizations still need to be copied or enabled by hand.&lt;/p&gt;
&lt;p&gt;A lecture can leave me with two versions of a drawing: the notes I wrote in class, and a later copy with the lecture slides pasted beside them. Once transcribed, the search tools can recognize some of those pairs and avoid showing both copies when the more complete version is available. Both originals remain editable.&lt;/p&gt;
&lt;p&gt;Matching whole notes by subject matter proved too broad: separate lectures on similar topics could look like duplicate versions. Comparing short sequences of words in the handwritten portions gave a cleaner distinction in the tested microeconomics notes. The useful signal was whether the same writing appeared in both versions.&lt;/p&gt;
&lt;p&gt;That connection is what makes the setup useful to me. I can keep writing by hand while making the notes easier to find and revisit later. The transcription tools make the saved drawings searchable, and the sync setup occasionally needs attention.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Updated October 15, 2026, to include the related-note matching added after this post was first written.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For the sync setup, transcription steps, and current matching limits, see the
,
, and
project pages.&lt;/p&gt;</description></item><item><title>Making Textbook Conversion Easier to Run in Batches</title><link>https://AaronScherf.github.io/blog/textbook_conversion_automation/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/textbook_conversion_automation/</guid><description>&lt;p&gt;Converting a set of textbooks used to require someone nearby to answer repeated prompts and step in when a book exceeded the available machine memory. Recent changes to
aim to make batch runs easier to supervise.&lt;/p&gt;
&lt;p&gt;The same textbook PDF might appear in the reading folders for two courses. If it has already been converted for one, the tool can reuse that output for the other. A fingerprint of the file&amp;rsquo;s contents recognizes an exact duplicate even if someone has renamed it.&lt;/p&gt;
&lt;p&gt;Very close title-and-author matches can also be reused and logged for later confirmation; less certain matches need a decision first. This policy reflects a cost tradeoff: mistaken reuse can be reversed, while rented GPU time spent converting a duplicate is already gone. Review remains important, but every likely duplicate need not interrupt the batch.&lt;/p&gt;
&lt;p&gt;The recovery procedure first checks whether a failed conversion ran out of memory. If that is the cause, the next steps are to reset and retry on the current machine, then try a larger one if the failure repeats. If that also fails, it calls for help. The run record preserves what has already been tried.&lt;/p&gt;
&lt;p&gt;The person or coding agent running the conversion follows that procedure. Automated tests cover the supporting code, while reliability across large batches still needs observation. The
describes what has been tested, the cost checks, and the remaining work.&lt;/p&gt;</description></item><item><title>Obsidian Git Sync</title><link>https://AaronScherf.github.io/projects/academic-hub/obsidian_git_sync/</link><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/obsidian_git_sync/</guid><description>&lt;p&gt;I want to write a lecture note on my tablet and find the editable drawing on my laptop, without bringing the whole textbook archive onto the tablet. This setup uses Obsidian, a notes app, and Excalidraw, its drawing tool. Working notes sync separately from the large source files used to process them.&lt;/p&gt;
&lt;p&gt;The tablet currently uses Fit, which exchanges files through GitHub&amp;rsquo;s API rather than maintaining a local Git history. That avoids the history-download problem that caused trouble with an earlier plugin. The laptop uses Obsidian Git, and some settings remain device-specific.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lightweight notes vault&lt;/th&gt;
&lt;th&gt;Separate source archive&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Markdown notes, editable Excalidraw scenes, processed text&lt;/td&gt;
&lt;td&gt;PDFs, exported drawing images, and generated audio&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Saving an Excalidraw file automatically creates an SVG image. The
use those images to make the handwriting searchable; saving alone does not perform that transcription. The source-relocation record reports the existing course materials moved into the archive, with the tools adapted to find them there while keeping processed text in the notes vault.&lt;/p&gt;
&lt;p&gt;Keeping the boundary intact required more than a folder move. An earlier sync plugin rewrote ignore rules from each device&amp;rsquo;s settings, letting PDFs enter the notes history. Removing those large files from the old history reduced its size from about 217 MB to 35 MB. That incident explains the emphasis on separate storage and device settings; the current tablet sync uses a different mechanism.&lt;/p&gt;
&lt;p&gt;Customization was another reason I chose this approach. Editing plugin code let me translate a pen menu and add an eraser button. A separate interface-style change moved zoom and undo controls clear of the tablet&amp;rsquo;s gesture bar. Being able to fix those details myself was an advantage over my experience with OneNote.&lt;/p&gt;
&lt;p&gt;Fit does not transfer plugin source files, so changes to that customized plugin still need a manual copy to the tablet. The interface-style snippet can sync when explicitly included, but enabling it and other settings may need attention on each device.&lt;/p&gt;
&lt;p&gt;Matching handwritten-only notes with later copies containing slides is handled by the
. The
and
distinguish the configuration from the completed archive move.&lt;/p&gt;</description></item><item><title>Finding Academic Papers for a Research Library</title><link>https://AaronScherf.github.io/blog/academic_journal_discovery/</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/academic_journal_discovery/</guid><description>&lt;p&gt;Starting a literature review often means finding candidate papers, deciding which ones matter, and tracking down the full text. I built the
to help organize those steps and add selected papers to a searchable research library.&lt;/p&gt;
&lt;p&gt;The tool starts with a researcher or a topic, then finds candidate papers through OpenAlex, a catalog of academic publications. A model on my computer turns my research description and candidate abstracts into text embeddings: numerical representations used to compare meaning. Comparing those representations gives each candidate a relevance score before any download begins. This scoring stage makes no paid AI calls.&lt;/p&gt;
&lt;p&gt;The library can also become a starting point for discovery. The tool follows citations forward to find newer papers that cite work I&amp;rsquo;ve already collected, scores those candidates, and proposes a reading list. I review that list before anything is downloaded.&lt;/p&gt;
&lt;p&gt;For full text, the tool tries several services for freely available copies in turn, so one service missing a paper does not end the search. It can also try my university&amp;rsquo;s library access where that is available. If those routes fail, the paper goes on a list for me to open through my usual library login. In an early trial, the automatic route obtained 3 of 19 papers; the rest needed a person to retrieve them.&lt;/p&gt;
&lt;p&gt;After the papers are available, separate conversion and search tools add their text to the research library. I can then search the papers alongside course materials, with access to more than their abstracts.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update, October 15, 2026:&lt;/em&gt; A later trial searched for papers about disaster resilience, response, and recovery. Fifteen candidates passed the relevance filter, and a review found all fifteen on topic. Seven downloaded automatically; the other eight were left for manual access. That is a useful distinction in practice: finding a relevant paper and obtaining its full text are separate steps.&lt;/p&gt;
&lt;p&gt;The
describes the search sources, results, and remaining work.&lt;/p&gt;</description></item><item><title>Audio Generator</title><link>https://AaronScherf.github.io/projects/academic-hub/audio_generator/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/audio_generator/</guid><description>&lt;p&gt;Audio Generator turns course notes into MP3 episodes for listening away from a screen. Mathematical notation needs an extra step: a speech engine can read words, but raw formula commands often sound unintelligible. The tool rewrites that notation into spoken language before synthesizing the recording.&lt;/p&gt;
&lt;p&gt;For an &lt;strong&gt;illustrative translation&lt;/strong&gt;, E[X] becomes &amp;ldquo;the expected value of X.&amp;rdquo; Denser equations need more than symbol replacement to preserve what the expression means. The pipeline sends math-heavy passages to a cloud model for that rewrite, while text cleanup and speech synthesis run locally. Plain prose can skip the model call.&lt;/p&gt;
&lt;p&gt;Notes are split into episodes targeting 10–20 minutes. The current code can divide oversized sections at paragraph boundaries; one indivisible paragraph may still exceed the target. Textbook inputs follow a different path and currently produce one MP3 per source file. Editing any part of a note regenerates all of that file&amp;rsquo;s episodes; unchanged sources can be skipped.&lt;/p&gt;
&lt;p&gt;The September 9, 2026 stress test used one equation-dense, roughly 122,000-character note. It took 3.8 minutes to prepare the narration and another 19.4 minutes to synthesize speech, producing nine files in 23.2 minutes overall. One episode was about 62 minutes long. That historical result predates the paragraph-splitting fix; a new listening test is needed to judge the revised output.&lt;/p&gt;
&lt;p&gt;The local model tried earlier took about six hours on the same difficult input. Cloud rewriting reduced the wait but introduced API cost. Its speed does not establish that every formula was explained correctly, so the saved narration text provides something to inspect before relying on the audio.&lt;/p&gt;
&lt;p&gt;
and
now exist, but an automatic weekly-summary-to-audio workflow is not established. Notes audio is stored with the larger course resources, outside tablet notes sync. The
describes current output and regeneration behavior.&lt;/p&gt;</description></item><item><title>The Resume Step That Became Faster When I Removed the AI</title><link>https://AaronScherf.github.io/blog/resume_parser_milestone/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/resume_parser_milestone/</guid><description>&lt;p&gt;The first structured import of my resume took over 90 minutes and still mixed up parts of the record. Replacing the model that organized the extracted text with ordinary parsing code brought that step down to about 1.5 seconds in the recorded run. The larger improvement was having explicit rules for where each fact belonged.&lt;/p&gt;
&lt;p&gt;The
is meant to help tailor applications without losing track of the experience behind them. It keeps a master record, uses a job description to guide the emphasis of a draft, and renders the result as a PDF. Before any of that can work, the master has to represent the source resume faithfully.&lt;/p&gt;
&lt;p&gt;An early version let the model write the master as free-form text. My source resume groups several roles under one employer, with a date range attached to the employer rather than every individual role. The model filled some missing date positions with locations. The result looked organized, but the meaning of a field had quietly changed.&lt;/p&gt;
&lt;p&gt;Giving every fact a named field helped. Employer, role, location, and dates no longer had to compete for the same space in a heading. Yet asking the local model to populate that structure introduced another set of problems: malformed output, joined lines that failed literal checks, and content that still landed in the wrong place. Fixing the formatting was not enough to establish that the record was right.&lt;/p&gt;
&lt;p&gt;The source had more regularity than the model-based approach was using. Section headings, date patterns, and the arrangement of roles supplied practical rules for a parser. The revised importer uses those rules to turn extracted PDF text into a structured master without a model call. That is the step behind the 1.5-second result; it is not the time to tailor and render a complete application, nor a benchmark across arbitrary resume layouts.&lt;/p&gt;
&lt;p&gt;Language generation still has a useful job later. A model can suggest which experience to emphasize and how to phrase a bullet for a particular opportunity. The surrounding code copies fixed fields from the master instead of asking the model to reproduce them. Bullet wording still needs review: preserving a date or a number does not establish that every implication of a rewritten sentence is faithful.&lt;/p&gt;
&lt;p&gt;This small project shares a concern with the academic tools: preserve a dependable source record, then make the interpretation easy to inspect. Here, the most effective change was recognizing which part of the job already had enough structure for code to do it directly.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Retrospective account prepared October 16, 2026, covering the September 9 milestone. The
and
document the sequence. The project page includes later developments.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>A Practice Problem Can Have the Right Answer and Still Miss the Point</title><link>https://AaronScherf.github.io/blog/practice_problem_checks/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/practice_problem_checks/</guid><description>&lt;p&gt;One early test of my practice-problem generator produced a flawed proof, then marked its own work valid. Another ignored the requested proof method. For a study tool, both matter: an exercise can reach the expected conclusion without helping me practice what I need to learn.&lt;/p&gt;
&lt;p&gt;The idea behind the
is appealing. Instead of asking for a generic exercise, it searches my course materials for examples of the topic, style, and difficulty, then drafts a new problem and a worked solution. The
supplies those examples. A second model call checks the result before it reaches me.&lt;/p&gt;
&lt;p&gt;That second call was less reassuring than it looked. In the linear algebra trial, the solution treated certain eigenspaces as perpendicular without having the assumptions that would justify it. It also relied on part of the conclusion it was supposed to establish. The checker accepted it anyway. Asking the same small model to read its answer again had not supplied the missing mathematical judgment.&lt;/p&gt;
&lt;p&gt;The method problem was easier to isolate. When a request specified a particular kind of proof, the generator kept imitating a different approach in the retrieved examples. Emphasizing the instruction more strongly did not reliably change that behavior. Splitting the verdict into two questions—whether the method matched and whether the mathematics was correct—at least made it possible to reject an answer that passed only one test.&lt;/p&gt;
&lt;p&gt;A small comparison then changed the outlook. A cloud-model experiment used the same prompt-building and checking functions on three topics, with three trials each. All nine passed the checks and a hand review found their mathematics sound. The local model had produced no accepted result in two trials of the constrained compactness request. These were different-sized samples on different topic sets, so they are evidence for a useful next experiment, rather than a general model ranking.&lt;/p&gt;
&lt;p&gt;Even those nine successes had qualifications. Some proofs used the requested method in a rather superficial way, and two probability problems were almost identical. Correctness, useful practice, and variety remain separate goals. The comparison was also a standalone experiment at this point, not evidence that the cloud route had already been integrated into the tool.&lt;/p&gt;
&lt;p&gt;A useful next trial would ask for several different exercises on the same skill, then check both their proofs and whether they demand meaningfully different reasoning. The near-duplicate probability problems show why a string of valid verdicts cannot answer that question.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Retrospective account prepared October 16, 2026, covering the September 6 milestone. The
preserves the trials and their limitations. Project links describe the tools as they have developed since.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Problem Corpus Extraction</title><link>https://AaronScherf.github.io/projects/academic-hub/problem_corpus/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/problem_corpus/</guid><description>&lt;p&gt;A useful practice collection needs more than a list of questions: it needs to say where each question came from and what kind of answer accompanies it. Problem Corpus Extraction gathers exercises from course materials and preserves that distinction. A student&amp;rsquo;s handwritten attempt stays labelled as an attempt.&lt;/p&gt;
&lt;p&gt;That choice came from inspecting the available materials. Some exercises had no answer; others had the student&amp;rsquo;s working beside them, with no basis for calling it an answer key. The stored records therefore mark accompanying text as a student attempt or leave the solution absent. The extractor does not turn an unverified derivation into a verified one.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;clearly illustrative card&lt;/strong&gt;, rather than an excerpt from private coursework:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Show that the sum of two even integers is even.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; Example worksheet, Question 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Accompanying work:&lt;/strong&gt; Student attempt, not checked.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The tool first detects numbered question boundaries, then asks a model to separate each statement from any accompanying solution and assign a short topic label. It stores the results by course and skips unchanged files on later runs. A failed extraction can be recorded without discarding other successful questions.&lt;/p&gt;
&lt;p&gt;A September 2026 math-camp run produced 196 records from eight problem-set files, with no reported extraction failures. Four slide files had no recognized numbered-question boundaries and were skipped. That is evidence of the run&amp;rsquo;s output, not an accuracy audit of all 196 statements or solutions.&lt;/p&gt;
&lt;p&gt;The current tool stops at creating the stored collection. Connecting it to
remains separate work; that generator currently retrieves its own examples. The
explains the output and provenance rules.&lt;/p&gt;</description></item><item><title>Problem Generation Sub-Agent</title><link>https://AaronScherf.github.io/projects/academic-hub/problem_generation/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/problem_generation/</guid><description>&lt;p&gt;Extra practice is most useful when it exercises the method I am trying to learn. Problem Generation uses examples from my course to draft a new question and worked solution, then checks two things separately: whether the solution is mathematically valid and whether it uses the requested technique. A correct proof by a different method may miss the point of the exercise.&lt;/p&gt;
&lt;p&gt;That distinction came from actual trials. A model asked for a proof using explicit error bounds, known as an epsilon-delta argument, kept using a different approach from its retrieved examples. Splitting the review into &amp;ldquo;requested technique&amp;rdquo; and &amp;ldquo;correctness&amp;rdquo; caught those mismatches, although the local model still failed to produce an accepted answer in two full trials. The check exposed a limitation; it did not make the model capable of solving the task.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;illustrative request&lt;/strong&gt; makes the difference easier to see:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Practice question:&lt;/strong&gt; Show that the sequence 1/n approaches zero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requested method:&lt;/strong&gt; Use the definition of convergence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution sketch:&lt;/strong&gt; For any positive error tolerance ε, choose an integer N greater than 1/ε. Whenever n is larger than N, the distance 1/n from zero is less than ε.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Checking the sketch means inspecting both the inequalities and the use of the definition, rather than accepting a graph or a bare statement of the limit. This is an invented demonstration, not a transcript of a generation trial.&lt;/p&gt;
&lt;h2 id="course-examples-guide-the-draft"&gt;Course examples guide the draft&lt;/h2&gt;
&lt;p&gt;The
finds problem-set passages for style and difficulty, plus textbook passages when available. The generator will not proceed without style examples, but can work without textbook passages. A weakly related style match can also pull the draft off topic; the closest available example is not necessarily a suitable one.&lt;/p&gt;
&lt;p&gt;Generation now defaults to Gemini, with API cost. In the September 6, 2026 comparison, nine trials across three constrained topics passed the model checks and recorded manual review, while the local alternative had struggled with the requested method. That narrow result motivated the default; it does not establish reliable mathematics across a course. Local generation remains optional.&lt;/p&gt;
&lt;p&gt;The second check is another model call, so it can repeat the first call&amp;rsquo;s mistakes. Earlier trials accepted flawed reasoning, including a circular argument. Rejected attempts can be revised within a bounded retry loop, but students still need to inspect the result.&lt;/p&gt;
&lt;p&gt;The separately extracted
is not yet connected to this generation loop. Current examples come through passage retrieval. The
documents that distinction and the generation options.&lt;/p&gt;</description></item><item><title>Video Lecture Notes</title><link>https://AaronScherf.github.io/projects/academic-hub/video_notes/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/video_notes/</guid><description>&lt;p&gt;A lecture series can contain several explanations of the same idea, spread across videos with unhelpful titles. Video Lecture Notes downloads the audio, transcribes it, and combines related lectures into study notes that can be searched alongside textbooks and handwritten notes. The combination step matters: it tries to turn a sequence of recordings into one explanation rather than leave a separate transcript for every file.&lt;/p&gt;
&lt;p&gt;One trial exposed a surprisingly basic limit. A three-video group produced a note reflecting only one video&amp;rsquo;s content because the local model was receiving only the end of the combined transcript. The shared model helper now requests enough context for the prompt. Rechecking showed better coverage and structure, although reliable links from each concept to the exact video moment remain unfinished.&lt;/p&gt;
&lt;h2 id="from-recording-to-study-note"&gt;From recording to study note&lt;/h2&gt;
&lt;p&gt;Audio download, speech transcription, and note synthesis run locally. The transcript retains timed segments; the synthesis model receives them when drafting the combined note. Registering that note with the
uses the existing classification and embedding API calls, so the full searchable workflow is not entirely offline.&lt;/p&gt;
&lt;p&gt;Grouping first uses playlist context and recognizable lecture-series titles. When that context is insufficient, it can compare transcript contents. This saves manual sorting, but shared vocabulary is not the same as belonging to the same lecture: the recorded trial grouped some differently numbered videos together and split another lecture&amp;rsquo;s two parts.&lt;/p&gt;
&lt;p&gt;For an &lt;strong&gt;illustrative output&lt;/strong&gt;, a note might organize &amp;ldquo;Sets and functions&amp;rdquo; into definitions, examples, and a comparison of related ideas. That describes the intended format, not an excerpt from the recorded run. To check an explanation, I still need the recordings and transcripts; a general video link at the end is less useful than a precise reference beside the claim.&lt;/p&gt;
&lt;h2 id="what-the-trial-covered"&gt;What the trial covered&lt;/h2&gt;
&lt;p&gt;The September 2026 record covers eight videos from a 105-video Math Camp playlist, across two passes. They produced five indexed notes. That establishes a working download-to-note path on a subset, not full-playlist coverage or complete retention of every explanation.&lt;/p&gt;
&lt;p&gt;Long groups remain expensive to synthesize on CPU hardware, and the remaining timestamp and grouping issues affect practical review. The
and linked status record distinguish the implemented workflow from those open checks.&lt;/p&gt;</description></item><item><title>Visualization Sub-Agent</title><link>https://AaronScherf.github.io/projects/academic-hub/visualization/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/visualization/</guid><description>&lt;p&gt;A formula for gradient descent describes repeated steps toward a minimum. A picture can show what those steps do: the prepared example in this tool traces a path across the contours of a bowl-shaped surface toward its center. I can zoom in and inspect the points alongside the written explanation, rather than infer the whole path from the update rule.&lt;/p&gt;
&lt;p&gt;The important distinction is how that picture is made. A small library covers familiar concepts with prepared Plotly charts, which run without a chart-generation model call. For other topics, the tool asks a model to write chart code using the question and retrieved course passages. That opens up more concepts, but introduces another judgment: a script can run successfully while illustrating the wrong idea.&lt;/p&gt;
&lt;h2 id="a-plot-beside-the-answer"&gt;A plot beside the answer&lt;/h2&gt;
&lt;p&gt;Visualization is optional within
. A report can combine the question, answer, source references, and interactive chart in one HTML file. If chart generation fails, the text report can still be produced. A recorded September 6, 2026 trial combined a
, its solution, and an embedded interactive plot in the same report.&lt;/p&gt;
&lt;p&gt;Generated charts currently use Gemini by default, with API cost. Local Ollama generation is an explicit alternative, but it timed out or produced broken scripts in the recorded comparison. Gemini succeeded twice on the same request. Two successes are useful evidence for that change of default, not a broad chart-accuracy evaluation.&lt;/p&gt;
&lt;h2 id="running-code-is-one-check"&gt;Running code is one check&lt;/h2&gt;
&lt;p&gt;The tool executes generated code with a time limit, a separate working directory, and an environment that excludes inherited API secrets. Execution errors can be returned to the model for a bounded retry. These measures limit particular failure modes; the process is not a comprehensive security sandbox.&lt;/p&gt;
&lt;p&gt;Past scripts that ran successfully can be offered as examples to later generation. They stay separate from the prepared templates because successful execution alone does not make an example mathematically correct. Whether that small example store improves results over sustained use remains unmeasured.&lt;/p&gt;
&lt;p&gt;Template matching also needs care: &amp;ldquo;convergence in probability&amp;rdquo; should not receive a generic series-convergence plot just because both contain the same word. Inspecting what the chart represents remains part of using it. The
explains templates, generation, and the execution limits.&lt;/p&gt;</description></item><item><title>Journal Discovery Pipeline</title><link>https://AaronScherf.github.io/projects/ai-research-assistant/journal_discovery/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/ai-research-assistant/journal_discovery/</guid><description>&lt;p&gt;A search for &amp;ldquo;disaster resilience&amp;rdquo; can return papers about infrastructure, recovery, public health, or business continuity. Journal Discovery lets me specify the angle I want, then compares that description with candidate abstracts before trying to download anything. The comparison runs locally, helping narrow a broad literature search without asking a language model to judge every paper.&lt;/p&gt;
&lt;p&gt;The October 15, 2026 trial makes the stages concrete: a disaster-research query retrieved 60 candidates, accepted 15 as relevant, and downloaded seven PDFs. Eight accepted papers still needed manual access. Finding a candidate, obtaining its full text, and reading or evaluating it are separate accomplishments; the pipeline handles the first two only within the available access routes.&lt;/p&gt;
&lt;h2 id="grow-a-library-around-a-question"&gt;Grow a library around a question&lt;/h2&gt;
&lt;p&gt;The starting point can be a topic or a researcher&amp;rsquo;s name. OpenAlex, an academic works catalog, supplies candidates and bibliographic information. A locally computed representation of each abstract is compared with my relevance description. When an abstract is unavailable, title-based scoring is a weaker signal; names and subject labels also need judgment.&lt;/p&gt;
&lt;p&gt;A citation-following mode offers another route: find newer papers citing material already in the library, review the proposed list, then fetch the selected papers. A citation alone never authorizes that download step or establishes relevance.&lt;/p&gt;
&lt;p&gt;The downloader tries open-access sources and the configured institutional route. If a publisher requires ordinary browser access, the paper goes onto a linked manual-download list. I use my library access in the browser and save the PDF; the tool does not solve publisher access challenges. Downloaded files are checked as PDFs and written through temporary files so an interrupted transfer does not leave a partial final file.&lt;/p&gt;
&lt;h2 id="discovery-is-upstream-of-reading"&gt;Discovery is upstream of reading&lt;/h2&gt;
&lt;p&gt;
separately converts and indexes the files. Reconciliation can recognize manually saved papers by their converted contents, rather than depending on filenames.&lt;/p&gt;
&lt;p&gt;Two maintenance operations have different authority. The older metadata audit can automatically reconcile mechanical folder and tag differences against its reference data, while flagging title or author mismatches. The newer classification mode uses stored OpenAlex Topics to propose folder and tag decisions for human acceptance. It is not an automatic reading of each paper&amp;rsquo;s argument.&lt;/p&gt;
&lt;p&gt;Direct inspection found the 15 accepted disaster papers on topic in that trial; a separate author query accepted six and downloaded one. Those are limited runs. Converted chart descriptions may also omit plotted values, so later search results still need checking against the PDF. The
and linked October status record give the current workflow and evidence.&lt;/p&gt;</description></item><item><title>Journal Article Transcription</title><link>https://AaronScherf.github.io/projects/ai-research-assistant/journal_article_transcription/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/ai-research-assistant/journal_article_transcription/</guid><description>&lt;p&gt;Finding a paper is only the start; later I need to locate the argument, method, or result inside it. Journal Article Transcription converts available article PDFs into searchable text with references back to their pages. A paper&amp;rsquo;s contents can then appear beside my research notes in a search result.&lt;/p&gt;
&lt;p&gt;The converter reuses the same machinery as the
. Clean digital text can be extracted locally; harder pages need transcription from their images. The current default prepares task cards for an agent working through my subscription, then validates submitted work before writing and indexing it. Search summaries and embeddings still use API calls, even on that transcription route.&lt;/p&gt;
&lt;p&gt;A separate metered-API route remains available. Pending agent work stays pending unless API fallback is explicitly requested; it is not silently sent for paid transcription. Very long documents are flagged for a person&amp;rsquo;s decision rather than automatically sent to the more expensive textbook converter.&lt;/p&gt;
&lt;p&gt;The older September 2026 trial converted and indexed three distinct papers. A fourth file was an exact duplicate, and a topic query found the relevant papers alongside the essay collection. Those results establish the earlier conversion-and-search path; they are not a new live trial of the subscription task-card workflow.&lt;/p&gt;
&lt;p&gt;Page references make checking easier, but converted prose cannot preserve everything a figure communicates. Equations, chart labels, and extraction errors still deserve comparison with the PDF.&lt;/p&gt;
&lt;p&gt;PDFs can come from
or files I add myself. Conversion registers their text with the
;
brings Word documents into that same collection. The
describes the task-card and API routes.&lt;/p&gt;</description></item><item><title>Research Notes Conversion</title><link>https://AaronScherf.github.io/projects/ai-research-assistant/research_notes_conversion/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/ai-research-assistant/research_notes_conversion/</guid><description>&lt;p&gt;An old research idea is easier to revisit when I can find it beside the papers that discuss the same topic. Research Notes Conversion brings Word essays and research notes into that search collection. It reads the document&amp;rsquo;s existing headings and formatting directly, so the conversion itself needs neither image recognition nor an AI model.&lt;/p&gt;
&lt;p&gt;Finding a passage also needs a useful locator. Word documents do not carry the PDF page markers the search tools originally expected. The indexer now uses headings where available and paragraph numbers as a fallback, so a short note can be cited without inventing a page number.&lt;/p&gt;
&lt;p&gt;For an &lt;strong&gt;illustrative conversion&lt;/strong&gt;, a heading such as &lt;strong&gt;Research idea&lt;/strong&gt; and its following paragraphs become a heading and ordinary text in the searchable version. A reference such as &lt;strong&gt;Paragraphs 4–6&lt;/strong&gt; tells me where to look within that note. This demonstrates the format, not an excerpt from my private writing.&lt;/p&gt;
&lt;p&gt;The original Word file stays in place. Conversion creates a Markdown copy, retaining headings, emphasis, and lists. Optional registration with the
adds a catalog description and a representation used for search, using API calls; conversion alone remains local.&lt;/p&gt;
&lt;p&gt;Reusing the course-material indexer exposed a useful mismatch: its original document labels tried to classify personal essays as textbooks or handwritten notes. Giving the research collection its own vocabulary fixed that distinction. Search also keeps each result&amp;rsquo;s collection identity, so two folders both named &amp;ldquo;notes&amp;rdquo; cannot be confused merely because their names match.&lt;/p&gt;
&lt;p&gt;The early validation used 19 essay and research-note files. After the classification and locator fixes, topic queries could search this collection and Academic Hub together, returning relevant material from the appropriate sources. That is a limited recorded trial, not evidence that every query will find everything relevant.&lt;/p&gt;
&lt;p&gt;The converter still works on selected local files. Direct Google Drive ingestion and a complete literature-review workflow are beyond its current interface.
adds papers to the same search infrastructure; the
documents conversion and indexing options.&lt;/p&gt;</description></item><item><title>Indexing and Querying Academic Hub</title><link>https://AaronScherf.github.io/blog/indexer_and_rag_progress/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/indexer_and_rag_progress/</guid><description>&lt;p&gt;Once books and notes have been converted to text, the next challenge is finding the right material and showing where an answer came from. The
organizes the documents;
searches their passages to help answer questions.&lt;/p&gt;
&lt;p&gt;The indexer creates a record for each document and groups related material by course. Search first narrows the collection to likely courses and documents, then ranks passages within them. A book can be relevant to a topic overall while only a few paragraphs contain the explanation a question needs.&lt;/p&gt;
&lt;p&gt;The answering tool also limits how many passages each file can contribute. That helps keep one highly relevant textbook from crowding lecture notes and other sources out of the material used to write the answer.&lt;/p&gt;
&lt;p&gt;In a recorded trial, it combined passages from two sources to answer a question about the spectral theorem, with references back to the material it used. When the collection does not support an answer, the system is intended to make that gap visible instead of dressing up a guess as a sourced result.&lt;/p&gt;
&lt;p&gt;An illustrative source reference is &lt;strong&gt;Section 7.4, pages 264–266&lt;/strong&gt;. That tells me which part of a source to open when I want to check an explanation or read further. A reference makes the reasoning easier to inspect; it does not guarantee that the answer interpreted the passage correctly.&lt;/p&gt;
&lt;p&gt;This was an early milestone in the project. Since then, the work has expanded to include tutoring hints, answer checking, and more links between related notes. The project pages describe the current behavior, testing, and limitations; this update records the initial step from converted documents to searchable, referenced answers.&lt;/p&gt;</description></item><item><title>RAG Analysis</title><link>https://AaronScherf.github.io/projects/academic-hub/rag_analysis/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/rag_analysis/</guid><description>&lt;p&gt;RAG Analysis answers a question using passages found in my textbooks and course notes, with references back to the material it used. That lets me inspect an explanation and continue reading at its source. The reference is a starting point for checking the answer, not a guarantee that the model interpreted it correctly.&lt;/p&gt;
&lt;p&gt;One useful choice is limiting how many passages a single file can contribute. Otherwise, a relevant textbook can fill the available space and crowd out lecture notes or another author&amp;rsquo;s explanation. Follow-up questions are also rewritten using the recent conversation, so &amp;ldquo;explain that differently&amp;rdquo; becomes a specific question the search tools can use.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;clearly illustrative example&lt;/strong&gt;, rather than a quotation from a recorded answer:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; What does the spectral theorem help explain about a real symmetric matrix?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Answer sketch:&lt;/strong&gt; It gives perpendicular directions along which the transformation acts by scaling, making its action easier to describe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reference format:&lt;/strong&gt; Section 7.4, pages 264–266.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The name RAG means &lt;strong&gt;retrieval-augmented generation&lt;/strong&gt;: find relevant passages first, then supply them to the model writing the answer. This project reuses the
for that search. An August 2026 trial answered a spectral-theorem question using two source files; a follow-up exchange also exercised the conversation-based search step. Those were specific trials, not a broad evaluation of answer accuracy.&lt;/p&gt;
&lt;h2 id="what-is-remembered"&gt;What is remembered&lt;/h2&gt;
&lt;p&gt;The running chat retains its conversation, but restarting the process does not restore the full dialogue. With a course selected, the tool can save answer, hint, draft-feedback, and verification events. Recent recorded learning gaps can inform later answers, and a session recap can turn the recorded discussion into a study note.&lt;/p&gt;
&lt;p&gt;Requesting a report also saves the answer as a note with its source references. Those references identify the passages in the
, so
can reopen that material and develop a short answer into fuller explanations and examples. The
offers another starting point when I already have a topic list. Saved notes and logs survive separately from the live chat history.&lt;/p&gt;
&lt;p&gt;A companion resolver answers question markers in handwritten notes. Its recorded seven-question run included four source-grounded answers and three marked as ungrounded. General answers remain leads to check, and retrieving a handful of passages is too narrow to establish comprehensive coverage of a week&amp;rsquo;s study.&lt;/p&gt;
&lt;p&gt;The
describes the current interfaces.
adds feedback on an attempt; the separate
manages an ongoing tutoring session.&lt;/p&gt;</description></item><item><title>Source Indexer</title><link>https://AaronScherf.github.io/projects/academic-hub/source_indexer/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/source_indexer/</guid><description>&lt;p&gt;A question about eigenvalues might belong with a textbook proof, a lecture explanation, or an exercise I have already attempted. Source Indexer searches converted course materials in two stages: first finding promising documents, then locating passages inside them. The result includes a heading, page, or paragraph reference so I can continue reading where the match came from.&lt;/p&gt;
&lt;p&gt;The search catalog has a record for each document, much like a library card with a brief description and subject labels. These descriptions help find material; the longer summaries I study are written by the answering and guide tools. A record&amp;rsquo;s identity comes from the source file&amp;rsquo;s contents rather than its filename, so renaming a PDF does not have to create a new document. Course-level records narrow the search before it compares individual files.&lt;/p&gt;
&lt;h2 id="give-other-study-tools-something-to-read"&gt;Give other study tools something to read&lt;/h2&gt;
&lt;p&gt;The
and
converters register their outputs with the indexer. Search uses document descriptions, subject labels, and numerical representations of meaning to rank related material, then returns excerpts from selected documents. PDF-derived passages can carry page references; Word-derived notes without page markers can use headings or numbered paragraphs instead.&lt;/p&gt;
&lt;p&gt;Several study tools use that foundation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
retrieves passages for a question and records their references with the answer.
can reopen the exact passages saved with a study summary to develop it further.&lt;/li&gt;
&lt;li&gt;
selects indexed sources for a topic list, then drafts and revises a longer guide.&lt;/li&gt;
&lt;li&gt;
retrieves evidence for explanations and connections, including the conditions a theorem needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The same search infrastructure supports
, keeping their collection identities distinct from course materials. Each downstream tool still has to interpret the passages it receives.&lt;/p&gt;
&lt;h2 id="similar-subjects-are-not-always-duplicate-notes"&gt;Similar subjects are not always duplicate notes&lt;/h2&gt;
&lt;p&gt;A lecture may exist as handwriting alone and as a later version with slides pasted beside the same handwriting. Searching both can crowd out other useful sources. Whole-document similarity was too broad to distinguish these pairs from different lectures on the same subject. The subset linker instead compares short word sequences from the handwritten portions, then hides the smaller version when its fuller counterpart survives the search. Both remain accessible.&lt;/p&gt;
&lt;p&gt;Links across different years of a course are another feature. The tool reuses existing document comparisons to identify related material, with uncertain matches held for review. That supports revisiting an older explanation without claiming every note has already been matched correctly.&lt;/p&gt;
&lt;p&gt;An early August 2026 checkpoint recorded 30 healthy document cards in one course, with 14 subject labels. Those are historical catalog checks, not current totals or a measure of search accuracy. Dense proofs and narrative notes can still need different passage boundaries.
can report missing or stale outputs, but its available repair is narrowly scoped rather than a general automatic cleanup. The
describes the catalog, search, and linking behavior.&lt;/p&gt;</description></item><item><title>Notes Post-Processing</title><link>https://AaronScherf.github.io/projects/academic-hub/postprocess_notes/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/postprocess_notes/</guid><description>&lt;p&gt;A square-root sign once became the letter p in my extracted notes. The text still looked printable and ordinary, so the initial checks let it through. Notes Post-Processing was built to catch that kind of plausible-looking error after transcription, then compare it with the original page before making a correction.&lt;/p&gt;
&lt;p&gt;Context on both sides of a symbol mattered. Looking only at the text before the corrupted character missed evidence that appeared afterward; a second local model could use that surrounding context to judge which positions deserved attention. The models flag candidates rather than deciding what the source must have said.&lt;/p&gt;
&lt;p&gt;The recorded motivating run repaired that square-root error on page 6 and left nine other flagged candidates unchanged. The notation below illustrates the difference:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extracted text&lt;/th&gt;
&lt;th&gt;Corrected reading&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p(h² + k²)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;√(h² + k²)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The tool first identifies suspicious text using structural checks and local language-model scores. Surviving candidates go to an image-based comparison with the PDF page. It records whether the page was changed, left alone, or could not be verified.&lt;/p&gt;
&lt;p&gt;Testing across more notes exposed another problem: legitimate mathematical language can look unusual to a general language model. Joined words from an upstream spacing error also produced many false alarms. Fixing the spacing and tuning the checks reduced unnecessary flags, but did not eliminate them.&lt;/p&gt;
&lt;p&gt;False positives consume review time and image-checking calls. Comparing with an image supplies additional evidence; the model can still misread that evidence or make a bad change. Corrected material therefore needs spot checks rather than being treated as automatically clean.&lt;/p&gt;
&lt;p&gt;This tool follows
and helps improve material used by the
. The
describes the reproduced error and broader precision limits.&lt;/p&gt;</description></item><item><title>Notes Transcription Pipeline</title><link>https://AaronScherf.github.io/projects/academic-hub/notes_transcription/</link><pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/notes_transcription/</guid><description>&lt;p&gt;A question scribbled beside a lecture slide is easy to lose in a folder of drawings. Notes Transcription turns handwritten canvases and short course PDFs into searchable text, keeping references to the original material. It also separates pasted slides from handwriting, so later study tools can tell which explanation came from the lecturer and which note I added.&lt;/p&gt;
&lt;p&gt;Typed PDFs need care too. A small raised character can carry the difference between R² and R2, yet ordinary text extraction may flatten them into the same line. The pipeline uses character size and vertical position to recover exponents and subscripts locally before deciding whether a page needs AI transcription. That preserves useful structure without paying a model to reread every clean page.&lt;/p&gt;
&lt;p&gt;Once the output is registered with the
, its passages can be found alongside textbook material. That is what lets the
draw on a handwritten explanation, or
cite course notes behind a proposed connection. Transcription prepares the material those tools read.&lt;/p&gt;
&lt;h2 id="choose-how-much-of-the-source-needs-rereading"&gt;Choose how much of the source needs rereading&lt;/h2&gt;
&lt;p&gt;The PDF path uses three levels of work. Clean digital text can be extracted locally. If only a few pages look defective, those pages receive image-based repair with neighboring text for context. Handwriting, difficult exports, or documents with widespread defects need fuller transcription. Some note-taking exports can omit entire equation regions from their text layer, so an apparently clean extraction is insufficient evidence for trusting them.&lt;/p&gt;
&lt;p&gt;The recorded August 2026 comparison checked recovered exponents and subscripts across 13 pages from two documents against existing transcriptions. In one 43-page problem set, the local improvements reduced the detected defect rate from 63% to 5%, leaving two pages for repair. Those results concern the checked notation and routing decisions, not the accuracy of every word in the collection.&lt;/p&gt;
&lt;h2 id="drawings-and-pdfs-take-different-paths"&gt;Drawings and PDFs take different paths&lt;/h2&gt;
&lt;p&gt;Excalidraw saves its SVG images automatically. The canvas path cuts a tall drawing at whitespace gaps, transcribes the pieces with some preceding context, and produces both a raw transcript and an expanded note for search. Expansion adds prose and can introduce interpretation; the raw version and source drawing remain important for checking it. Handwritten questions can be marked for a separate answering tool.&lt;/p&gt;
&lt;p&gt;The current command-line workflow can prepare page images and task cards for a subscription agent, then validate the submitted cards before writing the usual outputs. This is a manual handoff. The metered API path is also available, and search indexing has its own API calls; running the scripts locally does not mean all processing stays on the device.&lt;/p&gt;
&lt;p&gt;Supported sources here are PDFs and Excalidraw scenes with exported images. Word-produced PDFs fit the PDF route; native Word documents are a separate conversion task. Most importantly, plausible-looking errors can survive transcription.
checks suspicious text against source images afterward, while the
explains the available routes.&lt;/p&gt;</description></item><item><title>Converting Academic Resources to Markdown</title><link>https://AaronScherf.github.io/blog/academic_resource_progress/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/academic_resource_progress/</guid><description>&lt;p&gt;The
turn books and class documents into text that can be searched alongside my notes. Textbooks and handwritten or mixed-format documents need different approaches, so the project now has a tool for each.&lt;/p&gt;
&lt;p&gt;For textbooks, the converter now uses chapter boundaries where possible and records printed page numbers as well as PDF pages. In a four-book check, it avoided duplicate section markers and recovered printed page numbers on 96–98% of pages. A separate pass added descriptions to 764 of 793 candidate figures across five books, skipping the ones judged decorative.&lt;/p&gt;
&lt;p&gt;Those page references help me compare a passage with the original textbook, even when the PDF&amp;rsquo;s page count differs from the numbers printed on the pages. Figure descriptions also make some of the information in diagrams available as searchable text. Both are useful when I need to return to a source and check what it actually says.&lt;/p&gt;
&lt;p&gt;Shorter documents such as exams and handwritten notes need a different path. The
checks whether ordinary text extraction is sufficient and uses AI to transcribe the harder pages. The work also uncovered problems that a plain text dump can hide: dropped spaces, lost superscripts, and a square-root symbol read as the letter &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Some notation could be recovered by looking at the page layout more closely. The extractor uses character size and vertical position to reconstruct superscripts and subscripts. That lets it recover some mathematical structure locally before paying for AI transcription.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update, October 15, 2026:&lt;/em&gt; A later
run repaired that particular square-root error after comparing it with the source page image. That closes the specific example; other extracted text still needs review.&lt;/p&gt;
&lt;p&gt;The
records the checks behind these results, their limits, and the ongoing work.&lt;/p&gt;</description></item><item><title>Managing this site with HugoBlox and Claude</title><link>https://AaronScherf.github.io/blog/site_management/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/site_management/</guid><description>&lt;p&gt;Each page on this site starts as a text file. &lt;strong&gt;Hugo&lt;/strong&gt; turns those files into web pages, and &lt;strong&gt;HugoBlox&lt;/strong&gt; supplies the &amp;ldquo;Academic CV&amp;rdquo; template for their appearance. I write in Markdown, a simple format for marking headings, links, and other formatting within the text.&lt;/p&gt;
&lt;p&gt;Lately I&amp;rsquo;ve been doing much of the editing with &lt;strong&gt;Claude Code&lt;/strong&gt;, a coding assistant that works directly with the site&amp;rsquo;s files. It can add a project page, change the navigation, or adjust a layout. I can inspect the exact changes before accepting them.&lt;/p&gt;
&lt;p&gt;The template arrives through Hugo modules, reusable packages loaded when the site builds. Small local additions, such as support for GitHub buttons, can extend it without copying the whole theme into this repository. That gives the assistant a useful boundary: the site&amp;rsquo;s content and customizations live here, while the shared template stays in its own packages.&lt;/p&gt;
&lt;p&gt;Recent edits included bringing the main sections together on one scrolling homepage and adding pages for
and
, two tools in Academic Hub. I also left the template&amp;rsquo;s unused example pages unpublished, so they are available if I want to return to them.&lt;/p&gt;
&lt;p&gt;When I&amp;rsquo;m ready to publish, I send the reviewed changes to GitHub, where the site&amp;rsquo;s source files are stored. An automated workflow rebuilds the pages and updates the public site. The saved history lets me see what changed and revisit an earlier version if needed.&lt;/p&gt;
&lt;p&gt;That suits how I want to maintain a personal site: edit the content, review it, and let the template and publishing tools handle most of the web-development work.&lt;/p&gt;</description></item><item><title>Marker PDF Conversion</title><link>https://AaronScherf.github.io/projects/academic-hub/marker_conversion/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/projects/academic-hub/marker_conversion/</guid><description>&lt;p&gt;Finding a word in a textbook PDF does not necessarily find the argument around an equation or the information inside a diagram. Marker PDF Conversion prepares those books for the study tools in Academic Hub: searchable text, mathematical notation, extracted figures, and references back to the source pages. A separate description pass makes figures easier to find through text search too.&lt;/p&gt;
&lt;p&gt;Where a long book is divided matters. A fixed page limit can cut through a table or a proof, so the converter looks for chapter boundaries in the PDF outline or printed contents first. It also distinguishes the PDF&amp;rsquo;s page position from the page number printed in the book. That lets a reference such as &amp;ldquo;see page 157&amp;rdquo; remain useful even when a preface has shifted the file&amp;rsquo;s numbering.&lt;/p&gt;
&lt;p&gt;The
makes the converted material available as referenced passages. A
can then select a textbook section for an explanation, while a
can cite evidence for the conditions linking two ideas. Preserving the book&amp;rsquo;s structure gives those later tools something specific to read and cite.&lt;/p&gt;
&lt;h2 id="rent-the-hardware-for-the-batch"&gt;Rent the hardware for the batch&lt;/h2&gt;
&lt;p&gt;Marker is an open-source tool for recognizing text and page layout. Here it runs on a temporary graphics-processing machine in Google Cloud, which provides the computing capacity needed for dense books. The model loads once for a batch rather than starting again for every title. Converted files return locally before the temporary machine and disk are removed; keeping an idle disk would continue to cost money.&lt;/p&gt;
&lt;p&gt;This is the heavier conversion route. Short documents and handwriting use
instead. The inputs are source PDFs I am authorized to process for my own study; the website does not distribute those books.&lt;/p&gt;
&lt;h2 id="keep-the-source-available-for-comparison"&gt;Keep the source available for comparison&lt;/h2&gt;
&lt;p&gt;In the recorded four-book check, printed-page labels were recovered for roughly 96-98% of pages, with no duplicate internal anchors. That is encouraging coverage across those layouts, with gaps still requiring the PDF page reference. It does not establish that every formula or cross-reference was transcribed correctly.&lt;/p&gt;
&lt;p&gt;The separate figure pass described 764 of 793 candidate images across five books, skipping 29 as decorative. Its derived text leaves the original conversion intact. Descriptions make a chart discoverable but cannot replace examining its axes, values, or visual argument in the source.&lt;/p&gt;
&lt;p&gt;Before spending GPU time, duplicate checks can reuse an existing conversion. Less certain matches remain subject to review. Recovery from memory failures also has a documented retry and escalation policy, tested separately from the content checks; those tests do not establish reliability across every cloud interruption.&lt;/p&gt;
&lt;p&gt;The
covers operation and costs. The page&amp;rsquo;s linked status records document the conversion, chapter, and figure trials.&lt;/p&gt;</description></item><item><title>Introducing Academic Hub</title><link>https://AaronScherf.github.io/blog/academic_hub/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/blog/academic_hub/</guid><description>&lt;p&gt;Like any knowledge intensive task, taking a graduate course combines multiple sources of information in various formats: textbooks, lecture notes, presentation slides, problem sets, Youtube video explainers, old exams, and relevant research papers. The standard approach to combining these materials is haphazard, with relevant info spread across each category and only loosely connected by topic&amp;ndash;any given section of a syllabus might connect to half a dozen textbook chapters, meaning students spend a lot of time just finding the right source. If a topic depends on pre-requisite knowledge which the student is unfamiliar with (a common issue in my PhD program so far), looking back through foundational textbooks for the right content takes longer than learning the idea. When it comes time for exam review, notes are only loosely connected to problem sets and lecture slides, and none of these are linked to practice problems or prior exams. In short, students spend far too much time categorizing and retrieving relevant information, distracting from higher value learning processes, shifting pedagogical focus from the actual ideas to the mechanics of how different authors organize and refer to those ideas.&lt;/p&gt;
&lt;p&gt;My solution for my own coursework was the
. If all my materials could be converted to the same plain-text format, then organizing them into a searchable database with relevant categories and connections would be an easy task for any language model. As I developed methods to convert a larger variety of information sources, the potential applications for learning became more and more useful: from
that automatically answers my handwritten sidebar questions from lecture to more relevant study guides and
,
tailored to the specific topics which came up often in past exams, and even multi-round
that can help break down complex problems without revealing solutions.&lt;/p&gt;
&lt;p&gt;Most of these applications could be replicated with a standard online AI model, but the default agents lacked the context of my specific courses. Retrieval-augmented generation (RAG) models that can train on or incorporate specific files to produce more relevant answers are available, but dropping whole PDFs into a system like a Gemini Notebook is very token expensive, they waste most of their compute just processing inputs. By front-loading the transcription and indexing process, then standardizing it across my courses, I can run any type of LLM agent (subscription based, local, or API) and get highly relevant results based on my exact materials, with citations to source context, at a fraction of the cost. The more source materials I included, the more summaries and problem sets I generated, the better the collection becomes; by the end of the semester, I could just say &amp;ldquo;looking back at my previous notes and homeworks, help me review this section&amp;rdquo; and I could create much more useful review materials with far less effort.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://AaronScherf.github.io/blog/academic_hub/academic-hub-workflow.png"
alt="Textbooks, notes, and slides become searchable text; a question retrieves source passages that support separate answer and study-aid drafts for review."&gt;&lt;figcaption&gt;
&lt;p&gt;Converted materials provide a shared source collection for several study tools; their outputs still need review.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The Academic Hub pipeline is completely reproducible too. Each step is modular, so when I found that my initial transcription approach (using Gemini API credits) was becoming too costly, I was able to switch out specific steps with a subscription-based model (or a local GPU-based model). Applying the entire range of tools to a new course is as simple as dropping in a folder of old notes, slides, and problem sets. Courses can build on each other, so if a topic from Microeconomics I comes up again in Micro II, all of my previous notes can be used to inform the new questions and help me review. Once large PDFs are converted to markdown text files, the storage requirements are minimal&amp;ndash;I can
to my tablet via GitHub and Obsidian.&lt;/p&gt;
&lt;p&gt;While I built it to help study for courses, the processes involved can be applied to any type of knowledge base, from research papers to government reports. I&amp;rsquo;ve already started expanding the pipeline to academic research, to automate literature reviews and create a structured database of international development interventions and outcomes. I&amp;rsquo;m eager to expand the features for both and start applying them at a larger scale, including user testing to see if the tools are accessible to those without extensive backgrounds in computing, AI, or knowledge management.&lt;/p&gt;
&lt;p&gt;If you have an interesting use case you&amp;rsquo;d like to try, or just want to discuss the development process, please reach out to me by email at
or
. All of the code backing up the Academic Hub is available
as part of my larger AI-Sandbox project and each subproject has more details in the
. I welcome any questions or feedback as I continue to develop this project!&lt;/p&gt;</description></item><item><title>Experience</title><link>https://AaronScherf.github.io/experience/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://AaronScherf.github.io/experience/</guid><description/></item></channel></rss>