Sign in

Omid Farhang

@omid.dev
57 followers 41 following 162 posts

A Full Stack Developer, Husband, Fish Keeper as hubby, In Love with Linux Systems, Cannot live without Coffee | omid.dev | @omidfarhang@mastodon.social | امید فرهنگ

PostsRepliesMedia
Omid Farhang @omid.dev · 23/09/2026
A laptop that serves your app is a demo. It has not chosen a home. Generation made the first half cheap. Next you choose what you refuse to own: a platform your users already live in, one small machine, or a runtime you rent. g.omid.dev/YcRFC4Q #EngineeringLeadership
g.omid.dev
After Generation: Where the Product Lives
Cheap generation gets you a demo. Pick the easy host to build on — a platform your users already use, a small box you run, or a runtime you rent.
000
Omid Farhang @omid.dev · 22/09/2026
Angular route data still speaks “resolver.” Screens already speak signals + resource. Router Resources (22.2, preview) load independent payloads as a parallel graph—blocking when you need finished values, non-blocking when the template can render Resource state. g.omid.dev/aDS5o7R #Angular
g.omid.dev
Angular Router Resources: Route Data on the Same Graph as the Screen
Router Resources (Angular 22.2, developer preview) load independent route data as a parallel resource graph. Blocking routes hand over finished values; non-blocking routes hand over Resource inputs th...
000
Omid Farhang @omid.dev · 21/09/2026
Obsidian is a lens, not the archive. Open your research repo as the vault. Daily notes and the graph are views over the same Markdown Git already tracks. If a note only lives in the app, it failed. g.omid.dev/DPToNGd #PKM #Obsidian #Git
g.omid.dev
Obsidian on a Git Research Vault
Open the research repo as an Obsidian vault if you want links and a graph. Git still holds the Markdown. If a note matters, it must still read in a terminal, an editor, and a diff.
100
Omid Farhang @omid.dev · 13/09/2026
The skill list did not get a new bubble called AI. Senior still means you own the result. Generation made fluent, working-but-wrong the default first draft. g.omid.dev/MUjJBI3
g.omid.dev
Essential Skills When Generation Is Cheap
The skill list did not get a new bubble called AI. The senior job changed: you own output you did not type, you review at a higher altitude, and you decide where generation does not belong.
000
Omid Farhang @omid.dev · 09/09/2026
I interview frontend candidates for other companies. When I hire badly, they keep the person and I keep the reputation. Most bad hires are decided before the interview. Knowing what you are interviewing for is the job. g.omid.dev/3DivN1O #frontend #hiring
g.omid.dev
I Interview Frontend Hires for Other Companies
How I interview frontend candidates for a team that is not mine — intake with their lead, choosing the real level, and why I now weigh architecture, ownership, and AI judgment over syntax recall.
000
Omid Farhang @omid.dev · 09/09/2026
I'd stop if CI exposed a fundamental compiler issue: incorrect type-checking, broken build output, or anything compromising production guarantees. If it's just “tool X isn't TS7-ready yet,” I'd isolate that layer and keep experimenting.
000
Omid Farhang @omid.dev · 28/08/2026
One AI chat is not a research workspace. A conversation is great at moving an idea. It is a poor place to keep one. Dump messy, contradictory notes in Git. Point the model at the files — not at the scrollback. g.omid.dev/cwhrarJ
g.omid.dev
One AI Chat Is Not a Research Workspace
Long-form research does not fit in one ChatGPT conversation. A Git repo of messy Markdown — inbox, concepts, counterarguments — lets ideas stay contradictory until you are ready to write.
000
Omid Farhang @omid.dev · 23/08/2026
An old game ran hot on HDMI and quiet on the laptop screen. Driver was fine. Native HDMI on this hybrid laptop is wired to NVIDIA, so the dGPU stays in the display path even when Intel is rendering. Don't start by changing drivers. First see which GPU owns the connector. g.omid.dev/qEO8Tfu
g.omid.dev
The HDMI Port Was Keeping NVIDIA Awake
On an Intel + NVIDIA hybrid laptop, native HDMI can keep the dGPU in the display path. That explains the fan noise — and may be a contributor to Chrome and Cursor freezes on this stack.
000
Omid Farhang @omid.dev · 19/08/2026
Have influence without becoming the backdoor. Cross-team trust is a senior-level asset. A scout returns with information. A shadow owner returns with obligations. Talk to anyone. Write it down. Take the decision back to the team. g.omid.dev/FK3SbYR
g.omid.dev
Have Influence Without Becoming the Backdoor
Cross-team trust is a career asset. Unofficial ownership is a career trap. How a senior brings feedback, protects UX, and stays on the team's side of the board.
010
Omid Farhang @omid.dev · 19/08/2026
Channel the scout. Keep the seat. Formalize the senior who hears other teams. Shared intake for commitments. Discovery stays open. The lead stays accountable for priority. Talk yes. Commit through the front door. g.omid.dev/wGhsMF4
g.omid.dev
Channel the Scout, Keep the Seat
Do not punish cross-team friendliness. Give the scout an official boundary: shared intake, no silent commitments, and polish on a budget.
010
Omid Farhang @omid.dev · 18/08/2026
When the best communicator becomes the backdoor. On a small team, the senior who talks to other teams is often the most valuable person in the room. The conversations are not the problem. Unowned commitments are. I call this shadow ownership. g.omid.dev/narboKZ
g.omid.dev
When the Best Communicator Becomes the Backdoor
On a small development team, the senior who talks to other teams may be the most valuable person in the room—until influence becomes unofficial ownership.
000
Omid Farhang @omid.dev · 15/08/2026
The frontend may run in an untrusted browser. The system that delivers it often runs with authority. npm install is execution. CI identities and release credentials are architectural boundaries. g.omid.dev/FSYcJ4s
g.omid.dev
The Frontend Is a Privileged System Now
The browser is untrusted, but the system that builds and delivers the frontend is not. Install hooks, CI identities, and release credentials make frontend delivery a production trust boundary.
000
Omid Farhang @omid.dev · 11/08/2026
I’m really glad they added this gate. It closes the old “adopt an orphan and immediately push” path that was abused during the attacks. I’d still be cautious with AUR updates for a while, especially as the backlog starts moving again.
010
Omid Farhang @omid.dev · 11/08/2026
Good news: the Arch User Repository (AUR) write freeze has finally been lifted as of Aug 11. aurweb 6.5.0 is live, SSH/Git pushes and package adoption are back, but adoption now requires approval from a Package Maintainer.
110
Omid Farhang @omid.dev · 10/08/2026
AUR isn't down — it's write-frozen. Arch locked pushes after a third supply-chain wave that abused orphan package adoption. Timeline, how the trap works, and what to do on Manjaro/Arch: g.omid.dev/6A7oOph #Linux #ArchLinux #AUR #InfoSec
g.omid.dev
The AUR Is Frozen: Inside Arch's Third Supply-Chain Attack Wave
Arch Linux has frozen all AUR writes after a third wave of supply-chain attacks. What is blocked, what still works, how the Atomic Arch campaign operates, and what to do on Manjaro and other Arch-deri...
000
Omid Farhang @omid.dev · 08/08/2026
Manjaro AUR check keeps flagging cursor-bin, google-chrome & vscode out of date. Not a local bug — Arch froze package adoption after malicious AUR takeovers. Orphaned -bin packages stay stuck. omid.dev/notes/178622...
omid.dev
For about a week, every AUR check on Manjaro has looked like…
For about a week, every AUR check on Manjaro has looked like this: :: Searching databases for updates... -> Flagged Out Of Date AUR Packages: cursor-bin google-chrome visual-studio-code-bin there ...
000
Omid Farhang @omid.dev · 03/08/2026
Yeah, that’s the whole point. Survive the disconnect first. Fancy zsh configs are optional; a living session isn’t.
100
Omid Farhang @omid.dev · 03/08/2026
A maintainable Linux command-line workspace is layers, not a perfect shell. Terminal, shell, multiplexer, SSH, and editor should stay replaceable. GNU screen and tmux still matter when a remote connection dies mid-work. g.omid.dev/ex0oPpv
g.omid.dev
A Maintainable Command-Line Workspace on Linux
Build a reproducible Linux command-line workspace with portable dotfiles, terminal, shell, multiplexer, SSH, and editor layers that remain maintainable across machines.
100
Omid Farhang @omid.dev · 31/07/2026
“Just add JWT” to localStorage ships. It demos well. And it trains teams to treat the browser as a safe vault. If JS can read your access token, so can XSS. OIDC + BFF / reverse proxy, short-lived server-side tokens, HttpOnly cookies: g.omid.dev/R3Guo03
g.omid.dev
Modern Auth Patterns for Angular Frontends (Beyond “Just Add JWT”)
Stop storing JWTs in localStorage. Use OIDC with a BFF or reverse proxy, short-lived server-side tokens, HttpOnly cookies, and Angular interceptors and guards that do not pretend to be your security b...
000
Omid Farhang @omid.dev · 31/07/2026
Angular PWAs make offline easy. Security doesn’t get the same one-liner. A long-lived cache can sit between an attacker and private data if you store everything. HTTPS + narrow SW scope, cache public shells not auth APIs, clear caches on logout: g.omid.dev/oWtGa46
g.omid.dev
Securing Angular PWAs in 2026
Security for Angular Progressive Web Apps: HTTPS and service worker scope, cache strategies that do not leak auth-dependent data, and offline sessions without raising XSS or CSRF risk.
000
Omid Farhang @omid.dev · 31/07/2026
Angular apps sit on CLI + a pile of third-party libs. Real risk often lives in a transitive package, not your component tree. Pipeline: SBOM every CI run → npm audit + ng update --dry-run → fail on high CVEs → notify Slack/Mastodon. g.omid.dev/RK3K05K
g.omid.dev
Dependency Risk, SBOMs, and Automated Security for Angular
Build an SBOM and CI security pipeline for Angular monorepos: npm audit, ng update --dry-run, fail on high-severity CVEs, Dependabot/Snyk, and post summaries to Slack or Mastodon.
010
Omid Farhang @omid.dev · 30/07/2026
Angular sanitizes. That’s necessary and still not enough. CSP is the browser seatbelt — but Angular injects styles at runtime, so you need per-request nonces, report-only first, then drop unsafe-*. Practical path + companion scanner: g.omid.dev/cr5Zz8o
g.omid.dev
Content Security Policy (CSP) and Angular: Practical Patterns
Ship CSP for Angular without breaking the build: report-only first, nonces via autoCsp or ngCspNonce, nginx/Apache/Cloudflare headers, and a small scanner for inline handlers, eval, and other footguns...
010
Omid Farhang @omid.dev · 28/07/2026
Client-side ≠ security-free. Your browser framework still owns sanitization, request protection, and SSR isolation. Three Angular CVEs as a case study for why framework patches matter. g.omid.dev/g2BIlvG #Angular #WebSecurity #Frontend
g.omid.dev
Why Client-Side Frameworks Need Security Updates
Browser frameworks still own sanitization, request protection, and SSR isolation. Three recent Angular CVEs show why framework patches are part of every client-side app’s security boundary.
000
Omid Farhang @omid.dev · 20/07/2026
One reason I've stuck with Manjaro: matray. A tray app + official news channel that respects your time. Small detail, big signal about product mindset. omid.dev/notes/178458...
omid.dev
I’ve always appreciated one small detail in Manjaro: matray.…
I’ve always appreciated one small detail in Manjaro: matray. As a long-time user, it feels like the distro respects my time by providing a simple tray app backed by a dedicated news source (https://ma...
020
Omid Farhang @omid.dev · 09/07/2026
TypeScript 7 is here: big speed gains, but adoption won't be even. Angular template checking, Vue, Astro, Svelte, and editor plugins still depend on the older TypeScript API path. My read: trial TS 7 in CI first, then editors, then framework tooling. g.omid.dev/PcBczud
g.omid.dev
TypeScript 7 Is Here: Fast, Exciting, and Worth Watching
TypeScript 7's native port delivers dramatic build-time speedups, but editor plugins, framework tooling, and monorepo workflows are catching up at different speeds. A practical read for teams deciding...
230
Omid Farhang @omid.dev · 30/06/2026
If a local model can handle the job, I keep it local. If the task needs stronger reasoning or larger context, I use the cloud. The goal is getting the work done efficiently, not winning an AI purity contest.
010
Omid Farhang @omid.dev · 30/06/2026
Thanks! That's exactly how I see it. I'm not trying to "replace" cloud AI or prove local AI is better. They're different tools with different strengths.
100
Omid Farhang @omid.dev · 29/06/2026
Nice, thanks for sharing. I’ll give llama.cpp a try too 👍
000
Omid Farhang @omid.dev · 29/06/2026
Part 2 of my Split AI Workflow series: local AI on Manjaro. Ollama + Aider + Cline for scoped refactors and monorepo chores. Cursor cloud when 7B models get stuck. Install steps, CUDA, honest limits, troubleshooting — no subscription hype. g.omid.dev/d1OsiXZ
g.omid.dev
Local AI on Manjaro: Ollama, Aider, and Cline Without Another Subscription
A follow-up to the split Cursor workflow: install Ollama on Manjaro with CUDA, pull coding models, wire up Aider and Cline for scoped local work — with honest limits on tool reliability, privacy, and ...
141
Omid Farhang @omid.dev · 29/06/2026
Update on my Cursor split-workflow post: • Perplexity for current, cited tech research • Clearer quota vs usage-billed notes • Privacy + when not to force the split • Ollama/agent-mode realism Same link, richer post.
010
Omid Farhang @omid.dev · 29/06/2026
Cursor Pro runs out fast if you treat it like ChatGPT. My split workflow: • ChatGPT → plan • Claude → review • Ollama → cheap tasks • Cursor → apply diffs New post: quota myths, local models on Linux, why RAM beats the NPU badge. g.omid.dev/CJUh3R5
g.omid.dev
How to Stretch Cursor Pro Further: A Split AI Workflow
Cursor Pro is best when it edits code, not when it thinks out loud. A practical split workflow — ChatGPT for planning, Claude for review, Ollama for cheap tasks, and Cursor for multi-file execution — ...
100
Omid Farhang @omid.dev · 25/06/2026
New post — Part 2 of the ecosystem blind spot series. Not "learn everything." How to spot expensive gaps early: pattern recognition, quarterly recon, and one reflex that beats bookmark hoarding. g.omid.dev/GnnFYO3
g.omid.dev
After the Zoom-Out: A Playbook for Staying Current Without Burning Out
Part two of the ecosystem blind spot series. The first post named the feeling; this one is the playbook — pain-driven discovery, pattern recognition, technology reconnaissance, and the habits that kee...
000
Omid Farhang @omid.dev · 25/06/2026
A few months ago I wrote about the ecosystem blind spot — not knowing what you don't know. The follow-up question was always: how do you find the important stuff *before* it's a 5-year bad habit? Wrote the playbook. g.omid.dev/GnnFYO3
g.omid.dev
After the Zoom-Out: A Playbook for Staying Current Without Burning Out
Part two of the ecosystem blind spot series. The first post named the feeling; this one is the playbook — pain-driven discovery, pattern recognition, technology reconnaissance, and the habits that kee...
000
Omid Farhang @omid.dev · 24/06/2026
Live lab — inject faults, compare fragile vs resilient checkout: playground.omid.dev/examples/chaos-resilience-lab/
playground.omid.dev
Chaos Resilience Lab | Omid Playground
Inject payment faults and compare fragile vs resilient checkout side by side. Live companion demo for the omid.dev article "Chaos Engineering: Principles and Practice".
000
Omid Farhang @omid.dev · 24/06/2026
Series on my blog: • Principles & practice • Frontend chaos (MSW, Cypress, WebSocket, auth, SSR) • Backend chaos (K8s, queues, Chaos Mesh, Toxiproxy, CI) Start: g.omid.dev/qxPpL9v
g.omid.dev
Chaos Engineering: Principles and Practice
What chaos engineering is, how it differs from load testing and disaster recovery, the experiment loop, blast-radius controls, and game days — before you fault-inject backend services or browser apps.
110
Omid Farhang @omid.dev · 24/06/2026
Most teams have load tests + monitoring. Fewer break one dependency on purpose and ask: does checkout still complete? Or does the browser silently confirm $0?
100
Omid Farhang @omid.dev · 24/06/2026
Checkout passes every test. Payment API returns empty body after 30s → UI confirms $0. Chaos engineering: when this fails, does the system absorb it? 3-part series (frontend + backend) + live checkout lab: g.omid.dev/qxPpL9v
omid.dev
Chaos Engineering: Principles and Practice
What chaos engineering is, how it differs from load testing and disaster recovery, the experiment loop, blast-radius controls, and game days — before you fault-inject backend services or browser apps.
000
Omid Farhang @omid.dev · 14/06/2026
en/de/fa + RTL, keyboard region shortcuts, URL-encoded lab checkpoints — share mid-simulation state with no backend. Final post in the Bio-Dynamics series. g.omid.dev/x2HIy7k #Accessibility #i18n #OpenSource
g.omid.dev
i18n, a11y, and Shareable Lab State in the Browser
How Bio-Dynamics supports English, German, and Persian, keeps keyboard and screen-reader paths usable, and encodes lab checkpoints in the URL.
000
Omid Farhang @omid.dev · 14/06/2026
82 stressors, 20 strains, 4 catalog tabs — data-first dashboard with hover impact preview and tests that catch silent no-op buttons. Post 4/5. g.omid.dev/uHLGE6i #TypeScript #Frontend #OpenSource
g.omid.dev
Catalog-Driven Dashboard: Strains, Stressors, and Action Impact
How Bio-Dynamics keeps 82 stressors, 20 strains, and four catalog tabs maintainable — and previews biome deltas before you click.
000
Omid Farhang @omid.dev · 14/06/2026
One Three.js scene: rotatable body map → fly into tissue cross-section. Instanced microbes, SCFA particles, immune haze tied to live sim state. No React/R3F. Post 3/5. g.omid.dev/IyBb76G #ThreeJS #WebGL #TypeScript
g.omid.dev
Macro/Micro 3D: One Scene Graph, Seven Tissue Builders
How Bio-Dynamics uses Three.js to fly from a rotatable body map into region-specific tissue cross-sections with instanced microbes and simulation-linked visual effects.
010
Omid Farhang @omid.dev · 14/06/2026
Bio-Dynamics sim layer: 30 Hz ticks, seeded PRNG, emergent inflammation, golden snapshot tests in CI. Educational — not clinical. Post 2/5 of the build series. g.omid.dev/boyAWHy #TypeScript #Simulation #OpenSource
g.omid.dev
Designing a Deterministic Microbiome Simulation Without Overclaiming Science
How Bio-Dynamics models barrier integrity, emergent inflammation, and microbe competition in a 30 Hz tick engine — with golden tests that keep the educational demo honest.
000
Omid Farhang @omid.dev · 14/06/2026
Most of my work is enterprise Angular. Bio-Dynamics is different — a 3D microbiome lab in the browser tied to health articles on my blog. 5-part series on how it was built. Post 1: why it exists. g.omid.dev/Efv0PTa #TypeScript #ThreeJS #OpenSource #EdTech
g.omid.dev
Building Bio-Dynamics: An Educational 3D Microbiome Lab in the Browser
Why I built a full-body microbiome sandbox — for education, open development storytelling, and exploring simulation and 3D outside my usual frontend lane.
000
Omid Farhang @omid.dev · 08/06/2026
A scalable frontend testing strategy starts with risk, not test types. What mistake are you trying to catch? That question tells you whether the test belongs in unit, component, integration, or E2E coverage. New: How to build a frontend testing strategy that actually scales. g.omid.dev/PUSlWc0
g.omid.dev
How to Build a Frontend Testing Strategy That Actually Scales
A practical frontend testing strategy for large teams: how to choose between unit, integration, component, and end-to-end tests in a real Angular codebase without creating slow, fragile coverage.
120
Omid Farhang @omid.dev · 08/06/2026
Flaky frontend tests are usually not random. They are tests depending on something they do not control: time, network, shared state, changing data, animations, or CI performance. New post: why frontend tests flake and how to fix them for good. g.omid.dev/8ECJvZO
g.omid.dev
Why Your Frontend Tests Flake and How to Fix Them for Good
A practical guide to reducing flaky frontend tests by improving isolation, waiting strategies, deterministic fixtures, test data, clocks, network control, and CI diagnostics.
010
Omid Farhang @omid.dev · 06/06/2026
I launched Omid Playground for the live companion demos behind my TechBlog articles. Each demo links back to the article and source code, so you can try the idea first, then read the walkthrough. playground.omid.dev #Frontend #Angular #WebDev
playground.omid.dev
Omid Playground | Live companion demos for omid.dev
Live companion demos for omid.dev technical articles. Try Angular, React, WebAssembly, Web Workers, micro frontends, Web Components, and CSS migration examples in the browser.
130
Omid Farhang @omid.dev · 04/06/2026
TIL: not all “CLI bugs” are bugs. Spent hours chasing weird behavior in a tool running inside Cursor. The issue wasn’t the tool, it was a Snap-installed version introducing a wrapper layer that behaved differently in subprocess environments. Did a native install. Everything became predictable again.
000
Omid Farhang @omid.dev · 03/06/2026
Building a tiny Linux app to explain desktop stutter. A hands-on Rust/Linux walkthrough: read /proc + /sys, parse Pressure Stall Information, build a small TUI, and turn kernel signals into something a desktop user can understand. g.omid.dev/uJPPO8M #Linux #Rust #DesktopLinux #Performance #Kernel
g.omid.dev
Building a Tiny Linux App to Explain Desktop Stutter
A hands-on Rust/Linux app walkthrough: build a small TUI that reads /proc and /sys, parses Pressure Stall Information, and turns kernel signals into an explanation for desktop stutter.
010
Omid Farhang @omid.dev · 02/06/2026
I’ve been on #Manjaro #KDE for years, but #Kubuntu 26.04 made me ask an unexpected question: did the distro I left quietly get better, or did I just learn #Linux better? A personal look at Ubuntu, Manjaro, KDE, AUR, #NVIDIA PRIME, and desktop Linux in 2026. g.omid.dev/MlHE7cZ
g.omid.dev
Ubuntu, Manjaro, and the Linux Desktop I Thought I'd Left Behind
After years on Manjaro KDE, I'm testing Kubuntu 26.04 again. A long-time Linux user's honest look at what changed on Ubuntu, what Manjaro still does well, and why hybrid NVIDIA laptops make the decisi...
000
Omid Farhang @omid.dev · 02/06/2026
Stop modeling screens with five booleans. If your UI has separate flags for loading, error, empty, retrying, and submitted, your template can render impossible states. The fix is not a clever @if chain. It is one honest screen model. g.omid.dev/fv90jQT #Angular #TypeScript #Frontend
g.omid.dev
Stop Modeling Angular Screens with Five Booleans
Most Angular UI bugs come from screens modeled as scattered flags. Replace loading, error, empty, and ready booleans with one explicit state model your templates and reviewers can trust.
040
Omid Farhang @omid.dev · 02/06/2026
Ich habe darüber geschrieben, wie sich Coding verändert, wenn man Vater wird. Nicht weil die Leidenschaft verschwindet. Sondern weil plötzlich kleine Hände, Fokuszeit, Schuldgefühle und echte Nähe mit im Raum sind. g.omid.dev/E88fEhZ #Vatersein #Entwicklerleben
g.omid.dev
Wenn ein Coder Vater wird: Zwischen Leidenschaft, Verantwortung und kleinen Händen
Tagsüber coden, nachts coden, Technologie als Leidenschaft und Identität. Dann kommt ein Kind — und plötzlich verändert sich die Frage nach Zeit, Balance und dem, was wirklich wichtig ist.
000