JPlag is a mature source-code plagiarism detection engine delivered as a Java library, a picocli-based CLI, and an embedded Vue.js report viewer. In production it parses submissions into language-specific token streams (via ANTLR, JavaCC, or custom parsers), compares token sequences pairwise using greedy string tiling with rolling hashes, merges fragmented matches, applies frequency-based weighting, optionally clusters submissions, and writes a .jplag ZIP report containing JSON models consumed by the viewer. The CLI can also start a local HTTP server to browse results. Architecturally it is a multi-module Maven project: core contains the comparison pipeline and reporting; language-api and language-antlr-utils define a plugin SPI for adding languages; languages/* provides 20+ modules; cli assembles the executable; report-viewer is an npm workspace with model/parser/ui-components packages. Key entry points are de.jplag.cli.CLI and de.jplag.JPlag.run(). External dependencies include ANTLR, picocli, Jackson, JGraphT, Apache Commons Math, and the Vue/TypeScript ecosystem. Although primarily an application, it embeds research-grade components such as spectral and agglomerative clustering with Bayesian optimization, token-sequence normalization, and match-frequency weighting, and it is backed by academic publications. It is not a data pipeline; the inputs are source-code submissions and the output is a similarity report. The repository is actively maintained with extensive CI, end-to-end gold-standard tests, and dependabot, though some language grammars lag language evolution and a few deprecated APIs remain.
This is the type-challenges repository, a collection of TypeScript type-level programming challenges. It is not a traditional application but rather an educational resource and community project focused on advancing TypeScript type system mastery. The repository contains 189+ challenges ranging from 'warm-up' to 'extreme' difficulty, each consisting of a template file (the challenge to solve), test cases, and documentation in multiple languages. The architecture is straightforward: challenges are organized in the `questions/` directory with standardized file structures (template.ts, test-cases.ts, info.yml, README.md). The `utils/` package provides shared type utilities (Equal, Expect, NotAny) used across challenges. The `scripts/` directory contains build tooling for generating playgrounds, translating content, and managing GitHub Actions for community contributions. The project serves as both a learning platform and a community hub. Users solve challenges by implementing types that satisfy the test cases, which use a custom Expect/Equal assertion pattern. The challenges progressively teach advanced TypeScript concepts including conditional types, infer, template literal types, recursive type manipulation, and type-level algorithms. The repository has strong community engagement with 48K+ stars and active issue management. Key differentiators include the difficulty progression system, multi-language documentation, integration with TypeScript Playground, and the practical nature of challenges that often mirror real-world type manipulation scenarios. The project maintains quality through standardized test patterns and active community moderation.
This repository is a book project titled 'Metaprogramming: Multi-paradigm approach in Software Engineering' by Timur Shemsedinov. It contains extensive educational content in multiple languages (English, Russian, Czech, Ukrainian, German) stored as Markdown files. The repository includes a Node.js build script that uses pdfmake to generate PDF versions of the book from the Markdown sources. The build system is simple but well-structured, leveraging metavm for configuration and pdfmake for PDF generation. The book covers programming paradigms, data structures, algorithms, and software engineering concepts with code examples in JavaScript, Python, C, and other languages. This is primarily a content repository with a build tool, not a reusable software library or data pipeline.