September 22, 2026/5 min readFlat image in, living character outIn short: give the pipeline a JPG or PNG of a character and it produces a layered rig plus a small web player that breathes, blinks, shows emotion and lip-syncs to a real voice. The steps are…
February 10, 2026/4 min readThe AI feature that cut churn, and the one that didn'tIn short: on a platform product I led AI on, a round of AI features came with lower churn and higher feature adoption. Those are two different measures, and a feature can win one without touching the…
December 16, 2025/5 min readRules vs transformers for extracting metadata from legal documentsIn short: on the same Spanish-language legal documents, the transformer path was more accurate and slower. The rules were fast, cheap and easy to explain. I kept both: rules by default, the…
December 2, 2025/5 min readRecommending books by mood: a small LLM product in a dayIn short: you type how you feel, and the app gives you three books, three meals and three things to do. It is one prompt, one API route and one screen, and it took a day because I wrote down what it…
August 26, 2025/5 min readSelecting papers for a review without reading all of themIn short: export every search hit as a .bib file, let a language model screen titles and abstracts against written criteria, then hand-check a random sample to see how often it's right. The model…
August 12, 2025/5 min readLeakage: the bug that makes every metric lieIn short: leakage is when information from the test set, or from the answer itself, sneaks into training. The three kinds I check for every time are the same person on both sides of the split,…
July 29, 2025/5 min readClassical ML or an LLM? The decision before touching codeIn short: if the input is numbers or a signal and you have labelled examples, I start with a classical model. If the input is language and the job is to read or write it, I start with an LLM. Most of…
July 15, 2025/5 min readWhat I look for when hiring an ML engineerIn short: I look for someone who checks the data before the model, gets suspicious when a result looks too good, has shipped at least one thing end to end, and can explain it to someone who isn't an…
July 1, 2025/5 min readAgents with opinions: a weekend multi-agent buildIn short: I built a small stock analyzer where five agents, each with a fixed investing style, look at the same company and give their own reading. The per-agent outputs are not the interesting part.…
June 17, 2025/5 min readWhy I move between fields on purposeIn short: each new field breaks a different assumption I didn't know I was making, and that's the fastest way I've found to get better at the job. The tools carry over. The instincts don't, and…
June 3, 2025/5 min readClass imbalance in clinical data: what actually workedIn short: oversampling and class weights mostly move you along the same precision-recall curve. What actually worked was picking the decision threshold on purpose, on a validation set, against a…
May 6, 2025/5 min readData that doesn't match across sitesIn short: when several sites collect "the same" data, the columns share names and almost nothing else. Before any model, write one data dictionary, map every site to it in code, and check the result…
April 22, 2025/4 min readExplaining a model to a doctorIn short: doctors don't want to see how the model works. They want to know why it said this about this patient, in units they already use, and whether they should trust it. A simple bar chart with…
March 11, 2025/5 min readAudio preprocessing that matters more than the modelIn short: on medical audio, the steps before the model decide most of what the model can learn. Resampling, trimming, filtering, fixed-length windows and a split by patient each remove a shortcut the…
February 25, 2025/5 min readThe clinician said no, and was rightIn short: a clinical model can score beautifully because it has learned something the clinic already decided. The fastest way to catch that is not a better metric. It is ten minutes with the person…
January 28, 2025/5 min readGCN_for_EEG, five years laterIn short: GCN_for_EEG got its stars because it removed one barrier, MATLAB, at a time when graph networks on EEG were new to most people. Five years on, the idea still holds, but the setup would not…
December 31, 2024/4 min readThe boring checklist that saved every projectIn short: before I train anything I want three things: a record of where every piece of data came from, a dumb baseline to beat, and one number the people paying for the work actually care about. None…
December 17, 2024/4 min readRespiratory sound classification, end to endIn short: I took a public set of lung sound recordings all the way from raw audio to a web demo anyone can upload a file to. The model was the smallest part. Most of the work was deciding what to…
October 8, 2024/4 min readWhat an earbud's motion sensor can tell youIn short: a six-axis motion sensor in an earbud sees enough to tell sitting from walking from nodding. Before any of that is learnable, though, you have to remove the differences between people and…
September 24, 2024/4 min readThe baseline before the fancy model: medical image segmentationIn short: before training a U-Net, write a threshold with a little cleanup and score it with the same metric. It's quick to write, it tells you how hard the problem really is, and on high-contrast…
September 10, 2024/4 min readExperiment tracking I actually keep usingIn short: I use DVC to version data, MLflow to record runs and models, and Weights and Biases when I want to watch a long training live or share charts. What makes them useful is one habit: every run…
August 27, 2024/4 min readReading papers with an LLM without getting lied toIn short: give the model only the part of the paper that holds the study, ask narrow questions that demand quotes and an explicit NA, and check every quote against the text. It still breaks on numbers…
August 13, 2024/5 min readDoing ML in a field that runs on R and SPSSIn short: psychiatry researchers trust R and SPSS because they've checked those tools for years. Python output earns the same trust when it reproduces a result they already know, comes back in the…
July 30, 2024/5 min readFederated learning: the model was the easy partIn short: when sites can't share their data, the model code is the smallest part of the work. Most of the effort goes into making the data mean the same thing everywhere, coping with sites that drop…
March 19, 2022/1 min readTeTrA: Jump to speech controlled VR envIn short: I built a Windows test game you control entirely by talking to it. Say "show me some clouds" and clouds appear. It understands eight commands. One of my dreams has been games you control…
August 3, 2021/2 min readNew Preprint: How Adversarial attacks affect Deep Neural Networks Detecting COVID-19?In short: I took five networks that classify COVID-19 chest X-rays and attacked them four different ways. Average accuracy fell from 96.7% to as low as 25.5%. After building an online COVID-19…
March 2, 2020/6 min readCOVID-19 Detection with ML and CXR | تشخیص کرونا توسط یادگیری ماشین و CXRIn short: when Iran ran short of COVID-19 test kits, I built a demo that looks at a chest X-ray and tells a normal lung from an abnormal one. Full Keras code below. زمانیکه شروع به ساخت این برنامه…