# Ibraverse > Senior Software Developer at Zebra Technologies working in machine vision, AI and image processing. I build the measurement algorithms inside industrial vision software — the geometry, calibration and edge measurement that factory applications are built on. C++, at Zebra Technologies in Montréal, on the Aurora Imaging Library, and at Matrox Imaging before the two became one company. Most of that job is not writing the algorithm. It is agreeing what it should do with the UI, documentation and test teams before it ships, and then going into the applications customers cannot get working — which is where you find out what it actually does. Outside work I build things that need data nobody publishes: a transit network for a country with no timetable, a robot cell for testing control code against real physics, two months of power-outage readings collected a minute at a time to find out whether the restoration times hold. The projects and articles are written up here with what each one taught me, including the parts that did not work. ## Projects — Things I built end to end — the problem, what it became, and what each one taught me. - [MeteoData](https://ibraverse.ca/projects/meteodata/): I graded three weather services against the station next door, to find out which parts of a forecast you can actually believe. - [Wingo](https://ibraverse.ca/projects/wingo/): Helps a group of friends pick where to go out, and settles it, instead of a chat that never decides. - [Farkad](https://ibraverse.ca/projects/farkad/): A health tracker you talk to: say what you ate, drank and did in one sentence, and it records it. - [RoboNode](https://ibraverse.ca/projects/robonode/): A robot arm you drive from your browser, to test robotics code against real physics before touching hardware. - [Domia](https://ibraverse.ca/projects/domia/): Software that tests other software by reading the screen and clicking, the way a person would. - [Bâtir](https://ibraverse.ca/projects/batir/): Answers Algerian construction questions in Arabic, French or English, and shows the building rule behind each answer. - [HydroData](https://ibraverse.ca/projects/hydro-quebec/): I recorded every power cut in Québec for two months, to see how often the power really returns when they say it will. - [TikiPro](https://ibraverse.ca/projects/tikipro/): Gives a small clinic a numbered queue on a screen, so patients stop asking who is next. - [Rekba](https://ibraverse.ca/projects/rekba/): A bus, tram and metro app for Algeria, where no usable timetable existed until I built one. - [Leorra](https://ibraverse.ca/projects/leorra/): An app for sending a parcel abroad with a traveller who has room in their suitcase. ## Tech — Long write-ups on how something works, learned by building it: image processing and machine vision first, then memory, algorithms and agents. - [Montréal Forecast Reliability: Three Services, Two Places, 882 Comparisons](https://ibraverse.ca/tech/montreal-forecast-reliability/): Three forecast services, two places in Montréal, every prediction graded against the weather station beside it over five days. Temperature holds up. Rain does not — 70% of the rain calls never happened. Interactive report, gradeable from one hour ahead to twenty-four. - [Hydro-Québec Outage Analysis: Two Months of Grid Reliability Data](https://ibraverse.ca/tech/hydro-quebec-outage-analysis/): A two-month reliability study of Hydro-Québec's public outage feed — regional reliability, Montréal boroughs, ETA accuracy, causes, record outages, and the data pipeline behind it. Interactive charts + map. - [How AI Agents Will Replace Software Testers: Building One That Tests a Live Site](https://ibraverse.ca/tech/ai-agents-software-testing-domia/): A practical guide to what AI agents actually are, and DOMIA — an autonomous end-to-end testing agent built on Google ADK and Gemini. - [How an Image-Processing Feature Saved My Flight: Barcodes and Foreground Colour](https://ibraverse.ca/tech/barcode-flight/): A real-world example of why foreground color support in barcode reading matters. - [Edge Measurement in Industrial Vision: Counting Saw Blade Teeth](https://ibraverse.ca/tech/image-histograms/): Counting the teeth on a saw blade looks trivial and is not. How edge measurement actually solves it, and which part of the method decides whether it works. - [Building a Chatbot That Answers From Your Own Documents](https://ibraverse.ca/tech/rag-montreal-pools/): Public schedules are published as pages nobody can query. This builds a chatbot that answers questions about Montréal's indoor pool times, and explains how retrieval over your own documents works. - [Finding an Infinite Loop in Scikit-Learn's K-Means](https://ibraverse.ca/tech/scikit-learn-kmeans-infinite-loop/): Finding and reporting an infinite loop in scikit-learn's K-means empty-cluster handling, and how the fix was reached. - [Windows Memory Management in Depth: Private Data, Stack, Heap and Mapped Files](https://ibraverse.ca/tech/windows-memory-management-deep-dive/): A detailed walk through Windows memory states and memory types — private data, stack, heap, mapped files, images — with VirtualAlloc, File Mapping and std::vector examples. - [Windows Memory Management: Virtual vs Physical, and How to Measure It](https://ibraverse.ca/tech/windows-memory-management-overview/): An introduction to how the Windows Memory Manager separates virtual from physical memory, and a C++ tool for tracking a process's usage over time. ## Adventures — Field notes from Montréal and beyond — places, food, and honest recommendations, each article opening with a short video review. - [Auberge Estonia: A Nordic Spa Cabin Escape in Rawdon, One Hour from Montréal](https://ibraverse.ca/adventures/auberge-estonia-rawdon/): A forest auberge in Rawdon, Lanaudière — free Nordic spa with hot tubs and a Finnish sauna, a cold-plunge lake, BBQ cabins, and hiking trails on the estate, all about an hour from Montréal. - [Indian Head & Rainbow Falls: The Adirondacks' Best Day Hike](https://ibraverse.ca/adventures/indian-head-rainbow-falls/): An 11-mile loop to a fjord-like vista over Lower Ausable Lake and a 150-foot waterfall — the most rewarding easy-graded hike in the Adirondack High Peaks. ## Thoughts — Shorter pieces about engineering judgement — estimates, failure, and what building things has changed my mind about. - [Why Deadlines Slip, Mine Included](https://ibraverse.ca/thoughts/estimates-and-the-five-percent/): Hydro-Québec's restoration times were right one time in twenty. I recognised the failure immediately, because I make the same one. ## Facts The numbers from each project, taken from the page they belong to. ### MeteoData — https://ibraverse.ca/projects/meteodata/ - 882: forecasts graded against what a station actually recorded - 1.19 °C: average temperature miss, six hours ahead - 70%: of the rain calls never happened - Built with: Python, asyncio, httpx, Docker, Google Cloud Storage - Lesson: A forecast is not one prediction, it is six, and they are not equally good — averaging them into "accurate" is how the useful part gets hidden. ### Wingo — https://ibraverse.ca/projects/wingo/ - 3 surfaces: one Flutter app, an admin console and a marketing site on one backend - Real time: votes propagate live, with every write validated server-side - 1 command: build, deploy, publish or roll back, with health-checked rollback - Built with: Flutter, Firebase Functions, TypeScript, React, Firestore - Lesson: By the second site, deploying by hand was costing me more time than building the tooling would have. ### Farkad — https://ibraverse.ca/projects/farkad/ - 1 sentence: the entire interface - 6 areas: filed from one spoken line - 2 passes: speech to structured, editable entries - Built with: Flutter, Python, Firebase Functions, Multi-agent, Dart - Lesson: One engine that handles every combination beats six that each handle one, but it has to be decided early — retrofitting it cost me a rewrite. ### RoboNode — https://ibraverse.ca/projects/robonode/ - 4 nodes: vision, tracking, trajectory and control, swappable while running - 1 command: docker compose up, then a robot cell in the browser - Sandboxed: third-party algorithms run isolated from the cell - Built with: C++, MuJoCo, OpenCV, Ruckig, three.js, Docker - Lesson: A simulator that lets your algorithm succeed is worse than no simulator, because you believe it. ### Domia — https://ibraverse.ca/projects/domia/ - ~200 ms: for 15 verified findings, before a model is involved - 1 loop: drives web and desktop alike, with no scripted steps - 40: design decisions recorded, each with the problem it fixed - Built with: TypeScript, Playwright, Electron, AI SDK, MCP, SQLite - Lesson: Run the cheap deterministic checks first; the model is for the questions they leave open. ### Bâtir — https://ibraverse.ca/projects/batir/ - 3 languages: Arabic, French and English, answered from one corpus - Cited: every answer points back to the document it came from - 5 stages: fetch, promote, deploy, re-ingest, verify - Built with: Python, FastAPI, Next.js, Postgres + pgvector, LlamaIndex, Gemini - Lesson: If tuning a model needs a deploy, nobody tunes it — so the prompts, the retrieval settings and the corpus are data, not code. ### HydroData — https://ibraverse.ca/projects/hydro-quebec/ - 56 days: of the outage map, recorded every minute - 16,561: distinct outages across 1,280 municipalities - 5%: of announced restoration times landed within the hour - Built with: Python, pandas, Plotly, KMZ, Firebase Storage - Lesson: A number I collected myself changed my mind in a way the same number from someone else would not have. ### TikiPro — https://ibraverse.ca/projects/tikipro/ - 1 PC: runs reception, the waiting-room board and every doctor - 3 languages: French, Arabic and English, switched mid-sentence - Offline: Ed25519 licences verified locally, no phone-home - Built with: Electron, TypeScript, Firebase, Ed25519, Turborepo - Lesson: Non-technical users judge the software by the install. Everything before first launch is where mine failed. ### Rekba — https://ibraverse.ca/projects/rekba/ - 281 stations: and 374 connections, built from open map data - 3 locales: French, Arabic and English, right-to-left aware - 1 pipeline: three triggers: a service, a CLI and scheduled flows - Built with: Python, FastAPI, Prefect, Typer, GTFS, Flutter - Lesson: When the data doesn't exist, the pipeline that produces it is the product, not the app on top of it. ### Leorra — https://ibraverse.ca/projects/leorra/ - 4 layers: domain, application, infrastructure and presentation, cleanly separated - 3 languages: English, French and Arabic, right-to-left aware - 20 months: of design, build and iteration on a real marketplace - Built with: Flutter, Dart, Firebase, BLoC, Clean Architecture, get_it - Lesson: Rewriting from scratch two months in was the right call. What was missing at the end was never the architecture. ## Career ### 2024 — Present — Senior Software Developer, Zebra Technologies - Built: Aurora Imaging Library, Aurora Focus smart camera - Stack: C++, machine vision algorithms, embedded / edge imaging - Tools: Visual Studio, Git / GitHub, JIRA - Learned: A library is a product only when the algorithm, the documentation and the tests agree — and the disagreements surface in a customer's application long before they surface in a test suite. ### 2022 — 2024 — Software Developer II, Zebra Technologies - Built: Advanced Geometric Matcher API, MIL 2D modules, customer-facing API examples - Stack: C++, geometric matching, metrology, non-linear optimisation, classical ML - Tools: Visual Studio, Git / GitHub, JIRA, Agile - Learned: Writing the documentation and the examples is where an API design gets tested — the questions that come back are about the interface, almost never about the algorithm. ### 2019 — 2022 — Software Developer, Matrox Imaging Matrox Imaging became part of Zebra Technologies in 2022; the work continued without a break. - Built: Pattern matching, Edge detection, Calibration, Measurement and metrology - Stack: C++, non-linear optimisation, Levenberg–Marquardt, classical ML - Tools: Visual Studio, Git, SVN - Learned: Writing a better algorithm is the short half of the job; getting it into a library other people already depend on, without changing an answer they rely on, is the long one. ### 2017 — 2019 — M.Sc., Control Systems Engineering, Polytechnique Montréal GPA 3.87/4 · Al Ghurair Foundation Scholarship — 1 of 100 selected from more than 15,000 applicants. - Built: Control theory, Robotics, Image processing - Stack: C++, digital control, detection and estimation, stochastic and robust control, image processing - Tools: QNX, ROS, MATLAB / Simulink, Fanuc robots - Learned: A control law that is correct on paper and late by ten milliseconds is wrong — the deadline is part of the specification, not a detail of the implementation. ### 2012 — 2017 — B.Eng., Electrical Engineering — Control Systems, École Nationale Polytechnique, Algiers GPA 17.5/20 · graduated 5th of 1,400 — top 1% nationally. - Built: Adaptive cruise control for an autonomous vehicle, PLC program for an industrial assembly machine - Stack: C, MATLAB, VHDL, control design, process identification, optimal control - Tools: Unity-Pro (Schneider), Simatic-Manager (Siemens), Simulink, LabVIEW - Learned: Hardware does not care how elegant the model is: the first assembly machine I programmed spent its faults on sensors and wiring, not on the control logic I had spent the term on. ## Reference - [Resume](https://ibraverse.ca/resume/): Machine vision and image processing engineer — Zebra Technologies, Matrox Imaging, Polytechnique Montréal. - [Tags](https://ibraverse.ca/tags/): every subject on the site, 29 terms. - [Full text](https://ibraverse.ca/llms-full.txt): every page above as plain text, in one file. - [Sitemap](https://ibraverse.ca/sitemap.xml) ## Languages - English (en): https://ibraverse.ca/ - Français (fr): https://ibraverse.ca/fr/ - العربية (ar): https://ibraverse.ca/ar/