We often think of documentation in relation to the software we work with and the software we build. Documentation can also be used to make for a seamless and consistent experience with web design. This article emphasizes the importance of design documentation and also offers tips for creating your own design documentation for your team.
Organizations are using GPU-based compute to support AI applications and serverless containers to make lives easier for developers.
A deep dive into how version control works.
2023.11.14·baraki-weldat.medium.com·14 min read·TLDR Web Dev Learn how to build a custom scroll bar in React.
This article provides an in-depth explanation of React's useCallback hook. useCallback helps avoid unnecessary re-renders by memoizing callback functions, ensuring they are only recreated when necessary. Using code examples, the article explains memoization, a key concept behind useCallback, along with React.memo, a component used for memoizing entire React components.
In 1990, half of AT&T’s phone network went down as a result of one line of C code, leading to a buggy implementation of call handling. The outage affected over a hundred thousand Americans and the company lost $60 million. This article goes over the buggy piece of code that was deployed by AT&T and how engineers fixed it and shares resources for understanding reliability engineering in the modern development world better.
2023.11.13·engineercodex.substack.com·4 min read·TLDR Web Dev The author of this article stumbled upon a collection of old projects, including websites and graphic design, while browsing through a folder. These projects lacked structure and often crucial data, prompting the author to devise a new archiving strategy. The strategy involved leaving projects up online that don't require maintenance, occasionally migrating them to different domains, and archiving them with screenshots, READMEs, database backups, and generated assets for future reference.
Effective communication and framing are important soft skills for software engineers. Framing things in a positive manner is useful when discussing promotions with a manager, sharing stories in interviews, giving feedback to coworkers, and various other situations. This article introduces a framework for framing messages effectively that involves considering who the audience is, what you want to achieve, what they care about, and how to explain your message in terms they understand.
2023.11.13·careercutler.substack.com·12 min read·TLDR Web Dev Sponsored
Sad Servers is a website that provides debugging challenges for engineers.
draw-a-ui uses tldraw and the GPT-4 Vision API to generate HTML from a drawn wireframe. It takes a PNG image and processes that image using GPT-4 to create an HTML file with Tailwind CSS.
This article discusses the importance of understanding HTTP status codes and reading API documentation. The author encountered an error triggered by a typo in a Twitch API call. Surprisingly, the API returned an HTTP 200 status code (indicating success) for a non-existent user, which should logically have resulted in a 404 (not found) error. This incident highlighted the need for correct HTTP status codes in API responses and the importance of defensive coding.
Commit messages play a significant role in the future of open source projects. A good commit message should clearly state the type of change, summarize the change, and optionally include a detailed description. Using an example, this article demonstrates how to transform a vague commit message into one that is informative and useful to maintainers, following the steps of specifying the commit type, summarizing the change, and adding an optional detailed description.
A set of principles for web development that leverages the simplicity of HTML’s attribute syntax.
A list of useful, not-obvious hacks to get the most out of your browser’s debugger.
Useful VSCode extensions, such as HTML and CSS autocompletion.
2023.11.13·javascript.plainenglish.io·7 min read·TLDR Web Dev This article addresses two popular approaches to converting a JavaScript-based application to TypeScript: do it as you go, or convert the code base in a “leaves-first” order where no module is converted without first having types for all of its dependencies. Most developers tend to take the first approach, However, there are two major problems with this. First, you will end up having to propagate changes to various files over and over and over again. Second, you cannot rely on the things you have already converted to actually be safe when taking this approach. The rigorous approach is harder but is a better option.
Angular v17 introduces a powerful feature called the "defer block" designed to improve performance and optimize component loading. Components, directives, or pipes placed within a defer block are loaded based on specific conditions or events, allowing for lazy loading. Defer blocks can be enhanced with @loading, @placeholder, and @error blocks for a more comprehensive user experience. This article uses code examples to explain the many ways defer blocks can be used.
Socratic was an educational app that was purchased by Google in 2018. In this post, the founder of Socratic shares his lessons from getting acquired, many of which focus on what Google’s software engineering culture is like compared to that of a startup. For example, even at Google’s scale, most Google Search improvements are still manually reviewed on spreadsheets through a side-by-side comparison.
Burnout doesn't necessarily result from excessive working hours. This article shares two personal experiences of burnout, one at a startup and another at a large tech corporation. Both cases were triggered by factors such as micromanagement, a lack of trust in engineering teams, the implementation of unnecessary processes, delays in delivering code to customers, and overcommitting. The article offers valuable insights on how software engineers can effectively manage and address burnout.
2023.11.10·engineercodex.substack.com·5 min read·TLDR Web Dev While professional developers may only need to produce a limited amount of text or code per week, fast typing offers advantages in terms of quickly iterating, restructuring, and maintaining a flow of thoughts. The ability to type quickly allows for more efficient exploration of different sentence structures in writing and better organization of code thoughts. Even small improvements in typing speed can significantly reduce the "pause in thoughts" during the writing process, leading to increased productivity and a smoother workflow.
Sponsored
Love it or hate it, you probably have opinions about Ruby on Rails and its creator, David Heinemeier Hansson. How did Rails come to be, almost 20 years ago? A new documentary [10] by Honeypot [11] tells the full story behind Ruby on Rails through interviews with Jamis Buck, Jeremy Daer, Jason Fried, Tobias Lütke, and... DHH.
Nango simplifies the integration of external APIs with your product. It can create integrations quickly, maintain control over the logic, and access over 100 API templates for authentication, data synchronization, and more. It also provides features like handling rate limits, retries, strong typing, webhooks, monitoring, and an admin dashboard for a comprehensive integration experience.
This is the first “Google-sponsored library” for integrating Google Maps’ JavaScript API components in a React app. It comes with a collection of React components for creating maps, markers, and infowindows, along with a set of hooks for using some of the Maps JavaScript API Services and Libraries.
This post discusses three real-life cases where engineers and engineering managers faced ethical dilemmas in their workplaces. At FTX, engineering director Nishad Singh discovered potential fraud but chose to stay and attempt to resolve it, resulting in legal consequences. In contrast, an engineer refused to fabricate user data and faced no legal consequences at a startup called Frank. A deliberate double charging incident occurred at Pollen and the engineer involved expressed regret for their actions.
2023.11.10·blog.pragmaticengineer.com·10 min read·TLDR Web Dev This blog discusses ways you can build differentiated AI apps that deal with the problematic sides of LLM such as its cost, slowness, and lack of customization. The solution is to build your own toolchain of models connected by normal code. The trick is, as strange as it sounds, to avoid using AI for as long as possible in your project. Then, when you start finding particular problems that standard coding doesn't solve well — but well-established AI models can — start generating your own data and training your own models with a wide variety of tools you can find off-the-shelf.
This article covers how Kraken Technologies organizes its large Python monolith, consisting of around 28,000 Python modules. Kraken implemented a layered architecture pattern to prevent code complexity and enforce clear dependencies. The top-level modules and subpackages serve as layers, ensuring that components do not depend on those higher up in the stack. This structure is maintained using a linter that enforces layering and independence rules.
An internal Automattic memo is making the rounds on Tumblr, indicating that the company has failed to get Tumblr activity/revenue up since its 2019 acquisition. It will now be maintained by a skeleton crew of Trust & Safety and support folks.
GPT-4 is given the ability to browse the web on its own.
The Singleton design pattern ensures that there is only a single instance of a class in an application. This article teaches how to create a singleton class in TypeScript.
Sponsored
User management is more than a login box. Clerk’s drop-in authentication and user management [6] keeps your Next.js app secure, removes friction during user onboarding, and gives developers more time to focus on what matters. 🙌 Getting started is ridiculously easy. [5] Clerk's Next.js SDK gives you access to prebuilt components, hooks, and helpers for Next.js Server Components, Route Handlers and Middleware. Install it with npm install @clerk/nextjs [5] and you’re basically ready to go.
React Query is a library for managing asynchronous states in React applications. While simple data fetching can be done without React Query, there are five potential issues when fetching data using the traditional approach with useEffect and useState. These include race conditions, lack of loading and empty states, data and error state not resetting when the category changes, and the useEffect firing twice in StrictMode. This article shows how React Query is able to fix these issues by simplifying data fetching, improving code quality, and handling these issues more efficiently - with code examples.
JQ is a powerful tool for processing JSON data efficiently. This article demonstrates how JQ is used with various practical examples, such as working with JSON responses from APIs, converting data to or from JSON format, managing JSON configuration files, parsing JSON data from websites, analyzing server logs, and monitoring data. It also provides basic examples of JQ operations, including selecting values, filtering arrays, mapping arrays, combining filters, splitting strings, using conditional logic, and handling null values.
Text embeddings are representations of text in high-dimensional spaces for various NLP tasks like search, spam filtering, content moderation, and conversational agents. The preservation of distance is a key feature of embedding spaces. This article goes through the evolution of sequential models in NLP, including fully-recurrent neural networks, long short-term memory, and the transformer architecture, which uses attention mechanisms to better capture the context and dependencies between words in a sequence and has become essential in large language models.
This article talks about the harsh realities of working as a software engineer and provides valuable insights for newcomers to the field. It emphasizes that college education may not adequately prepare students for the practical challenges of the job and encourages them to gain real-world experience and develop a portfolio. The article also underscores the importance of soft skills, as they can often be more valuable than technical skills for career growth and success in the industry.
Microservices themselves are not inherently problematic, but there are issues that stem from a lack of engineering competence and care within companies. It is important to hire competent individuals, provide proper education and mentorship, and maintain a focus on simplicity and code quality. Take ownership of services and don’t let external teams interfere too much.
Sponsored
Signing up for accounts is something we’re all familiar with, and none of us enjoy. As an app developer, you can and should make your registration process simpler. This guide by FusionAuth [13] covers:
Sshx is a web-based collaborative terminal. Users can easily share their terminal by running a single command, manipulate terminal windows on an infinite canvas, observe real-time cursor movements of collaborators, and connect to a distributed mesh of servers for optimal performance. The terminal is end-to-end encrypted, with real-time latency estimates and predictive echo for faster local editing.
Lossless-json allows developers to parse JSON without risk of losing numeric information. It works similarly to the native JSON parse and stringify functions except it preserves information of big numbers.
Apple protects its trademark by placing its logo on every internal component of its devices, even if those components are not visible to consumers. This practice allows Apple to enlist the help of Customs and Border Patrol (CBP) in enforcing trademark protection at ports of trade. Apple participates in CBP's e-Recordation Program, which grants it special enforcement privileges and even allows the company to train law enforcement personnel. This system has been criticized for enabling Apple to abuse trademark law to stifle competition and hinder third-party repairs, with CBP seizing legitimate products from competitors and independent repair shops on Apple's behalf.
Lambda layers are a popular solution for managing dependencies in AWS Lambda functions. Layers themselves are nothing more than a zip file, but they have a few interesting properties that prove useful in some cases. Unfortunately, Lambda layers are also difficult to work with as a developer, tricky to deploy safely, and typically don't offer benefits over native package managers. These downsides frequently outweigh the upsides. This article examines Lambda layers and native package managers in detail.
Prop drilling is when you pass props to children components that do not consume the prop, but also only pass down the prop to children components. This article explains prop drilling in detail and ways to avoid prop drilling through component composition and moving states.
A quick tutorial on building a code generator, which is useful when your software interfaces with external systems and depends on information structures provided by that system.
This blog post takes a look at how to build a Retrieval-Augmented Generation (RAG) application using Node.js and LangChain. Specifically, it shows how you build a tool for asking technical questions about the content of YouTube videos.
Sponsored
Teams need alerting and incident management tools to respond to incidents – but today, they’re separate. What's more, the way we build software continues to evolve and become more complex, but alerting tools are still stuck in the past. Introducing Signals by FireHydrant [5] a modern alerting tool that helps you: