今日已更新 315 条资讯 | 累计 34599 条内容
关于我们

标签:#r

找到 29479 篇相关文章

AI 资讯

Your Loom App Quietly Became a Thread Pool Again: A Field Guide to Virtual Thread Pinning

The incident that taught me to respect pinning looked like nothing. A service freshly migrated to virtual threads, a load test that plateaued at about 420 requests per second no matter how much traffic we threw at it, CPU sitting at 9%, zero errors, zero warnings, nothing in the logs. The machine had 8 cores, and the one downstream HTTP call in the hot path took about 19 ms. Do the arithmetic: 8 × (1000 / 19) ≈ 421. The service that was supposed to scale to millions of virtual threads was serving exactly one request per CPU core. Loom had quietly handed us back a bounded thread pool, and the code looked perfectly innocent. That failure mode has a name — pinning — and this is the field guide I wish I'd had that night: what it is, the two (and only two) things that cause it, what JDK 24 changed, and how to catch it before your throughput graph does. What pinning actually is A virtual thread doesn't own an OS thread. It runs on a small pool of platform threads called carrier threads — concretely, the workers of a dedicated ForkJoinPool living in a thread group named CarrierThreads , with default parallelism equal to Runtime.availableProcessors() . When a virtual thread blocks — on I/O, a lock, a queue — it normally unmounts : it saves its stack, steps off the carrier, and frees that carrier to run another virtual thread. That unmount is the entire trick that lets a handful of OS threads serve millions of virtual ones. Pinning is when the unmount can't happen. The virtual thread blocks but stays mounted, and its carrier sits there doing nothing useful for the whole duration. One pinned carrier is a rounding error. But the default carrier pool is only as big as your core count, so if a hot path pins routinely, you pin every carrier at once — and then no virtual thread anywhere makes progress. That's not a slowdown; it's scheduler starvation, and from the outside it looks a lot like a deadlock. You can raise the ceiling with -Djdk.virtualThreadScheduler.parallelism=N , bu

2026-07-11 原文 →
AI 资讯

How I replaced LLM calls with coding agent calls and saved money

When building an AI agent, you need LLM calls. It can be done via a remote API or a local API, but either way you need to do it. Whether the agent is a simple conversational agent or a ReAct agent with a bunch of tools, whether it's using a complex graph or a simple RAG, it must be based on the concept of sending prompts to the language model. But, what if we replace the language model with... another agent? Let's say we already have a smart agent with a bunch of tools that can handle complex problems. Why not use it to build a new agent on top of it? This way we can focus on the specific custom functionality we want to achieve, while already having the common functionalities covered by the underlying agent. You might think this must be expensive. You get a better performance, so you have to pay for it, right? Well, not necessarily. The catch is that the coding assistants are actually surprisingly cheap when compared to API prices. They offer much more than raw LLM calls, they offer amazing agent functionality, but the cost is actually lower, and it's not a small difference. The cost of LLM calls per 1M tokens is usually between $2 and $7. For coding assistant subscriptions, it's a bit more tricky to calculate because you pay for monthly subscription, but it can be still converted to per 1M tokens cost, and from what LLM just told me it is around $0.08 to $2. That's a huge difference! And the complex agents are cheaper than raw LLM's! according to ChatGPT: Service Cost per 1M tokens Codex / ChatGPT coding plan ~$0.08 Cursor Pro ~$0.08–0.25 GitHub Copilot Pro ~$0.10–0.30 Claude Pro / Claude Code ~$0.74 GPT-5 API ~$2.1 Claude Sonnet API ~$4.2 Claude Opus API ~$7.0 according to Claude: Service Cost per 1M tokens Haiku 4.5 (API) $1.80 Sonnet 5 (API, intro thru Aug 31 '26) $3.60 Sonnet 5 (API, standard) $5.40 Opus 4.8 (API) $9.00 Fable 5 (API) $18.00 Claude Code — Pro ~$1.10–$2.15 (est.) Claude Code — Max 5x ~$2.10–$4.15 (est.) Claude Code — Max 20x ~$2–$4 (est.) So, why

2026-07-11 原文 →
AI 资讯

From Devnet to Mainnet: What Changes When Your Solana Program Goes Live

There's a moment in every Solana project where the work stops being about whether the program works and starts being about whether it's ready . You've tested it, the logic holds, the constraints are tight. Then you point it at mainnet, and a different set of questions shows up: questions about money, permanence, and strangers. This post is about that transition. Not the commands, which are short and well documented, but the shift in what you're responsible for once real users can touch your code. If you've been building on devnet and you're starting to think about a live launch, this is the mental model to carry in. Devnet was a sandbox. Mainnet is not. Devnet is a practice field. The SOL is free, you airdrop more whenever you run low, and if you deploy something broken, the only casualty is your afternoon. That safety is the whole point of devnet: it lets you fail cheaply and often, which is exactly how you should be learning. Mainnet removes the safety net, and three things change the moment you cross over. The SOL is real. Deploying a program allocates an on-chain account sized to your compiled binary, and you pay rent for that space in actual SOL. Larger programs cost more. This isn't a huge sum for a typical program, but it's real money leaving a real wallet, and that alone tends to sharpen how carefully you check things before you hit deploy. The audience is real. On devnet the only person calling your program is you. On mainnet, anyone can find your program and send it any transaction they like, the moment it's live. Everything from the security arc stops being theoretical: the accounts strangers pass in, the inputs you didn't expect, the edge cases you hoped no one would hit. Mainnet is where "every account is attacker-controlled until proven otherwise" becomes a live condition rather than a lesson. The mistakes are visible. A bad devnet deploy disappears into the noise. A bad mainnet deploy is a public event, on a permanent ledger, in front of the users you

2026-07-11 原文 →
AI 资讯

AI Agents: Memory Layers, Test Automation, and Workflow Orchestration

AI Agents: Memory Layers, Test Automation, and Workflow Orchestration Today's Highlights This week's highlights dive deep into critical aspects of AI agent development, from choosing the right memory layer for TypeScript agents to innovative applications in end-to-end testing and content automation. We explore practical frameworks and methodologies for building robust, intelligent workflows. Mem0 vs TurboMem: which memory layer actually fits your TypeScript agent (Dev.to Top) Source: https://dev.to/arneesh/mem0-vs-turbomem-which-memory-layer-actually-fits-your-typescript-agent-54pc This article offers a direct comparison between two popular memory management solutions for TypeScript-based AI agents: Mem0 and TurboMem. Mem0 is presented as a widely recognized choice, often implemented as a separate service. In contrast, TurboMem advocates for an embedded memory model, integrating directly into the agent's process. The core of the discussion likely revolves around the architectural trade-offs of these two approaches, particularly for AI agent orchestration. The piece would detail the implications of operating memory as a distinct service versus embedding it. Key considerations for developers would include performance overheads, operational complexity (e.g., managing another service for Mem0), and data consistency. It provides practical guidance on selecting the appropriate memory layer based on an agent's specific requirements, such as real-time responsiveness, scalability needs, and deployment environment. Understanding these differences is crucial for optimizing agent performance and ensuring efficient state management in complex AI applications. Comment: As someone building TypeScript agents, understanding the pros and cons of embedded versus service-based memory like Mem0 and TurboMem is essential for architecture and performance. This comparison helps me make informed decisions on how to manage my agents' state. Slack Introduces Agent Driven End-to-End Testing to

2026-07-11 原文 →
AI 资讯

pgrust: The Open-Source Project Rewriting PostgreSQL in Rust

Rewriting a Database Giant: Meet pgrust PostgreSQL is the bedrock of modern application development. It is incredibly stable and feature-rich, but it is built on a C codebase that started in the 1980s. In systems programming, legacy C architectures carry memory-safety risks and make core changes difficult. pgrust is an experimental open-source project that aims to rewrite the entire PostgreSQL database engine from scratch in Rust. The project recently hit a historic milestone: it now passes 100% of the official PostgreSQL 18.3 regression test suite (over 46,000 test queries). What is pgrust? pgrust is a native reimplementation of the Postgres query execution and storage layers. Unlike other projects that wrap Postgres or write extensions, pgrust is a complete rewrite of the database core itself. Crucially, it is disk-compatible with PostgreSQL 18.3, meaning it can boot up and read from an existing Postgres database directory on your machine. Key Technical Improvements By shifting from C to Rust, pgrust introduces several modern engineering improvements: 1. Memory Safety Rust’s strict compiler guarantees eliminate major classes of security vulnerabilities (like buffer overflows and dangling pointers) that frequently patch legacy C databases. 2. Thread-Per-Connection Model Standard PostgreSQL uses a "process-per-connection" architecture, which consumes a lot of system memory. pgrust changes this to a "thread-per-connection" model, drastically reducing the overhead of open connections. 3. Massively Improved Performance Because of its optimized query engine and thread-based architecture, early benchmarks show: 50% faster execution on standard transaction workloads. Up to 300x faster execution on analytical workloads. Built with an "AI Agent Factory" Rewriting a database with millions of lines of code is a monumental task. The authors of pgrust accomplished this by setting up an automated pipeline of concurrent AI coding agents. The agents were tasked with explaining leg

2026-07-11 原文 →
AI 资讯

I made an AI yell my workouts at me (Sonic Kinetic)

What I built I wanted a workout timer that doesn't just beep at me. So this weekend I built one that writes the workout AND talks me through it, out loud, in a voice that actually sounds like it's yelling at you when things get hard. You give it a callsign, how long you've got, what you want to work, and how brutal you want it. It hands that to Gemini, which breaks the whole thing into 30-90 second intervals with a coaching line for each one. Then every one of those lines gets turned into real audio by ElevenLabs before it ever hits your browser. Nothing is pre-recorded, nothing is a fixed track. Ask for a different workout, get a completely different script and a completely different set of audio clips, generated on the spot. Demo Unedited screen recording, straight off my machine hitting the real APIs, sound included. Compose a routine, it comes back in a couple seconds, pacing curve draws itself as an SVG line, then hitting Start walks through each interval with the active one highlighted in red as it counts down and you actually hear it. The Maximum-intensity segments sound noticeably more unhinged because I turn the ElevenLabs stability knob way down for those specifically. Code https://github.com/marwankous/sonic-kinetic How I built it Go backend, one endpoint. It takes your workout params, sends a prompt to gemini-3.1-flash-lite with a JSON schema locked down tight enough that I don't have to think about parsing garbage back out of it, and gets back a full timeline plus a heart-rate pacing curve. The part I actually enjoyed was the audio pipeline. Every coaching line in the timeline gets fired off to ElevenLabs at the same time, one goroutine each behind a sync.WaitGroup , so a routine with a dozen segments doesn't take a dozen times longer than one with a single segment. Whatever comes back gets base64'd straight onto its segment. I also tie the eleven_flash_v2_5 stability setting to the segment's energy level, dropping it to 0.30 for anything marked Maximum

2026-07-11 原文 →
AI 资讯

Streaming journald logs to the browser with SSE

I got tired of SSHing into the box every time I shipped something, just to watch the logs come up. So I wanted a page in the admin panel where the lines scroll past as they happen, no dashboard, no Grafana, just the raw tail. The surprising part was how little I had to build for it, most of the pieces were already sitting on the server waiting for me to connect them. Here's the whole idea. The app writes JSON to stdout, systemd grabs that stdout and drops every line into the journal, and journalctl can follow the journal and hand the lines back live. All three of those already exist on an Ubuntu box. So the "live log viewer" is really just me spawning journalctl on the server and piping its output to the browser over an EventSource , which is a lot less code than it sounds like. journald is boring and well understood. SSE is boring and well understood (it's been in browsers since about 2011). Nobody gets excited about either one on its own. But snap the two together and you get a real-time log tail with no agent, no log shipper, no vendor, and nothing new to keep alive. Two defaults meeting each other and pretending to be a feature. Systemd thing People have opinions about systemd. Some of them are that you should avoid every part of it that you can, run your own supervisor, ship logs somewhere with your own daemon, and treat journald as a thing to route around. That's a fine hobby if you have the time for it. I don't. The box boots, systemd starts my unit, and when the unit writes to stdout the line ends up in the journal without me configuring anything. Being a purist here costs real hours and buys me a philosophy. Being pragmatic costs nothing and buys me a log tail. So this is the pragmatic path. If you're on a distro where journald is the default (Ubuntu, Debian, Fedora, most of them now) the setup below is basically free. Getting logs into the journal Here is the part most people overcomplicate. You do not "set up journald". You do not open a socket to it or p

2026-07-11 原文 →
AI 资讯

Mem0 vs TurboMem: which memory layer actually fits your TypeScript agent

Mem0 is the name everyone hears first. If your agent runs in TypeScript, TurboMem bets on a different model i.e embedded memory in your process, not another service to operate. Here is an honest comparison based on hard facts. If you are building an AI agent that needs to remember things across sessions, you have probably run into Mem0 already. It is one of the most talked about memory layers in the space, well funded and framework agnostic. But if your stack is TypeScript, there is a newer option worth a serious look: TurboMem . It takes a different architectural bet, and for a lot of TS focused companies, that bet pays off. The core difference: embedded vs server based This is really the whole story, and it is worth understanding before anything else. Mem0 is built around a separate memory service. Even in its open source form, the typical setup wires up a Postgres instance with pgvector, or Qdrant, plus optionally Neo4j for graph memory, then talks to that stack either through the Python Memory class or over an HTTP API. Every memory read or write crosses a process boundary. TurboMem skips that boundary entirely. It runs inside your Node, Bun, or browser process as a native TypeScript library. There is no sidecar, no separate memory server, and no network hop for a local memory call. You call memory.add() or memory.search() and it executes in process, backed by PGlite (a WASM build of Postgres) by default. If you are shipping a TypeScript product and want memory to behave like any other library you import, this is a meaningfully simpler model. Getting started With TurboMem, setup is about as light as it gets: npm install turbomem PGlite ships as a dependency, so the default stack (OpenAI embeddings plus PGlite storage) works right after install, no database to provision. With Mem0, self hosting means standing up actual infrastructure. The typical Docker Compose deployment involves a Postgres container with the pgvector extension, optionally a Neo4j container for

2026-07-11 原文 →