<story><title>Borb – A Python library to read, write, and edit PDF files</title><url>https://borbpdf.com/</url></story><parent_chain><item><author>Syzygies</author><text>I am a math professor with a scanned exam grading workflow that I hacked together as Bash scripts using various open source command line tools. I feed all the exams through a sheet-fed scanner, decode bar codes to identify problems and students, add radio buttons for entering and tracking scores (0-6 per problem), and create PDF &amp;quot;books&amp;quot; per problem for grading and annotating.&lt;p&gt;Having grad students help grade paper is a consistency nightmare: It&amp;#x27;s look once, never look back. Instead, after each of several provisional passes I recreate the PDF &amp;quot;book&amp;quot; for that problem, with a chapter for each score, and students randomized within each chapter. In the same spirit as &amp;quot;checking your work lets you work three times faster&amp;quot; this is actually both more consistent and faster that a single pass over paper. Almost all of my attention is on the math, which I&amp;#x27;m good at, rather than locating problems and finding again the ones I know I misgraded, which I&amp;#x27;m not good at.&lt;p&gt;Then each student&amp;#x27;s exam needs to be extracted from these problem PDFs, scores recorded, and annotations frozen.&lt;p&gt;There are cloud services for grading. They&amp;#x27;re hopelessly primitive, with cloud lag. Like a gamer, I used to reject wireless mice because of the lag. I reject these services. I can grade everything myself faster than using a team of grad students, with the right local tools.&lt;p&gt;The PDF format is a morass. My hats off to anyone who will work with it. There are many evolutionary layers and no formal specification or verification; one tests a PDF by seeing if most programs accept it.&lt;p&gt;It&amp;#x27;s time for me to rewrite my grading system in a modern scripting language, so others could use it. I prefer Ruby, but that&amp;#x27;s mainly to stave off boredom when I&amp;#x27;m not using Haskell. I can use Python. This would permit a more robust workflow, such as adding late exams in mid-grading without losing grading in progress.&lt;p&gt;I can&amp;#x27;t find documentation for Borb, to check off the list of features I&amp;#x27;d need. I suspect from this being a one-person project that I might need to continue to patch together external tools.</text></item></parent_chain><comment><author>Svetlitski</author><text>You should consider looking into Gradescope (Gradescope.com). As a former TA, I can attest to it making grading &lt;i&gt;much&lt;/i&gt; more pleasant and streamlined than it would be otherwise.</text></comment>
<story><title>Borb – A Python library to read, write, and edit PDF files</title><url>https://borbpdf.com/</url></story><parent_chain><item><author>Syzygies</author><text>I am a math professor with a scanned exam grading workflow that I hacked together as Bash scripts using various open source command line tools. I feed all the exams through a sheet-fed scanner, decode bar codes to identify problems and students, add radio buttons for entering and tracking scores (0-6 per problem), and create PDF &amp;quot;books&amp;quot; per problem for grading and annotating.&lt;p&gt;Having grad students help grade paper is a consistency nightmare: It&amp;#x27;s look once, never look back. Instead, after each of several provisional passes I recreate the PDF &amp;quot;book&amp;quot; for that problem, with a chapter for each score, and students randomized within each chapter. In the same spirit as &amp;quot;checking your work lets you work three times faster&amp;quot; this is actually both more consistent and faster that a single pass over paper. Almost all of my attention is on the math, which I&amp;#x27;m good at, rather than locating problems and finding again the ones I know I misgraded, which I&amp;#x27;m not good at.&lt;p&gt;Then each student&amp;#x27;s exam needs to be extracted from these problem PDFs, scores recorded, and annotations frozen.&lt;p&gt;There are cloud services for grading. They&amp;#x27;re hopelessly primitive, with cloud lag. Like a gamer, I used to reject wireless mice because of the lag. I reject these services. I can grade everything myself faster than using a team of grad students, with the right local tools.&lt;p&gt;The PDF format is a morass. My hats off to anyone who will work with it. There are many evolutionary layers and no formal specification or verification; one tests a PDF by seeing if most programs accept it.&lt;p&gt;It&amp;#x27;s time for me to rewrite my grading system in a modern scripting language, so others could use it. I prefer Ruby, but that&amp;#x27;s mainly to stave off boredom when I&amp;#x27;m not using Haskell. I can use Python. This would permit a more robust workflow, such as adding late exams in mid-grading without losing grading in progress.&lt;p&gt;I can&amp;#x27;t find documentation for Borb, to check off the list of features I&amp;#x27;d need. I suspect from this being a one-person project that I might need to continue to patch together external tools.</text></item></parent_chain><comment><author>Evidlo</author><text>&amp;gt; There are many evolutionary layers and no formal specification or verification;&lt;p&gt;There is a specification, but it&amp;#x27;s very complicated.</text></comment>