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

标签:#product

找到 2695 篇相关文章

AI 资讯

Making three years of a Telegram group chat queryable

A three-year group chat is a knowledge base nobody can read. Somewhere in it is how long the tax office actually took, which form replaced the old one, which accountant people quietly stopped recommending. Telegram's search finds a word you already know. It cannot answer a question. The fix is boring in outline: get the history out, turn it into documents, hand them to something that reads — NotebookLM, in my case. I built that pipeline for real chats. The parsing has traps, and I list them below, but the design problem is elsewhere: packing, and making the second run idempotent. Two clients, two shapes Export exists in exactly two places. Telegram Desktop has had it since 2018 and offers JSON or HTML. The native Telegram for macOS app — the Mac-only client, not Desktop — added Export Chat History… in 12.10 (24 August 2026) and writes HTML only; the Mac App Store build was still on 12.9, without the menu item, at the end of August. Telegram Web and the phone apps have nothing. So you have to read both formats: JSON — one result.json with the chat's name at the root and a messages array: {id, date, from, text, text_entities} per message. HTML — paginated. messages.html , messages2.html , messages3.html , one page per file, each a few MB. text is not a string In the JSON export, a plain message has text: "hello" . A message with a link, a bold run or a code span has an array of runs : "text" : [ "see " , { "type" : "bold" , "text" : "section 4" }, " first" ] String(msg.text) on that gives "[object Object]" in the middle of your document, and it does it silently. Join the runs instead: // Telegram writes a formatted message as // text: ["plain ", {type: "bold", text: "…"}, …] — String() gives "[object Object]". function contentValueToString ( v : unknown ): string { if ( v === undefined || v === null ) return '' ; if ( Array . isArray ( v )) { return v . map (( x ) => x !== null && typeof x === ' object ' && ' text ' in x && typeof ( x as { text : unknown }). text ===

2026-09-03 原文 →
AI 资讯

Why Most Developers Plateau — And How to Break Through It

The Comfort Zone Trap Most developers hit a point where they know enough to be productive, and then... stop growing. You can build features, fix bugs, ship code — and still be standing still. The comfort zone doesn't feel like stagnation. It feels like competence. This is one of the sneakiest traps in a dev career. Early on, growth is forced on you — every new project throws unfamiliar problems your way, and you have no choice but to learn. But once you've built a solid mental toolkit (a stack you're comfortable in, a set of patterns that "just work"), it becomes very easy to keep reaching for the same tools on every new problem. You're productive. You're shipping. And you're not actually getting better. The danger is that this plateau is invisible from the inside. Nobody sends you a notification saying "you've stopped growing." You just keep doing what you know, at the same level, for years — until you compare yourself to someone who deliberately kept pushing, and the gap feels much bigger than it should. Why "Just Keep Coding" Doesn't Work The common advice is to just build more projects. But volume without friction doesn't teach you much — repeating the same patterns on new ideas just reinforces what you already know. Growth comes from deliberately picking problems slightly outside your current skill ceiling, not from doing more of what's comfortable. Think about it like weightlifting. If you lift the same weight every session, you get very good at lifting that exact weight — and nothing more. Progressive overload works because you're constantly pushing slightly past your current limit. Coding is the same. If every project you build uses the same stack, the same architecture patterns, and the same problem shapes, you're doing bicep curls with the same 10kg dumbbell for five years straight. The fix isn't "build more" — it's "build harder." Pick a project that forces you to learn a new paradigm (functional if you're used to OOP, distributed systems if you've only b

2026-09-03 原文 →
AI 资讯

Stop wasting tokens re-uploading screenshots and specs: My MCP setup

If you use Cursor or Claude Code heavily, you probably know this workflow: You start a new session, drag and drop a bunch of UI screenshots, architecture diagrams, or heavy project specs into the chat, and tell the AI to look at this. It works, but it causes two massive problems: Token Burn (and Credit Drain): Vision tokens and heavy text files are expensive. You waste your API credits processing those same screenshots and docs every single time you spin up a new chat. Context Clutter: The AI's context window gets clogged. Its logic degrades because it’s carrying all that heavy media and text around in its short term memory. I got tired of burning through my API credits on this daily, so I started looking into the Model Context Protocol (MCP). Why MCP is the answer Instead of dumping static files and images directly into the prompt, MCP allows your AI editor to query a local or remote server only when it needs specific information. Think of it like giving Cursor a direct database connection to your project's assets. It indexes the data once, and the AI retrieves just the pieces it needs to answer your specific coding question. The token savings are ridiculous. How I automated this (Building Dokpod) You can build a local MCP server yourself, but managing the indexing for mixed media (images, video walkthroughs, and text), handling local environments, and keeping connections stable became its own headache. So, I built [Dokpod.io] to automate the entire thing. It acts as an AI knowledge vault. You upload your UI screenshots, video walkthroughs, API docs, and codebase context into Dokpod once. It handles the indexing and gives you a simple MCP connection to plug straight into Cursor or Claude. The result: Zero repetitive uploading for images, videos, or text. Massive reduction in input tokens (saving your credits and limits). The AI actually remembers your UI references and architecture across different coding sessions. I need your technical feedback If you are wrestlin

2026-09-03 原文 →
AI 资讯

The Human Harness: Your Loop Runs First

Every serious agentic coding setup is running a harness right now. Not the model itself, but the machinery around it. The loop it runs in, the tools it can access, the context it receives, and the state it records so the next session doesn't start cold. The tech industry has settled on an equation for this: Agent = Model + Harness , and calls the practice of building the machinery: harness engineering . This post is about the half of the system that equation doesn't cover. Every agentic setup has two workers, and only one of them is a model. The other one is you, the person deciding, across many tasks and many sessions, what all of those agents should build. So the equation has a missing twin. Operator = Human + Harness. On this side, you are the raw capability; on the other, the model. The human harness is the machinery around you. Before we dive in, here are the key takeaways and steps you'll find in this article: What a human harness is, and how it complements the agentic harness Why orienting your work is essential before automating execution The core components that make up a human harness How to build a minimal, effective human harness in practice, complete with a concrete example you can implement in your own workflow What a harness actually is To understand what a harness is in an agentic system, we have to understand it from a physical standpoint. Picture a horse harness. Its purpose is to provide the mechanism needed for a horse to do work by transmitting power that already exists and turning it into useful work. Without it, you have a strong animal and a cart that goes nowhere. Call this the transmission function. Now picture a rock climber harness. This one transmits nothing. Its purpose is to secure the climber to a safe working condition (climbing without falling to the ground). It does this by catching a failed state (losing your grip) and taking a securing/remediating action. Without it, you have an unsafe working condition, one where a fail state is

2026-09-03 原文 →
工具

Der Mensch als letzte Verteidigungslinie – oder nur ein „Meatproxy“?

Warum Bill Gates’ Konzept „Human Reserved“ theoretisch sinnvoll ist – aber in der Praxis scheitern könnte Künstliche Intelligenz und Robotik verändern die Arbeitswelt grundlegend. Bill Gates warnt davor, dass zahlreiche Tätigkeiten in Bereichen wie Recht, Kundenservice, Gesundheitswesen, Softwareentwicklung und Industrie innerhalb des nächsten Jahrzehnts automatisiert werden könnten. Sein vorgeschlagener Gegenentwurf ist das, was er „Human Reserved“ nennt: Bestimmte Aufgaben sollen weiterhin in der Verantwortung von Menschen bleiben, selbst wenn Maschinen technisch in der Lage wären, sie auszuführen. Die Idee ist überzeugend – und zugleich grundlegend problematisch. Die zentrale Herausforderung liegt in der Lücke zwischen menschliche Kontrolle zu verlangen und tatsächlich die Voraussetzungen für eine sinnvolle menschliche Kontrolle zu schaffen. Unternehmen setzen KI vor allem ein, um Arbeit schneller, günstiger und skalierbarer zu machen. Eine echte menschliche Überprüfung erfordert dagegen Zeit, Fachwissen und Geld. Wenn diese Ressourcen nicht bewusst in den Prozess eingebaut werden, kann der Mensch auf kaum mehr als den letzten Klick zur Freigabe reduziert werden. Die betreffende Person bleibt rechtlich oder organisatorisch verantwortlich, versteht die Empfehlung aber möglicherweise nicht mehr gut genug, um sie infrage zu stellen. An diesem Punkt ist der Mensch nicht mehr die letzte Instanz. Er wird zum „Meatproxy“ : einem menschlichen Stellvertreter, der einer Entscheidung formale Legitimität verleiht, obwohl diese Entscheidung faktisch bereits von einer Maschine getroffen wurde. Damit stellt sich die wichtigere Frage: Hat ein Mensch tatsächlich noch die Kontrolle – oder steht ein Mensch lediglich am Ende des Workflows? Der entscheidende Test ist nicht, ob ein Mensch irgendwo im Prozess beteiligt ist. Entscheidend ist, ob diese Person noch über das Wissen, die Zeit, die Befugnis und die praktische Möglichkeit verfügt, eine andere Entscheidung zu treffen. Was mein

2026-09-02 原文 →
AI 资讯

You don't need a remote desktop for the room you're standing in

Someone plugs in the HDMI cable. The room's display shows nothing, or shows 1024×768, or shows the desktop of whoever presented last week. After a minute of this, somebody says "just share your screen", and out comes AnyDesk or TeamViewer. It works. It is also the wrong shape for the problem, and noticing why turns out to be more interesting than it sounds. What remote desktop tools are actually for AnyDesk, TeamViewer and RustDesk exist to solve one problem well: reach a machine you are not near. Your parent's laptop. A server in a rack. A colleague's desktop three time zones away. Everything about their design follows from that. One person connects to one machine. That person takes the mouse. The remote screen is mirrored to them, and the whole session is framed as control — because when you are not in the room, control is the only way to do anything. Being fair about the privacy question, because it is the claim people reach for first and it is wrong: AnyDesk has a LAN mode , and in it a session goes directly between the two machines without the internet. RustDesk can be self-hosted entirely on your own infrastructure. Neither of these tools forces your screen through somebody's cloud if you configure them not to. If you have read that they do, that is not accurate. The mismatch is not privacy. It is shape. The relay, the account and the NAT traversal are not overhead — they are the product, and they are what makes reaching a machine in another country possible at all. Standing beside the machine, you pay for all three and use none of them. Where the shape stops fitting Stand in a room with four people and a Mac, and three things go wrong at once. It is one-to-one. Remote desktop is a session between two endpoints. Four people looking at one screen is not what it models, so three of them read over a shoulder. It mirrors, and mirroring is sometimes the wrong answer. Every tool in this category shows a screen that already exists. But the meeting-room problem is oft

2026-09-02 原文 →
AI 资讯

I Built a Calm Decision Tool for Questions That Do Not Fit in a Spreadsheet

I keep noticing the same moment in conversations: someone has a decision in front of them, but what they really want is a little space to think. “Should I move?” “Is it time to change jobs?” “Should I take this relationship more seriously?” A pros-and-cons list can help. So can talking to a friend. But sometimes the question stays unresolved because the hard part is not finding more information. It is finding a clear way to look at the information we already have. That is why I built Yi Ask: https://diluowei.com/?lang=en The product flow in one view: ask a focused question, pause with it, and reflect on a structured result. The experience starts with one focused question, not a long form. The idea Yi Ask is a small web app inspired by the I Ching and Meihua Yishu. A user writes one focused yes-or-no question, then selects two numbers through a slow, circular interaction. The selection creates the upper and lower trigrams, while the current traditional time is used for the changing hexagram. The result is deliberately structured: a directional answer: move forward, pause, or proceed carefully the conditions that support a positive decision signs that suggest waiting or checking more carefully one practical next step The goal is not to predict the future or pretend that a symbolic system can remove uncertainty. It is to help turn a vague feeling into a question with a direction. Why the interaction is slow The number selection is the most important part of the experience. A fast random button would be easier to build, but it would not create the right moment for the user. The interface cycles gently through the eight trigrams. The user stops it twice, once for each trigram. That small pause gives them a chance to keep the question in mind instead of immediately asking a different question every few seconds. It is a tiny interaction, but it changes the mood from “generate an answer” to “take a moment with the question.” The number selection is designed as a pause, not

2026-09-02 原文 →
AI 资讯

I Built Hydration Buddy: A Floating Hydration Companion for Windows

I spend long hours working on a computer, and one simple thing I regularly forget is drinking enough water. Most hydration apps rely on notifications. The problem? Notifications are very easy to dismiss. So I started building Hydration Buddy : a lightweight Windows app designed to stay visible without constantly interrupting your workflow. What it does Tracks daily water intake Shows your daily hydration progress Gives gentle reminders Lets you quickly log water Includes a small floating companion that stays on screen Keeps the experience lightweight and simple Why I built it The idea wasn't to build another notification app. I wanted something that could quietly stay present while I'm coding or working and make the habit harder to forget. Hydration Buddy is currently in beta, so I'm still testing the experience and improving it based on real user feedback. 🎁 The first 25 beta users get free lifetime access. You can try it here: https://hydrationbuddy.patelmahek.in/ If you test it, I'd especially love feedback on: The floating companion Reminder experience Ease of logging water Features you'd like to see next I'm building this in public, so I'll also share some of the technical decisions, mistakes, and improvements as the product evolves.

2026-09-02 原文 →