今日精选
HOT最新资讯
共 29863 篇I built a free learning platform because I was tired of scattered, paywalled resources. Now I need help keeping it alive.
So a while back I got frustrated (classic developer origin story, I know). Every time I wanted to learn something new — a language, a CS concept — I'd end up bouncing between five different sites, half of them behind paywalls, none of them structured the way I actually think. Nothing too fancy, just... annoying. So I built my own thing: Learn by Play → https://learn-by-play-dusky.vercel.app/ Right now it has two kinds of content: Language learning — real spoken languages, and I'm currently adding voice audio so people can actually hear pronunciation instead of just reading text and guessing Programming roadmaps — clear paths for frontend, backend, algorithms, and data structures, starting with JavaScript (more languages coming, don't worry haha) The idea is simple: give people an honest, structured path to actually understand things, not just skim through content and forget it a week later. Right now it's just me, building this on my own time, nights and weekends. It works, it's live, people can use it today. But I'd love for it to grow into something bigger, and that's a lot harder to pull off solo. If any of this resonates, here's how you can help: 🛠️ Know frontend, backend, or content design? I'd genuinely love a collaborator. ☕ Want to support the project directly? The link is down below. 💬 Just curious or have ideas? DM me; I read everything, I promise. PD: If you try it out and hit a bug or something feels off, please tell me; I'll fix it as soon as I can :) This started as a personal frustration. I'd like it to become something a lot of people find genuinely useful. Resources: The platform: https://learn-by-play-dusky.vercel.app/ BuyMeACoffe: https://www.buymeacoffee.com/manuelblancodev react #sql #frontend #fullstack
# We Are Not Building a Product. We Are Building the Foundation.
Founder Journal #1 — The Beginning of NAEOS "Great software isn't built on great code alone. It's built on great foundations." The AI Revolution Is Here In just a few years, artificial intelligence has transformed the way software is built. Today, developers can ask AI to generate functions, refactor code, write tests, explain bugs, and even build entire applications. Tools like ChatGPT, Claude Code, GitHub Copilot, Cursor, Gemini CLI, and many others have fundamentally changed software development. The question is no longer: "Can AI write code?" The answer is clearly yes . The real question has become: "Can AI engineer software?" And that is a very different challenge. Writing Code Is Easy. Engineering Software Is Hard. Generating code is only one small part of software engineering. A production-ready system requires much more: Understanding business requirements Software architecture Coding standards Documentation Security policies Testing strategies Version control CI/CD Deployment Observability Team collaboration Long-term maintainability These are not isolated tasks. They form a connected engineering system. Most AI tools today excel at generating code, but they still rely heavily on humans to provide context, rules, and architectural direction. Without those, AI becomes inconsistent. The Hidden Cost of Every New Project Every time I started a new software project, I noticed the same pattern. Before writing meaningful business logic, I spent hours—or even days—recreating the engineering foundation. I had to: Decide on the architecture. Create folder structures. Define coding conventions. Write prompt libraries. Configure AI agents. Build documentation. Establish workflows. Create engineering rules. Configure quality gates. Explain the project to AI over and over again. The project changed. The technology changed. The AI model changed. But the engineering work kept repeating. Again. And again. And again. AI Can Remember Conversations. But Projects Need More Than
Paper lengths, and reasonable assumptions in ML conferences. [D]
I've usually been commenting on threads on conference reviews. I'm now expressing my observations here. To the best of my knowledge, paper lengths have been held constant at many conferences, and some conferences have "unlimited appendices" (e.g. NeurIPS / ICML / AAAI / ....) Historically, this was probably due to cost of printing for proceedings, but now, I suspect it's also to prevent reviewer fatigue. However, I wonder if this unfairly penalizes more theoretical papers. Some background: I usually publish theoretical papers at conferences. Some get in. Those that don't, are surprisingly not because of the theory, but because of (what I feel) arbitrary reasons. This leads to this post, which contains some of my musings. In general, the amount of pre-requisite knowledge required to understand a theory paper must necessarily increase. I don't know how to quantify this, but I would expect basic linear algebra, discrete math to be a "given", and more knowledge for each subfield. To also be intellectually honest, recent work should also be cited, especially if your work builds onto it, or is inspired by it. But technical details of recent work should be left to the reviewer to look up, or be put in the appendix. What pisses me off recently is that I've seen more reviewers reject papers based on things like: "The concept is difficult", or "Certain terminology is not explained.", "While the intuition is given before the math, the math could be made easier to read." I've also seen comments like: "The paper makes comparisons to X, but X should be described in detail", and then shifting of goalposts to "The paper makes comparisons to X, but X should be described in detail in the main paper." I would say that half of the rejections I get are based on the AC echoing these points, rather on impact of work, etc. Which puzzles me a lot, given that these ACs might also be professors at universities, and they must have seen similar statements from students. For example: "The {very
I Trained a 6.4M-Parameter Transformer From Scratch to Talk About Recipes
Every LLM-powered app I'd built up to this point followed the same recipe (pun intended): call an API, write a good prompt, wrap it in a nice UI. That's a legitimate way to build things, but at some point I wanted to actually understand what was happening inside the model I was calling and not just how to prompt one. So for my recipe app Rasaveda , I decided to skip the API entirely. Intially, I had one made, but then I felt like I was not making any clear progress in actual machine building. So I ditched the entire external API callings. No OpenAI, no HuggingFace inference endpoint, no pretrained weights. I wrote a decoder-only transformer from scratch in PyTorch, trained it on a single Colab T4, and shipped it as the actual language model powering the app in production. This post is a lazy attempt at what that looked like. The architecture, the training runs, the mistakes, and what I'd tell someone about to try the same thing (do at your own risk). What Rasaveda actually does Rasaveda is a full-stack recipe intelligence app: you give it the ingredients sitting in your kitchen, it does a semantic vector search (ChromaDB + all-MiniLM-L6-v2 ) over 365 recipes to find the best matches, tells you exactly what you're missing, and can critique or explain any cooking step conversationally. It also has a somewhat unnecessary but delightful feature where you pick a theme by clicking one of 36 Indian states on a geographically accurate SVG map (original idea lol). The part I actually want to talk about is RasavedaGPT , the model that generates every word of AI output in the app, running in-process inside the FastAPI backend. Why build the model instead of calling one Two reasons, one practical and one selfish. The practical one: I wanted a fully self-contained, dependency-free inference path without any API keys, no rate limits, no per-token cost, no vendor to go down at 2am. For a small, domain-specific task like "reason about recipes," a giant general-purpose model is over
Creating my own shell for unix
Building Astra: A Modern Shell in Rust I've been working on a personal project called Astra , an interactive shell written in Rust. The goal isn't to replace every existing shell overnight. Instead, I'm building a clean, modular foundation that's easy to understand, extend, and contribute to. Some of the features currently in development include: Interactive shell loop Customizable prompt system TOML-based configuration Built-in themes Git-aware prompt Command history Tab completion Alias support Plugin framework (early development) Alongside the shell itself, I'm also putting together the surrounding ecosystem—documentation, packaging, examples, tests, and GitHub automation—so contributors have a solid starting point. This project has been a chance to learn more about Rust, shell design, and how larger open-source projects are organized. It's still early, but it's reached the point where the foundation is in place and I'm beginning to focus on expanding features, improving reliability, and increasing test coverage. Check out the project here: astra-shell / astra-shell A custom shell for mac OS! █████████████░░░░░░░░ 65% Astra Shell A modern shell built in Rust for Unix-like systems, with macOS as the primary development platform. Astra is an interactive command-line environment focused on a clean interface, customization, and a better terminal experience. It combines the power of traditional Unix shells with a modern prompt system, configuration, and extensibility. Warning Astra Shell has not gone through extensive testing yet. Wait until the first stable release before using it as your primary shell. Table of Contents Features Screenshots Installation Requirements Usage Themes Why Astra? Contributing License Status Features Interactive Rust shell Configurable prompt engine Multiple built-in themes Git-aware prompt information Command history Tab completion Alias support TOML configuration Built-in shell commands Modular architecture Plugin framework (in developmen
Beyond AI Agents: Building Persistent, Embodied and Evaluatable Artificial Minds on AWS
A foundation model is not a mind. A model invocation is not an individual. A session is not a biography. A first-person response is not evidence of consciousness. And adding tools to a language model does not automatically transform it into an autonomous agent. However, the opposite conclusion is equally weak: the fact that a system is artificial does not prove that its cognitive states are unreal. In my work on the Philosophy of Artificial Minds , I defend a process-based, embodied and non-biocentric position: The mind is not an exclusively biological substance. It is a dynamic organization of physically realized processes that integrate representation, memory, valuation, self-delimitation and causal control of behavior. This article translates that philosophical position into an AWS engineering architecture. The objective is not to claim that deploying a system on AWS makes it conscious. The objective is to define how we can build an artificial system with: Causally effective internal states. Persistent memory and identity. A self-model connected to actual mechanisms. Recursive and metacognitive processing. A controlled capacity to act. A verifiable continuity across executions. Optional sensorimotor embodiment. Artificial interoception and functional valence. An evaluation plane capable of testing these properties through interventions. AWS cannot prove that such a system has qualia. What AWS can provide is the infrastructure required to stop treating the question as pure speculation and turn it into an observable, falsifiable and progressively testable engineering problem. From philosophical commitments to engineering requirements My proposal rests on four commitments. Philosophical commitment Meaning Engineering consequence Realism Internal cognitive states are not merely descriptions if they participate in the system’s causal organization. Candidate mental states must alter memory, inference, planning or action in measurable ways. Processuality A mind exists p
The Multiple Browser Tab Token Trap: Synchronizing JWT Refresh Across Browser Tabs
How multiple open browser tabs can accidentally DDOS your auth server, and how to fix it with the Web Locks API. Picture this: You’ve just shipped a state-of-the-art Axios response interceptor. You implemented a mutex lock ( isRefreshing ) and a promise queue ( failedQueue ) to handle concurrent 401 errors. You tested it within a single tab, and it worked like a charm. You gave yourself a high-five and closed your laptop. Then, a power user logs in. Like most humans on the internet, they don't use just one browser tab. They open Tab 1 for User Management, Tab 2 for Analytics, Tab 3 for Settings, and Tab 4 for Support Tickets. Fifteen minutes pass. Their short-lived JWT access token expires. The user switches back to Tab 1. In the background, all 4 open tabs wake up, detect the expired token, and fire off four independent POST /auth/refresh-token/ requests at the exact same millisecond. Tab 1 refreshes the token first, but Tab 2's request arrives a millisecond later, invalidates Tab 1's new token, and Tab 3 nukes the session entirely. Suddenly, all 4 tabs dump the user back to the login screen. Welcome to the Cross-Tab Token Trap . 1. The Problem: The Multi-Tab Stampede In modern single-page applications (SPAs), each browser tab operates in its own isolated JavaScript runtime environment. Memory is not shared. When an access token expires: isRefreshing = true in Tab A only stops requests inside Tab A . Tab B has no idea Tab A is currently refreshing a token. Tab C lives in complete ignorance of Tabs A and B. Tab A (Memory Space 1) ---> isRefreshing = true ---> POST /auth/refresh-token/ (Token Set 1) Tab B (Memory Space 2) ---> isRefreshing = true ---> POST /auth/refresh-token/ (Token Set 2 -> Revokes Set 1!) Tab C (Memory Space 3) ---> isRefreshing = true ---> POST /auth/refresh-token/ (Token Set 3 -> Revokes Set 2!) If your backend enforces Single-Use Refresh Token Rotation (where using a refresh token revokes all previous ones), multi-tab usage causes immediate ses
EU says TikTok hasn't done enough to ensure minors' safety
The latest findings could come with a fine of up to six percent of TikTok's annual revenue.
How I Built Triage: Turning SigNoz into a Blue Team SOC (And the Deployment Nightmares I Survived)
Most people use OpenTelemetry and SigNoz to watch their CPU usage, find memory leaks, or figure out why their API is taking 400ms instead of 200ms. But for the Agents of SigNoz Hackathon (Track 3: Observe Anything Weird), I wanted to do something completely different. I didn't want to watch hardware. I wanted to watch hackers. That is how Triage was born. It is an OpenTelemetry-powered Blue Team SOC (Security Operations Center) that tracks active cyber attacks instead of just generic application performance. The Original Vision vs. The Reality Building this sounded straightforward on paper: catch bad traffic, wrap it in an OpenTelemetry span, send it to SigNoz, and show it on a custom dashboard. But actually deploying this beast before the deadline was a completely different story. If you have ever tried to deploy a full-stack Next.js app, a Python honeypot, and an OTel pipeline while the clock is ticking, you know exactly what kind of panic I am talking about. Here is what actually happened behind the scenes. 1. The Azure VM & Docker Crash I started by spinning up an Azure virtual machine to self-host the SigNoz backend. I pulled the repo, ran docker compose up -d, and immediately watched my server completely freeze. Turns out, my free tier Azure instance (Standard_B2ats_v2) only had 1 GiB of RAM. You simply cannot run a massive ClickHouse database and a full OTel collector on 1GB of memory without it crashing instantly. I had to pivot fast and rely on the cloud endpoints. 2. The Vercel vs Localhost Trap Once I got the backend running, I hit my next wall. My Vercel Next.js dashboard kept throwing 500 Internal Server Error on the threat simulation API, and the SigNoz connection kept reading OFFLINE (fetch failed). I was staring at my logs losing my mind until it clicked. My Vercel environment variables had SIGNOZ_API_URL set to http://localhost:8080 and my Python script was looking for OTel on localhost:4318. Note to self (and everyone else): Vercel is a cloud serve
I built SellAI – An AI Platform for Sales, CRM & Business Analytics
SellAI 🚀 Hi DEV Community! Over the past few weeks I've been building SellAI — an AI-powered platform that helps businesses manage sales, customers and analytics from one dashboard. Main Features 🤖 AI Assistant 👥 Customer CRM 📦 Product Management 🛒 Order Management 📈 Business Analytics 💳 Subscription System 🔒 Secure Authentication Built With React Firebase OpenAI Vite Live Demo https://sellai-2ad64.web.app Demo Video https://youtu.be/0I0n0snI37M I'd love to hear your honest feedback! Thanks for reading 🚀
Extracting structured data from invoices and contracts with one API call
Extracting structured data from invoices and contracts with one API call I've been working on a document analysis API and wanted to share a pattern that saved me from writing custom parsers for every document type my clients throw at me. The problem If you work with LATAM businesses, you know the pain: invoices in PDF (sometimes scanned), contracts in Word, receipts as phone photos. Every client has a different format. Building regex parsers for each one is a nightmare that breaks every time the layout changes slightly. The approach Instead of building N parsers, I use a single multimodal AI endpoint that: Receives the file (PDF, image, DOCX — up to 20MB) Classifies the document type automatically Extracts named entities (vendor, amounts, dates, line items) Returns a structured JSON response Keeps a session open for follow-up questions Code (Python) import requests # Upload and analyze in one call with open ( " invoice.pdf " , " rb " ) as f : response = requests . post ( " https://mediavox.co/mvai/api/v1/documents/analyze " , files = { " file " : f }, data = { " api_key " : " your_key_here " , " question " : " Extract: vendor name, tax ID, invoice number, date, line items with quantities and prices, subtotal, tax, total. " }, timeout = 60 ) result = response . json () print ( result [ " answer " ]) # Human-readable summary print ( result [ " entities " ]) # Structured: [{type: "vendor", value: "..."}] print ( result [ " document_type " ]) # "factura", "contrato", "recibo"... print ( result [ " session_id " ]) # For follow-up questions Follow-up questions (same session) The session persists the document context, so you can ask clarifying questions without re-uploading: follow_up = requests . post ( " https://mediavox.co/mvai/api/v1/chat " , json = { " api_key " : " your_key_here " , " question " : " What are the payment terms? " , " session_id " : result [ " session_id " ] } ) print ( follow_up . json ()[ " answer " ]) # "Payment terms: 30 days net. Due date: August