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

标签:#r

找到 31766 篇相关文章

开发者

While VCs pour billions into humanoids, Hugging Face's tiny open-source robot quietly passed $1M in sales

I just wrote about the billion-dollar rounds flooding into humanoid robotics. Here is the story from the other end of the scale, and I find it more encouraging. Hugging Face's open-source robot, a 25-centimeter bipedal machine with fifteen actuators and a sensor kit that includes a camera, speaker, LiDAR, NFC, Bluetooth, and WiFi, just passed a million dollars in sales. Fully open hardware, openly documented, quietly making real money. One of these robotics stories is funded like an industrial giant. The other is a small, open, shippable thing that people are actually buying. They are both true, and the small one is the one most builders can learn from. Open hardware turned out to be a business The reflexive assumption about open-source hardware is that you cannot make money on it, because anyone can copy the design. Hugging Face's robot is a live counterexample. The plans are open, the software stack is open through their LeRobot ecosystem, and it crossed a million in sales anyway. That is worth sitting with, because it means openness and revenue are not the opposites people assume. The reason it works is the same reason open-source software companies work. Most buyers do not want to source fifteen actuators, fabricate a chassis, and debug a sensor stack to save money on a robot that already exists and is affordable. They want the finished thing, they want it to work out of the box, and they are happy to pay the people who designed it. Openness is not the giveaway that kills the business. It is the trust and the ecosystem that make the business, because you can see exactly what you are buying, modify it, and build on a platform other people are also building on. Why this is the better story for builders The mega-funded humanoid companies are placing a bet only a handful of players can place: billions of dollars, years of runway, factories. That is a real path, and it is not your path or mine. The Hugging Face robot is the other path, and it is copyable. Small, open

2026-08-29 原文 →
AI 资讯

"forces replacement": the Terraform plan line nobody reads

Line 267 of a 427-line Terraform plan: # aws_rds_cluster.reporting must be replaced - /+ resource "aws_rds_cluster" "reporting" { ~ arn = "arn:aws:rds:us-east-1:842910557412:cluster:reporting" - > ( known after apply ) ~ cluster_resource_id = "cluster-D85642F9611A" - > ( known after apply ) ~ engine_version = "14.9" - > "15.4" ~ id = "reporting" - > ( known after apply ) ~ storage_encrypted = false - > true # forces replacement # (29 unchanged attributes hidden) } The merge request says "bump reporting Postgres to 15.4." The plan does exactly that. It also destroys the reporting database and creates an empty one in its place. Underneath the known-after-apply churn, two attributes are changing. One is the version bump, the thing your MR is about. The other is storage_encrypted flipping from false to true , and it isn't yours. Someone on another team that shares this repo merged it earlier in the week. You're just the one deploying. You review other people's Terraform MRs and have a feel for what each stack normally does; most weeks someone else shepherds the deploy. Today it's you. Your change goes out next, so you're carrying everything merged since the last deploy, including work you never reviewed and had no reason to know about. Nobody was negligent. The queue simply had someone else's change in it. It's a good change, by the way. You want encrypted storage. But there's no in-place path from unencrypted to encrypted on an RDS cluster. Terraform's only move is destroy and create. That's what -/+ means, and the comment at the end of the line says it in plain English: forces replacement . And the version bump alone would have failed. Going from 14 to 15 is a major version upgrade, and Aurora refuses those unless the config sets allow_major_version_upgrade = true . This one doesn't. That MR by itself would have died at apply, loudly, with an error naming the exact problem. A replacement doesn't upgrade anything. It creates a new cluster at 15.4 from scratch, so the f

2026-08-29 原文 →
AI 资讯

Why I separated live discovery from the AI chat box

Most AI workspaces start with the same useful primitive: a chat box. I kept one in AI Workstation because it is still the fastest interface for many research and writing tasks. But while using the product for day-to-day work, I found two questions that did not belong in a general chat flow: What current topic is worth researching today? Which open-source AI project is worth evaluating now? Both questions depend on live evidence. They also have different failure modes from ordinary drafting. A model can produce a fluent answer while using stale memory, mixing project identities, overlooking a license, or treating popularity as proof of quality. That led me to split AI Workstation into three layers: a general workspace, public discovery Radars, and installable Agent Skills. Layer 1: the workspace The main AI Workstation handles everyday knowledge work: questions, links, documents, images, drafting, proofreading, reusable templates, and exports. The point is not to hide every operation behind one large prompt. It is to keep routine work accessible while letting tasks that need current data move into a more explicit flow. Layer 2: public Radars for live discovery The first Radar is Global Topic Radar . It is designed for creators and editors who need current candidates rather than generic content ideas. It keeps the topic lane, freshness, market context, evidence state, and original sources visible. The second is Open-Source AI Radar . It is designed for developers and researchers comparing active AI projects. It presents dated rankings, categories, collections, and project cards with direct links to upstream repositories. Stars, forks, licenses, languages, and practical summaries are treated as research inputs. The important design choice is what the Radars do not claim: A topic score is not a prediction that a post will go viral. Project popularity is not a security audit or a quality guarantee. A generated summary does not replace the upstream repository or license t

2026-08-29 原文 →
AI 资讯

Playwright Email Testing: A Real End-to-End Tutorial (No Mocks)

Most "email testing" advice ends at stubbing the send call. You assert that your app tried to send a message, and the test goes green. That leaves the interesting half untested: whether the message actually left your infrastructure, whether the template rendered, and whether the six-digit code inside it matches the one your backend is willing to accept. This walks through the other approach — driving a real signup flow in Playwright , letting a real email get delivered to a real inbox, then reading it back over an API and typing the code into the page. No mail server to run, no shared QA mailbox to clean up. The shape of the problem A verification-email test has four moving parts: an address that is unique to this test run, the browser flow that triggers the send, a way to read the message that arrives, code extraction and the assertion. Steps 1 and 3 are the ones people get wrong, and they get them wrong in the same way: by sharing one mailbox across the suite. The moment two tests run in parallel, one of them reads the other's email. So the rule is one inbox per test , provisioned on the fly and thrown away afterwards. The inbox helper Any disposable-inbox API with a REST interface works here. I'll use MoeMail 's because it's open source and the free tier is enough for a CI suite — the shape is the same anywhere, so swap the base URL and the auth header if you use something else. // inbox.ts const API = ' https://moemail.app/api ' const KEY = process . env . MAIL_KEY ! export type Inbox = { id : string ; email : string } export async function createInbox ( ttlMs = 3 _600_000 ): Promise < Inbox > { const res = await fetch ( ` ${ API } /emails/generate` , { method : ' POST ' , headers : { ' X-API-Key ' : KEY , ' Content-Type ' : ' application/json ' }, // Omit `name` and a random local part is generated for you — which is // exactly what you want, so parallel tests can never collide. body : JSON . stringify ({ expiryTime : ttlMs , domain : ' moemail.app ' }), }) if

2026-08-29 原文 →
开发者

Cloudflare KV for Session Caching in Multi-Tenant FastAPI: Reducing PostgreSQL Load Without Redis Complexity

Cloudflare KV for Session Caching in Multi-Tenant FastAPI: Reducing PostgreSQL Load Without Redis Complexity Every SaaS I've built hits the same wall: session validation on every request hammers PostgreSQL. You add Redis, suddenly you're managing another service, debugging cache invalidation, and paying for redundancy you don't need. Then I discovered Cloudflare KV sits between your users and origin server. It's not a replacement for PostgreSQL—it's a read cache positioned at the edge that auto-syncs on writes. For multi-tenant session and permission data, this eliminates 60–80% of auth-related database queries without the operational complexity of Redis. This is the approach I use in CitizenApp. Here's why it works, how to implement it, and where I nearly broke production. Why Cloudflare KV Beats Redis for Session Caching Redis requires: A separate service deployment (Render, AWS ElastiCache) Connection pooling logic in your app Cache invalidation strategies you'll get wrong Monitoring for memory leaks and eviction Cost that scales with your hot data size Cloudflare KV requires: A binding in your edge worker (one line of config) Simple key-value storage at 200+ edge locations Automatic TTL expiration Zero operational overhead—Cloudflare manages it Here's my honest take: I prefer KV because I don't have to think about it. My workers validate JWT tokens and fetch session data from KV before even routing to my FastAPI origin. Cache misses flow to PostgreSQL and write back to KV. No connection pools. No eviction policies. No debugging Redis memory fragmentation at 3 AM. The tradeoff? KV is slower than in-memory Redis (ms vs microseconds), but for session lookups happening 200+ times per second per user at global scale, edge-cached responses beat origin-fetched ones every time. Architecture: Edge Validation + Origin Sync Your flow looks like this: Request hits Cloudflare Worker Worker checks KV for session + permissions (hit = serve immediately) KV miss → fetch from Fas

2026-08-29 原文 →
AI 资讯

I built managed hosting for Hermes Agent so I could stop babysitting a VPS

The problem I run Hermes, an open-source agent with tools, memory, and cron built in. Before running my own managed service SaaS, I used various competitors to deploy on VPS. This method has a lot of downsides because you are often SSH'ing in and managing secrets directly in a .env file, which can leave you exposed if your box is compromised. It is also very cumbersome, especially for agencies to manage these "alway-on agents" for clients on VPS. Luckily, these are just hosting problems, so I built SEAOTTER to fix it for myself, and then realized other people probably have the same problem. * What it does * SEAOTTER is a managed control plane for Hermes Agent: Per-agent isolation - each agent runs in its own namespace with a gVisor sandbox, so one client's agent can't see or touch another's. Operate without SSH — pause, restart, restore, and read logs through an API instead of a terminal. MCP-native — talk to a hosted agent from Claude, Cursor, or Codex. Secrets handled for you — backed by Google Secret Manager instead of a .env file you have to remember exists. The rough idea POST /api/v1/agents or on "Create Agent", and it provisions a namespace, installs Hermes via Helm, brings up the sandbox, wires DNS/TLS, and gives you a reachable dashboard, typically in under five minutes. Who it's actually for Agencies running one isolated agent per client without spinning up a VPS per client Hermes power users who want lifecycle control (pause/restart/restore) without maintaining SSH access Hobbyists who want a standing assistant without becoming an ops person Try it There's a 14-day free trial on the Hobby plan. Worth being upfront: it currently asks for a card at checkout, which I know is friction — I'm working on a no-card way to try it. In the meantime, the docs walk through the API and dashboard in detail if you want to look before you sign up. What I'd love feedback on If you're currently self-hosting Hermes on a VPS: what would actually get you to switch, or keep you

2026-08-29 原文 →
产品设计

Show DEV: I built A2Z Edit — free, private, browser-based image, PDF & OCR tools (100/100 Lighthouse)

Hey DEV community, I built A2Z Edit — a free, private, and browser-based toolkit for images, PDFs, OCR, QR codes, and file management. 🔧 What it does Image Tools: Remove background, resize, crop, compress, convert between formats (JPG, PNG, WebP, AVIF, HEIC), add watermarks, blur/pixelate sensitive regions, create collages, and view/strip EXIF metadata. PDF Tools: Merge, split, arrange, compress, watermark, sign, crop, edit text, redact, and convert PDFs to/from JPG, PNG, Word, and CSV/Excel. OCR Tools: Extract text from images and PDFs with support for English, Arabic, and bilingual English+Arabic recognition. QR Tools: Generate customizable QR codes and scan them from images or your camera. File Tools: ZIP creator/extractor, Base64 encoding, and color converters (RGB, HEX, HSL, CMYK). 🔒 What makes it different Your files never leave your browser . Everything runs client-side. No uploads, no servers, no signup, no limits. I built this to be fast, private, and reliable. No ads. No freemium. Just tools that work. 🚀 Check it out Try it here: https://www.a2zedit.com Would love to hear your feedback or suggestions for new tools. Let me know what you think in the comments! Note: This was built with Next.js, runs entirely in the browser, and scores 100/100 on Lighthouse (Performance, Accessibility, Best Practices, SEO).

2026-08-29 原文 →
AI 资讯

JavaScript "Variables"

Hi all, I learned about variables in JavaScript recently. Variables are containers which used to store data. It can be declared in 4 ways. Using let e.g., let x = 2 ; let y = 3 ; let z = x + y ; Using Const e.g., const x = 3 ; const y = 4 ; const z = x * y ; Using Var e.g., var a = 1 ; var b = 1 ; var c = a - b ; Automatically a=10; b=5; c=a-b;

2026-08-29 原文 →
AI 资讯

Orquestração de Agentes de IA no Direito: Construindo Workflows de Triagem e Resumo de Casos sem Perder a Validação Humana

A inteligência artificial no setor jurídico ultrapassou a fase dos chatbots genéricos de pergunta e resposta. Quando lidamos com o Direito, o custo de uma "alucinação" de IA não é apenas um incômodo — pode significar a perda de um prazo fatal, uma tese fundamentada em jurisprudência inexistente ou a violação de sigilo. Para resolver esse problema, a engenharia de software aplicada a LegalTechs está migrando para os Agentic AI Workflows (Workflows de IA Agêntica). Em vez de depender de um único prompt gigantesco para resolver um problema complexo, orquestramos múltiplos agentes especializados. Neste artigo, vamos detalhar como arquitetar uma esteira de triagem, busca vetorial e sumarização de processos, utilizando ferramentas maduras e garantindo que o advogado permaneça como o orquestrador final no Quality Gate . 1. Dividir para Conquistar: A Arquitetura Multi-Agente A premissa da orquestração de agentes é a especialização. Cada agente no sistema possui um escopo restrito, ferramentas específicas ( tool use ) e um objetivo claro. Em um cenário de entrada de um novo processo longo (ex: um PDF de 500 páginas), o workflow se divide em três estágios: Agente 1: Classificação de Intenção e Roteamento O primeiro agente atua como o recepcionista. Ele não lê o documento para extrair teses; ele apenas analisa as primeiras páginas para responder: O que é isso? É uma Inicial Trabalhista? Uma intimação de prazo? Uma contestação? A partir dessa classificação, o workflow roteia o documento para a fila correta de processamento. Agente 2: RAG (Retrieval-Augmented Generation) e Busca Vetorial O segundo agente é o pesquisador. Ele quebra o documento em fragmentos ( chunks ) e cruza as alegações da parte contrária com o acervo interno do escritório. No ecossistema Elixir, por exemplo, podemos utilizar o PostgreSQL com pgvector e Ecto para armazenar os embeddings de casos passados e jurisprudências vencedoras do próprio escritório. O agente busca semelhanças e recupera o contexto estrit

2026-08-29 原文 →
AI 资讯

The Theragun Sense makes everyday recovery surprisingly easy

As my 20s are set to come to an end later this year, I’ve officially reached the age where sleeping in the wrong position or stretching just a little too far can cause aches and pains. I’ve always been somewhat skeptical of massage guns, mostly because I’ve tried a few off-brand ones and just assumed […]

2026-08-29 原文 →
AI 资讯

How to Set Up DuckDB (Run SQL on a CSV With No Import Step)

By Michael Nocito , data analyst · Published August 8, 2026 By the end of this page you will be running SQL directly against a CSV file on your machine, with no import step, no CREATE TABLE , and no schema written by hand. DuckDB reads the file where it lies, works out the column types itself, and gives you a normal SQL result. It takes one command to install and about a minute to prove. Here is what to actually do today. Run python -m pip install duckdb , then write a query with your CSV's filename in quotes where the table name would normally go. That is the entire idea, and everything else on this page is a consequence of it. The short version: a file is a table. It suits large files and folders of files, it does not replace SQLite for a shared database you keep, and section 6 says which to use when. The missing import step is the one idea worth the page, so it gets the picture. The original carries a diagram here. In words: Two horizontal sequences. The upper sequence runs through four stages joined by arrows: a file icon, then a box representing a schema being written, then a database cylinder, then a result grid. The lower sequence has only two stages joined by a single long arrow: the same file icon on the left and the same result grid on the right, with the middle two stages absent and the empty space where they used to be left visibly blank. Every output on this page is real. Run on 8 August 2026 with DuckDB 1.5.5 on Windows, against a 412-row CSV exported from the Chinook sample database. The numbers match the ones in the sample-database guide and the Python guide on purpose, because it is the same data through three different tools. 1. Install it Before the explanation: every database you have met so far needed you to create a table before you could put anything in it. What would have to be true for that step to be unnecessary? python -m pip install duckdb That is the whole installation. No server, no service running in the background, no configuration fi

2026-08-29 原文 →