Felafax successfully fine-tuned the LLaMA 3.1 405B model on 8 AMD MI300x GPUs using JAX, Google's Python library for high-performance numerical computing and machine learning. Its team used JAX for efficient parameter sharding and a LoRA implementation, achieving near-linear scaling and high memory efficiency.
No data lasts forever. From ancient papyrus scrolls to modern hard drives and flash memory, every method of data storage has limitations and eventually fails. In modern times, the potential for data loss comes from hardware failures, technological obsolescence, and intentional or accidental deletion.
Cloudflare is launching a marketplace where website owners can sell access to their content to AI model providers. This marketplace will allow websites to charge AI bots for scraping their content. Cloudflare has also introduced AI Audit, a tool that allows website owners to monitor and block AI bots.
Automattic recently wrote an article and gave a speech publicly disparaging WP Engine - WP Engine has responded with a public “cease and desist”.
This special feature explores Deno, a new JavaScript runtime created by the minds behind Node.js, examining its origins, differences from Node.js, and the lessons learned in its development.
This article explains how to implement Retrieval Augmented Generation (RAG) in TypeScript and React to create a chatbot that can answer questions about content from a large text dataset by retrieving relevant information from a vector database and providing it to an LLM.
Using callbacks in React to achieve better component decoupling involves shifting control of state updates from child components to parent components.
This is a full-featured, pre-configured starter project for building SaaS applications using Next.js, Prisma, Neon, Auth.js, Resend, React Email, Shadcn/ui, and Stripe.
Sponsored
Session management is a concept that flies under the radar in most applications, but it has a crucial role to play: keeping users securely logged in when they use different tabs or devices (imagine life without that!).
Discord reduced its websocket traffic by 40% through two key optimizations. Firstly, it replaced its existing compression algorithm, zlib, with zstandard, achieving higher compression ratios and shorter compression times. It further improved performance by implementing streaming compression for zstandard, allowing it to utilize historical data for better compression of small payloads. Secondly, it introduced Passive Sessions v2, which only sends updates about changes in server information instead of sending complete snapshots.
This developer found that Rust's type-safety and compile-time checks led to a smooth transition to production without major issues. After a year, they reflect back on how it's going. They find that Rust's long compile times, particularly with macro-heavy libraries, necessitate a different development workflow. At the same time, Rust is still satisfying to use and will continue to be used in production.
A vulnerability in Arc Browser's use of Firebase allowed unauthorized access to any user's browser without them visiting a website. This was possible because Arc's cloud features, like Boosts, stored data in Firestore with insecure security rules. An attacker could exploit this by obtaining a user's ID, creating a malicious Boost, and changing the Boost's creator ID to the victim's. This has since been addressed by Arc, who patched the vulnerability, added a feature to disable Boosts, and started a bug bounty program.
The "build in public" trend within the indie hacker community has an over-reliance on sharing revenue figures. While initially attention-grabbing, the constant stream of success stories may be losing its impact and overshadowing the discussion of actual product development. Also, the "build in public" approach may not be necessary for success, as some prominent indie hackers have achieved great results without actively sharing their progress publicly.
LLMs can significantly speed up development by taking care of repetitive tasks, but they still have limitations, especially when dealing with complex or open-ended features. While LLMs can't replace engineers entirely, they can help them to focus on higher-level tasks.
A recent Stack Overflow survey revealed that 80% of developers are unhappy with their jobs, with many reporting feeling burnt out and demoralized. The primary culprit appears to be a combination of factors, including unrealistic expectations, technical debt, bureaucratic obstacles, and a lack of work-life balance.
Sponsored
Nobody likes slow front end response – not you, your users, or search engines. Learn how to get ahead of bloated JavaScript bundles and improve your web performance in this blog. Read more on the Sentry
Kamal Proxy is an HTTP proxy that makes it easy to coordinate zero-downtime deployments. It can deploy changes to web applications without interrupting any of the traffic in progress.
Scalar is an offline-first API client and interactive reference generator. It uses OpenAPI/Swagger documents to create user-friendly documentation and API clients for various languages and frameworks.
CSS Peeper is a Chrome extension that allows designers to easily view and inspect CSS styles on any website. It allows for browsing components and colors in a visual way.
Researchers are increasingly choosing to run smaller AI models on their laptops instead of relying on online services like ChatGPT. This shift is driven by the availability of open-source AI models and the development of smaller models that can run efficiently on consumer hardware.
Java deserialization is surprisingly slow. This developer benchmarks various techniques for reading 1 billion rows of data from disk, including using `DataInputStream`, JDBC, Protobuf, Parquet, and custom solutions. The results show that even with optimized custom implementations, Java's performance lags significantly behind the theoretical maximum for disk I/O.
This is an exploration of the OpenAPI Specification (OAS) tooling ecosystem that visually diagrams the various tasks tools perform and how they relate to each other. The tools are separated into three areas: Parsing libraries, OAD tools, and API tools.
“Sanding UI” involves repeatedly clicking and interacting with a user interface to identify and fix subtle usability issues.
By using domain objects that represent the fundamental ideas of a product, rather than specific requirements, code becomes more resilient to changes in those requirements.
A better programmer hiring process focuses on evaluating candidates' past work, conversational intelligence, and compatibility with the team rather than traditional interviews like Leetcode questions.
This developer prefers using Makefiles for project automation due to their simplicity, consistency across projects, and compatibility with various build tools.
Netflix's Key-Value Data Abstraction Layer (KV DAL) addresses challenges the company had with datastore misuse by providing a consistent interface layer over storage to application developers. This abstraction offers a two-level map architecture and supports usage through basic CRUD APIs, complex multi-item and multi-record mutations, and efficient handling of large blobs through chunking. It uses idempotency tokens, client-side compression, and adaptive pagination for predictable performance.
Bun 1.1.28 introduces experimental support for compiling and running native C code directly from JavaScript. This allows developers to utilize system libraries and APIs that are not directly accessible through JavaScript, overcoming the limitations of N-API and WebAssembly. This article goes over how Bun does it by using TinyCC for fast in-memory compilation that provides near-zero call overhead.
While every function has the potential to throw an exception, it's more helpful to think about whether the entire function succeeds or fails rather than focusing on individual operations that could cause errors. Make functions more simple to improve readability and reasoning and write clean-up code that keeps a consistent program state regardless of how the function exits.
It doesn't make sense to over-engineer web apps by focusing on scalability from the beginning, especially when the user base is still small. Spending time and resources on building for millions of users before even having 100 users is a waste of time and money. It is more important to focus on creating a product that people want, gathering user feedback, and iterating quickly.
It's better to use identity columns instead of using the serial data type in Postgres. This is because `serial` has several issues, like permission complexities, a lack of integrity guarantees, and awkward ergonomics. Identity columns provide a better way to manage auto-incrementing primary keys and are also compliant with the SQL standard.
Sponsored
See how you can add POWERFUL CUSTOMER-FACING ANALYTICS to your application with this HANDS-ON DEVELOPER PLAYGROUND FOR SAAS DEVELOPERS [9] — now available from Qrvey. Build dashboards, forms, and automations with sample data. Add filters, drill downs, and fully customize the UI to match your app.
This tool automatically cleans up TypeScript code by removing unused exports, deleting modules with no referenced exports, and reporting these changes without making modifications in check mode.
Conform is a type-safe form validation library that uses web fundamentals to progressively enhance HTML Forms. It gives users control of the full form control lifecycle and has full support for server frameworks like Remix and Next.js.
Selectable is a mobile app that lets you access your Postgres databases with a mobile-optimized experience. It lets you write complex SQL queries easily on the go.
The tech job market has changed a lot, with constant layoffs and hiring freezes. The surge in hiring during the pandemic has reversed, leading to a decrease in demand for software developers and a struggle for entry-level positions. While companies are focusing on AI development, leading to high demand for specialists in that field, the overall job market for tech workers is much more competitive than before.
Generative AI can be used to modernize legacy code. This article goes over a tool that combines an LLM with a knowledge graph derived from a legacy codebase, allowing it to understand existing code and extract low-level requirements, build high-level explanations, and even generate automated documentation.
While it's important to address tech debt incrementally, sometimes a codebase requires a significant rewrite. Rewrites like these need management support, careful planning, and stakeholder buy-in.
2024.09.20·blog.pragmaticengineer.com·9 min read·TLDR Web Dev AI-generated code is causing downtime and security issues in businesses due to insufficient code reviews and developers' tendency to trust AI too readily.
A popular LLM interview question is to calculate the GPU memory needed to run inference for different LLMs - this can be done with a simple formula.
A collection of over 3,000 free SVG icons for popular brands.
Java 23 is now available, with language improvements, API updates, performance optimizations, and tooling changes.
2024.09.20·links.tldrnewsletter.com·12 min read·TLDR Web Dev Sponsored
With 10 billion page views per month and 8 million daily users (as of March 2023), unused features have a price - whether that's cloud resources or carbon emissions.
Session replay provides qualitative views of user interactions that have already happened. It works by reconstructing the changes made to the DOM rather than literally recording the screen. This involves re-applying the CSS to the HTML and using open-source software like rrweb to record and replay these DOM changes.
TanStack Router, a type-safe routing library for TypeScript, made performance improvements to address a bottleneck in TypeScript's language service when handling large route trees. The issue stemmed from the language service having to infer types for the entire route tree, even when only a specific route was referenced. To solve this, TanStack Router introduced a new approach for file-based routing where the route tree is explicitly declared instead of inferred, allowing the language service to infer types only for the relevant route.
Go's new `unique` package can improve memory usage by interning objects, specifically strings, to avoid storing duplicate copies. Interning, by reusing identical objects, reduces memory usage compared to other approaches. This post illustrates this through a program that processes a large text file, identifying all words starting with "B" and comparing the memory usage of different methods: storing references, cloning strings, and using the `unique` package.
Remix's approach to concurrent submissions, using a "submission and revalidation" pattern, is fundamentally flawed. It leads to unnecessary latency and introduces race conditions where the UI can display outdated information, even after users have submitted changes. There are two solutions: Causal ordering, which makes sure requests are processed in the order they depend on each other, and Persistence, where a connection is maintained between the client and server to guarantee ordered processing.