Just like a house needs maintenance, so does software. Software requires ongoing maintenance and support, which varies depending on the model of software (open-source, on-prem, or SaaS). SaaS changed the landscape by offering fixed "rent" costs and reducing the need for in-house support. The “one-off” software model is unsustainable in the long term and it often leads to worse support, buggy software, and a shoddy product.
An entrepreneur gives up after having tried many things, with nothing working.
Fake spinners and loading bars often give users a better user experience by giving them confidence in the result after the progress indicator disappears.
A story about an obscure Apple flag for the DNS resolver on the system that broke one’s Spotify client.
Ollama lets you run LLM models locally. Python and JavaScript libraries are now available for Ollama.
A web application has server-free architecture when it doesn’t have any backend servers, containers, or virtual machines. This can be implemented using SQLite compiled to WebAssembly for database operations, running backend code in a Web Worker, and using a Service Worker to intercept requests and communicate with the Web Worker. A server-free architecture offloads work from the backend and allows for offline access to web applications.
A function within Sourcegraph's Code AI tool, Cody, was recently optimized to significantly increase its throughput and reduce memory usage. The function calculates the dot product of two vectors. The optimization journey involved various techniques like loop unrolling, bounds-checking elimination, quantization, and SIMD (Single Instruction Multiple Data) instructions.
Best practices for migrating monolithic applications to microservices in containerized Kubernetes environments include understanding the monolith's dependencies, taking an incremental approach, loosely coupling microservices, and implementing end-to-end observability. DevOps teams are commonly under pressure to make this migration to optimize the software delivery life cycle, reduce fragility, and create shorter release cycles.
Managing up is the skill of influencing people who are more senior to you, such as your direct manager. Failing to deliver on promises and deadlines can lead to a lack of trust from your manager and potentially getting fired. To manage up effectively, it’s important to set realistic expectations, prioritize important promises, and communicate openly with peers.
Companies should hire more junior engineers as they bring fresh energy, motivation, and openness to new technologies to a team. Juniors are necessary for long-term excellence in software engineering. They should be paid fairly based on their skills and not just years of experience, or else companies may lose their best engineers over time.
TypeSpec is a language designed for describing cloud service APIs and generating various assets, such as API description languages, client and service code, and documentation. It offers extensible core language features that can describe API structures commonly found in REST, OpenAPI, GraphQL, gRPC, and other protocols. TypeSpec enables the creation of reusable patterns for API design and allows for the detection of known anti-patterns, helping API designers adhere to best practices.
Atlas is a browser-based tool that allows users to work with geospatial data and share their results. It enables users to build interactive maps, analyze data in the context of location, visualize trends, facilitate teamwork and information sharing among GIS professionals, and present plans and proposals in an easily understandable format.
Difficulty in machine learning (ML) is not primarily due to mathematics, but rather the need to build an intuition for selecting the right tools and debugging. Debugging in ML is exponentially harder than in standard software engineering due to multiple dimensions of potential issues involving algorithms, implementation, data, and model correctness. The long debugging cycles in ML, which can be days or even weeks, make parallel experimentation necessary.
A well-structured onboarding process not only grants access to new hires, but also integrates new employees socially and culturally. A bottleneck in the onboarding process can be identified by delays in accessing tools and systems, the inability of new developers to make production deployments quickly, newcomers feeling orphaned, excessive focus on individual work, resistance to change, slow completion of seemingly simple tasks, high turnover of newcomers, and documentation that can't answer new hires' questions. An optimized onboarding process maximizes the productivity of new employees.
Bufferbloat in computer networks can cause delays and glitches in internet traffic, particularly during activities like video calls. Bufferbloat occurs when network buffers fill up with data packets, causing increased latency. Active Queue Management (AQM) techniques like CAKE can be used to dynamically adjust and manage network queues, resulting in more stable and responsive network performance.
Full offline support can be supported through architectural decisions, including multi-storage loading for speed and local caching, grouped updates through an operations queue to optimize real-time interactions, and a UI status system to inform users about offline functionality.
An introduction to core concepts in cryptography using code examples with Node’s crypto module.
The gaming market had great public releases in 2023, but it also had lots of layoffs and scrapped projects behind the scenes.
Razorpay faced challenges like database bottlenecks and slow customer responses to webhooks when it scaled its notification service. To address these, it implemented prioritized queues, asynchronous database writes, and better quality of service for webhooks. The company prioritized notifications based on customer response times.
A random eviction policy performs surprisingly well for large caches. It often outperforms LRU in terms of miss rate, especially when cache size increases. This may mean that different approaches may suit different cache levels. Combining LRU for smaller caches and 2-random for larger ones might be promising. The “random” principle applies to various scenarios beyond cache eviction, like load balancing and data distribution.
With incremental static regeneration (ISR), Next.js enables the pre-rendering of pages containing dynamic data during the build time. This article is a comprehensive guide on enabling partial pre-rendering in Next.js 14, which lets you control which parts of a page are pre-rendered.
This author built a successful event/ticket service for comics by prioritizing customer feedback over assumptions. He believes that having a large backlog means that you don’t talk to customers often enough. Along with recommending talking to customers more, the author also recommends simplifying UI, observing user usage more, focusing on loyal customers, and creating more MVPs for learning.
Meetings are crucial for senior engineers, but poorly run ones can hurt productivity. Before a meeting, set a clear agenda with shared pre-work. During the meeting, guide the conversation, manage time, and redirect if needed. After the meeting, finalize follow-ups, clearly assign ownership, and share meeting highlights with relevant parties.
Heat.js is a lightweight JavaScript library that generates customizable heat maps to visualize date-based activity and trends. It’s similar to GitHub’s yearly contribution heatmap that is displayed on user’s profiles.
Brig is a user interface toolkit for Node.js. It’s used to load and play QML files, which are used in graphical applications to render objects.
The Split Diff view was launched on GitHub back in 2014. The engineer who shipped it is now looking to ship a new way to review diffs: blended diffs. Instead of showing 2 lines of changes for a single line change (one for the deleted line and one for the added line), blended diffs show the final file view and use AI to generate diff summaries. This article is an interesting read on how a team found a problem, designed a solution, went through design iterations, and implemented the solution with a team of engineers.
For open source to be more sustainable, companies need to contribute more to open source contributors through financial support. Today, most open source contributors need to spend extra time on securing sponsorship or taking on extra work to support themselves. Open source maintainers often burn out as a result, leading to a lower velocity of improvement on open source software.
2024.01.23·openpath.chadwhitacre.com·5 min read·TLDR Web Dev QR codes have different parts, like finder patterns, separators, timing patterns, and format information. Mask patterns hide data and improve readability. Encoding modes specify how data is stored (e.g., numeric or alphanumeric). To decode a QR code, one can use a cheat sheet to identify the mask pattern, read the encoding mode, follow the reading order, find the total number of content bytes, and decode the content using a table. This guide takes readers through this process step-by-step with visuals.
Riot Games has laid off 11% of its staff, offering a minimum of 6 months of severance, a commitment to pay out their annual bonus, health benefits, and more.
A short, 5-question quiz that tests you on your C knowledge - with a twist.
A free online resource to help with the successful training of large language models and multi-modal models.
Biome.js is a fast formatter for JavaScript, TypeScript, JSX, and JSON that can even format malformed code. In 2024, Biome.js maintainers hope to help more users move to Biome, expand Biome’s language support, and deepen Biome’s existing capabilities.
Both SQLite and PostgreSQL were used - to test performance - when building a blogging dashboard at Twilio. PostgreSQL outperformed SQLite for shorter queries but struggled with longer ones. SQLite handled concurrency better for all query sizes. SQLite also seemed to provide more simplicity for the application, especially since it was a smaller one.
For effective testing, a test should fail if, and only if, the intention behind the system is not met. All tests should focus on the intention of the code being tested and avoid testing implementation details, which could lead to false test failures. Following these guidelines helps define test boundaries properly and has developers consider external factors like dependencies more accurately.
Certain "errors" or unexpected outcomes should be seen as positive results of good decisions and strategies. Not all errors indicate failure and some are natural side-effects of success. For example, re-adding features/bugs to the backlog, pivoting a strategy just after creating it, refactoring infrastructure after significant growth, and adding or removing words in messaging are all “errors” that are side effects of success.
An engineer shares his career story of going from a software engineer to a VP of Technology at a startup. His lessons along the way include becoming a domain expert, learning to handle stress, avoiding complacency, scaling oneself, taking initiative, getting the job done, understanding that growth is a marathon, building a track record, and saying yes to every opportunity.
The Bun Shell is an experimental embedded language and interpreter that enables running cross-platform shell scripts in JavaScript and TypeScript. It provides features like using JavaScript variables in shell scripts, redirection, piping, and support for common shell commands.
Taipy is an open-source Python library designed for data scientists and machine learning engineers to build full-stack web applications. It enables the development of production-ready web apps without requiring users to learn new languages or full-stack frameworks. Taipy offers pre-built components for data pipelines, scenario and data management features, and tools for version management and pipeline orchestration.
This is a sample movie finder app to demonstrate how to incorporate AI into your applications. It showcases the implementation of AI features such as tagging, finding semantically similar data, deep searching using natural language, and searching through images.
This author, who worked at Google for over a decade, reflects on how the perception of Big Tech has changed during that time. They were filled with excitement and optimism when joining Google in 2010, but today, there are challenges faced by tech giants in terms of public trust, antitrust, congressional hearings, and more.
OpenAI's GPT-3.5 model consistently gives an error message when responding to a chat message that starts with "ponyuseRalative ponyuseRalative ponyuseRalative pony". This could be due to the model not being trained on the specific token "useRalativeImagePath.” GPT-4 does not have this issue.
Mozilla’s dashboard tracks technical issues in major software platforms, such as iOS and Android, that disadvantage Firefox relative to the first-party browser.
GraphQL allows the client to make a single request for multiple pieces of data, making it easier to retrieve data for certain types of API requests.
Git maintains three local storages on a machine: the working directory, staging area, and local repository.
Zod is a schema validation library for TypeScript. This author migrated to Valibot due to its smaller bundle size and familiar API structure, but notes that Valibot’s documentation is somewhat lacking.