AI 资讯
Read-Modify-Write isolation in NoSQL: the distributed-lock hell.
In part 1 , the single-document case was easy. In part 2 , two documents brought Write Skew, and we saw that even a native ACID transaction — snapshot isolation — lets it through. So teams reach for the reflex fix: a distributed lock — Redis-based, often a Redlock-style implementation. Acquire a lock on a key, do your Read → Modify → Write, release. On paper, you've finally serialized the critical section — operationally, at least. In practice, you've stepped on three mines. 1. Network latency Every guarded transaction now makes extra round-trips to Redis — before and after hitting your NoSQL store. You've doubled your coordination surface and taken a hard dependency on a second system being up, reachable, and fast on the hot path of every write. The "fast" database is now gated by the lock service. And the coupling bites harder than the average latency suggests: every Redis tail-latency spike becomes your write-latency spike — your p99 inherits Redis's p99 — and if Redis fails over mid-transaction, the lock you think you're holding can effectively vanish on the new primary, dropping you straight into the corruption case below. 2. Deadlock You can dodge deadlock entirely with a single coarse lock — but then every writer serializes on it, and you've thrown away the very concurrency you reached for NoSQL to get. So to keep throughput you go fine-grained, one lock per resource — and the moment an invariant touches more than one key (across this series, it always does), deadlock is back on the table: Transaction A locks key X, then needs Y. Transaction B locks Y, then needs X. Both block until timeout or intervention. The textbook cure — real deadlock detection, maintaining a wait-for graph across every lock holder and breaking cycles as they form — is a distributed-systems project in its own right: not something you bolt onto a cache you reached for precisely to save engineering time. So nobody builds it. Instead teams impose a standing discipline: always acquire locks
产品设计
Subotiz
Smarter Monetization. Subscribe. Sell. Scale. Discussion | Link
开发者
The golden age of handheld gaming is already over
For a few glorious years, a $399 portable gadget could run almost anything you'd want to play. In 2022, the Steam Deck finally made PC gaming portable and affordable. I played through the vast majority of Elden Ring on a Steam Deck, agape that such a rich world could comfortably fit between my two hands. […]
AI 资讯
Understanding known_hosts and Host Key Verification: What It Protects Against and How TOFU Works
That "authenticity of host can't be established" message isn't just noise. Here's what's actually happening — and why blindly typing "yes" is a security mistake. Every developer has seen this: The authenticity of host 'example.com (203.0.113.1)' can't be established. ED25519 key fingerprint is SHA256:abc123xyz... Are you sure you want to continue connecting (yes/no/[fingerprint])? Almost everyone types yes without reading it. Then they move on. This message is SSH trying to protect you from one of the most dangerous attacks in network security: the man-in-the-middle attack. Understanding what's happening here — and what the ~/.ssh/known_hosts file actually does — will change how you think about every SSH connection you make. The Problem SSH Is Solving When you connect to ssh user@example.com , how do you know you're actually talking to example.com ? You can't rely on the IP address — IP addresses can be spoofed or rerouted. You can't rely on DNS — DNS can be poisoned. You can't rely on the network path — traffic can be intercepted at any point between you and the server. Without verification, an attacker positioned between you and the server could intercept the connection, pose as the server, decrypt everything you send, re-encrypt it, and forward it along. You'd type your password or authenticate with your key and never know the attacker saw every keystroke. This is a man-in-the-middle (MITM) attack . It's not theoretical. It happens on compromised networks, corporate proxies, malicious Wi-Fi hotspots, and misconfigured infrastructure. SSH's defense is host key verification . Every SSH server has a unique cryptographic identity — its host key. Before you exchange any sensitive data, the server proves it holds the private key corresponding to a public key you've previously verified. If the keys don't match, SSH warns you — loudly. What a Host Key Actually Is When OpenSSH is installed on a server, it automatically generates a set of host key pairs. These live in /etc
AI 资讯
From a Forgotten Multiplayer Prototype to a Chaotic Hidden-Object Game — Reviving WhatUsee 🚀
GitHub Finish-Up-A-Thon Challenge Submission There’s something strangely emotional about reopening an old unfinished game project. Especially one that once felt like “the next big idea” at 2 AM during a hackathon 😭 You open the folder expecting nostalgia… …and instead find: broken UI random commits duplicated code missing assets unfinished features and functions named things like test2_final_REAL.js That’s exactly what happened when I reopened WhatUsee . A multiplayer browser game I originally started building as a fun experimental idea. At first, it wasn’t meant to become anything serious. It was just a simple concept: “What if players had to race against each other to identify hidden objects inside chaotic images?” That tiny idea slowly turned into a real-time multiplayer hidden-object game. And honestly? At the beginning, building it was insanely fun. 💡 The Original Idea Behind WhatUsee Most multiplayer browser games focus on: shooting drawing trivia racing But I wanted something different. Something that created those chaotic: “WAIT I SEE IT—NO WAY 😭” moments. The idea was simple: Players join a room together. An image appears. Somewhere inside that image is: a hidden object an animal a logo a random item or something cleverly camouflaged And everyone races to identify it before the timer ends. Fast reactions. Visual focus. Pure multiplayer chaos. That became WhatUsee . At first, the project was extremely small. Just: Socket.IO basic image display simple guessing and a rough scoreboard No polish. No proper lobby. No smooth UI. But even in that early state… …the game already felt fun. And that’s what made me continue building it. 😭 Then The Project Slowly Got Abandoned Old unfinished WhatUsee multiplayer game interface with basic UI and minimal styling Like most side projects… life happened. College work. Burnout. Other responsibilities. Random unfinished ideas. And slowly, WhatUsee became: “that project I’ll definitely finish later.” The game technically worked.
AI 资讯
Cloudflare Adds Support for Claude Managed Agents
Cloudflare recently added support for Claude Managed Agents, allowing developers to run and manage Claude agents within Cloudflare. Developers can connect agents to private systems, choose their runtime environment, and monitor agent activity using Cloudflare services. By Renato Losio
AI 资讯
Handling Localization in PCF Components: A Practical Walkthrough
When you build a PowerApps Component Framework (PCF) component that will be used across multiple geographies, need to serve labels, button captions, validation messages, and tooltips in the user's preferred language. PCF has a built-in answer based on .resx resource files, the same format used by .NET applications. The mechanism is elegant in production — but surprisingly tricky during local development. This walkthrough takes you through the full setup, step by step, and then explains a problem that arises while locally debugging your PCF. Step 1 — Create the strings folder and your first .resx file PCF expects your localized strings to live in a folder (the conventional name is strings ) inside your component directory. Each language gets its own file, named with the pattern: <ComponentName>.<LCID>.resx The <LCID> part is the numeric Locale ID , not the textual code ( en-US , it-IT ). The framework relies on this naming convention to identify which file to load for a given user. Common LCIDs: Language LCID English (en-US) 1033 Italian (it-IT) 1040 German (de-DE) 1031 French (fr-FR) 1036 Spanish (es-ES) 3082 Japanese (ja-JP) 1041 Chinese Simplified (zh-CN) 2052 Portuguese (pt-BR) 1046 For a component called EquipmentGrid , the structure looks like this: EquipmentGrid/ ├── ControlManifest.Input.xml ├── index.ts └── strings/ ├── EquipmentGrid.1033.resx ├── EquipmentGrid.1040.resx └── EquipmentGrid.1031.resx Tip: Always include 1033.resx (English). The PCF runtime falls back to the first <resx> declared in the manifest when the user's preferred language isn't available, and English is the safest default. Step 2 — Author the resource file content A .resx file is just XML. Here's a minimal Italian version ( EquipmentGrid.1040.resx ): <?xml version="1.0" encoding="utf-8"?> <root> <resheader name= "resmimetype" > <value> text/microsoft-resx </value> </resheader> <resheader name= "version" > <value> 2.0 </value> </resheader> <resheader name= "reader" > <value> System.Resou
AI 资讯
AI Agents Are Great at 80% of Our Code. The Other 20% Is Why We Still Need Seniors.
We let AI agents loose on a payment platform. They crushed the boring stuff. Then they silently broke the stuff that matters. A survey came out last week. 54% of all code is now AI-generated. Up from 28% last year. I read that number and thought: yeah, that tracks. We're probably in that range too. But here's the thing nobody's asking — which 54%? Not all code carries equal weight. A CRUD endpoint for fetching merchant details? Low risk. The webhook handler that transitions a payment from pending to complete ? That's someone's rent. Someone's payroll. Get that wrong and money moves where it shouldn't, or worse, money doesn't move at all. I'm the CTO of a payment platform. FCA-authorised, processing real money, real merchants, real consequences. We run NestJS microservices, Docker, Traefik — the usual stack. And we've been using AI agents aggressively for over a year now. I'm not here to tell you AI is dangerous. It's not. I'm here to tell you it's dangerous when you forget what it's actually good at. The 80% Where AI Agents Are Genuinely Brilliant Let me give credit where it's due. AI agents have made our team faster in ways that would have seemed absurd two years ago. API scaffolding. Generating service boilerplate. Writing Zod validation schemas. Spinning up new endpoints. Creating test stubs. Refactoring imports. Migrating patterns across repos. We run multiple microservices. When we need a new service, an agent can scaffold the entire thing — module structure, base configuration, Docker setup, Traefik labels — in minutes. What used to be a half-day of copy-paste-and-tweak is now a conversation. When we overhauled our env management across all repos, AI agents did the grunt work. They mapped every .env file, found naming conflicts, identified common variables, and generated a unified Zod schema. What would have taken a team days of grep-and-spreadsheet work took hours. For this 80% of the codebase — the predictable, pattern-following, structurally repetitive code
AI 资讯
How to Monitor AI Agents in Production
TLDR Monitoring AI agents in production requires distributed tracing: a single user request fans out into 10 or more internal operations, and logs alone cannot show you which step is slow, failing, or burning your token budget. OpenTelemetry's gen_ai.* semantic conventions give you standardized span attributes for LLM calls, tool invocations, and agent steps. Some are stable today; others are still experimental. Auto-instrumentation libraries (OpenLLMetry, OpenInference, OpenLIT) cover most agent frameworks with two to three lines of initialization code. You do not change your agent code. Traces ship to OpenObserve over OTLP. From there you get SQL-queryable trace data, token usage dashboards, cost attribution by agent and model, and alerting on latency and cost anomalies. OpenObserve also exposes an MCP server. You can query your live agent traces from a Claude or GPT session without opening a dashboard. Why Agents Are Harder to Monitor Than a Single LLM Call A single LLM call is straightforward to observe. One HTTP request, one response, one latency number. You can log the input and output and call it done. An agent is different. When a user sends a message, the agent calls an LLM to decide what to do, invokes a tool, processes the result, calls the LLM again, possibly calls another tool, and eventually returns a response. That one user message becomes ten or more internal operations. Some of those operations call external APIs. Some retry. Some spawn sub-agents. Without distributed tracing, you see none of this structure. You know the response took 8 seconds. You do not know whether the LLM took 7 of those seconds or whether a tool made three retries before timing out. Four categories of problems appear in production agents that you cannot debug without traces: Latency. Which step is slow? The LLM call? The tool execution? A retry loop the agent entered because the tool returned ambiguous output? Cost. Which agent, which task, which model is consuming tokens? A s
AI 资讯
I Analyzed 1,000 AI-Generated Blog Posts for Quality. Here's the Data.
Last year, I was doing something that felt increasingly absurd: manually reading AI-generated content to decide if it was "good enough." PostAll — the content automation tool I've been building — was producing hundreds of blog posts per week for clients. And I had no systematic way to evaluate quality at scale. I was spot-checking. Vibes-checking, really. That doesn't work at volume. So I built a programmatic quality analysis pipeline, ran it over 1,000 AI-generated posts, and let the numbers tell me what my gut was missing. The findings surprised me. A few of them genuinely changed how I think about AI content quality. What I Actually Measured First, a definition of terms, because "quality" is almost meaninglessly vague in this space. I broke quality into five measurable dimensions: Readability — Flesch-Kincaid grade level and reading ease score Keyword density — Target keyword frequency and distribution across the post Grammar error rate — Errors per 1,000 words, caught via LanguageTool's API Factual accuracy — Claims that could be verified programmatically (dates, statistics, named entities cross-referenced against a knowledge base) Structural consistency — Presence of expected elements: intro hook, subheadings, conclusion, CTA I used 1,000 posts across three categories: SaaS product descriptions, long-form "how-to" articles (1,200–2,000 words), and listicles (500–900 words). All were generated by PostAll using GPT-4o, with various prompting strategies. The Setup The analysis pipeline isn't complicated, but the piece that makes it useful is the batch processing layer: import anthropic import language_tool_python import textstat from dataclasses import dataclass from typing import Optional import json @dataclass class QualityReport : post_id : str flesch_reading_ease : float flesch_kincaid_grade : float grammar_errors_per_1000_words : float keyword_density : float structural_score : int # 0–5 based on element presence flagged_claims : list [ str ] overall_score :
AI 资讯
From Forgotten Repo to Live App: How I Finished Photremium.com Using GitHub Copilot
This is a submission for the GitHub Finish-Up-A-Thon Challenge What I Built Photremium is an all-in-one, lightning-fast web utility platform engineered for high-performance image processing. Built to eliminate the friction of clunky, ad-heavy design tools, it provides users with instantaneous, client-side and serverless tools like high-fidelity background removal, image resizing, custom QR code generation and many more. As a software engineering student, this project represents my vision of creating a modern production platform that prioritizes raw speed, high usability, and robust SEO architectural patterns. Live Platform: photremium.com GitHub Repository: itsaminaziz/photremium.com Demo The Live Application Experience the full toolset live right now at photremium.com . Key Features in Action Feature Implementation Speed / Processing Compress IMAGE Client-side Canvas / Web Workers Instantaneous local compression Resize IMAGE Client-side React & HTML5 Canvas Real-time pixel/percent adjustment Crop IMAGE Client-side UI & Visual Crop Editor Instantaneous browser-based cropping Convert to JPG Client-side File Readers (Bulk Upload) Instant batch conversion via browser Convert from JPG Client-side Canvas (PNG/GIF compiler) Multi-format local generation QR Code Generator Vector-based SVG/Canvas rendering Instant download generation QR Code Scanner Client-side WebRTC Camera / File API Real-time local camera processing Blur Face Hybrid Client-side Face Detection Instant local privacy overlay mapping Remove Background (AI) Cloud-based Serverless / Cloudflare Edge < 2 seconds (Any device image processing) Watermark IMAGE Client-side Layer Composition Instantaneous text/graphic stamping The Comeback Story The Before (A Half-Baked Local App) Photremium started as an ambitious prototype on a local machine. While the fundamental image-processing utilities worked locally, the project hit a massive wall when it came to global deployment and production readiness. It was plagued with
AI 资讯
Custodial vs trust-minimized: two settlement layers for the agent economy
"Settlement layer for the agent economy" is suddenly a crowded sentence. In the last few weeks, two very different things have started competing for it. OKX Agent Payments Protocol (APP) announced in May 2026 — backed by AWS, Alibaba Cloud, Uniswap, Paxos, QuickNode, with ecosystem support from Base, Ethereum Foundation, Solana, Sui, Aptos, Optimism — describes itself as the settlement layer where AI agents pay each other. AEON's $8M pre-seed (May 20, YZi Labs) described itself the same way. There is a list now, and it is getting longer. We build one of the things on this list, and we think the framing is wrong. These are not rivals jostling for the same slot. They are two different layers, and they answer two different versions of the same question: what does an agent need to settle a trade? This piece walks through the two layers, where each is the right answer, and why an honest comparison gets you further than picking sides. What APP and other custodial-venue protocols actually do A useful way to read OKX APP — and similar moves coming from the larger exchanges — is to treat them as a venue layer . An exchange already holds inventory across many chains. It already has the risk engines, the liquidity, the legal arrangements with banks and partners. Adding an agent-facing API on top of that machinery is a relatively short walk. What an agent gets, in exchange, is breadth. Many chains, many assets, batched and netted settlement against deep internal books, and fast execution because the exchange is just moving entries in its own ledger. For an agent whose job is "find a price somewhere and execute now," that is a powerful primitive. What the agent gives up, in exchange, is a counterparty. At any moment between deposit and withdrawal, the agent's balance is the venue's promise to pay. That promise is normally good. The agent has no way to verify, from inside its own logic, that it still is. This is not a criticism of OKX APP. It is the structural shape of any venue-
AI 资讯
Treasure Hunting at Scale: Why Our Cache-Aside Cache Cost Us 40% in Tail Latency During Black Friday
The Problem We Were Actually Solving During load testing at 50k concurrent hunters hitting the hunt endpoints, p99 latencies stayed under 200ms. But at 270k concurrent users in production, the hunt page suddenly took 1.8 seconds to load, triggering cascading 502s from our CDN. The error surfaced in Datadog as hunt_page_render_time_bucket{le=2.0} = 42% while le=0.5 dropped to 18%. The fingerprints were identical across three regions: high latency correlated exactly with Redis cache miss rate spiking from 12% to 48% during the hunt start window. Our cache-aside pattern with a 30-second TTL was amplifying miss storms. We discovered that the treasure hunt start time was synchronised by marketing campaigns. When the clock struck 10:00:00 UTC, 270k users hit the endpoint within 30 seconds. Each request would check the cache (miss), fetch from PostgreSQL, render the page, and write the cache entry. But PostgreSQL couldnt keep up with 9k queries per second during that window, causing query queueing and connection exhaustion. The Redis layer, designed for 150k ops/sec, was not the bottleneck. The database was. What We Tried First (And Why It Failed) Our first attempt was to increase Redis TTL from 30 seconds to 5 minutes. This reduced cache misses from 48% to 24%, and p99 latency improved to 650ms. But at 320k concurrent users, the latency still spiked to 1.4s because the underlying database queries were still hitting the same table with the same indexes. The Redis layer was masking symptoms, not solving the root cause. Next, we tried database read replicas. We spun up three read replicas and routed hunt queries to them using a weighted service mesh. This worked for a few minutes, but then we hit replication lag. The replicas fell 800ms behind primary, causing hunt pages to display stale treasure locations. Our operators started getting customer complaints about seeing the wrong treasure coordinates. We rolled back within 15 minutes. We even tried increasing PostgreSQL share
开发者
I Built an MCP Agent Framework for My B.Tech Major Project. It Got 750+ npm Downloads in Week One. Here's the Comeback Story.
This is a submission for the GitHub Finish-Up-A-Thon Challenge What I Built Last...
AI 资讯
Best image generatir
So this a2e.ai website allows you to generate any image and for free. You get a good amount of credits amidst signing up Referal link: https://video.a2e.ai/?coupon=LgQi submitted by /u/No_Restaurant_5461 [link] [留言]
AI 资讯
I built an MCP server that gives AI persistent memory of your SQL database
A while ago I tried to build a local coding assistant. I downloaded Qwen3, fired it up on my MacBook with 16GB of RAM, and within a day realized the output quality was nowhere close to Claude or GPT-5. The model could fit . It just couldn't compete . So I changed the question. If I can't make the model smarter on my hardware, can I make what I feed it smarter? Where the tokens actually go I started watching where my Claude / Cursor / Copilot sessions actually spent their tokens. The surprise: most of it wasn't reasoning. It was lookup . Every fresh chat about my company's database re-discovered the same things: What does status = 3 mean? (cancelled) How does orders join to users ? ( orders.user_id → users.id ) What's that cryptic JobStatus enum? (a dozen integer codes nobody remembers) The model figured it out, the session ended, and tomorrow it figured it out again . Same tokens, same latency, every single time. The expensive part of working with an AI wasn't the thinking — it was re-teaching it things it had already learned yesterday. There's a lot of attention right now on trimming AI output tokens (talk like a caveman, strip the pleasantries, etc.). But in my workflow the bigger leak was on the input side: paying full token cost every session to re-establish context that never changed. "Memory" isn't a feature, it's an architecture question AI clients are starting to bolt on "memory" features. But they're proprietary, opaque, and locked to one tool. Claude's memory doesn't help Cursor. Cursor's doesn't help Copilot. You can't inspect it, you can't share it with a teammate, and you can't diff it. What I actually wanted was an explicit, inspectable, shareable context layer that any AI client could read deterministically — same answer every time, same file my team could hand off. I picked the highest re-learn cost in my world to start with: SQL databases. Enter amnesic amnesic is an open-source MCP server that gives any AI client persistent semantic memory of your
AI 资讯
No-Code Strategy Builder: Turning a Trading Idea Into Testable Rules
Most trading ideas start as vague thoughts. "Buy when RSI is oversold and price bounces from support." It sounds reasonable. But the moment you try to test or automate it, the ambiguity becomes obvious. What exactly counts as oversold? How is support defined? What qualifies as a bounce? When do you exit? Without precise answers, the idea cannot be tested, measured, or executed consistently. This gap between intuition and execution is exactly what no-code strategy builders are designed to close. Why vague trading ideas fail Most traders think in concepts rather than rules. "Buy the dip." "Trade strong momentum." "Enter when the trend looks healthy." These ideas feel intuitive, but they are unusable in practice unless translated into explicit logic. Without clear definitions, you cannot backtest a strategy, cannot repeat decisions consistently, and cannot diagnose why results change over time. Ambiguity leads to second-guessing. Second-guessing leads to inconsistent execution. Inconsistent execution makes performance impossible to evaluate. What a no-code strategy builder actually does A no-code strategy builder is a visual system that forces clarity. Instead of writing code, you select indicators, define conditions, combine logic using AND/OR rules, specify entries and exits, and then test the strategy on historical data. Conceptually, it works like assembling building blocks. Each block represents a condition such as "RSI below 30" or "price above moving average." When combined, those blocks form a complete, testable trading system. The key benefit is precision. From idea to testable strategy The transformation follows a predictable workflow. You begin with a loose idea, such as buying when a stock is oversold and starting to recover. You then break that idea into components. What defines oversold? What signals recovery? How do you enter? How do you exit? How much do you risk? Once those questions are answered, the idea becomes a set of explicit rules. For example,
AI 资讯
v0 by Vercel Review: AI-Generated React Components That Actually Ship
I opened v0, typed "a settings page with profile editing, notification preferences, and a connected accounts section," and watched it generate a fully functional three-tab settings interface in under 40 seconds. The component used shadcn/ui primitives, Tailwind utility classes, and TypeScript types — the exact stack I would have chosen if I had written it from scratch. I copied the code, pasted it into my Next.js project, changed two import paths, and it rendered correctly on the first try. This is the v0 value proposition distilled: generate UI components that look like a senior frontend developer wrote them, then paste them into your real project without rewriting half the output. After generating 15 components across two weeks of real product work, I can confirm that v0 delivers on this promise more reliably than any general-purpose AI coding tool I have tested. But its scope is narrower than the marketing suggests, and understanding where v0 stops being useful is as important as knowing where it excels. The shadcn/ui Advantage v0 is built on top of shadcn/ui, and this is the single most important fact about how it works. shadcn/ui is not a component library in the traditional sense — it is a collection of copy-pasteable React components built on Radix UI primitives with Tailwind styling. When v0 generates a component, it uses these primitives directly, which means the output is consistent, accessible, and composable. The practical benefit is that v0-generated components integrate with your existing project without introducing a new design system. If you already use shadcn/ui — and a large and growing percentage of Next.js projects do — the generated components reuse your existing Button, Card, Dialog, and Input primitives. v0 just assumes you have them installed and generates code that expects them. If you do not have shadcn/ui in your project, v0 prompts you to run the initialization command before generating anything, which takes about 30 seconds. This archite
AI 资讯
Recommended NotebookLM alternatives
I really like NotebookLM, especially for dumping PDFs/slides/long YouTube videos into one place and asking questions about them. But I’m starting to feel like it’s very “research workspace” first, which makes sense. It’s great when I already have sources and I want to understand them. Less great when I want something more flexible for actual learning, especially on mobile. The things I’m looking for: - handles PDFs, slides, articles, and long You Tube videos - lets me chat with the material / summarize / ask follow-up questions - has more output styles than just one default format - ideally lets me change voice, tone, length, and depth - works well on mobile - can translate or help me learn across languages - good for topics beyond school research, like communication, social skills, history, humanities,career stuff, etc. - bonus if it helps plan what to learn next instead of just summarizing one source A few I’ve looked at so far: Quizzify seems good if your main use case is active recall. It’s more of a quiz/practice-test focused, which is useful because summaries can trick you into thinking you learned something. My brain absolutely falls for this. The downside is that it feels more school/study-tool specific. BeFreed for the audio learning side. It’s not really a NotebookLM clone, but that’s kind of why I like it. You can paste a PDF, article, You Tube link, or just prompt a topic, then it turns it into a personalized audio learning path. You can adjust the voice, style, depth, and length, and the mobile experience is much better for learning while walking/commuting. I’ve used it more for history, communication, social skills, and career-type topics than pure school research. Elephas looks interesting for Mac users because it can do document Q&A and writing locally. That might be helpful if connection issues are the annoying part. But from what I can tell, it’s more of a doc chat / writing assistant than a flexible learning app. Gamma / Canva / Napkin seem strong
AI 资讯
GitHub Copilot Workspace Review: Task-Level AI Coding in the Browser
I tested GitHub Copilot Workspace on 12 real tasks across three repositories in May 2026 — a mix of bug fixes, feature additions, and documentation updates. My goal was to figure out whether the spec-first, browser-based workflow actually produces useful code, or whether it is a demo that falls apart when you ask it to do real work. The answer sits somewhere between impressive and frustrating, with the tool's success rate varying dramatically based on task size, repository maturity, and how well you write the initial specification. The Spec-First Workflow Forces Better Communication Copilot Workspace changes the AI coding interaction in one fundamental way that I have not seen elsewhere: you do not start with code, you start with a specification. When I opened Workspace on a Next.js project and typed "add rate limiting to the API routes using the existing rate-limit.ts utility," the system did not immediately generate code. It spent roughly 15 seconds reading my repository, then produced a three-step implementation plan: (1) import the rate-limit utility in each route, (2) wrap the route handler with the rate limiter, (3) add a test for the rate-limited behavior. I could approve the plan as-is, reject individual steps, or add revision notes before any code was written. On this particular task, the plan was correct and I approved it. Workspace then executed each step, modified five route files, and produced a draft pull request with a clear description and a summary of what changed. The entire process — from typing the specification to having a reviewable PR — took 4 minutes and 12 seconds. This planning phase is not window dressing. On a different task where I asked Workspace to "add WebSocket support to the chat feature," it read the repository and surfaced during planning that the project was deployed on Vercel's serverless functions, which do not support persistent WebSocket connections. It suggested using Vercel's Edge Functions with a third-party real-time serv