Google will pay SpaceX $920 million a month to use xAI's data centers
Google has just signed a $30 billion AI computing power deal with SpaceX.
AI人工智能最新资讯、模型发布、研究进展
Google has just signed a $30 billion AI computing power deal with SpaceX.
5 Principles of Survival for Software Engineers Adapted from Leon Business School's "5 Principles of Survival" Your stack won’t save you. Your principles will. In the wild, survival isn’t about having the best gear. In software, survival isn’t about having the absolute best framework. It’s about how you operate when production is on fire, the roadmap shifts overnight, and AI just turned your "moat" into a weekend hobby project. Here are 5 core principles that keep you alive in modern software engineering. 1. 🔥 Adapt or Perish Change is not optional; it is the price of survival. In the wild: The species that cannot adapt to winter dies. In software: The team that cannot adapt to change dies slowly at first, then all at once. "Localhost is for amateurs" used to be a strongly held belief. Now, Claude writes a full CRUD API in 30 seconds on localhost . "We’re a React shop" was a proud identity. Now, HTMX ships the same feature before your Webpack build even finishes. Your identity as an engineer cannot be tied to a specific tool. Your identity is solving problems . The syntax is temporary. Agreement on what to build is what actually matters. 🛠️ Survival Action Every quarter, deliberately kill one "we’ve always done it this way" rule in your workflow. 2. 🧭 Stay Calm Under Pressure Panic is the first casualty of poor preparation. In the wild: Panic burns critical calories and gets you lost. In software: Panic causes a git push --force to main on a Friday at 4:59 PM. Outages don’t kill companies. Panicked responses do. The team that has clear runbooks, relies on feature flags, and can execute a rollback in under 90 seconds stays calm. Why? Because they prepared when it was quiet. If your first step in incident response is opening X (Twitter) or complaining in a public Slack channel, you have already lost. 🛠️ Survival Action If you don't have a tested rollback plan, you don't have a deployment plan. Write it down before your next release. 3. 💡 Resourcefulness Over Resources
Hello, I'm Maneshwar. I'm building git-lrc, a Micro AI code reviewer that runs on every commit. It is...
Published on : 2026-06-06 Reading time : 6 min Tags : #python #async #performance #optimization The Problem: Fake Async The supabase-async library claimed to be async but actually wrapped synchronous calls with ThreadPoolExecutor: # ❌ Fake async (old code) class SupabaseAsync : def __init__ ( self ): self . _executor = ThreadPoolExecutor ( max_workers = 3 ) async def select ( self , table : str ): loop = asyncio . get_event_loop () r = await loop . run_in_executor ( self . _executor , lambda : requests . get ( url ) # Sync call wrapped as async ) return r . json () Problems : Max 3 concurrent requests (not scalable) Thread overhead per request High memory usage No connection pooling Solution: httpx AsyncClient Use true async HTTP with httpx: # ✅ Real async (new code) import httpx class SupabaseAsync : def __init__ ( self ): self . _client : Optional [ httpx . AsyncClient ] = None async def _get_client ( self ) -> httpx . AsyncClient : if self . _client is None : self . _client = httpx . AsyncClient ( headers = self . _headers , timeout = 30 , limits = httpx . Limits ( max_connections = 10 ) ) return self . _client async def select ( self , table : str ): client = await self . _get_client () r = await client . get ( f " { self . _base } / { table } " ) r . raise_for_status () return r . json () Performance Gains Metric ThreadPoolExecutor(3) httpx(10) Max concurrent 3 requests 10 requests Avg response 450ms 150ms Memory usage 250MB 180MB Throughput 6.7 req/s 20 req/s Real benchmark : 100 concurrent requests ThreadPoolExecutor: 15 seconds httpx AsyncClient: 5 seconds 3x faster ⚡ Migration Steps 1. Client Initialization with Lazy Loading async def _get_client ( self ) -> httpx . AsyncClient : if self . _client is None : self . _client = httpx . AsyncClient ( headers = self . _headers , timeout = 30 , limits = httpx . Limits ( max_connections = 10 , max_keepalive_connections = 5 ) ) return self . _client 2. HTTP Methods (GET, POST, etc.) async def _request ( self , metho
If you've ever hit Unexpected token in JSON at position 42 or Unterminated string , there's a good chance an unescaped character broke your payload. JSON is strict about what's allowed inside a string, and the fix is almost always escaping . Here's the practical version. What does escaping a JSON string mean? A JSON string is wrapped in double quotes. Any character that would confuse the parser must be replaced with a backslash escape sequence. Escaping doesn't change the meaning of your text — it just makes the string valid JSON so parsers can read it. Unescaping is the reverse: turning those sequences back into readable characters (handy when you copy a value out of logs or an API response). The characters you must escape JSON defines exactly seven characters that must be escaped inside a string: Character Escaped as Double quote " \" Backslash \ \\ Newline \n Carriage return \r Tab \t Backspace \b Form feed \f The forward slash / may optionally be escaped as \/ , but it isn't required. Unicode can be written as \uXXXX (four hex digits). JSON escape examples Double quotes — He said "hello" becomes: "He said \" hello \" " Backslashes (Windows paths) — C:\temp\file.txt becomes: "C: \\ temp \\ file.txt" Newlines and tabs — a two-line, tabbed string becomes: "Line 1 \n Line 2 \t Tabbed" How to escape and unescape JSON in code In production you rarely escape by hand — every language has it built in. JavaScript const escaped = JSON . stringify ( text ); // escape const back = JSON . parse ( escaped ); // unescape Python import json escaped = json . dumps ( text ) # escape back = json . loads ( escaped ) # unescape Java (Jackson) ObjectMapper mapper = new ObjectMapper (); String escaped = mapper . writeValueAsString ( text ); String back = mapper . readValue ( escaped , String . class ); C# (.NET) using System.Text.Json ; string escaped = JsonSerializer . Serialize ( text ); string back = JsonSerializer . Deserialize < string >( escaped ); Common escaping mistakes (and f
I shared last Tuesday, but the post was removed as Showoff which can post only on Saturdays. Here again! No external CSS, JS, icon, font frameworks. Manage your composable CSS and HTML partials with a YAML data-driven approach, side-by-side using pure Markdown files. Home widgets: Hero, Bento, Showcase, Action Cards (plug and play) Responsive and adaptive layouts. Support for light and dark modes. Support for multiple documentation sets. Support for a blog. Implement a menu via Hugo configs. Customizable sidebars using Hugo data templates. Plug-and-play/ repeatable home page blocks using separate partials/ css/ data templates. Integrate a search via Pagefind. Demo: https://dumindu.github.io/E25DX/ Demo Setup: https://github.com/dumindu/E25DX/tree/gh-pages/example GitHub: https://github.com/dumindu/E25DX So, No need Hundreds of NPM Packages & Thousands of CSS Classes For A Modern And Modular Technical Documentation & Blog Setup In 2026 submitted by /u/dumindunuwan [link] [留言]
In the last update, I introduced MDL as an HTML-first language for building websites and apps with less noise. This update is about the next layer: adapters . The goal is simple: MDL source should describe intent. Adapters decide how that intent becomes deployable HTML. Why adapters? I don’t want MDL to become locked into one frontend framework. Instead, the same MDL structure should be able to target different deployment styles: static HTML MDL-native runtime attributes HTMX future template or framework adapters So this: form@api(post /api/login)@result(loginResult)@swap(replace): .input@type(email)@required .btn-primary@type(submit)(Sign in) status@id(loginResult): Waiting. Can become plain HTML: html <form method= "post" action= "/api/login" > Or HTMX: html <form hx-post= "/api/login" hx-target= "#loginResult" hx-swap= "outerHTML" > Security before convenienceThe important part is that MDL does not pass behavior attributes through blindly. Raw HTMX attributes like this are blocked: mdl form@hx-post(/api/login): Instead, MDL uses intent-based attributes: mdl form@api(post /api/login): Then the adapter validates and translates it. Current safety rules include: external api(...) URLs are rejected raw @hx-* attributes are blocked raw browser events like onclick(...) are blocked unsafe URL schemes like javascript: are blocked broad form inclusion like @params( ) is blocked @inherit( ) is blocked @disinherit(*) is allowed because disabling inherited behavior is safer That means MDL can support HTMX without making MDL source depend directly on HTMX’s full raw surface area. New HTMX adapter attributesThe HTMX v2 adapter now supports more behavior attributes: mdl @select-oob(...) @swap-oob(...) @disabled(...) @disinherit(...) @encoding(...) @history-elt(...) @inherit(...) @params(...) @preserve(...) @prompt(...) @replace(...) @request(...) @sync(...) @validate(...) Example: mdl form@api(post /api/profile)@result(profileResult)@swap(replace)@params(email csrfToken)@disable
Published on : 2026-06-06 Reading time : 6 min Tags : #python #async #performance #optimization 문제: 거짓 비동기 supabase-async 라이브러리는 이름은 async이지만, 실제로는 ThreadPoolExecutor로 동기 호출을 래핑하고 있었습니다. # ❌ 거짓 비동기 (기존 코드) class SupabaseAsync : def __init__ ( self ): self . _executor = ThreadPoolExecutor ( max_workers = 3 ) async def select ( self , table : str ): loop = asyncio . get_event_loop () r = await loop . run_in_executor ( self . _executor , lambda : requests . get ( url ) # 동기 호출을 async로 포장 ) return r . json () 문제점 : 최대 3개 동시 요청만 가능 (동시성 부족) 스레드 오버헤드 (각 요청마다 스레드 생성) 높은 메모리 사용량 해결책: httpx AsyncClient 진정한 비동기 HTTP 클라이언트인 httpx를 사용합니다. # ✅ 진정한 비동기 (수정된 코드) import httpx class SupabaseAsync : def __init__ ( self ): self . _client : Optional [ httpx . AsyncClient ] = None async def _get_client ( self ) -> httpx . AsyncClient : if self . _client is None : self . _client = httpx . AsyncClient ( headers = self . _headers , timeout = 30 , limits = httpx . Limits ( max_connections = 10 ) ) return self . _client async def select ( self , table : str ): client = await self . _get_client () r = await client . get ( f " { self . _base } / { table } " ) r . raise_for_status () return r . json () 성능 개선 동시성 비교 지표 ThreadPoolExecutor(3) httpx(10) 최대 동시 요청 3개 10개 평균 응답 시간 450ms 150ms 메모리 사용량 250MB 180MB 초당 처리량 6.7 req/s 20 req/s 벤치마크 # 100개 동시 요청 처리 시간 ThreadPoolExecutor : 15 초 httpx AsyncClient : 5 초 → 3 배 빠름 마이그레이션 단계 1. 클라이언트 초기화 async def _get_client ( self ) -> httpx . AsyncClient : if self . _client is None : self . _client = httpx . AsyncClient ( headers = self . _headers , timeout = 30 , limits = httpx . Limits ( max_connections = 10 , max_keepalive_connections = 5 ) ) return self . _client 2. 요청 메서드 async def _request ( self , method : str , url : str , ** kwargs ): client = await self . _get_client () if method == " GET " : return await client . get ( url , ** kwargs ) elif method == " POST " : return await client . post ( url , ** kwargs ) # ... 3. Context Manager 지원 async def clos
Published on : 2026-06-06 Reading time : 8 min Tags : #security #python #audit #devops 개요 3개월에 걸쳐 개발한 6개 Python 프로젝트(3개 봇 + 3개 라이브러리)를 종합 감사했습니다. 25개 보안/코드 이슈를 발견했고, 23개를 즉시 수정했습니다. 감사 대상 : FastAPI + Telegram Bot + LLM 통합 시스템 총 파일 : 91개 Python 파일 발견 이슈 : 25개 (심각 5개, 중간 18개, 경미 2개) 수정율 : 92% (23/25) 심각도 높음 - 5개 이슈 1. API 키가 Git 히스토리에 노출됨 🔴 문제 : Anthropic, Supabase, Telegram API 키가 .env 파일로 커밋됨 # ❌ 노출된 상태 (git log에서 확인 가능) ANTHROPIC_API_KEY = sk - ant - api03 - xxxxxxxxxx SUPABASE_KEY = sb_publishable_xxxxxxxxxx 위험도 : 누구든 이전 커밋으로 API 키 접근 가능 → 리소스 도용, 데이터 침해 해결책 : # 1. BFG로 히스토리 정리 bfg --delete-files ".env" --no-blob-protection . # 2. Git에서 제거 git rm --cached .env echo ".env" >> .gitignore # 3. API 키 로테이션 (필수) # - Anthropic: console.anthropic.com/account/keys # - Supabase: app.supabase.com → Settings → API # - Telegram: @BotFather → /token 2. SSL 검증 비활성화 (MITM 공격 위험) 🔴 문제 : requests 호출에 verify=False 사용 (10곳) # ❌ 위험한 코드 response = requests . get ( url , verify = False ) # ✅ 안전한 코드 response = requests . get ( url , verify = True ) # 기본값 영향 : HTTPS 중간자 공격(MITM) 가능 → 민감한 데이터 도청 수정 : contest-agent, supabase-async 전체 10곳 제거 3. 광범위한 예외 처리 🔴 문제 : except Exception 으로 모든 오류를 무시 (114곳) # ❌ 버그 추적 불가 try : result = await db_select ( " contests " ) except Exception : print ( " failed " ) # 어떤 오류인지 알 수 없음 # ✅ 구체적인 처리 try : result = await db_select ( " contests " ) except requests . HTTPError as e : logger . error ( f " DB error: { e } " , exc_info = True ) raise 영향 : 버그 원인 파악 불가 → 프로덕션 문제 대응 시간 증가 4. 라이브러리 __init__.py 부실 문제 : llm-router, supabase-async, telegram-agent의 __init__.py 비어있음 # ❌ 기존 (빈 파일) # __init__.py # (아무것도 없음) # ✅ 수정 후 from llm_router import LLMRouter __version__ = " 0.1.0 " __all__ = [ " LLMRouter " ] 영향 : PyPI 설치 후 import 실패 from llm_router import LLMRouter # ❌ ImportError 5. 문법 오류 (try-except 들여쓰기) ai-insight-curator의 processor.py에서 DB 작업이 try 블록 밖에 있었음 → 예외 처리 안 됨 심각도 중간 - 18개 이슈 의존성 버전 불일치 Anthropic: 0.25.0 / 0.34.0 혼재 → 0.34.0으로 통일 Supabase: 2.0.0 / 2.4.0 혼재 → 2
When I started learning Data Science, I expected to spend my first week writing Python code, exploring machine learning models, and working with advanced tools. Instead, I spent most of my time in Excel. At first, it felt underwhelming—just rows, columns, and simple spreadsheets. But within a few days, I realized something important: Excel is not a basic tool at all. It is one of the most widely used tools in data analysis, business decision-making, and reporting. 📊 Real-World Uses of Excel Excel is widely used across industries for handling and analyzing data. Some of the most common uses include: Business Analysis - Tracking sales and identifying trend Accounting and Budgeting - Managing Expenses, Profits and Financial reports Marketing Analysis - Measuring campaigns performance and customer behavior Data Entry and Management - organizing large datasets efficiently Businesses rely on Excel because it helps turn raw data into meaningful insights for decision making. 🛠️ Key Excel Features I Learned In my first week, I explored several important Excel Features that help with data organization and analysis: Excel Interface Overview - I first explored how Excel is organized, including Ribbon, Worksheets, Cell, Row, Columns, and formula bar. this helped me understand how to navigate the tool before working with data Data Sorting - Organizing data by numbers, Text and Dates Filtering - Showing only relevant data based on condition Data Validation - Ensuring accurate and consistent data entry Freeze Panes - Keeping header Visible while scrolling through large datasets. These features make working with data much easier, faster and more structured. 🧮 Basic Excel Functions I learned I was also introduced to some basic Excel functions used in Data Analysis. Aggregate Functions - SUM - Add all values in a range - AVERAGE - Calculate the mean of a dataset - COUNT - Counts numerical entries in a dataset Conditional Functions - SUMIF () and SUMIFS()** - Add values that meets one
New simulations reveal that the moons of Uranus may retain traces of giant planets.
I grew tired of mocks lying to me and the extra complexity they bring. This led me back to a classic design pattern: the Command. The idea is simple: separate an action from its execution. I wanted a functional take on this, though: no classes, no mutation, just pure functions returning plain data. Most importantly, I wanted it without the academic vocabulary of category theory. The result is a tiny library a developer could master in a single afternoon. It removes the need for mocking libraries and comes with additional benefits such as time-travel debugging. submitted by /u/aijan1 [link] [留言]
Inspired by Nir Eyal's "beliefs are tools" framework Beliefs are tools, not truths. Tech stacks are too. Pick the ones that work for you. Most "tech debt" is actually "belief debt". We hold onto frameworks, patterns, and processes long after they stop serving the product. To build great software, we need to introduce a core rule: If a tech belief or "best practice" doesn’t solve a real problem for you right now, it must be treated as false. Here is how to audit your tech beliefs using 5 filters. 1. ARE THEY USEFUL? The real question isn’t "Is this the best tech?" It’s "Does this serve the user?" Tools are tools. Keep the ones that ship. Bad belief (Treat as False): "We need Kubernetes because it’s the industry standard." Useful belief (True for Now): "A $5 VPS serves 10k users. We’ll use K8s when we have a scaling problem, not a resume problem." If your architecture choice doesn’t make the core loop faster, cheaper, or simpler for users, it’s not serving you. Delete it. 2. ARE THEY TESTED? A useful stack holds up when the world pushes back. Pay attention to production, not the trending blog posts. Bad belief (Treat as False): "Microservices are inherently more scalable"—said before you even have 2 concurrent users. Tested belief (True for Now): "Our monolith handles 50 req/s perfectly. We’ll split services only when latency exceeds 300ms in prod." Load test it. Dogfood it. If it only works in a conference slide deck, it’s a story, not a tool. 3. ARE THEY OPEN? A tech choice you can’t change has stopped being a tool and has become a cage. Hold opinions firmly, but hold implementations loosely. Bad belief (Treat as False): "We’re a React shop forever." Open belief (True for Now): "React serves us today. If HTMX lets us ship this feature in 2 days instead of 2 weeks, we’ll use HTMX." In a famous study on hope, Curt Richter’s rats swam for 60 hours when they believed rescue was coming. Your team will grind for years on a legacy stack if they believe it can actually be r
JavaScript Data Types: Primitive and Non-Primitive Data Types Data types are an important concept in JavaScript because they define the kind of value a variable can store. Understanding data types helps developers write reliable and efficient code. What is a Data Type? A data type defines what kind of value a variable can hold. Example let name = " John " ; // String let age = 25 ; // Number let isActive = true ; // Boolean In the above example, each variable stores a different type of value. Types of Data Types in JavaScript JavaScript data types are broadly classified into two categories: Primitive Data Types Non-Primitive Data Types Primitive Data Types Primitive data types store a single and simple value. Characteristics Store a single value. Immutable (cannot be changed directly). Compared by value. Stored directly in memory. Types of Primitive Data Types 1. String Used to store textual data. let name = " John " ; 2. Number Used to store numeric values. let age = 25 ; let price = 99.99 ; 3. Boolean Represents either true or false . let isLoggedIn = true ; 4. Undefined A variable that has been declared but not assigned a value. let city ; console . log ( city ); // undefined 5. Null Represents the intentional absence of a value. let user = null ; 6. Symbol Used to create unique identifiers. let id = Symbol ( " id " ); 7. BigInt Used to store very large integers beyond the safe Number limit. let largeNumber = 123456789012345678901234567890 n ; Non-Primitive Data Types Non-primitive data types store multiple values or complex data structures. Characteristics Can store collections of data. Mutable (their contents can be modified). Compared by reference. Stored as references in memory. Types of Non-Primitive Data Types 1. Array Used to store multiple values in a single variable. let colors = [ " red " , " green " , " blue " ]; 2. Object Used to store data as key-value pairs. let person = { name : " John " , age : 25 }; 3. Function Functions are reusable blocks of co
Optimizing Laravel Performance: Conquering the N+1 Query Problem with Eager Loading As full-stack developers, building performant applications is a continuous challenge. One of the most insidious yet common performance bottlenecks encountered in Laravel applications is the "N+1 query problem." This issue can significantly degrade response times, inflate database load, and ultimately lead to a poor user experience. Fortunately, Laravel provides a powerful and elegant solution: eager loading using the with() method. This tutorial will walk you through understanding the N+1 problem and effectively using eager loading to keep your applications fast and efficient. Understanding the N+1 Query Problem Imagine a scenario where you need to display a list of blog posts, and for each post, you also want to show the name of its author. In a typical Laravel application, your Post model would likely have a belongsTo relationship with a User model. Let's look at a common, yet inefficient, way this might be implemented: 1. The Inefficient N+1 Approach Consider a controller fetching all posts and a view attempting to display the author's name: app/Http/Controllers/PostController.php (N+1 Example): namespace App\Http\Controllers ; use App\Models\Post ; use Illuminate\Http\Request ; class PostController extends Controller { public function index () { $posts = Post :: all (); // Fetches all posts return view ( 'posts.index' , compact ( 'posts' )); } } resources/views/posts/index.blade.php (N+1 Example): <h1>Blog Posts</h1> @foreach ($posts as $post) <div class="post-item"> <h2>{{ $post->title }}</h2> <p>Author: {{ $post->user->name }}</p> <!-- Accessing related user inside loop --> <p>{{ Str::limit($post->body, 150) }}</p> </div> @endforeach Why this is N+1: 1 Query: SELECT * FROM posts; – This initial query fetches all your posts. N Queries: For each $post in the loop, when you access $post->user->name , Laravel lazy-loads the associated User model. If you have 10 posts, this will exe
This is a submission for the GitHub Finish-Up-A-Thon Challenge OpsPilot AI: Reviving an Unfinished AI-Powered Operations Platform with GitHub Copilot What I Built OpsPilot AI is an AI-powered operations assistant designed to help DevOps engineers, SREs, and operations teams investigate incidents, monitor service health, and gain actionable operational insights. The project originally started as a side project inspired by my experience working in production support and monitoring environments. I built an initial version to validate the idea but never fully completed it. The core concept was promising, but several important features and usability improvements were still missing. Through the GitHub Finish-Up-A-Thon Challenge, I revisited the project and transformed it into a much more complete and polished MVP. Key features include: AI-powered incident analysis Root cause investigation assistance MTTR analytics dashboard Service health monitoring Incident trend analysis Executive reporting insights Modern responsive user interface Demo Live Application GitHub Repository OpsPilot AI helps operations teams reduce investigation time and improve operational visibility through AI-powered workflows and analytics. The Comeback Story When I first started OpsPilot AI, it was mainly an experiment to explore how AI could assist operations teams during incident investigations. Although the foundation was built, the project was left unfinished because of limited time and competing priorities. The original version lacked: Incident analytics Meaningful operational insights Root cause investigation workflows Executive reporting capabilities A polished user experience For this challenge, I focused on completing the project and turning it into a usable MVP. What I Added AI Incident Analysis Enhanced the platform with AI-powered incident summaries and investigation assistance. Operations Analytics Added dashboards to track: Mean Time To Resolution (MTTR) Incident frequency Service health
Rails GuardDog: Advanced Security Scanner for Rails Introduction Today I'm excited to announce Rails GuardDog v0.1.0 — an open-source security scanner for Rails that goes beyond traditional tools like Brakeman. While Brakeman is excellent for catching basic Rails vulnerabilities, Rails GuardDog focuses on newer vulnerability classes that most tools miss: AI/LLM prompt injection, DoS/ReDoS patterns, supply chain attacks, and more. The Problem Modern Rails applications face new security challenges: AI/LLM Integration - How do you prevent prompt injection when integrating with ChatGPT, Claude, or Anthropic? ReDoS Attacks - Catastrophic backtracking in regex can bring down your app Supply Chain Attacks - Typosquatted gems that look like popular libraries IDOR Gaps - Objects accessible without proper authorization checks Advanced Secrets - Hardcoded API keys that Brakeman misses Rails GuardDog detects all of these. What is Rails GuardDog? Rails GuardDog is a lightweight gem that adds comprehensive security scanning directly to your Rails applications. 12 Security Checkers SQL Injection - String interpolation in queries XSS - Unescaped output in views CSRF - Disabled protection verification Mass Assignment - permit! vulnerabilities (fixes Brakeman #1942, #1918) Open Redirect - User input in redirects Hardcoded Secrets - API keys, tokens, passwords (always-on, fixes #1989) DoS/ReDoS - Unbounded queries, dangerous regex patterns IDOR - Object access without authorization AI/LLM Prompt Injection - User input flowing to LLMs Rate Limiting - Missing rack-attack configuration Supply Chain - Typosquatted gems using Levenshtein distance GraphQL - Missing field-level authorization Features 📊 Multiple report formats : Console, HTML, JSON 🔍 AST-based analysis : Uses parser gem for deep code understanding ⚡ Async support : Built-in Sidekiq integration 📈 Zero dependencies : Only requires parser and ast gems 🚀 Production-ready : Tested and battle-ready 📝 CWE/OWASP mappings : Every find
https://preview.redd.it/xse99kmwom5h1.png?width=3072&format=png&auto=webp&s=af121137b68e58c524be2f99f3a1b2ab6dacc22e After years of frustration with cloud-based video editors that charge by the minute and require massive server farms, I built OpenVideo - an AI-native video editing platform that does everything in your browser. **What makes it different:** 🚀 **Browser-Based 4K Rendering** - Hardware-accelerated using WebCodecs + PixiJS. Export 4K video without any server-side processing. 🤖 **AI-Native from Day One** - Semantic search across your video library (find clips by content, not filenames), automatic captions with AI transcription, and an AI Director that helps organize your footage. **Tech Stack:** - Frontend: Next.js 15 - Backend: NestJS + Fastify - DB: PostgreSQL + Drizzle ORM - Rendering: PixiJS + WebCodecs - AI: Gemini API + pgvector It's open source and I'd love feedback from the community. Check it out: https://github.com/openvideodev/openvideo What features would you want to see in a browser-based video editor? submitted by /u/snapmotion [link] [留言]
At a small kickoff event in Los Angeles, Dan Greaney explained why he could no longer stand by and watch the demolition of American democracy.