JPetsis

@JPetsis

Software engineer / Web developer - PHP - Laravel - Typescript

Commit activity

10 commits in the last 30 days

longest streak 2 days

312 / 400 XP88 XP to maintainer
IOANNIS PETSIS                                     Systems · Languages
──────────────────────────────────────────────────────────────────────
tagline

I build programming language infrastructure and full-stack systems — from multi-tier pattern matching engines to production web applications.

  • libsnobol4 — A high-performance SNOBOL4 string-processing engine in C with computed-goto dispatch, 11-tier search acceleration (pattern fusion, SIMD NFA, DFA automaton, trie, BMH), required-byte prefilter, batch all-matches API, and lean ~8 ns/call single-literal search. Pattern matching, template substitution, captures, associative tables, sparse arrays, and a stable PHP binding (generators, lazy SplitIterator).
  • jobscout — Local-first job search in Python: one command pulls postings from public boards (LinkedIn's guest API, StepStone, XING, stellenanzeigen.de, karriere.at, jobs.ch, Arbeitnow, HN Who is hiring), scores them with a transparent rule engine, dedupes across sources, and writes a markdown digest. No API keys, no metered calls.
  • Ask me about compilers, language runtimes, search engines, Laravel web apps, or local-first Python tooling.

Tech

Languages
Frameworks & Tools

Featured Project

A high-performance SNOBOL4 string-processing engine in C — a PCRE alternative with 11-tier search acceleration (fused concat-pattern automaton, SIMD NFA, DFA automaton, trie), required-byte prefilter, batch + lean tokenize APIs, and computed-goto dispatch. Now stable at v1.0.1.

SNOBOL4 VM                                                      v1.0.1
──────────────────────────────────────────────────────────────────────
dispatch   computed-goto (15–30% over switch)
search     11 tiers — fusion · SIMD NFA · DFA · search-VM ·
           trie · bitmap · BMH · prefix · literal ·
           SPAN/BREAK · required-byte prefilter
Feature Detail
Dispatch Computed-goto opcode dispatch (15-30% faster). MSVC switch fallback. PGO build targets (LTO+profile).
Search Acceleration 11-tier pipeline: fused concat-pattern automaton (Tier 10, no VM) → SIMD NFA → DFA automaton → search-VM → alt-literals trie → bitmap → BMH prefix → literal-only → SPAN/BREAK scan + required-byte prefilter
Batch & Tokenize API snobol_pattern_search_batch() / stateful ..._batch_ex() — single-pass all-matches with flat capture/output arrays. snobol_pattern_search_next() — ~8 ns/call lean single-literal search (memchr/memmem).
Data Types Associative tables, sparse integer-keyed arrays (snobol_array_*), numeric/comparison functions (snobol_text_eq/lt/gt)
Platforms macOS ARM64/Intel, Linux AArch64/x86-64/ARMv7/RISC-V, Windows x86-64
Bindings PHP (stable) — generators, lazy SplitIterator, flat results, capture-as-offsets, metrics opt-in, DFA/trie/SIMD/fusion caching
Pattern Engine Backtracking VM with computed-goto dispatch, catastrophic backtracking protection, trail-based compact choice stack (arena allocator, undo-log replay), UTF-8 with full BMP case folding
Template Substitution Compiled C VM instructions — captures, formatting, table lookups
Quality Gates 90%+ core & PHP coverage with Codecov gate, CodeQL, ASan+UBSan/valgrind leak-checked CI
CI Native runners: macOS ARM64/x86-64, Linux AArch64/x86-64/ARMv7/RISC-V, Windows x86-64. ASan+UBSan. PGO.
Distro Homebrew (macOS), PIE (PHP), GitHub Releases
// One-shot convenience API
snobol_match_result_t *r = snobol_match(
    "'abc' ARB 'def'", 15, "xyz abc def xyz", 15, 0
);

CI PHP Sanitizers


Projects

jobscout

A local-first job search tool: jobscout scan pulls postings from public endpoints (LinkedIn's guest API, StepStone, XING, stellenanzeigen.de, karriere.at, jobs.ch, Arbeitnow, Berlin Startup Jobs, HN Who is hiring), scores them against your preferences with a deterministic rule engine, dedupes across sources, and jobscout digest writes a markdown report. The same core drives a native desktop window (pywebview: WKWebView, WebView2, Qt) and PyInstaller bundles built on five native runners. No API keys, no accounts, no metered calls — preferences, postings and digests stay in ~/.jobscout/.

Release MIT


GitHub

GitHub followers GitHub User's stars

JPetsis/README.md on GitHub