Dev.to
UFC Underdog ROI: I Tracked 500 Fights to Find Systematic Mispricings
The sportsbook odds for UFC 287 showed Sean Strickland at +340 against Dricus du Plessis. Most bettors saw a reasonable risk-reward opportunity. What they didn't see—what the market systematically misses—is that fighters in Strickland's exact statistical profile win substantially more often than their odds suggest. When Strickland knocked out du Plessis in the second round, it wasn't luck. It was a textbook case of market inefficiency that data reveals happens repeatedly in MMA. I spent six months building a comprehensive dataset of 500 UFC fights, cross-referencing striking accuracy, takedown defense, fight duration patterns, and historical betting odds against actual outcomes. What emerged was clear: the UFC betting market is inefficient in predictable ways. Certain underdog profiles generate consistent positive return on investment (ROI) that would be impossible if prices reflected true win probabilities. This isn't hindsight bias or cherry-picked examples. This is systematic analysis of where prediction markets get MMA wrong—and how you can identify it before the bell rings. The UFC Analytics Ecosystem: Why Data Matters More Than Ever Five years ago, serious MMA analytics barely existed outside Reddit threads and YouTube channels. Today, the landscape has transformed completely. UFCStats.com provides granular fight data that didn't exist in the sport's early years. Betting markets across DraftKings, FanDuel, and international books generate millions in handle. Meanwhile, fighter training data, coaching staff analytics, and institutional scouting reports are becoming increasingly sophisticated. Yet there's a persistent gap between information availability and information utilization . The casual bettor sees a -250 favorite and assumes the math is settled. Sportsbooks, operating on relatively thin margins and managing liability across thousands of bets, often make conservative assumptions. They price based on public perception, recent results, and popularity rathe
Edge Lab
2026-06-27 20:23
👁 11
查看原文 →
Product Hunt
Receiptor AI — Agent Mode
Bookkeeping that keeps itself Discussion | Link
2026-06-27 20:16
👁 6
查看原文 →
The Verge AI
This puzzle game’s simple premise hides surprising depth
What's the Password? has a simple concept: To solve each of the game's more than 100 puzzles, you have to type in the right four-digit password on a number pad. That might sound like a limited constraint. But the simplicity gives solo developer Dan DiIorio, better known as TrampolineTales, lots of room to play with […]
Jay Peters
2026-06-27 20:00
👁 9
查看原文 →
TechCrunch
Asian AI startups launch Mythos-like models as Anthropic’s export ban drags on
New models are launching in Asia that promise Mythos-like capabilities without fear of an export ban. U.S. AI labs may never recover this enormous market.
Kate Park
2026-06-27 20:00
👁 6
查看原文 →
Engadget
A sidescrolling roguelite platformer, Steam Deck air hockey and other new indie games worth checking out
The Steam Summer Sale is underway.
staff@engadget.com (Kris Holt)
2026-06-27 20:00
👁 5
查看原文 →
HackerNews
Ukraine launches 40-day operation to push Russia to end the war
ortr
2026-06-27 19:49
👁 4
查看原文 →
Dev.to
I Got Tired of Rewriting AI API Wrappers, So I Built a Gateway
Every side project starts the same way. -Generate an OpenAI key. -Add it to .env. -Write a...
Lolo
2026-06-27 19:35
👁 5
查看原文 →
HackerNews
Ornith-1.0: A family of open-source LLMs specialized for agentic coding
jalopy
2026-06-27 18:45
👁 4
查看原文 →
Wired
Security News This Week: LastPass Users Had Their Data Stolen—Again
Plus: Former national security advisor John Bolton pleads guilty in classified-materials case, Microsoft helps take down major infostealer infrastructure, and more.
Lily Hay Newman
2026-06-27 18:30
👁 9
查看原文 →
Wired
The 37 Best Outdoor Deals From the REI 4th of July Sale
Whether you need a tent, sleeping pad, rain jacket, or new pack, REI’s Independence Day sale has something for everyone.
Scott Gilbertson
2026-06-27 18:06
👁 9
查看原文 →
Dev.to
What 10,000 domains actually publish for email authentication in 2026
Email authentication has been "solved" on paper for years. SPF, DKIM, and DMARC are old standards, every deliverability guide repeats them, and Google and Yahoo made DMARC effectively mandatory for bulk senders in 2024. So I expected the top of the web to be in good shape. In June 2026 I ran SPF, DKIM, DMARC, and MTA-STS checks across the Tranco top 10,000 domains, using public resolvers (1.1.1.1 and 8.8.8.8) and the same checks my own tool runs. The records are public DNS, so anyone can reproduce this. The picture is worse than the "solved problem" framing suggests, and the interesting part is not adoption, it is where people stop. A third of the top 10k still have no DMARC 3,318 of the 9,937 domains that resolved (33.4%) publish no DMARC record at all. These are not obscure sites, they are the most-visited domains on the web. Without DMARC a receiver has no published instruction for what to do when SPF and DKIM fail, and you get none of the aggregate reporting that tells you who is sending as you. It does get better at the very top. Among the top 1,000 domains, 28.4% have no DMARC, versus 34% across the rest of the 10k. Better, not good. The real problem is p=none, not missing records This is the number that actually matters. Of the 6,619 domains that do publish DMARC, only 46.5% are at p=reject . About a quarter (26%) are still sitting at p=none . p=none is monitor-only. It asks receivers to report what they see and to enforce nothing. It is the correct first step: publish p=none , collect aggregate reports, fix the sources that should be passing, then tighten the policy. The trouble is that p=none is also where most deployments quietly stop. The reports start arriving, nobody reads them, and the domain sits unprotected behind a policy that does nothing while looking like progress. Moving from p=none to p=reject is the step that turns DMARC from a dashboard into a defense, and it is the step most people never finish. I wrote up the safe way to make that move , si
Vadim Ivanov
2026-06-27 17:51
👁 10
查看原文 →
Dev.to
The Introduction
Operating system, a thing that everybody uses but no one talks about. While reading Operating Systems: Three Easy Pieces (OSTEP), my background in C and C++ fueled a growing fascination with memory allocation, virtualization, scheduling, and the intricate mechanics of operating systems. This would be a series of article, the number i am not sure, it will be the amount of content that someone might comfortably read in a 10 min Article. Keeping each piece to a solid 10-minute read is the perfect sweet spot for a developer to read over a cup of coffee. It gives you enough runway to explain a core concept, show the math, and link a practical C/C++ experiment without making their eyes glaze over. Why this Article ? We are often warned against “reinventing the wheel.” However, I firmly believe that building and optimizing modern software is impossible without a fundamental grasp of virtualization, memory allocation, and concurrency. Consider Docker: it functions almost entirely on OS-level virtualization features like Namespaces, cgroups, and isolated filesystems. Similarly, the highly optimized Memory Manager in PostgreSQL only works because it leverages the robust memory management systems already written into the OS kernel. This article aims to bring the core concepts of OSTEP to life through practical experimentation. By accompanying the theory with an open-source repository, my goal is to provide a clear, interactive learning experience that demystifies operating systems. I am not an operating system guru or a Principal Engineer with years of experience, but I hope to become one someday (assuming AI doesn’t replace me first… HeHe ). What I can do is dive in, explore, and try to understand these concepts by actually building things. Because of that, my goal here is to present the findings and experiments I explore rather than giving strong opinions — I’ll leave the comment section for those! Any support, feedback, or contributions from the community will be incredibly
c0d3l0v3r
2026-06-27 17:48
👁 11
查看原文 →
Dev.to
I hooked up Trading212 to Home Assistant and now Alexa tells me if I'm up or down every morning
I've been using Home Assistant for a few years and Trading212 for longer than that. It was inevitable these two things would end up connected. The Trading212 API is surprisingly good — portfolio value, individual positions, pies, dividends, all there. So I wrote a custom integration to pull it all into HA as sensors, then a Lovelace card to make it actually look decent on a dashboard rather than a wall of entity rows. The card does zero-config auto-discovery which was the bit I spent the most time on. You drop it on a dashboard and it finds your sensors automatically — no copying entity IDs, no manual config unless you want it. Five card types: portfolio overview with a sparkline, scrollable positions list, pies with goal progress, and a combined one if you want everything in one card. The sparkline was fiddly. HA's recorder only writes state changes, not regular samples, so if your portfolio value is flat between polls the chart has gaps. Had to smooth over those client-side. The part I use most though is the automations. Every weekday at 8am Alexa tells me where I stand: action : - action : notify.alexa_media_kitchen data : message : > Portfolio is worth {{ states('sensor.trading212_total_value') | float | round(0) | int }} pounds. Today you are {% if states('sensor.trading212_pnl_today') | float >= 0 %}up{% else %}down{% endif %} {{ states('sensor.trading212_pnl_today') | float | abs | round(2) }} pounds. data : type : tts And Friday at 6pm I get the weekly version with P&L for the week and which position moved the most. I like that it just tells me — if the market's had a bad week I'd probably avoid opening the app, but Alexa doesn't give me the option to ignore it. Both the integration and the card are on GitHub. The card is in HACS as a custom repo while it waits for default catalogue approval: https://github.com/Smart-Home-Assistant-UK/lovelace-trading212-card I wrote up the full setup with all the automation YAML here if you want to copy the whole thing: ful
Sepehr
2026-06-27 17:47
👁 6
查看原文 →
Dev.to
How AI changes what 'learning' means
How AI Changes What 'Learning' Means Hook: Amre learned Python using AI. No, not just using AI as a supplementary tool—he learned from AI, as if it were his personal tutor. If AI can teach a complex skill like programming, what does that mean for the future of education? Background: The traditional education system, with its structured curriculums and standardized testing, has long been criticized for its rigidity. Enter AI, and suddenly, the landscape of learning is shifting. AI tutors, adaptive learning platforms, and intelligent coding assistants like GitHub Copilot are becoming ubiquitous. These tools are not just helping students with homework; they are fundamentally altering the way we acquire new skills and knowledge. Consider Amre's experience. Frustrated with the slow pace of a traditional Python course, he turned to an AI-powered learning platform. The AI assessed his current knowledge, identified his learning style, and tailored a curriculum specifically for him. It provided instant feedback, suggested additional resources, and even simulated real-world coding challenges. Within weeks, Amre was writing functional code and solving complex problems—something he hadn't thought possible in such a short time. This isn't an isolated incident. Across the globe, learners are turning to AI for personalized education experiences. From language learning apps that adapt to your pace and style, to AI tutors that can explain complex mathematical concepts in multiple ways until you understand, the traditional classroom is being redefined. Analysis: The most significant change AI brings to learning is personalization. Unlike traditional education systems that follow a one-size-fits-all approach, AI can adapt to the unique needs of each learner. It can identify gaps in knowledge, adjust the difficulty level of tasks, and provide customized feedback. This level of personalization was previously only available to those who could afford private tutors. Moreover, AI democrati
Pixelwitch
2026-06-27 17:45
👁 8
查看原文 →
Dev.to
Framework-Specific Env Patterns
Your schema is portable. But each runtime loads environment variables differently. CtroEnv adapters bridge the gap — same validation logic, different data sources. Node.js: process.env + .env Files The @ctroenv/node adapter loads .env files and wraps process.env : import { defineEnv , string , number } from " @ctroenv/core " import { loadEnv } from " @ctroenv/node " const env = defineEnv ( schema , { source : loadEnv () }) loadEnv() resolves files in order: .env — shared defaults .env.{NODE_ENV} — environment-specific ( .env.development , .env.production ) .env.local — local overrides (gitignored) Later files override earlier ones. process.env takes precedence unless override: true . Monorepo Root loadEnv ({ path : " ../.. " }) // look up two directories for root .env Native Node 22+ Node 22 has built-in process.loadEnvFile() . Use native: true to delegate: loadEnv ({ native : true }) // uses process.loadEnvFile() if available Falls back to the custom parser on older Node versions. System Fallback By default, only file values are returned. With system: true , missing keys fall through to process.env : loadEnv ({ system : true }) Standalone Parser Use parseEnvFile() directly for custom file loading: import { parseEnvFile } from " @ctroenv/node " const content = readFileSync ( " .env.custom " , " utf-8 " ) const vars = parseEnvFile ( content ) Handles quotes, multiline values (backslash continuation), interpolation ( ${VAR} ), comments, and export prefix. Vite: Build-Time Validation The @ctroenv/vite plugin validates during the build: // vite.config.ts import { ctroenvPlugin } from " @ctroenv/vite " export default defineConfig ({ plugins : [ ctroenvPlugin ({ schema : " ./src/env.ts " }), ], }) If DATABASE_URL is missing, the build fails — no broken artifacts shipped. Schema Options Pass a file path or inline definition: // File path — imports the module, looks for `schema` export ctroenvPlugin ({ schema : " ./src/env.ts " }) // Inline definition ctroenvPlugin ({ schem
Odejobi Abiola Samuel
2026-06-27 17:43
👁 8
查看原文 →
Dev.to
9 PM Teams Call Layoffs: The Offshore Kill‑Switch
The 9 PM Teams call layoffs that vaporized an entire India engineering office aren't merely a cautionary tale—they are a case study in remote-first management rot. Around 150 employees were invited to a surprise Microsoft Teams call late in the evening and informed, without any prior warning, that their team was being shut down and the company was closing its India operations 1 [^2]. No severance. No transition. Just a kill switch flipped from a different timezone. This isn't a single rogue employer. It’s a playbook. The late-night call exploits the timezone gap to avoid in-person confrontation and suppress immediate collective response. It’s a clean, cowardly sever for a leadership class that has confused “remote” with “disposable.” How the 9 PM Teams call layoffs became a remote-first weapon The mechanics are always the same: a sudden, mandatory all-hands drops on calendars minutes before it starts. The meeting is short. An HR representative or a pre-recorded executive message delivers the news. Access is cut before anyone can ask a real question[^1:0][^2:0]. A former employee detailed the sequence in a viral social media post: “Around 150 members of our engineering team were invited to a 9 PM Microsoft Teams call, where we were informed that our team was being shut down”[^3]. The shock isn't accidental—it’s functional. Surprise prevents organizing. It prevents screen-recording. It prevents the kind of immediate, unified pushback that might force a negotiation on severance or notice periods. Red flag: When your office is “the offshore office” The structural vulnerability is clear. In many global firms, India operations function as a cost center rather than a strategic core. The moment a CFO runs a spreadsheet and sees a quick path to positive EBITDA by zeroing out a foreign subsidiary, the engineers there become a line item. The 9 PM Teams call layoffs are the logical endpoint of this relationship: the timezone isn't just a scheduling inconvenience, it’s a control
techpotions
2026-06-27 17:42
👁 9
查看原文 →
Dev.to
VERCEL_EXPERIMENTAL_DEV_SKIP_LINK: Stop Dev Link Hangs
TL;DR If the Vercel CLI keeps trying to open a dev link against your Vercel project during local next dev runs, set VERCEL_EXPERIMENTAL_DEV_SKIP_LINK=1 in the shell that launches the dev server, or add it to .env.local at the project root, and restart the process. The flag is opt-in, all-uppercase, and only affects local CLI behaviour. It never reaches your deployed build, and the production runtime on Vercel does not read it. If the CLI still tries to link after a restart, scroll to Debugging when the skip link isn't working for the version-compatibility and process-tree checks that catch the cases the basic setup misses. I have shipped this flag in three production monorepos and the same four mistakes account for almost every "I set it and it did nothing" report I see. What VERCEL_EXPERIMENTAL_DEV_SKIP_LINK actually does VERCEL_EXPERIMENTAL_DEV_SKIP_LINK is an opt-in environment variable the Vercel CLI honours when it runs alongside a local Next.js dev server. Its job is narrow: tell the CLI to skip the step where it would normally reach out to Vercel and create or refresh a dev link against your Vercel project. A "dev link", in the Vercel sense, is a local connection record that lets vercel dev and some Vercel-only local emulators (KV, Postgres, Edge Config) pull real values from a Vercel project. It is useful when you want production-shaped data during development, and a real annoyance when you do not — for example in CI sandboxes, offline laptops, monorepo workspaces that share a single project, or any time you want next dev to behave like a plain Node process without the CLI wrapping it. The variable is shipped under the VERCEL_EXPERIMENTAL_ namespace, which Vercel uses to mark features that can change between CLI versions. That has two practical consequences: the name must be uppercase with underscores, and you should not build production logic on top of it. I treat it like a local-dev knob, set per shell session, and never check it into CI as a hard dependen
Mahdi BEN RHOUMA
2026-06-27 17:42
👁 8
查看原文 →
Dev.to
How to Keep Your AI App Independent From Model Providers
Most AI applications begin with a direct model integration. Install an SDK, add an API key and send a prompt. This works well until the application needs a second provider. A coding task may work better with one model, while another may be more suitable for vision, reasoning, long context or low-cost processing. At that point, model access becomes an architecture problem. The dependency problem When provider-specific logic lives inside product code, the application becomes responsible for: authentication request formats model names rate limits retries usage tracking error handling provider switching Every new provider increases this complexity. The solution is to introduce a model layer between the application and the providers. Define workloads, not providers Your product should describe what it needs instead of deciding how a specific provider should deliver it. type Workload = | "reasoning" | "coding" | "vision" | "fast-response"; interface AIRequest { workload: Workload; input: string; } interface AIResult { content: string; model: string; provider: string; usage: number; } The routing policy can remain outside the application: const modelPolicy = { reasoning: "reasoning-model", coding: "coding-model", vision: "vision-model", "fast-response": "low-latency-model" }; async function runAI(request: AIRequest): Promise { const model = modelPolicy[request.workload]; return modelLayer.generate({ model, input: request.input }); } Now the product depends on workloads and capabilities rather than one provider’s SDK. Compatibility is only the beginning A compatible request format reduces integration work, but production systems also need: centralized API keys usage and cost records retry policies provider health checks billing rules fallback models operational logs This is why multi-model infrastructure is becoming its own application layer. VectorNode is being built around this category: multi-model access and operations for AI applications. The long-term advantage is not
vectronodeAPI
2026-06-27 17:40
👁 6
查看原文 →
HackerNews
Show HN: The TypeScript Semantic Layer for ClickHouse
I've built a type-safe semantic layer in code, for ClickHouse. If you're building analytics off ClickHouse in TypeScript, I would love your feedback. With hypequery there is no platform to adopt, no YAML sprawl. It runs where your app runs. Key features: - Define metrics once, reuse them everywhere: Declare dimensions and measures in one place and then pull from the same source of truth. - Compiles to ClickHouse SQL: No service, no proxy, no extra runtime to deploy. It's a library that generates
lureilly1
2026-06-27 17:37
👁 4
查看原文 →
Dev.to
Cutting OpenAI Costs From Scratch: What Nobody Tells You
Cutting OpenAI Costs From Scratch: What Nobody Tells You Three months ago I sat down with my finance lead and watched her scroll through our OpenAI invoice. The number was $14,200 for the month. That was the moment I knew we had a problem. Not a "maybe we should optimize" problem — a real, existential, "this kills our margins before we hit Series B" problem. I run a B2B SaaS platform that does a lot of LLM-powered document processing. Summarization, extraction, classification, the boring stuff that makes real money but burns tokens like crazy. We were routing everything through GPT-4o because, honestly, it was the path of least resistance when we started. Then the bills started arriving. This is the story of how I cut our LLM spend by 97%, the architecture decisions that made it possible, and the things I wish someone had told me before I started. The Math That Made Me Sweat Let me put actual numbers on the table. Here's what I was paying versus what I pay now: Model Provider Input $/M Output $/M vs GPT-4o GPT-4o OpenAI $2.50 $10.00 — GPT-4o-mini OpenAI $0.15 $0.60 16.7× cheaper DeepSeek V4 Flash Global API $0.18 $0.25 40× cheaper Qwen3-32B Global API $0.18 $0.28 35.7× cheaper DeepSeek V4 Pro Global API $0.57 $0.78 12.8× cheaper GLM-5 Global API $0.73 $1.92 5.2× cheaper Kimi K2.5 Global API $0.59 $3.00 3.3× cheaper Look at that DeepSeek V4 Flash row. 40× cheaper than GPT-4o. For comparable quality on the workloads I was running. I had been leaving 97.5% of my budget on the table. Doing the mental math: a $500/month OpenAI bill becomes $12.50. My $14,200 bill? Theoretically $355. That's not optimization, that's a different business. Why I Almost Didn't Do It Here's the thing nobody tells you about cost optimization at a startup: it's not a technical problem, it's a willpower problem. The reason I was paying OpenAI 40× too much wasn't because their API is hard to use. It was because switching felt risky. I had deadlines. I had a roadmap. I had investors asking about g
eagerspark
2026-06-27 17:37
👁 5
查看原文 →