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).
| 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 |
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"]
| 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 |
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"]
| 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.
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/benchmarkThe 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.
Released under the MIT License. Use the code however you like; the only condition is that the copyright notice travels with it.
- Email: ryanwien3d@gmail.com
- LinkedIn: linkedin.com/in/ryanwien3d