Skip to content

Repository files navigation

Hi, I'm Ryan 👋

Software engineer with a background in tools development and technical problem-solving. I build full-stack applications, automation tools, and data-driven programs, and I care about writing clean, well-documented code.

🌐 Live portfolio & demos → ryanwien.github.io/Portfolio2026. Every project below runs live in your browser, with no backend.

🔭 Currently: working through the Microsoft Cybersecurity Analyst certificate, and building out the projects below.

🌱 Recently learned: full-stack web development (Microsoft) and supervised machine learning (DeepLearning.AI).

🛠️ Tech I work with

Area Tools
Languages Python · C++ · C# · JavaScript · SQL · HTML/CSS
Backend ASP.NET Core · Flask · EF Core · SQLite · REST APIs
Data & ML scikit-learn · pandas · NumPy
Tooling Git · CMake · MSVC · xUnit · GitHub Pages

📌 Projects

Each project has a live browser demo and a written design rationale. The reasoning matters more than the line count.

flowchart LR
  P["Portfolio2026"]
  P --> M["Order Book<br>C++ · Python · JS"] --> MD["live terminal"]
  P --> S["Security Log Analyzer<br>C# · Python · JS"] --> SD["live SOC console"]
  P --> T["Task Tracker<br>C# · Python · JS"] --> TD["live demo"]
  P --> F["File Organizer<br>C++ · Python · JS"] --> FD["live demo"]
  P --> H["House Prices<br>Python · C++ · JS"] --> HD["live predictor"]
Loading
Project What it is Languages
Order Book Matching Engine
▶ live demo
A price-time-priority limit order book with limit/market orders, partial fills and O(1) cancels, wired to a live depth-ladder terminal and order-flow simulator. C++20 · Python · JS
Security Log Analyzer
▶ live demo
A SIEM-style detection engine turning raw auth logs into ranked, MITRE ATT&CK-tagged alerts: brute force, password spraying, impossible travel, port scans. Runs on your own logs. C# · Python · JS
Task Tracker
▶ live demo
A task management app with full CRUD, server-side validation and SQL-injection protection, behind a REST API. C# · Python · JS
File Organizer
▶ live demo
Sorts a folder by file type with dry-run preview, collision-safe renaming and undo. The browser demo can organize a real folder on your machine. C++20 · Python · JS
House Price Prediction
▶ live demo
Supervised regression predicting sale price from six features, R² = 0.94 on held-out data. The demo runs the real trained weights. C++20 · Python · JS

✅ How this repo is verified

Several projects exist in more than one language. Rather than claim the implementations agree, each one is tested against the others, because a port that silently diverges is worse than no port at all. That includes the browser ports, which are the easiest to let drift because nothing compiles them.

flowchart TD
  FIX["Committed fixture<br>same log, same split,<br>same scenario"]
  FIX --> A["Implementation A<br>Python"]
  FIX --> B["Implementation B<br>C++ or C#"]
  A --> RA["Report A"]
  B --> RB["Report B"]
  RA --> D{"diff"}
  RB --> D
  D -->|identical| OK["Equivalence holds"]
  D -->|differs| BAD["The port has drifted<br>and the build is wrong"]
Loading
Project Equivalence check Tests
Security Log Analyzer Both engines read the same 221-event log; their reports are byte-for-byte identical, and the demo's inline copy of that log is generated from it rather than pasted 30
Order Book All three engines replay a shared reference_scenario.txt, the browser one included; every trade and the final book match exactly 56
File Organizer Both run over identical folders and produce identical directory trees, collision renames included 45
Task Tracker Both APIs are fired the same 30 valid and malformed bodies and have to agree on status code and error message, not just on the happy path 27
House Prices Both train on a frozen train/test split and agree on every coefficient to four decimals, R² to nine 46

Holding those equivalences honest surfaced details that are easy to get wrong: Python dictionaries iterate in insertion order and the detection rules depend on it; "{:.0f}" rounds half to even, not half away from zero; and directory_iterator returns entries in an unspecified order, so the C++ organizer sorts before planning.

It also surfaced real defects: an unhandled exception when a file is locked by another process, and a latency benchmark that was measuring the clock rather than the code. Both are written up in the project READMEs.

🚀 Running things locally

Every demo works with no setup. Just open the live links above. To run the sources:

# Python
pip install -r <project>/requirements.txt
python security-log-analyzer/analyze.py

# C# (.NET 9 SDK)
dotnet run  --project security-log-analyzer/csharp/src/SecurityLogAnalyzer
dotnet test security-log-analyzer/csharp/tests/SecurityLogAnalyzer.Tests

# C++ (C++20 compiler)
cd matching-engine/cpp && cmake -B build && cmake --build build
./build/engine_tests && ./build/benchmark

The C++ projects ship a CMakeLists.txt as the portable entry point and a build.bat for MSVC. Local verification was done with MSVC on Windows.

📄 License

Released under the MIT License. Use the code however you like; the only condition is that the copyright notice travels with it.

📫 Reach me

About

Portfolio

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages