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

标签:#ia

找到 2544 篇相关文章

开源项目

Todo el mundo escribe qué reportar. Nadie escribe cómo no perder ninguno

Hay muchísimo escrito sobre qué tiene que reportar una organización: guías de Supersalud, de Supersociedades, de SAGRILAFT, de PTEE, de SST, de reportes ambientales. Todas contestan la misma pregunta — ¿qué me aplica? — y la contestan bien. Casi nadie escribe sobre la pregunta que de verdad hace fallar a las organizaciones: ¿cómo no perder ninguno, todos los años, cuando son treinta? Porque los incumplimientos que he visto de cerca casi nunca vienen de que alguien ignorara la obligación. Vienen de que la obligación se conocía perfectamente y aun así se pasó la fecha. Este artículo va del problema operativo —fechas, evidencia, responsables— no de cuáles normas le aplican a su entidad. Eso es otra conversación, y no es esta. Por qué el archivo de Excel deja de servir Con tres obligaciones, una hoja de cálculo sobra. El dolor no empieza por el número: empieza cuando el calendario hay que derivarlo . 1. Las fechas no son fechas, son reglas. Muchos vencimientos no están escritos como un día del calendario: dependen del último dígito del NIT, de días hábiles, o de un plazo contado desde un hecho. Eso significa que alguien recalcula el calendario entero cada año, a mano . Cada enero se reintroduce la misma oportunidad de equivocarse, y basta con un festivo mal contado. 2. El calendario vive en una persona. Casi siempre hay alguien que "sabe cómo es la cosa". Mientras esté, funciona. Cuando se va de vacaciones —o se va de la empresa— se va con ella el contexto que nunca estuvo escrito. La hoja sobrevive; el criterio para llenarla, no. 3. La hoja dice que se entregó, no lo prueba. La celda en verde es una afirmación de alguien. La evidencia real —el radicado, el archivo exacto que se subió, la hora— está en el correo de alguien. El día que hay que demostrarlo, empieza la arqueología en bandejas de entrada. 4. Los terceros que le reportan a usted. Si recibe información de contratistas, sedes o filiales, ahora administra dos problemas: sus propios vencimientos y los de ellos.

2026-08-05 原文 →
AI 资讯

como encontrar grupos de WhatsApp públicos com segurança

Encontrar grupos de WhatsApp públicos pode ser uma maneira prática de conhecer pessoas, divulgar projetos, trocar experiências e acompanhar assuntos do seu interesse. Existem comunidades sobre estudos, empregos, tecnologia, entretenimento, esportes, promoções, cidades, amizades e diversos outros temas. Porém, antes de entrar em qualquer comunidade, é importante verificar a procedência do convite e adotar alguns cuidados básicos. Afinal, links públicos também podem ser utilizados para divulgar golpes, conteúdos impróprios ou páginas falsas. Neste guia, você vai aprender como encontrar grupos de WhatsApp públicos com segurança e evitar problemas ao participar dessas comunidades. Procure grupos em sites organizados Uma das formas mais simples de encontrar comunidades públicas é utilizar sites especializados em reunir e organizar links por categorias. Em vez de clicar em convites compartilhados aleatoriamente nas redes sociais, procure plataformas que apresentem informações como nome do grupo, descrição, categoria e regras de participação. No site Grupos de WhatsApp , por exemplo, você pode pesquisar comunidades de diferentes assuntos e escolher aquelas que combinam melhor com seus interesses. Mesmo utilizando uma plataforma organizada, continue analisando cada grupo antes de participar. Confira o nome e a descrição do grupo Antes de clicar no botão para entrar, leia com atenção o nome, a descrição e as informações disponíveis sobre a comunidade. Verifique se o conteúdo prometido realmente corresponde ao tema que você procura. Um grupo apresentado como uma comunidade de empregos, por exemplo, não deveria exigir pagamentos, dados bancários ou informações pessoais para liberar supostas vagas. Descrições muito vagas, promessas exageradas e mensagens com urgência artificial merecem atenção. Frases como “ganhe dinheiro imediatamente”, “últimas vagas” ou “lucro garantido” podem ser utilizadas para atrair usuários para golpes. Evite links encurtados ou suspeitos Links oficiais

2026-08-05 原文 →
AI 资讯

Spotify expands AI remix and covers project with Merlin partnership

Spotify says Merlin, which represents more than 30,000 independent labels and distributors, has joined Universal Music Group in backing its upcoming AI-powered remix and covers product. The paid tool will let fans create AI-generated covers and remixes of participating artists’ music while ensuring artists opt in, receive credit, and are compensated.

2026-08-04 原文 →
AI 资讯

Turn Your Routine Into an Assistant: A Practical Guide to Small AI Helpers

AI is not a genie. Treat it like a function. Most people use AI the way they use a search box: type a question, read the answer, move on. That works for one-off curiosity. It is a bad fit for the work you repeat every week, because you re-explain the context every time and never build anything you can trust. A small assistant is different. It is one narrow task, wired up once, with a fixed input and a fixed output shape. You run it, check it, improve it. After a few iterations it stops being a demo and starts pulling real weight. Here is how to build one without drowning in frameworks. Start narrow: one task, one input, one output Do not build "an assistant for my job." Build the thing that turns a messy meeting note into three bullet points. Pick a task that is: Repetitive (you do it weekly or daily) Boring (nobody will miss the manual version) Verifiable (you can look at the output and know if it is wrong) That last one matters most. If you cannot tell good output from bad in ten seconds, you cannot trust the assistant and you cannot improve it. Good starter tasks: drafting reply emails, summarizing documents, normalizing scrappy data, extracting fields from text. Example: an email draft as a function Think of your prompt as a function signature. Inputs go in, a structured draft comes out. def draft_reply ( incoming_email : str , tone : str = " friendly, brief " ) -> str : prompt = f """ You are drafting a reply on my behalf. Do not invent facts. If information is missing, leave a [PLACEHOLDER]. Tone: { tone } Incoming email: --- { incoming_email } --- Write only the reply body. """ return llm ( prompt ) # any model client you like Two lines do the real work: "Do not invent facts" and the [PLACEHOLDER] rule. Together they turn a confident hallucination into a visible gap you can fill. The goal is to make errors loud instead of silent. Example: summaries you can actually trust The failure mode of summaries is a plausible sentence that never appeared in the source.

2026-08-04 原文 →
AI 资讯

Orthogonality Is an Acceptance Test

A portfolio can look good on the usual scorecard and still answer the wrong question. One line says return was high. Another says risk-adjusted performance was acceptable. A third says drawdown stayed inside a tolerable range. Then the market turns, the benchmark starts recovering, and the thing I actually care about is different: how efficiently did the portfolio catch up? That is where a new metric can fool its own author. If I build a recovery measure and it moves almost exactly like an existing ratio, I have created a longer name for the same signal. The right acceptance test is geometric: a useful metric should cast a different shadow. This is the rule I used while validating Hyperlogarithmic Benchmark Catch-Up Ratio (HBCR): orthogonality to existing measures is a first-class test, not a chart for the appendix. 1. A new metric has to earn its axis HBCR was built to measure benchmark-relative recovery dynamics. The research page states the motivation plainly: traditional benchmark-relative metrics often fail to capture the true dynamics of investment performance, especially during market recoveries [ A New Metric for Private Equity Risk Adjusted Returns , Calibration of Risk and Correlation in Private Equity ]. That framing matters because the obvious validation path is tempting and weak. You compare the new number with familiar performance measures, find a comforting relationship, and declare victory. But a high correlation with a well-known score can be a warning. If HBCR strongly tracked Sharpe Ratio, it would probably be an expensive synonym for risk-adjusted return. The acceptance test I wanted was sharper. HBCR should have some relationship with performance, because recovery has economic content. It should also avoid collapsing into the same direction as Sharpe Ratio, Beta, Volatility, Alpha, Total Return, or Max Drawdown. Written as a predicate, the test has two sides. Let $\mathcal{T}$ be the set of metrics already on the scorecard, $\rho_{n,m}$ the corr

2026-08-04 原文 →
AI 资讯

How to Make Claude Code and AI Coding Agents Smarter with Spec-Driven Development

A practical guide to writing specs that turn vague AI prompts into production-quality code — from functional requirements to edge cases, with real before-and-after examples. Let me paint a picture you've probably lived. You open Claude Code or OpenCode, type a vague prompt like "add a user dashboard with analytics," and hit enter. The agent spins up, writes a bunch of code — it even looks decent at first glance. Then you realize: the data model is wrong, the API endpoints don't match your existing patterns, there's no error handling, and the "analytics" is just a row of four hardcoded numbers. You spend the next hour correcting, prompting, correcting again. You would have been faster writing it yourself. Now imagine a different scenario. You spend 15 minutes writing a structured specification, paste it into the agent, and it produces exactly what you wanted — following your conventions, handling edge cases, wired into your existing auth and data layer. One shot. That's not luck. That's the difference between treating your AI coding agent like a chatbot and treating it like a senior engineer who needs a clear design document — also known as spec-driven development . The Core Problem: AI Agents Are Powerful but Undirected Claude Code, OpenCode, Cursor Agent — these tools are incredible when pointed at a well-defined task. They can read your entire codebase, understand your conventions, and produce production-quality code. But they share a fundamental limitation: they don't know what you want unless you tell them, precisely and completely. When you give an agent a one-liner prompt, you're leaving an enormous amount of ambiguity. The model will fill in the gaps — but it fills them with its own assumptions, which are often generic, incomplete, or just wrong for your context. A spec closes those gaps. It transforms an open-ended creative writing exercise into a constrained engineering task. What Makes a Spec Actually Work for AI Coding Agents? A spec that works for an AI

2026-08-04 原文 →
开发者

Stop hls.js from flapping between quality levels on cellular (with abrSwitchInterval)

TL;DR ABR "flapping" is when your player hops between quality levels every few seconds on a jittery network, and each hop is a visible lurch. We'll detect it from LEVEL_SWITCHED events, then fix it in layers: widen the bandwidth-estimator memory, make upswitches earn their place, and cap the switch rate with abrSwitchInterval (new in hls.js 1.7). Config + a detection snippet you can paste in today. 📦 Code: github.com/USER/hlsjs-abr-tuning, replace before publishing The bug nobody reports correctly Users don't file "my ABR is flapping." They say the video "kept changing" or "couldn't decide." What's happening: on cellular, throughput is spiky, and the player's bandwidth estimator treats every spike as the new truth. One fast segment and it jumps to 1080p, one slow segment and it drops to 240p, over and over. Low rebuffer ratio, good startup time, and still a miserable watch. Counterintuitively, feeding the player fresher bandwidth data makes this worse, because fresher data is noisier. The fix is a player with a longer memory and slower reflexes. Let's build that. 1. First, detect the flap 📊 Don't tune by vibes. Count level switches per minute of playback. Every switch fires Hls.Events.LEVEL_SWITCHED . // abr-monitor.js, hls.js 1.7.x, node 20+ tooling / any modern browser import Hls from " hls.js " ; export function attachFlapMonitor ( hls ) { const switches = []; hls . on ( Hls . Events . LEVEL_SWITCHED , ( _evt , data ) => { const now = performance . now (); switches . push ({ t : now , level : data . level }); // keep a 60s sliding window while ( switches . length && now - switches [ 0 ]. t > 60 _000 ) switches . shift (); const perMin = switches . length ; const reversals = countReversals ( switches ); if ( perMin >= 6 ) { console . warn ( `[abr] flapping: ${ perMin } switches/min, ${ reversals } reversals` ); } }); } // a "reversal" = up then down (or down then up), the signature of flapping function countReversals ( s ) { let r = 0 ; for ( let i = 2 ; i < s . l

2026-08-04 原文 →
AI 资讯

When "select all" checkboxes don't actually select anything — verifying after `check()`, not just trusting it

WordPress's plugin and theme update screens both have a "select all" checkbox. Calling check() on it with Playwright succeeds — no error, no exception. But look at the individual checkboxes afterward, and sometimes none of them are actually checked. Note: Playwright's check() ticks a checkbox. The click itself can succeed even if the page's JavaScript handler never fires, leaving what the form actually submits out of sync with what the screen visually shows. What actually happens The "select all" checkbox is usually wired up with a JavaScript handler: clicking it is supposed to check every individual checkbox underneath it. Playwright's check(force=True) can force the DOM state of that one checkbox — but that only changes that checkbox's own state . It doesn't guarantee the JavaScript handler that's supposed to propagate the change to the individual checkboxes actually fires. # Looks like it worked, but the individual checkboxes are still unchecked select_all . first . check ( force = True ) page . click ( ' input[type= " submit " ][name= " upgrade " ] ' ) Clicking the update button submits whatever the form's actual state is — which is "nothing checked." Nothing updates. No error is thrown, so on the surface it looks like the run completed normally. The fix — verify right after checking, every time Right after checking "select all," confirm that the individual checkboxes underneath are actually checked. If they aren't, fall back to checking each one individually. sel_all_sel = ' input[type= " checkbox " ][id^= " plugins-select-all " ] ' select_all = plugin_form . locator ( sel_all_sel ) if select_all . count () > 0 : select_all . first . check ( force = True ) page . wait_for_timeout ( 500 ) # Verification step — confirm checkboxes are actually checked chk_sel_check = ' input[type= " checkbox " ][name= " checked[] " ]:checked ' any_checked = plugin_form . locator ( chk_sel_check ). count () > 0 if not any_checked : # Select-all had no effect; switch to individual s

2026-08-04 原文 →