<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Duc Mon</title>
    <description>The latest articles on DEV Community by Duc Mon (@ducminh25).</description>
    <link>https://dev.to/ducminh25</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4228105%2Fffc9b12d-2985-4032-af0a-4918bc38bf29.jpg</url>
      <title>DEV Community: Duc Mon</title>
      <link>https://dev.to/ducminh25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ducminh25"/>
    <language>en</language>
    <item>
      <title>I built JudgeDesk, a modern offline judge for competitive programming, because Themis was showing its age</title>
      <dc:creator>Duc Mon</dc:creator>
      <pubDate>Thu, 05 Nov 2026 09:37:19 +0000</pubDate>
      <link>https://dev.to/ducminh25/i-built-judgedesk-a-modern-offline-judge-for-competitive-programming-because-themis-was-showing-1lga</link>
      <guid>https://dev.to/ducminh25/i-built-judgedesk-a-modern-offline-judge-for-competitive-programming-because-themis-was-showing-1lga</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; &lt;strong&gt;JudgeDesk&lt;/strong&gt; is a free desktop app that grades competitive programming submissions &lt;strong&gt;fully offline&lt;/strong&gt;, on &lt;strong&gt;Windows, macOS and Linux&lt;/strong&gt;. It opens your existing Themis (an official offline judging software from Vietnam's Ministry of Education and Training) contest folders, runs every submission inside an OS-level sandbox, and gives you verdicts you can trust, even when a solution runs right up against the time limit.&lt;/p&gt;

&lt;p&gt;⭐ If this sounds useful, a star on the release repo means a lot: &lt;strong&gt;&lt;a href="https://github.com/ducminh25/judgedesk" rel="noopener noreferrer"&gt;github.com/ducminh25/judgedesk&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ducminh25" rel="noopener noreferrer"&gt;
        ducminh25
      &lt;/a&gt; / &lt;a href="https://github.com/ducminh25/judgedesk" rel="noopener noreferrer"&gt;
        judgedesk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Trang tải xuống, hướng dẫn cài đặt và hỗ trợ chính thức cho JudgeDesk.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;JudgeDesk&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;JudgeDesk là phần mềm desktop chấm bài lập trình cục bộ (offline) cho kỳ thi, đội tuyển và lớp học Tin học, chạy gốc (native) trên &lt;strong&gt;Windows 10/11 x64&lt;/strong&gt;, &lt;strong&gt;macOS Apple Silicon (&lt;code&gt;arm64&lt;/code&gt;, macOS 11+)&lt;/strong&gt; và &lt;strong&gt;Linux 64-bit (&lt;code&gt;x86_64&lt;/code&gt; / &lt;code&gt;amd64&lt;/code&gt; — từ Ubuntu 22.04 LTS, 24.04 LTS, 26.04 LTS+ và các bản phân phối tương thích)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ứng dụng hoạt động hoàn toàn độc lập với mạng Internet trong lúc chấm bài, hỗ trợ bảng điểm trực tiếp theo thời gian thực, cấu hình nhóm test (Subtasks), chấm bài thi tương tác (Interactive), chấm điểm phân số chính xác tuyệt đối, nhận bài qua thư mục mạng LAN (&lt;code&gt;F8&lt;/code&gt; OSD), trung tâm thông báo chính thức có chữ ký số (Notification Center), đóng gói kỳ thi &lt;code&gt;.judgedesk&lt;/code&gt;, xuất bảng điểm Excel (&lt;code&gt;.xlsx&lt;/code&gt;), giao diện Sáng/Tối cùng hai ngôn ngữ Tiếng…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ducminh25/judgedesk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  A bit of context: judging code in Vietnam
&lt;/h2&gt;

&lt;p&gt;If you've studied or taught informatics in Vietnam, you've almost certainly used &lt;strong&gt;Themis&lt;/strong&gt;. For nearly two decades, it has been &lt;em&gt;the&lt;/em&gt; offline grader for school contests, provincial and national olympiad (HSG) selection rounds, and everyday classroom practice. I grew up with it, and it has served teachers and students well.&lt;/p&gt;

&lt;p&gt;But the world around it has changed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🪟 &lt;strong&gt;It is Windows-only.&lt;/strong&gt; More and more students and teachers use MacBooks, and many training clubs run Linux.&lt;/li&gt;
&lt;li&gt;🧰 &lt;strong&gt;The bundled toolchains are old.&lt;/strong&gt; The installer I examined shipped GCC 9.2 and a Java 7-era runtime. Modern C++ features and current JDKs mean extra manual setup.&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;Security depends on manual setup.&lt;/strong&gt; Themis protects test data with separate Windows accounts and folder permissions (ACLs) that the organizer has to configure correctly. If that step is skipped or misconfigured, a malicious submission has a lot of room to play.&lt;/li&gt;
&lt;li&gt;🧩 &lt;strong&gt;Modern problem formats are missing.&lt;/strong&gt; There's no support for interactive problems, and subtask dependencies need workarounds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So students usually end up doing one of two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Submit to an online judge&lt;/strong&gt; such as &lt;a href="https://oj.vnoi.info" rel="noopener noreferrer"&gt;VNOJ&lt;/a&gt;, which is great but needs an internet connection, a problem that's actually published there, and patience when the queue is busy during a contest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Judge locally&lt;/strong&gt; with an aging tool and hope the verdict is right.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted a third option: &lt;strong&gt;a fast, modern, trustworthy judge that lives on your own machine.&lt;/strong&gt; That became &lt;strong&gt;JudgeDesk&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem that bugged me most: "AC… TLE… AC?"
&lt;/h2&gt;

&lt;p&gt;Every competitive programmer knows this one. Your solution runs in ~950 ms with a 1-second limit. You judge it locally once: &lt;strong&gt;AC&lt;/strong&gt;. You judge it again: &lt;strong&gt;TLE&lt;/strong&gt;. Third time: &lt;strong&gt;AC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When verdicts flip like that, local judging stops being useful. You can't tell whether your solution is actually too slow or the grader is just noisy. That's a big deal for a teacher ranking 40 students in a mock exam.&lt;/p&gt;

&lt;p&gt;JudgeDesk was designed to be &lt;strong&gt;consistent at the edges&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accurate resource accounting.&lt;/strong&gt; Time and peak memory are measured per run with the operating system's own accounting, and every process the submission spawns is tracked and counted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No cold-start penalty.&lt;/strong&gt; The sandbox and compilers are &lt;strong&gt;pre-warmed in the background&lt;/strong&gt; when the app starts, so the first submission you judge isn't slowed down by a cold runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tested at the boundary on purpose.&lt;/strong&gt; The test suite includes boundary TLE and memory-limit fixtures that are &lt;strong&gt;run repeatedly&lt;/strong&gt; to catch flaky verdicts before a release ships.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I compared JudgeDesk against Themis on a corpus of &lt;strong&gt;1,060 test cases&lt;/strong&gt;, problem-level scores matched after scale conversion, and &lt;strong&gt;JudgeDesk gave noticeably more stable results on tests close to the time limit.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Of course, no local judge can make a slow laptop behave like a dedicated judging server. What JudgeDesk does is make sure that &lt;em&gt;the same code on the same machine gets the same verdict&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What JudgeDesk gives you
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🏁 Contest setup that respects what you already have
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Themis folder compatibility.&lt;/strong&gt; Point JudgeDesk at your existing &lt;code&gt;Tests/&lt;/code&gt; and &lt;code&gt;Contestants/&lt;/code&gt; folders and it just works. Your test bank doesn't need to be converted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag &amp;amp; drop.&lt;/strong&gt; Drop a whole contest folder onto the window, and JudgeDesk figures out which part holds the problems and which holds the contestants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-problem configuration:&lt;/strong&gt; stdin/stdout or file I/O, time limits, memory limits &lt;strong&gt;up to 1024 MB&lt;/strong&gt;, and compiler flags (Themis-compatible or modern C++17/C++20 presets).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subtasks with dependencies.&lt;/strong&gt; Group tests, give points per group, and make &lt;em&gt;Subtask 3 require Subtask 2&lt;/em&gt;. Circular dependencies are detected for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom checkers&lt;/strong&gt; in C++ (&lt;code&gt;testlib.h&lt;/code&gt;), Python, or a prebuilt binary, plus the classic Themis comparison modes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive problems&lt;/strong&gt; with interactors written in C++ (&lt;code&gt;testlib.h&lt;/code&gt;) or Python, on all three operating systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌐 Six languages out of the box, plus your own
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;C++, C, Python 3, Pascal (Free Pascal), Java and Scratch&lt;/strong&gt; (&lt;code&gt;.sb3&lt;/code&gt;, &lt;code&gt;.sb2&lt;/code&gt;, &lt;code&gt;.sb&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Yes, &lt;strong&gt;Scratch&lt;/strong&gt;. Youth contests ("Tin học trẻ") use it a lot, so JudgeDesk runs Scratch projects headlessly: &lt;code&gt;ask and wait&lt;/code&gt; reads from the input, and &lt;code&gt;say&lt;/code&gt;/&lt;code&gt;think&lt;/code&gt; writes the output. Each test case takes only a few milliseconds.&lt;/p&gt;

&lt;p&gt;Need Rust, Go, Kotlin, or C#? Since v1.6.2 you can &lt;strong&gt;define custom languages&lt;/strong&gt; with your own compile/run command templates and time/memory multipliers. JudgeDesk test-runs them inside the sandbox before using them.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Fast grading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Precompiled &lt;code&gt;&amp;lt;bits/stdc++.h&amp;gt;&lt;/code&gt;&lt;/strong&gt;, cached automatically for every detected C++ compiler. A typical C++ compile goes from &lt;strong&gt;~3.6 s to ~0.23 s&lt;/strong&gt; (about &lt;strong&gt;16×&lt;/strong&gt; faster). That really adds up when you grade 40 students × 5 problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live scoreboard.&lt;/strong&gt; Watch verdicts, run times and memory usage stream in test by test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Full edition is truly offline.&lt;/strong&gt; The installer bundles GCC 14, Python 3.12, Free Pascal 3.2.2, OpenJDK 21 and the Scratch runtime. Install once in the computer lab and you're done, with no internet required. &lt;em&gt;(On macOS, C/C++ uses Apple Clang from the Xcode Command Line Tools.)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧮 Scores that add up exactly
&lt;/h3&gt;

&lt;p&gt;Points are computed with &lt;strong&gt;exact fractions&lt;/strong&gt; instead of floating-point numbers. &lt;code&gt;1/3 + 2/3&lt;/code&gt; is exactly &lt;code&gt;1&lt;/code&gt;, and a score of &lt;code&gt;3.5&lt;/code&gt; never shows up as &lt;code&gt;3.4999999&lt;/code&gt;. This matters when partial scores decide rankings and someone asks &lt;em&gt;"why am I 0.0001 behind?"&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🖥️ Running a real contest
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LAN submission mode (&lt;code&gt;F8&lt;/code&gt;).&lt;/strong&gt; JudgeDesk watches a shared network folder. Students save their code there, and it gets queued, graded and added to the scoreboard automatically. It follows the Themis submission naming convention, so existing web submission front-ends can keep working.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single-file contest archive (&lt;code&gt;.judgedesk&lt;/code&gt;).&lt;/strong&gt; Problems, submissions, configuration and every result are saved in one portable file. You can move it to another machine or keep it for the record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excel export (&lt;code&gt;F12&lt;/code&gt;).&lt;/strong&gt; JudgeDesk creates a real &lt;code&gt;.xlsx&lt;/code&gt; file with a summary sheet and a per-test detail sheet. &lt;strong&gt;Microsoft Excel doesn't need to be installed.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A teacher-friendly UI.&lt;/strong&gt; Vietnamese and English, light and dark themes, &lt;code&gt;F1&lt;/code&gt;–&lt;code&gt;F12&lt;/code&gt; shortcuts, and an offline help center (&lt;code&gt;F1&lt;/code&gt;). Error messages explain &lt;em&gt;what happened, why, and what to do next&lt;/em&gt; instead of dumping a stack trace.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security: student code is untrusted code
&lt;/h2&gt;

&lt;p&gt;A judge runs code written by other people on &lt;em&gt;your&lt;/em&gt; computer, which often holds the test data and answers. JudgeDesk treats every submission as hostile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every run happens in an OS-level sandbox&lt;/strong&gt;, using each platform's built-in isolation (AppContainer on Windows, Seatbelt on macOS, Bubblewrap with cgroups and seccomp on Linux). It works out of the box, with &lt;strong&gt;no extra user accounts or folder permissions to set up.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No network access.&lt;/strong&gt; Submissions can't phone home, download anything, or reach other machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filesystem isolation.&lt;/strong&gt; A submission can't read the expected outputs or another student's code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard resource limits.&lt;/strong&gt; Memory caps, process-count limits (goodbye, fork bombs), output limits, a compile timeout and a compiled-binary size limit. When time runs out, the whole process tree is killed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail closed, never silently.&lt;/strong&gt; If the configured compiler is missing or broken, JudgeDesk &lt;strong&gt;stops and tells you&lt;/strong&gt;. It never quietly switches to another compiler that could produce different results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe archives.&lt;/strong&gt; Contest files are checked for path traversal, symlinks and zip bombs before anything is extracted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A verified supply chain.&lt;/strong&gt; Downloadable compiler packages, app updates and in-app announcements are all &lt;strong&gt;cryptographically signed and hash-verified&lt;/strong&gt; before they're used.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Themis vs. JudgeDesk at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Themis&lt;/th&gt;
&lt;th&gt;JudgeDesk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Platforms&lt;/td&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;Windows 10/11, macOS (Apple Silicon), Linux x86_64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundled toolchains&lt;/td&gt;
&lt;td&gt;Older (e.g. GCC 9.2)&lt;/td&gt;
&lt;td&gt;GCC 14, Python 3.12, FPC 3.2.2, JDK 21, Scratch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Languages&lt;/td&gt;
&lt;td&gt;C/C++, Pascal, Java, Python&lt;/td&gt;
&lt;td&gt;C++, C, Python, Pascal, Java, &lt;strong&gt;Scratch&lt;/strong&gt;, plus custom languages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Submission isolation&lt;/td&gt;
&lt;td&gt;Windows accounts + ACLs (manual setup)&lt;/td&gt;
&lt;td&gt;Automatic per-run OS sandbox, zero network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interactive problems&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subtasks with dependencies&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scoring arithmetic&lt;/td&gt;
&lt;td&gt;Floating-point coefficient&lt;/td&gt;
&lt;td&gt;Exact fractions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excel export&lt;/td&gt;
&lt;td&gt;Requires Microsoft Excel&lt;/td&gt;
&lt;td&gt;Native &lt;code&gt;.xlsx&lt;/code&gt;, no Excel needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing Themis contest folders&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Themis paved the way for local judging in Vietnam, and JudgeDesk would not exist without it. This table only shows where a modern tool can go further.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Grab the latest installer from &lt;strong&gt;&lt;a href="https://github.com/ducminh25/judgedesk/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;&lt;/strong&gt;. Each platform has two editions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full&lt;/strong&gt;: everything bundled, works offline right away. &lt;em&gt;Recommended for computer labs and exam rooms.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core&lt;/strong&gt;: a lightweight installer that detects compilers already on your machine, or downloads signed packages from inside the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;
  🪟 Windows 10/11 (x64)
  &lt;br&gt;
Download &lt;code&gt;JudgeDesk_&amp;lt;version&amp;gt;_full_x64_en-US.msi&lt;/code&gt; and run it. Installing a newer version upgrades the existing one in place, and your data and settings are kept.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  🍎 macOS 11+ (Apple Silicon)
  &lt;br&gt;
Open the &lt;code&gt;.dmg&lt;/code&gt;, drag &lt;strong&gt;JudgeDesk.app&lt;/strong&gt; into &lt;code&gt;Applications&lt;/code&gt;, then run once before the first launch:&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xattr &lt;span class="nt"&gt;-dr&lt;/span&gt; com.apple.quarantine /Applications/JudgeDesk.app
xcode-select &lt;span class="nt"&gt;--install&lt;/span&gt;   &lt;span class="c"&gt;# needed for C/C++&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  🐧 Linux (Ubuntu 22.04+, Debian 12+, Fedora 38+, or any distro via AppImage)
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ubuntu / Debian / Mint&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; ./JudgeDesk_&amp;lt;version&amp;gt;_full_amd64.deb

&lt;span class="c"&gt;# Fedora / RHEL / openSUSE&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; ./JudgeDesk-&amp;lt;version&amp;gt;-full-1.x86_64.rpm

&lt;span class="c"&gt;# Any distro (portable)&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./JudgeDesk_&amp;lt;version&amp;gt;_full_amd64.AppImage &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./JudgeDesk_&amp;lt;version&amp;gt;_full_amd64.AppImage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Every release ships a &lt;code&gt;SHA256SUMS&lt;/code&gt; file, so you can verify your download before installing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your first contest in five steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;F2&lt;/code&gt;: load the problems folder.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;F3&lt;/code&gt;: load the contestants folder (or just drag &amp;amp; drop the whole contest folder).&lt;/li&gt;
&lt;li&gt;Right-click a problem column to set limits, I/O mode, subtasks and the checker.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;F9&lt;/code&gt;: start grading and watch the scoreboard fill up live.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;F12&lt;/code&gt;: export to Excel. &lt;code&gt;Ctrl+S&lt;/code&gt; / &lt;code&gt;⌘S&lt;/code&gt;: save everything as a &lt;code&gt;.judgedesk&lt;/code&gt; file.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it free?&lt;/strong&gt;&lt;br&gt;
Yes. JudgeDesk is free to use for teachers, students, schools and clubs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it open source?&lt;/strong&gt;&lt;br&gt;
Not right now. The source code is private, but installers, checksums, documentation and the issue tracker are public on the &lt;a href="https://github.com/ducminh25/judgedesk" rel="noopener noreferrer"&gt;release repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it replace VNOJ or Codeforces?&lt;/strong&gt;&lt;br&gt;
No, and it isn't meant to. Online judges are great for public problem archives and rated contests. JudgeDesk is for when you need &lt;strong&gt;local, offline, private&lt;/strong&gt; judging: classrooms, school selection rounds, mock exams, or quickly checking your own solution against your own tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use my old Themis contests?&lt;/strong&gt;&lt;br&gt;
Yes. Existing Themis-style folder layouts and configuration files are supported.&lt;/p&gt;


&lt;h2&gt;
  
  
  A small favor 🙏
&lt;/h2&gt;

&lt;p&gt;I'm a student building JudgeDesk in my spare time for the Vietnamese competitive programming and CS education community. If you're a teacher, a coach, a contestant, or just someone who likes well-built developer tools:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ducminh25/judgedesk" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;⭐ Star JudgeDesk on GitHub&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the repo.&lt;/strong&gt; It helps other teachers and students find it.&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Open an issue&lt;/strong&gt; if something breaks or a feature you need is missing.&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Leave a comment below.&lt;/strong&gt; I'd love to hear how you judge code today and what annoys you most about it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading, and happy coding! 🚀&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>programming</category>
      <category>education</category>
      <category>algorithms</category>
    </item>
  </channel>
</rss>
