diff --git a/public/roadmap-content/devops.json b/public/roadmap-content/devops.json index 40c997313..afab9ef98 100644 --- a/public/roadmap-content/devops.json +++ b/public/roadmap-content/devops.json @@ -123,7 +123,12 @@ "type": "course" }, { - "title": "The Rust Programming Language - online book", + "title": "Visit Dedicated Rust Roadmap", + "url": "https://roadmap.sh/rust", + "type": "article" + }, + { + "title": "The Rust Programming Language - Online Book", "url": "https://doc.rust-lang.org/book/", "type": "article" }, @@ -319,7 +324,7 @@ "description": "FreeBSD is a free, open-source Unix-like operating system descended from the Berkeley Software Distribution (BSD). Known for its stability, performance, and advanced networking capabilities, FreeBSD is popular for server environments, embedded systems, and as a basis for network appliances. It features a monolithic kernel, a comprehensive set of userland utilities, and a ports collection for easy software installation. FreeBSD supports a wide range of architectures and includes advanced features like the ZFS file system, jails for containerization, and the pf packet filter. While less common in desktop environments, it's widely used in internet infrastructure, storage systems, and by companies requiring a robust, customizable OS with a permissive license.\n\nVisit the following resources to learn more:", "links": [ { - "title": "FreeBSD Website", + "title": "FreeBSD", "url": "https://www.freebsd.org/", "type": "article" }, @@ -329,7 +334,7 @@ "type": "article" }, { - "title": "Official FreeBSD Documentation", + "title": "FreeBSD Documentation", "url": "https://docs.freebsd.org/en/", "type": "article" }, @@ -350,7 +355,7 @@ "description": "OpenBSD is a free, open-source Unix-like operating system known for its strong focus on security, code correctness, and proactive approach to eliminating vulnerabilities. It's renowned for its stringent code review process, integrated cryptography, and default security features like stack protection and memory safeguards. OpenBSD pioneered many security innovations, including OpenSSH, and maintains a \"secure by default\" philosophy. The system is prized for its comprehensive documentation, clean and consistent codebase, and adherence to standards. While primarily used in server environments, especially for firewalls and network appliances, OpenBSD also supports desktop use. Its emphasis on security and stability makes it popular in high-security environments and among developers focused on system-level programming and network security.\n\nVisit the following resources to learn more:", "links": [ { - "title": "OpenBSD Website", + "title": "OpenBSD", "url": "https://www.openbsd.org/", "type": "article" }, @@ -410,7 +415,7 @@ }, "wjJPzrFJBNYOD3SJLzW2M": { "title": "Terminal Knowledge", - "description": "A terminal is simply a text-based interface to the computer, it is used to interact with your computer system via CLI (command line interface)\n\nVisit the following resources to learn more:", + "description": "A terminal is simply a text-based interface to the computer, it is used to interact with your computer system via CLI (command line interface).\n\nVisit the following resources to learn more:", "links": [ { "title": "What is CLI?", @@ -450,7 +455,7 @@ "description": "Performance monitoring is the systematic observation and measurement of an IT system's operational efficiency and effectiveness. It involves collecting, analyzing, and reporting on key performance indicators (KPIs) across various components including applications, networks, servers, and databases. This process uses specialized tools to track metrics such as response time, throughput, resource utilization, and error rates. Performance monitoring helps identify bottlenecks, predict potential issues, and optimize system resources. It's crucial for maintaining service level agreements (SLAs), ensuring user satisfaction, and supporting capacity planning. In modern IT environments, performance monitoring often incorporates real-time analytics, AI-driven insights, and automated alerting systems, enabling proactive management of complex, distributed systems and supporting continuous improvement in IT operations and service delivery.\n\nLearn more from the following resources:", "links": [ { - "title": "Linux commands: exploring virtual memory with vmstat", + "title": "Linux Commands: Exploring Virtual Memory with vmstat", "url": "https://www.redhat.com/sysadmin/linux-commands-vmstat", "type": "article" }, @@ -567,18 +572,13 @@ }, "Jt8BmtLUH6fHT2pGKoJs3": { "title": "Vim / Nano / Emacs", - "description": "Text editors are software tools used for creating, editing, and managing text files. They range from simple editors with basic features to complex Integrated Development Environments (IDEs). Popular text editors include:\n\n* **Notepad**: A basic editor for Windows, suitable for simple text files.\n* **Vim**: A highly configurable and powerful editor known for its efficiency and modal interface.\n* **Emacs**: A versatile editor with extensive customization options and a wide range of plugins.\n* **Sublime Text**: A feature-rich editor with a focus on speed and a user-friendly interface.\n* **Visual Studio Code**: A modern, open-source editor with built-in support for debugging, extensions, and integration with various development tools.\n\nEach editor offers different features, such as syntax highlighting, code completion, and version control integration, catering to diverse needs in programming and text processing. Visit the following resources to learn more:", + "description": "Text editors are software tools used for creating, editing, and managing text files. They range from simple editors with basic features to complex Integrated Development Environments (IDEs). Popular text editors include:\n\n* **Notepad**: A basic editor for Windows, suitable for simple text files.\n* **Vim**: A highly configurable and powerful editor known for its efficiency and modal interface.\n* **Emacs**: A versatile editor with extensive customization options and a wide range of plugins.\n* **Sublime Text**: A feature-rich editor with a focus on speed and a user-friendly interface.\n* **Visual Studio Code**: A modern, open-source editor with built-in support for debugging, extensions, and integration with various development tools.\n\nVisit the following resources to learn more:", "links": [ { "title": "Vim", "url": "https://www.vim.org", "type": "article" }, - { - "title": "Vim Adventures", - "url": "https://vim-adventures.com/", - "type": "article" - }, { "title": "GNU Nano", "url": "https://www.nano-editor.org/", @@ -589,6 +589,11 @@ "url": "https://www.gnu.org/software/emacs/", "type": "article" }, + { + "title": "Vim Adventures", + "url": "https://vim-adventures.com/", + "type": "article" + }, { "title": "Vim Tutorial for Beginners", "url": "https://www.youtube.com/watch?v=RZ4p-saaQkc", @@ -611,7 +616,7 @@ "description": "Version control systems (VCS) are tools that track changes to code and files over time, enabling multiple users to collaborate on projects, maintain history, and manage different versions of codebases. They help in tracking modifications, merging changes, and resolving conflicts. There are two main types of VCS: centralized and distributed. Centralized systems (like Subversion and CVS) rely on a single central repository, while distributed systems (like Git and Mercurial) allow each user to have a complete copy of the repository, including its history. Distributed VCSs, such as Git, are particularly popular for their flexibility, branching capabilities, and robust support for collaborative workflows.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git & GitHub", + "title": "Visit Dedicated Git & GitHub Roadmap", "url": "https://roadmap.sh/git-github", "type": "article" }, @@ -652,7 +657,7 @@ "type": "course" }, { - "title": "Learn Git & GitHub", + "title": "Visit Dedicated Git & GitHub Roadmap", "url": "https://roadmap.sh/git-github", "type": "article" }, @@ -709,13 +714,13 @@ "description": "GitHub is a web-based platform for version control and collaboration using Git. It provides cloud-based Git repository hosting, offering features like bug tracking, task management, and project wikis. GitHub facilitates code review through pull requests, supports issue tracking, and enables social coding with features like forking and starring repositories. It offers both public and private repositories, making it popular for open-source projects and private development. GitHub's ecosystem includes integrations with various development tools and CI/CD platforms. With features like GitHub Actions for automation, GitHub Packages for package management, and GitHub Pages for web hosting, it serves as a comprehensive platform for software development workflows, fostering collaboration among developers worldwide. Visit the following resources to learn more:", "links": [ { - "title": "Learn Git & GitHub", - "url": "https://roadmap.sh/git-github", + "title": "GitHub", + "url": "https://github.com", "type": "article" }, { - "title": "GitHub Website", - "url": "https://github.com", + "title": "Visit Dedicated Git & GitHub Roadmap", + "url": "https://roadmap.sh/git-github", "type": "article" }, { @@ -742,7 +747,7 @@ { "title": "GitLab Website", "url": "https://gitlab.com/", - "type": "opensource" + "type": "article" }, { "title": "GitLab Documentation", @@ -770,6 +775,11 @@ "url": "https://bitbucket.org", "type": "article" }, + { + "title": "Bitbucket Overview", + "url": "https://bitbucket.org/product/guides/getting-started/overview", + "type": "article" + }, { "title": "Git and Bitbucket Introduction", "url": "https://www.w3schools.com/git/git_intro.asp?remote=bitbucket", @@ -781,7 +791,7 @@ "type": "article" }, { - "title": "Bitbucket tutorial | How to use Bitbucket Cloud", + "title": "Bitbucket Tutorial | How to use Bitbucket Cloud", "url": "https://www.youtube.com/watch?v=M44nEyd_5To", "type": "video" } @@ -854,7 +864,7 @@ "description": "NGINX is a high-performance, open-source web server, reverse proxy, and load balancer. Known for its efficiency in handling concurrent connections, NGINX uses an event-driven, asynchronous architecture that consumes minimal resources. It excels at serving static content, proxying requests to application servers, and load balancing across multiple backends. NGINX is widely used for its ability to improve website performance, scalability, and security. It supports various protocols including HTTP, HTTPS, SMTP, and WebSocket, and offers features like SSL/TLS termination, caching, and content compression. Popular in both small-scale and enterprise environments, NGINX is a key component in many modern web architectures, particularly in microservices and containerized deployments.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Nginx", "url": "https://nginx.org/", "type": "article" }, @@ -885,7 +895,7 @@ "type": "article" }, { - "title": "Official Documentation(Tomcat 10.0)", + "title": "Tomcat Documentation", "url": "https://tomcat.apache.org/tomcat-10.0-doc/index.html", "type": "article" }, @@ -948,7 +958,7 @@ "description": "Microsoft Internet Information Services (IIS) is a flexible, secure and manageable Web server for hosting anything on the Web. It's an extensible web server created by Microsoft for use with Windows NT family. IIS supports HTTP, HTTPS, FTP, FTPS, SMTP and NNTP. It's been an integral part of the Windows NT family since Windows NT 4.0, and is included with Windows Server versions. IIS features a modular architecture, allowing administrators to customize server functionality. It supports various programming languages and frameworks, particularly [ASP.NET](http://ASP.NET). IIS provides tools for web application deployment, security management, and performance optimization, making it a popular choice for hosting Windows-based web applications in enterprise environments.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Microsoft IIS", "url": "https://www.iis.net/", "type": "article" }, @@ -1026,7 +1036,7 @@ "type": "article" }, { - "title": "NGINX documentation", + "title": "NGINX Documentation", "url": "https://www.nginx.com/resources/glossary/reverse-proxy-server/", "type": "article" }, @@ -1057,7 +1067,7 @@ "type": "article" }, { - "title": "Articles about Containers - The New Stack", + "title": "Containers - The New Stack", "url": "https://thenewstack.io/category/containers/", "type": "article" }, @@ -1218,7 +1228,7 @@ "description": "Google Cloud is Google's cloud computing service offering, providing over 150 products/services to choose from. It consists of a set of physical assets, such as computers and hard disk drives, and virtual resources, such as virtual machines(VMs), that are contained in Google's data centers. It runs on the same infrastructure that Google uses internally for its end-user products, such as Search, Gmail, Google Drive, and YouTube.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Google Cloud Website", + "title": "Google Cloud", "url": "https://cloud.google.com/", "type": "article" }, @@ -1244,7 +1254,7 @@ "description": "DigitalOcean is a cloud infrastructure provider that offers simple, affordable, and developer-friendly virtual private servers, known as \"Droplets.\" It focuses on providing straightforward cloud computing services, including virtual machines, managed databases, object storage, and Kubernetes clusters. DigitalOcean is known for its user-friendly interface, transparent pricing, and extensive documentation, making it popular among developers, startups, and small to medium-sized businesses. The platform emphasizes simplicity and performance, offering features like one-click applications, team management, and a robust API for automation. While not as feature-rich as some larger cloud providers, DigitalOcean's streamlined approach and competitive pricing make it an attractive option for those seeking uncomplicated cloud infrastructure solutions.\n\nVisit the following resources to learn more:", "links": [ { - "title": "DigitalOcean Website", + "title": "DigitalOcean", "url": "https://www.digitalocean.com/", "type": "article" }, @@ -1270,12 +1280,12 @@ "description": "Alibaba Cloud is the cloud computing arm of Alibaba Group, offering a broad range of cloud services and solutions designed to support enterprise IT infrastructure and digital transformation. It provides scalable and flexible cloud computing resources, including virtual machines, storage, databases, and networking. Alibaba Cloud’s services also encompass big data analytics, artificial intelligence, machine learning, and security solutions. Known for its global data center network, it supports businesses with high availability, disaster recovery, and compliance needs. Alibaba Cloud is a key player in the cloud market, particularly in Asia, providing comprehensive tools for businesses to build, deploy, and manage applications and services in the cloud.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Alibaba Cloud Website", + "title": "Alibaba Cloud", "url": "https://www.alibabacloud.com/", "type": "article" }, { - "title": "Alibaba Cloud Getting Started Guide", + "title": "Getting Started with Alibaba Cloud", "url": "https://www.alibabacloud.com/getting-started", "type": "article" }, @@ -1333,7 +1343,7 @@ "description": "Contabo is a German web hosting and dedicated server provider known for offering affordable virtual private servers (VPS) and dedicated servers with high performance specifications. They provide a range of hosting solutions, including shared hosting, VPS, dedicated servers, and storage solutions, catering to both individual developers and businesses. Contabo is particularly popular among budget-conscious users for its competitive pricing on high-resource VPS plans. Their services include features like SSD storage, DDoS protection, and data centers in multiple locations. While not as well-known as some larger cloud providers, Contabo has gained a reputation in the hosting community for offering good value for money, especially for users requiring substantial computing resources at lower costs.\n\nVisit the following link to learn more:", "links": [ { - "title": "Contabo - Official Website", + "title": "Contabo", "url": "https://contabo.com/", "type": "article" } @@ -1365,7 +1375,7 @@ "type": "article" }, { - "title": "HOw DNS works (comic)", + "title": "How DNS Works (comic)", "url": "https://howdns.works/", "type": "article" }, @@ -1557,7 +1567,7 @@ "description": "DMARC (Domain-based Message Authentication, Reporting, and Conformance) is an email authentication protocol that builds upon SPF and DKIM to protect against email spoofing and phishing attacks. It allows domain owners to specify how email receivers should handle messages that fail authentication checks. DMARC provides a feedback mechanism for domain owners to receive reports on email authentication results, helping them monitor and improve their email security. By implementing DMARC policies, organizations can enhance their email deliverability, protect their brand reputation, and reduce the likelihood of their domain being used in fraudulent email campaigns. DMARC is widely adopted by major email providers and is considered a crucial component of modern email security strategies.\n\nVisit the following resources to learn more:", "links": [ { - "title": "DMARC Official Website", + "title": "DMARC", "url": "https://dmarc.org/", "type": "article" }, @@ -1740,12 +1750,12 @@ "description": "Vercel is a provider of front-end cloud that provides the infrastructure to build, scale, and secure a faster, more personalized web. In other words, it is a cloud platform designed to simplify the deployment process for web applications, particularly those built with modern frameworks like React, Next, etc. where various projects can be deployed by connecting the GitHub repository in Vercel we can deploy the selected GitHub branch to the Vercel domains. Simultaneously, it provides custom domains to deploy code on live servers. These servers contain the `vercel.app` as the suffix in the domain.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Vercel", "url": "https://vercel.com/", "type": "article" }, { - "title": "Official Docs", + "title": "Vercel Docs", "url": "https://vercel.com/docs", "type": "article" }, @@ -1763,7 +1773,7 @@ }, "l8VAewSEXzoyqYFhoplJj": { "title": "Cloudflare", - "description": "Cloudflare is a company that provides a range of services to help protect and accelerate websites and applications. At its core, Cloudflare is a content delivery network (CDN) and a reverse proxy cloud provider. This means that it acts as an intermediary between a website's origin server and its visitors, caching content and filtering out malicious traffic. Cloudflare was founded in July 2009 by Matthew Prince, Lee Holloway, and Michelle Zatlyn. The company was venture-capital funded and submitted its S-1 filing for IPO on the New York Stock Exchange in August 2019. It opened for public trading on September 13, 2019, at $15 per share.\n\nVisit the following resources to learn more:", + "description": "Cloudflare is a internet company that provides a range of services to help protect and accelerate websites and applications. At its core, Cloudflare is a content delivery network (CDN) and a reverse proxy cloud provider. This means that it acts as an intermediary between a website's origin server and its visitors, caching content and filtering out malicious traffic. Cloudflare was founded in July 2009 by Matthew Prince, Lee Holloway, and Michelle Zatlyn. The company was venture-capital funded and submitted its S-1 filing for IPO on the New York Stock Exchange in August 2019. It opened for public trading on September 13, 2019, at $15 per share.\n\nVisit the following resources to learn more:", "links": [ { "title": "Cloudflare", @@ -1834,7 +1844,7 @@ "description": "Netlify Functions are serverless functions that allow developers to run server-side code in a JAMstack environment without managing servers. They are built on AWS Lambda and automatically deploy alongside your Netlify site. These functions can handle tasks like API requests, form submissions, and database operations, enabling dynamic functionality in static sites. They support various languages including JavaScript, TypeScript, and Go. Netlify Functions integrate seamlessly with Netlify's deployment pipeline, offering easy development, testing, and production deployment.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "Netlify Documentation", "url": "https://docs.netlify.com/platform/primitives/#functions", "type": "article" }, @@ -1891,12 +1901,12 @@ "type": "opensource" }, { - "title": "AWS CDK Website", + "title": "AWS CDK", "url": "https://aws.amazon.com/cdk/", "type": "article" }, { - "title": "Official Documentation", + "title": "AWS CDK Documentation", "url": "https://docs.aws.amazon.com/cdk/index.html", "type": "article" }, @@ -1912,7 +1922,7 @@ "description": "AWS CloudFormation is a infrastructure-as-code service that allows users to define and provision AWS infrastructure resources using templates. These templates, written in JSON or YAML, describe the desired AWS resources and their properties. CloudFormation automates the creation, update, and deletion of resources, ensuring consistent and repeatable deployments across multiple environments. It supports a wide range of AWS services and can manage complex interdependencies between resources. CloudFormation also provides features like change sets for previewing changes, nested stacks for modular designs, and drift detection to identify manual changes. This service enables teams to version control their infrastructure, implement best practices, and streamline the management of AWS resources throughout their lifecycle.\n\nVisit the following resources to learn more:", "links": [ { - "title": "AWS CloudFormation Website", + "title": "AWS CloudFormation", "url": "https://aws.amazon.com/cloudformation/", "type": "article" }, @@ -1959,7 +1969,7 @@ "type": "course" }, { - "title": "Terraform Roadmap", + "title": "Visit Dedicated Terraform Roadmap", "url": "https://roadmap.sh/terraform", "type": "article" }, @@ -2119,11 +2129,6 @@ "url": "https://www.youtube.com/watch?v=Tz7FsunBbfQ", "type": "course" }, - { - "title": "Learn Git & GitHub", - "url": "https://roadmap.sh/git-github", - "type": "article" - }, { "title": "GitHub Actions Documentation", "url": "https://docs.github.com/en/actions", @@ -2250,12 +2255,12 @@ "description": "Drone is an open-source continuous integration (CI) platform built on container technology. It automates building, testing, and deploying code using a simple, YAML-based pipeline configuration stored alongside the source code. Drone executes each step of the CI/CD process in isolated Docker containers, ensuring consistency and reproducibility. It supports multiple version control systems, offers parallel execution of pipeline steps, and provides plugins for integrating with various tools and services. Drone's lightweight, scalable architecture makes it suitable for projects of all sizes, from small teams to large enterprises. Its focus on simplicity and containerization aligns well with modern DevOps practices and microservices architectures.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Drone Website", + "title": "Drone", "url": "https://www.drone.io/", "type": "article" }, { - "title": "Official Documentation", + "title": "Drone Documentation", "url": "https://docs.drone.io/", "type": "article" }, @@ -2271,7 +2276,7 @@ "description": "TeamCity is a continuous integration (CI) and continuous delivery (CD) server developed by JetBrains, designed to automate the build, test, and deployment processes in software development. It supports multiple languages and frameworks, offering a flexible and scalable environment for managing pipelines. TeamCity provides powerful features like version control integration, build chaining, parallel execution, and detailed reporting. It also offers a user-friendly web interface, customizable build configurations, and extensive plugin support, making it a popular choice for teams aiming to streamline their CI/CD workflows.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "TeamCity Documentation", "url": "https://www.jetbrains.com/help/teamcity/teamcity-documentation.html", "type": "article" }, @@ -2380,7 +2385,7 @@ "type": "opensource" }, { - "title": "Vault - Official Website", + "title": "HashiCorp Vault", "url": "https://www.vaultproject.io/", "type": "article" }, @@ -2448,7 +2453,7 @@ "type": "article" }, { - "title": "Official Documentation", + "title": "Zabbix Documentation", "url": "https://www.zabbix.com/manuals", "type": "article" }, @@ -2490,7 +2495,7 @@ "type": "article" }, { - "title": "Official Documentation", + "title": "Datadog Documentation", "url": "https://docs.datadoghq.com/", "type": "article" }, @@ -2506,7 +2511,7 @@ "description": "Grafana is an open-source analytics and interactive visualization web application. It connects to various data sources, including time-series databases, relational databases, and cloud services, to create customizable dashboards. Grafana excels at visualizing time-series data for infrastructure and application analytics, supporting a wide range of chart types and plugins. It features alerting capabilities, user authentication, and role-based access control. Grafana is commonly used for monitoring system metrics, application performance, and business analytics. Its flexibility and ability to combine data from multiple sources make it popular in DevOps environments for creating comprehensive monitoring solutions. Grafana's user-friendly interface and extensive customization options enable users to create visually appealing and informative dashboards for real-time data visualization and analysis.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Grafana Website", + "title": "Grafana", "url": "https://grafana.com/", "type": "article" }, @@ -2553,7 +2558,7 @@ "description": "The Elastic Stack, formerly known as ELK Stack, is a set of open-source tools for searching, analyzing, and visualizing data in real-time. It consists of four main components: Elasticsearch (a distributed search and analytics engine), Logstash (a data processing pipeline), Kibana (a data visualization and management tool), and Beats (lightweight data shippers). Together, these tools enable users to collect data from various sources, process and enrich it, store it in a searchable format, and create interactive visualizations and dashboards. The Elastic Stack is widely used for log analytics, application performance monitoring, security information and event management (SIEM), and business intelligence applications, offering scalability and flexibility for handling large volumes of diverse data.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Elastic Stack Website", + "title": "Elastic Stack", "url": "https://www.elastic.co/elastic-stack/", "type": "article" }, @@ -2605,7 +2610,7 @@ "type": "article" }, { - "title": "Official Documentation", + "title": "Splunk Documentation", "url": "https://docs.splunk.com/Documentation", "type": "article" }, @@ -2636,12 +2641,12 @@ "type": "article" }, { - "title": "Official Guides", + "title": "Papertrail Guides", "url": "https://www.papertrail.com/solution/guides/", "type": "article" }, { - "title": "Official Blog", + "title": "Papertrail Blog", "url": "https://www.papertrail.com/blog/", "type": "article" }, @@ -2666,6 +2671,11 @@ "url": "https://kubernetes.io/docs/tutorials/kubernetes-basics/", "type": "article" }, + { + "title": "Docker Swarm", + "url": "https://docs.docker.com/engine/swarm/", + "type": "article" + }, { "title": "Introduction to Kubernetes", "url": "https://www.youtube.com/watch?v=PH-2FfFD2PU", @@ -2810,7 +2820,7 @@ }, "ootuLJfRXarVvm3J1Ir11": { "title": "Nexus", - "description": "The Nexus Repository Manager is a widely used repository manager software developed by Sonatype. It's designed to manage binary components such as Java libraries, Docker images, npm packages, NuGet packages, and more. Nexus Repository Manager allows organizations to store, manage, and distribute software components securely and efficiently.", + "description": "The Nexus Repository Manager is a widely used repository manager software developed by Sonatype. It's designed to manage binary components such as Java libraries, Docker images, npm packages, NuGet packages, and more. Nexus Repository Manager allows organizations to store, manage, and distribute software components securely and efficiently.\n\nVisit the following resources to learn more:", "links": [ { "title": "Repository Management Basics", @@ -2897,7 +2907,7 @@ "description": "FluxCD is a GitOps-based continuous delivery tool for Kubernetes. It automates the deployment of applications by using Git repositories as the source of truth for defining the desired state of a system. FluxCD continuously monitors these repositories and automatically applies changes to the cluster when differences are detected. It supports multi-tenancy, Helm releases, and provides features like automated image updates and notifications. FluxCD enables declarative, version-controlled infrastructure and application management, promoting consistency across environments and simplifying the deployment process. Its integration with Kubernetes makes it particularly useful for cloud-native applications, allowing teams to implement efficient, automated, and auditable deployment workflows.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Flux CD Docs", + "title": "Flux CD", "url": "https://docs.fluxcd.io/", "type": "article" }, @@ -2918,12 +2928,12 @@ "description": "A service mesh is a dedicated infrastructure layer that manages communication between microservices in a distributed application. It provides features like load balancing, service discovery, encryption, observability, and traffic management, allowing services to communicate securely and efficiently. By abstracting network-related concerns from the application code, a service mesh enhances reliability and security while simplifying the management of microservice interactions. Popular service mesh implementations include Istio, Linkerd, and Consul.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Whats a service mesh?", + "title": "Whats a Service Mesh?", "url": "https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh", "type": "article" }, { - "title": "The latest news about service mesh (TNS)", + "title": "The Latest News About Service Mesh (TNS)", "url": "https://thenewstack.io/category/service-mesh/", "type": "article" }, @@ -2933,7 +2943,7 @@ "type": "article" }, { - "title": "Istio & Service Mesh - simply explained in 15 mins", + "title": "Istio & Service Mesh - Simply Explained in 15 mins", "url": "https://www.youtube.com/watch?v=16fgzklcF7Y", "type": "video" } @@ -3133,12 +3143,12 @@ "description": "Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system designed by Grafana Labs. It's purpose-built to be cost-effective and easy to operate, making it particularly well-suited for storing and querying logs from Kubernetes clusters. Loki indexes metadata about logs rather than the full text, which allows it to be more resource-efficient than traditional log management systems. It uses the same querying language as Prometheus (LogQL), making it easier for users familiar with Prometheus to adopt. Loki integrates seamlessly with Grafana for visualization and is often used alongside Prometheus and Grafana in cloud-native observability stacks. Its design focuses on simplicity, making it an attractive option for organizations looking for efficient log management in containerized environments.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Loki Website", + "title": "Loki", "url": "https://grafana.com/oss/loki/", "type": "article" }, { - "title": "Official Documentation", + "title": "Loki Documentation", "url": "https://grafana.com/docs/loki/latest/?pg=oss-loki&plcmt=quick-links", "type": "article" }, @@ -3163,6 +3173,11 @@ "url": "https://github.com/kubernetes/kubernetes", "type": "opensource" }, + { + "title": "Visit Dedicated Kubernetes Roadmap", + "url": "https://roadmap.sh/kubernetes", + "type": "article" + }, { "title": "Kubernetes Website", "url": "https://kubernetes.io/", @@ -3252,12 +3267,12 @@ "type": "opensource" }, { - "title": "Jaeger Website", + "title": "Jaeger", "url": "https://www.jaegertracing.io/", "type": "article" }, { - "title": "Official Documentation", + "title": "Jaeger Documentation", "url": "https://www.jaegertracing.io/docs/1.37/", "type": "article" } @@ -3265,10 +3280,10 @@ }, "pk76Us6z8LoX3f0mhnCyR": { "title": "New Relic", - "description": "New Relic is a cloud-based observability platform that provides full-stack visibility into software applications and infrastructure. It offers real-time performance monitoring, analytics, and alerting across various environments, including web, mobile, and cloud applications. New Relic's suite includes tools for application performance monitoring (APM), infrastructure monitoring, log management, and digital customer experience tracking. It uses distributed tracing and AI-powered analytics to help developers and operations teams identify and resolve issues quickly. New Relic's platform supports a wide range of programming languages and integrates with many popular development and deployment tools, making it a comprehensive solution for modern software observability and performance optimization in DevOps environments. Visit the following resources to learn more:", + "description": "New Relic is a cloud-based observability platform that provides full-stack visibility into software applications and infrastructure. It offers real-time performance monitoring, analytics, and alerting across various environments, including web, mobile, and cloud applications. New Relic's suite includes tools for application performance monitoring (APM), infrastructure monitoring, log management, and digital customer experience tracking. It uses distributed tracing and AI-powered analytics to help developers and operations teams identify and resolve issues quickly. New Relic's platform supports a wide range of programming languages and integrates with many popular development and deployment tools, making it a comprehensive solution for modern software observability and performance optimization in DevOps environments.\n\nVisit the following resources to learn more:", "links": [ { - "title": "New Relic Website", + "title": "New Relic", "url": "https://newrelic.com/", "type": "article" }, @@ -3294,7 +3309,7 @@ "type": "article" }, { - "title": "Official Documentation", + "title": "Datadog Documentation", "url": "https://docs.datadoghq.com/", "type": "article" }, @@ -3315,7 +3330,7 @@ "type": "article" }, { - "title": "Official Documentation", + "title": "Prometheus Documentation", "url": "https://prometheus.io/docs/introduction/overview/", "type": "article" }, @@ -3341,7 +3356,7 @@ "type": "article" }, { - "title": "Official Documentation", + "title": "OpenTelemetry Documentation", "url": "https://opentelemetry.io/docs/", "type": "article" }, diff --git a/public/roadmap-content/php.json b/public/roadmap-content/php.json index 2d17ee5e7..1618cb2a8 100644 --- a/public/roadmap-content/php.json +++ b/public/roadmap-content/php.json @@ -1,55 +1,144 @@ { "_hYN0gEi9BL24nptEtXWU": { "title": "Introduction to PHP", - "description": "PHP, also known as Hypertext Preprocessor, is a powerful scripting language used predominantly for creating dynamic web pages and applications. It provides seamless interaction with databases, easier control of content, session tracking, and cookies. Being an open-source language, it's favored by developers for its flexibility, speed, and security. A simple PHP code to print text would be\n\n \n \n\nHere the \"echo\" command in PHP helps to output one or more strings. You can find more about PHP in the [official PHP documentation](https://www.php.net/docs.php).", - "links": [] + "description": "PHP, also known as Hypertext Preprocessor, is a powerful scripting language used predominantly for creating dynamic web pages and applications. It provides seamless interaction with databases, easier control of content, session tracking, and cookies. Being an open-source language, it's favored by developers for its flexibility, speed, and security.\n\nHere's a simple PHP code to print a text:\n\n \n \n\nHere the \"echo\" command in PHP helps to output one or more strings.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP", + "url": "https://www.php.net/", + "type": "article" + }, + { + "title": "PHP Documentation", + "url": "https://www.php.net/docs.php", + "type": "article" + }, + { + "title": "PHP Tutorial", + "url": "https://www.phptutorial.net/", + "type": "article" + }, + { + "title": "Learn PHP Interactively", + "url": "https://www.learn-php.org/about", + "type": "article" + }, + { + "title": "Introduction to PHP", + "url": "https://www.youtube.com/watch?v=KBT2gmAfav4", + "type": "video" + }, + { + "title": "PHP Tutorial - Full Course", + "url": "https://www.youtube.com/watch?v=OK_JCtrrv-c", + "type": "video" + } + ] }, "b2CuLrhsUNnb4OxI6RRAS": { "title": "Evolution and History", - "description": "PHP, originally standing for Personal Home Page, is a popular scripting language used commonly for web development. Rasmus Lerdorf created it in 1994, and since then, it has evolved significantly from a simple set of CGI binaries written in C, to a full-featured language. PHP's journey includes several versions, with PHP 3 introducing a re-written parser and a better approach to object-oriented programming. PHP 8.0, introduced several optimizations, JIT compilation, and union types, among other improvements. For more details on PHP's history, check out the official PHP documentation [here](https://www.php.net/history).", - "links": [] + "description": "PHP, originally standing for Personal Home Page, is a popular scripting language used commonly for web development. Rasmus Lerdorf created it in 1994, and since then, it has evolved significantly from a simple set of CGI binaries written in C, to a full-featured language. PHP's journey includes several versions, with PHP 3 introducing a re-written parser and a better approach to object-oriented programming. PHP 8.0, introduced several optimizations, JIT compilation, and union types, among other improvements.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "History of PHP", + "url": "https://www.php.net/history", + "type": "article" + } + ] }, "6sHRQTcoKL3TlgNJlwyx8": { "title": "PHP Versions and Features", - "description": "PHP (Hypertext Preprocessor) versions are critically important as each release comes with new features, improvements, and bug fixes. PHP versions start from PHP 1.0 released in 1995 and have improved over the years. The more recent version as of writing is PHP 8.0, which introduced features like the JIT compiler, named arguments, match expressions, and more. Remember, sticking to officially supported versions, like PHP 7.4 or 8.0, ensures security updates and performance improvements. For instance, the code `echo \"Current PHP version: \" . phpversion();` would tell you the PHP version in use. To learn more about PHP versions and their features, check out the [official PHP documentation](https://www.php.net/manual/en/history.php.php).", - "links": [] + "description": "PHP (Hypertext Preprocessor) versions are critically important as each release comes with new features, improvements, and bug fixes. PHP versions start from PHP 1.0 released in 1995 and have improved over the years. The more recent version as of writing is PHP 8.0, which introduced features like the JIT compiler, named arguments, match expressions, and more. Remember, sticking to officially supported versions, like PHP 7.4 or 8.0, ensures security updates and performance improvements. For instance, the code `echo \"Current PHP version: \" . phpversion();` would tell you the PHP version in use.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Versions and Features", + "url": "https://www.php.net/manual/en/history.php.php", + "type": "article" + } + ] }, "_LhLDVZjLt1DoAP1NuUES": { "title": "What is PHP?", - "description": "PHP, an acronym for Hypertext Preprocessor, is a popular server-side scripting language favored for web development. It's versatile, dynamic, and can be embedded seamlessly into HTML code. PHP scripts are executed on the server, and the result is sent back to the browser as plain HTML. For example, a basic PHP script to display \"Hello, World!\" on a webpage would look like this - ``. You can learn more about PHP by reading the official PHP documentation [here](https://www.php.net/manual/en/intro-whatis.php).", - "links": [] + "description": "PHP, an acronym for Hypertext Preprocessor, is a popular server-side scripting language favored for web development. It's versatile, dynamic, and can be embedded seamlessly into HTML code. PHP scripts are executed on the server, and the result is sent back to the browser as plain HTML.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is PHP?", + "url": "https://www.php.net/manual/en/intro-whatis.php", + "type": "article" + }, + { + "title": "Introduction to PHP", + "url": "https://www.phptutorial.net/php-tutorial/what-is-php/", + "type": "article" + } + ] }, "3_TuxOSzBuktBlBF05r_z": { "title": "Installing PHP", - "description": "Installing PHP is an essential process to start developing PHP applications. PHP can be installed on Windows, macOS, and various distributions of Linux. Places to get PHP include the official PHP website, package managers like APT for Linux and Homebrew for macOS, or bundled solutions like XAMPP or WAMP that provide PHP along with a web server and database. After successful installation, you can run a simple PHP script to verify the installation. Here's an example, ``, which should display \"Hello, World!\" when accessed in a web browser. For detailed instructions, visit the official PHP installation guide at: [https://www.php.net/manual/en/install.php](https://www.php.net/manual/en/install.php).", - "links": [] + "description": "Installing PHP is an essential process to start developing PHP applications. PHP can be installed on Windows, macOS, and various distributions of Linux. Places to get PHP include the official PHP website, package managers like APT for Linux and Homebrew for macOS, or bundled solutions like XAMPP or WAMP that provide PHP along with a web server and database. After successful installation, you can run a simple PHP script to verify the installation. Here's an example, ``, which should display \"Hello, World!\" when accessed in a web browser.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Installation Guide", + "url": "https://www.php.net/manual/en/install.php", + "type": "article" + } + ] }, "36Y1HkHxhuxh2qVQB8NVE": { "title": "WAMP", - "description": "WAMP is a popular software stack used for developing PHP web applications on Windows systems. Acting as an abbreviation for Windows, Apache, MySQL, and PHP, WAMP provides all the components necessary to set up a local web server. Apache is used to handle HTTP requests, MySQL manages the databases, and PHP serves as the programming language. The benefit of using WAMP lies in its convenience as it pre-packages all these components, saving time for the developer. You can download WAMP from its official website, then after installation, testing of your PHP scripts can be done locally without needing an internet connection. Refer to the [official PHP documentation](https://www.php.net/manual/en/install.windows.manual.php) for more details on setting up a PHP environment on Windows.", - "links": [] + "description": "WAMP is a popular software stack used for developing PHP web applications on Windows systems. Acting as an abbreviation for Windows, Apache, MySQL, and PHP, WAMP provides all the components necessary to set up a local web server. Apache is used to handle HTTP requests, MySQL manages the databases, and PHP serves as the programming language. The benefit of using WAMP lies in its convenience as it pre-packages all these components, saving time for the developer. You can download WAMP from its official website, then after installation, testing of your PHP scripts can be done locally without needing an internet connection.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Windows Installation", + "url": "https://www.php.net/manual/en/install.windows.manual.php", + "type": "article" + } + ] }, "-wniKEBwbF0Fi1fHpF-Gc": { "title": "XAMPP", - "description": "XAMPP is an open-source development environment that stands for Cross-Platform (X), Apache server (A), MariaDB (M), PHP (P), and Perl (P). If you're working with PHP, it's a handy tool because it creates a local web server for testing or development purposes. It's especially useful if you plan to use a database in your project, as it includes MariaDB. It integrates seamlessly with PHP, enabling you to manage your server, scripting language, and database from a unified platform with less hassle. A code sample isn't really applicable here as XAMPP is more about setup and management. For more information, you can visit the official PHP documentation: [https://www.php.net/manual/en/install.php](https://www.php.net/manual/en/install.php).", - "links": [] + "description": "XAMPP is an open-source development environment that stands for Cross-Platform (X), Apache server (A), MariaDB (M), PHP (P), and Perl (P). If you're working with PHP, it's a handy tool because it creates a local web server for testing or development purposes. It's especially useful if you plan to use a database in your project, as it includes MariaDB. It integrates seamlessly with PHP, enabling you to manage your server, scripting language, and database from a unified platform with less hassle. A code sample isn't really applicable here as XAMPP is more about setup and management. For more information, you can visit the official PHP documentation: .\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Installing Apache2", + "url": "https://www.php.net/manual/en/install.windows.apache2.php", + "type": "article" + }, + { + "title": "XAMPP", + "url": "https://www.apachefriends.org/", + "type": "article" + } + ] }, "t7p7TU2khaxsZPYAdwFAA": { "title": "MAMP", - "description": "MAMP stands for Macintosh, Apache, MySQL, and PHP. It is a popular software stack that enables developers to run a local server environment. While other technology stacks might be more relevant to different languages or platform-specific development, MAMP is highly beneficial for PHP development. MAMP allows PHP developers to run their code in a localhost environment on their systems, making testing and debugging more straightforward. MAMP bundles all the required software packages (Apache, MySQL, PHP) into one convenient installation, supporting developers in creating a reliable, consistent development environment without tussle. However, as an assistant, I cannot provide a code sample for this topic since it's not directly related to coding in PHP. Here's a link to the MAMP resource where you can find more details: [MAMP Official Site](https://www.mamp.info/en/).", - "links": [] + "description": "MAMP stands for Macintosh, Apache, MySQL, and PHP. It is a popular software stack that enables developers to run a local server environment. While other technology stacks might be more relevant to different languages or platform-specific development, MAMP is highly beneficial for PHP development. MAMP allows PHP developers to run their code in a localhost environment on their systems, making testing and debugging more straightforward. MAMP bundles all the required software packages (Apache, MySQL, PHP) into one convenient installation, supporting developers in creating a reliable, consistent development environment without tussle. However, as an assistant, I cannot provide a code sample for this topic since it's not directly related to coding in PHP.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "MAMP", + "url": "https://www.mamp.info/en/", + "type": "article" + } + ] }, "7LjxtrmgJtTJc0_kP83Tr": { "title": "LAMP", - "description": "LAMP refers to the combined use of Linux OS, Apache HTTP Server, MySQL relational database management system, and PHP; it's a popular stack for creating and hosting websites. For PHP, LAMP is a robust, open-source web development platform that supports a wide range of dynamic websites and applications. Suppose you plan to develop a content management system (CMS), forums, or e-commerce shops. In that case, PHP, as a part of the LAMP stack, helps provide a flexible development environment. Here, PHP works hand-in-hand with MySQL to access and manage databases, get queried results, and embed them into HTML pages by the Apache HTTP Server before sending them to the client side.[Official PHP Documentation](https://www.php.net/manual/en/introduction.php)", - "links": [] + "description": "LAMP refers to the combined use of Linux OS, Apache HTTP Server, MySQL relational database management system, and PHP; it's a popular stack for creating and hosting websites. For PHP, LAMP is a robust, open-source web development platform that supports a wide range of dynamic websites and applications. Suppose you plan to develop a content management system (CMS), forums, or e-commerce shops. In that case, PHP, as a part of the LAMP stack, helps provide a flexible development environment. Here, PHP works hand-in-hand with MySQL to access and manage databases, get queried results, and embed them into HTML pages by the Apache HTTP Server before sending them to the client side.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP Lamp", + "url": "https://www.php.net/manual/en/introduction.php", + "type": "article" + } + ] }, "hzBUHSuFwLYNooF_vEmrs": { "title": "Basic PHP Syntax", "description": "PHP syntax is generally considered similar to C-style syntax, where code blocks are defined with curly braces, variables start with a dollar sign ($), and statements end with a semicolon (;), making it relatively easy to learn for programmers familiar with C-like languages; PHP scripts are embedded within HTML using opening tags \"\" to mark where PHP code should be executed within a web page.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation - Basic Syntax", + "title": "Basic Syntax", "url": "https://www.php.net/manual/en/langref.php", "type": "article" } @@ -57,40 +146,70 @@ }, "D0BtyxyjIBcpfn5wP23WC": { "title": "Variables and Scope", - "description": "Variables are a central part of PHP, allowing you to store data that can be used later in your scripts. Their values can be of various types including strings, integers, arrays, and objects. PHP has both local and global scope when it comes to variables. Local scope refers to variables that are only accessible within the function they are defined, while global scope means a variable is accessible to any part of the script. However, to use a global variable inside a function, you need to declare it as global. Here's a brief example:\n\n $x = 10; //global variable\n function test() {\n global $x; // accessing the global variable\n echo $x;\n }\n test(); //prints 10\n \n\nFor further understanding on the topic, this link to PHP's official documentation can be useful: [PHP: Variables Scope](https://www.php.net/manual/en/language.variables.scope.php)", - "links": [] + "description": "Variables are a central part of PHP, allowing you to store data that can be used later in your scripts. Their values can be of various types including strings, integers, arrays, and objects. PHP has both local and global scope when it comes to variables. Local scope refers to variables that are only accessible within the function they are defined, while global scope means a variable is accessible to any part of the script. However, to use a global variable inside a function, you need to declare it as global. Here's a brief example:\n\n $x = 10; //global variable\n function test() {\n global $x; // accessing the global variable\n echo $x;\n }\n test(); //prints 10\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Variables and Scope", + "url": "https://www.php.net/manual/en/language.variables.scope.php", + "type": "article" + } + ] }, "srIHPZabaCGdB5VvUXaMa": { "title": "Data Types", - "description": "PHP is a flexible and widely-used language that supports several types of data. These types include integers, floating-point numbers, strings, arrays, objects, NULL, and many more. The different data types allow developers to efficiently manage and handle data in their applications. For example, an integer data type in PHP can be a non-decimal number between -2,147,483,648 and 2,147,483,647. Here's a small sample PHP code snippet that assigns different data types to variables:\n\n $text = \"Hello world!\"; // String\n $number = 1234; // Integer\n $decimalNumber = 12.34; // Floating-point number\n $boolean = true; // Boolean\n \n\nFor a deeper dive into PHP's data types, you can check out the official [PHP documentation](https://www.php.net/manual/en/language.types.php).", - "links": [] + "description": "PHP is a flexible and widely-used language that supports several types of data. These types include integers, floating-point numbers, strings, arrays, objects, NULL, and many more. The different data types allow developers to efficiently manage and handle data in their applications. For example, an integer data type in PHP can be a non-decimal number between -2,147,483,648 and 2,147,483,647. Here's a small sample PHP code snippet that assigns different data types to variables:\n\n $text = \"Hello world!\"; // String\n $number = 1234; // Integer\n $decimalNumber = 12.34; // Floating-point number\n $boolean = true; // Boolean\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Data Types", + "url": "https://www.php.net/manual/en/language.types.php", + "type": "article" + } + ] }, "2ykzBBdYhWuM-neGf0AWP": { "title": "echo", - "description": "'echo' is a language construct in PHP, and it is commonly used to output one or more strings to the browser. This command doesn't behave like a function, hence it doesn't require parentheses unless it's necessary to avoid confusion. Check out a simple example below where we are using echo to output a simple string:\n\n echo \"Hello, world!\";\n \n\nThis will indeed output: Hello, world!\n\nIt's also worth mentioning that 'echo' also supports multiple parameters. The PHP official documentation provides more detailed information: [PHP: echo](https://www.php.net/manual/en/function.echo.php).", + "description": "'echo' is a language construct in PHP, and it is commonly used to output one or more strings to the browser. This command doesn't behave like a function, hence it doesn't require parentheses unless it's necessary to avoid confusion. It's also worth mentioning that 'echo' also supports multiple parameters. Check out a simple example below where we are using echo to output a simple string:\n\n echo \"Hello, world!\";\n \n\nVisit the following resources to learn more:\n\n* [@official@echo](https://www.php.net/manual/en/function.echo.php).", "links": [] }, "NQUmO90sqe7fnzod3Ia8H": { "title": "print", - "description": "The 'print' statement in PHP is an in-built function used for outputting one or more strings. Unlike 'echo', it is not a language construct and has a return value. However, it is slower because it uses expressions. The text or numeric data that 'print' outputs can be shown directly or stored in a variable. For instance, to print a string you may use `print(\"Hello, World!\");`, and for using it with a variable, `echo $variable;` is suitable. For more nuances and subtleties of using 'print', refer to the PHP official documentation: [PHP print](https://www.php.net/manual/en/function.print.php).", - "links": [] + "description": "The 'print' statement in PHP is an in-built function used for outputting one or more strings. Unlike 'echo', it is not a language construct and has a return value. However, it is slower because it uses expressions. The text or numeric data that 'print' outputs can be shown directly or stored in a variable. For instance, to print a string you may use `print(\"Hello, World!\");`, and for using it with a variable, `echo $variable;` is suitable.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "print", + "url": "https://www.php.net/manual/en/function.print.php", + "type": "article" + } + ] }, "JCCeVC0hOrvIeyfg1ScKA": { "title": "var_dump", - "description": "Var\\_dump is a built-in PHP function that's incredibly handy for debugging as it outputs the data type and value of a given variable. This includes array elements and object properties, if given such types. If you're wrangling with your PHP code and finding your variables aren't behaving as you expect, using var\\_dump can quickly show you what you're working with. Check out a simple usage example below:\n\n $myVar = array( \"Hello\", \"World!\");\n var_dump($myVar);\n \n\nThis will output the size of array and details of each element in the array. You can find more examples and usage scenarios on the [PHP official documentation](https://www.php.net/manual/en/function.var-dump.php).", - "links": [] + "description": "Var\\_dump is a built-in PHP function that's incredibly handy for debugging as it outputs the data type and value of a given variable. This includes array elements and object properties, if given such types. If you're wrangling with your PHP code and finding your variables aren't behaving as you expect, using var\\_dump can quickly show you what you're working with. Check out a simple usage example below:\n\n $myVar = array( \"Hello\", \"World!\");\n var_dump($myVar);\n \n\nThis will output the size of array and details of each element in the array.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "var_dump", + "url": "https://www.php.net/manual/en/function.var-dump.php", + "type": "article" + } + ] }, "wsC7OGXOyfCY4pLLNrR2v": { "title": "print_r", - "description": "The print\\_r function in PHP is used to print human-readable information about a variable, ranging from simple values to more complex, multi-dimensional arrays and objects. It's exceptionally helpful while debugging, providing more information about the variable's contents than the echo or print functions. For example, in the code `$array = array('apple', 'banana', 'cherry'); print_r($array);`, it will display Array ( \\[0\\] => apple \\[1\\] => banana \\[2\\] => cherry ). Further information about the print\\_r function can be found at the [PHP documentation](https://www.php.net/manual/en/function.print-r.php).", - "links": [] + "description": "The print\\_r function in PHP is used to print human-readable information about a variable, ranging from simple values to more complex, multi-dimensional arrays and objects. It's exceptionally helpful while debugging, providing more information about the variable's contents than the echo or print functions. For example, in the code `$array = array('apple', 'banana', 'cherry'); print_r($array);`, it will display Array ( \\[0\\] => apple \\[1\\] => banana \\[2\\] => cherry ).\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "print_r", + "url": "https://www.php.net/manual/en/function.print-r.php", + "type": "article" + } + ] }, "pzReF4C0mcCWAnpfIJbwl": { "title": "Casting Data Types", - "description": "PHP, as a loose typing language, allows us to change the type of a variable or to transform an instance of one data type into another. This operation is known as Casting. When to use casting, however, depends on the situation - it is recommendable when you want explicit control over the data type for an operation. The syntax involves putting the intended type in parentheses before the variable. For example, if you wanted to convert a string to an integer, you'd use: `$myVar = \"123\"; $intVar = (int) $myVar;`. Here, `$intVar` would be an integer representation of `$myVar`. Remember, the original variable type remains unchanged.\n\nVisit the following resources to learn more:", + "description": "PHP, as a loose typing language, allows us to change the type of a variable or to transform an instance of one data type into another. This operation is known as Casting. When to use casting, however, depends on the situation - it is recommendable when you want explicit control over the data type for an operation. The syntax involves putting the intended type in parentheses before the variable. For example, if you wanted to convert a string to an integer, you'd use: `$myVar = \"123\"; $intVar = (int) $myVar;`. Here, `$intVar` would be an integer representation of `$myVar`. Remember, the original variable type remains unchanged.\n\nHere's an example of type casting in PHP:\n\n \n \n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation - Type Casting", + "title": "Type Casting", "url": "https://www.php.net/manual/en/language.types.type-juggling.php", "type": "article" } @@ -101,7 +220,7 @@ "description": "Arrays in PHP are fundamental data structures that store multiple elements in a particular key-value pair collection. PHP offers extensive support for arrays, making them convenient for storing sets of data or complex collections.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation - Arrays", + "title": "Arrays", "url": "https://www.php.net/manual/en/language.types.array.php", "type": "article" } @@ -109,8 +228,14 @@ }, "j2S8dP3HlAOOoZdpj-7Dx": { "title": "Indexed Arrays", - "description": "Indexed arrays in PHP store values that are accessed through numerical indexes, which start at 0 by default. This might be particularly useful when you have a list of items in a specific order. For example, you might use an indexed array to represent a list of your favorite books, where each book is numbered starting from 0. Each individual item in the array, book in this case, can be accessed by their specific index. You can use the array() function or the short array syntax \\[\\] to declare an indexed array.\n\nExample:\n\n $books = array(\"The Great Gatsby\", \"Moby Dick\", \"To Kill a Mockingbird\");\n echo $books[0]; //Outputs \"The Great Gatsby\"\n \n\nYou can find more on this in PHP's official documentation [here](https://www.php.net/manual/en/language.types.array.php).", - "links": [] + "description": "Indexed arrays in PHP store values that are accessed through numerical indexes, which start at 0 by default. This might be particularly useful when you have a list of items in a specific order. For example, you might use an indexed array to represent a list of your favorite books, where each book is numbered starting from 0. Each individual item in the array, book in this case, can be accessed by their specific index. You can use the array() function or the short array syntax \\[\\] to declare an indexed array.\n\nHere's an Example:\n\n $books = array(\"The Great Gatsby\", \"Moby Dick\", \"To Kill a Mockingbird\");\n echo $books[0]; //Outputs \"The Great Gatsby\"\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Indexed Arrays", + "url": "https://www.php.net/manual/en/language.types.array.php", + "type": "article" + } + ] }, "i_NRsOJNNp7AOqMgu5Jg8": { "title": "Associative Arrays", @@ -125,15 +250,21 @@ }, "uARTOZ-ZwugSmbCJoRS5Y": { "title": "Multi-dimensional Arrays", - "description": "Multi-dimensional arrays in PHP are a type of array that contains one or more arrays. Essentially, it's an array of arrays. This allows you to store data in a structured manner, much like a table or a matrix. The fundamental idea is that each array value can, in turn, be another array. For instance, you can store information about various users, where each user (a primary array element) contains several details about them (in a secondary array like email, username etc.). Here's an example:\n\n $users = array(\n array(\"John\", \"john@example.com\", \"john123\"),\n array(\"Jane\", \"jane@example.com\", \"jane123\"),\n array(\"Doe\", \"doe@example.com\", \"doe123\")\n );\n \n\nYou can access elements of this array just like you would with a normal array but with an extra index denoting the 'depth'. More about this can be found in the [PHP documentation](https://www.php.net/manual/en/language.types.array.php).", - "links": [] + "description": "Multi-dimensional arrays in PHP are a type of array that contains one or more arrays. Essentially, it's an array of arrays. This allows you to store data in a structured manner, much like a table or a matrix. The fundamental idea is that each array value can, in turn, be another array. For instance, you can store information about various users, where each user (a primary array element) contains several details about them (in a secondary array like email, username etc.).\n\nHere's an example:\n\n $users = array(\n array(\"John\", \"john@example.com\", \"john123\"),\n array(\"Jane\", \"jane@example.com\", \"jane123\"),\n array(\"Doe\", \"doe@example.com\", \"doe123\")\n );\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Multi-dimensional Arrays", + "url": "https://www.php.net/manual/en/language.types.array.php", + "type": "article" + } + ] }, "38YksjvhXCbgnHqkl57Cz": { "title": "Conditionals", "description": "Conditionals in PHP, much like in other programming languages, allow for branching in code, meaning your program can choose to execute specific parts of code based on the state of variables or expressions. The most common conditional statements in PHP are \"if\", \"else\", and \"elseif\".\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation - Control Structures", + "title": "Control Structures", "url": "https://www.php.net/manual/en/language.control-structures.php", "type": "article" } @@ -141,70 +272,142 @@ }, "-McOv-ZPTGayX7Mx2Thw1": { "title": "if/else", - "description": "In PHP, the if/else conditional statements are fundamental components that control the flow of the program based on specific conditions. When the 'if' condition is true, a block of code will execute. If that condition is not met (or false), the program proceeds to the 'else' statement (if provided), executing its block of code. This allows you to handle different situations dynamically. A simple example of this concept in action would be:\n\n $number = 10;\n if ($number > 5) {\n echo \"The number is greater than 5\";\n } else {\n echo \"The number is not greater than 5\";\n }\n \n\nIn this example, the output will be \"The number is greater than 5\" because the condition evaluated to true. You can find more information on the if/else conditional statements in the [PHP documentation](https://www.php.net/manual/en/control-structures.elseif.php).", - "links": [] + "description": "In PHP, the if/else conditional statements are fundamental components that control the flow of the program based on specific conditions. When the 'if' condition is true, a block of code will execute. If that condition is not met (or false), the program proceeds to the 'else' statement (if provided), executing its block of code. This allows you to handle different situations dynamically. A simple example of this concept in action would be:\n\n $number = 10;\n if ($number > 5) {\n echo \"The number is greater than 5\";\n } else {\n echo \"The number is not greater than 5\";\n }\n \n\nIn this example, the output will be \"The number is greater than 5\" because the condition evaluated to true.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "if-else", + "url": "https://www.php.net/manual/en/control-structures.elseif.php", + "type": "article" + } + ] }, "bgJ9-m6Fiu3VCc-NZlbpn": { "title": "switch", - "description": "The switch statement is a special conditional statement in PHP that can simplify code and improve readability when you need to compare one value with multiple different possibilities. It is an alternative to using a chain of \"if...else\" conditions, and is particularly useful when you have many different cases to compare. The switch expression is evaluated only once, and its value is compared to each case. When a match is found, PHP executes the associated code block.\n\nHere's a basic switch statement:\n\n $fruit = \"apple\";\n switch ($fruit) {\n case \"apple\":\n echo \"You chose apple.\";\n break;\n case \"banana\":\n echo \"You chose banana.\";\n break;\n default:\n echo \"Invalid choice.\";\n }\n // Outputs: You chose apple.\n \n\nSwitch statements can make your code cleaner and easier to manage, especially when dealing with multiple conditions.\n\nFor more information, see the PHP documentation: [PHP: switch - Manual](https://www.php.net/manual/en/control-structures.switch.php)", - "links": [] + "description": "The switch statement is a special conditional statement in PHP that can simplify code and improve readability when you need to compare one value with multiple different possibilities. It is an alternative to using a chain of \"if...else\" conditions, and is particularly useful when you have many different cases to compare. The switch expression is evaluated only once, and its value is compared to each case. When a match is found, PHP executes the associated code block.\n\nHere's a basic switch statement:\n\n $fruit = \"apple\";\n switch ($fruit) {\n case \"apple\":\n echo \"You chose apple.\";\n break;\n case \"banana\":\n echo \"You chose banana.\";\n break;\n default:\n echo \"Invalid choice.\";\n }\n // Outputs: You chose apple.\n \n\nSwitch statements can make your code cleaner and easier to manage, especially when dealing with multiple conditions.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "switch", + "url": "https://www.php.net/manual/en/control-structures.switch.php", + "type": "article" + } + ] }, "3gNzX-bw2iqur7U7-_W38": { "title": "match", - "description": "Match expressions are an integral feature of PHP, introduced in PHP 8.0 as an alternative to the switch statement. Compared to the switch statement, match expressions are safer since they don't require break statements and are more concise. The match expression can be an excellent tool for pattern matching. Here's an example:\n\n $message = match ($statusCode) {\n 200, 300 => 'OK',\n 400 => 'error',\n default => 'unknown status code',\n };\n \n\nIn this code, based on the value of `$statusCode`, the `match` expression assigns a specific text to the `$message`. If `$statusCode` is not 200, 300, or 400, the `default` case applies. After running the code, the `$message` variable contains the result of the `match` expression. You can learn more about `match` expressions in PHP documentation: [https://www.php.net/manual/en/control-structures.match.php](https://www.php.net/manual/en/control-structures.match.php).", - "links": [] + "description": "Match expressions are an integral feature of PHP, introduced in PHP 8.0 as an alternative to the switch statement. Compared to the switch statement, match expressions are safer since they don't require break statements and are more concise. The match expression can be an excellent tool for pattern matching. Here's an example:\n\n $message = match ($statusCode) {\n 200, 300 => 'OK',\n 400 => 'error',\n default => 'unknown status code',\n };\n \n\nIn this code, based on the value of `$statusCode`, the `match` expression assigns a specific text to the `$message`. If `$statusCode` is not 200, 300, or 400, the `default` case applies. After running the code, the `$message` variable contains the result of the `match` expression.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "match", + "url": "https://www.php.net/manual/en/control-structures.match.php", + "type": "article" + } + ] }, "w0ntgFBhgGd5RUFd-qlPK": { "title": "Null Coalescing Operator", - "description": "The Null Coalescing Operator (??) in PHP is a simple and useful tool for handling variables that might not be set. It allows developers to provide a default value when the variable happens not to have a value. It is similar to the ternary operator, but instead of checking whether a variable is true or false, it checks if it is set or null. This makes it a handy tool for handling optional function arguments or form inputs. Here's an example: `$username = $_POST['username'] ?? 'Guest';`. In this line, if 'username' was set in the POST array, $username will be set to that value. Otherwise, it's set to 'Guest'. For more details about this operator, check its [documentation](https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op).", - "links": [] + "description": "The Null Coalescing Operator (??) in PHP is a simple and useful tool for handling variables that might not be set. It allows developers to provide a default value when the variable happens not to have a value. It is similar to the ternary operator, but instead of checking whether a variable is true or false, it checks if it is set or null. This makes it a handy tool for handling optional function arguments or form inputs. Here's an example: `$username = $_POST['username'] ?? 'Guest';`. In this line, if 'username' was set in the POST array, $username will be set to that value. If not, it will be set to 'Guest'.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Null Coalescing Operator", + "url": "https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op", + "type": "article" + } + ] }, "1NXSk8VZDr89jQTTkOL7x": { "title": "Null Safe Operator", - "description": "The Null Safe Operator is a handy feature in PHP which deals with an issue that often pops up when working with objects: trying to access properties or methods on an object that might be null. Instead of a fatal error, the PHP Null Safe Operator (indicated by ?->) allows null values to be returned safely, making your code more robust. Here's a quick example, consider $session?->user?->name. If $session or user is null, PHP will stop further execution and simply return null. This makes PHP more resilient when processing unpredictable data. More information can be found on the [PHP documentation webpage](https://www.php.net/manual/en/language.oop5.nullsafe.php).", - "links": [] + "description": "The Null Safe Operator is a handy feature in PHP which deals with an issue that often pops up when working with objects: trying to access properties or methods on an object that might be null. Instead of a fatal error, the PHP Null Safe Operator (indicated by ?->) allows null values to be returned safely, making your code more robust. Here's a quick example, consider $session?->user?->name. If $session or user is null, PHP will stop further execution and simply return null. This makes PHP more resilient when processing unpredictable data.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Null Safe Operator", + "url": "https://www.php.net/manual/en/language.oop5.nullsafe.php", + "type": "article" + } + ] }, "qwt8xN4vuTrY-D0czYITI": { "title": "Loops", - "description": "PHP incorporates the use of loops, which are a vital part of programming. They allow a block of code to be executed repeatedly based on a certain condition or until a specific condition is met. In PHP, there are four types of loops - 'while', 'do-while', 'for' and 'foreach'. The 'while' loop continues executing its nested code as long as the condition remains true. The 'do-while' loop executes a block of code at least once, and then either continues executing it or stops, based on the condition. The 'for' loop is often used when the number of iterations is known. The 'foreach' loop works with arrays and is used to loop through each key/value pair in an array. Here's a simple example of a 'for' loop in PHP:\n\n \n \n\nIn this example, the loop will execute five times, with $i increasing by one each time, outputting the numbers from 0 to 4. You can find more detailed explanation and examples of loops in PHP in the official PHP documentation [here](https://www.php.net/manual/en/language.control-structures.php).", - "links": [] + "description": "PHP incorporates the use of loops, which are a vital part of programming. They allow a block of code to be executed repeatedly based on a certain condition or until a specific condition is met. In PHP, there are four types of loops - 'while', 'do-while', 'for' and 'foreach'. The 'while' loop continues executing its nested code as long as the condition remains true. The 'do-while' loop executes a block of code at least once, and then either continues executing it or stops, based on the condition. The 'for' loop is often used when the number of iterations is known. The 'foreach' loop works with arrays and is used to loop through each key/value pair in an array. Here's a simple example of a 'for' loop in PHP:\n\n \n \n\nIn this example, the loop will execute five times, with $i increasing by one each time, outputting the numbers from 0 to 4.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Loops", + "url": "https://www.php.net/manual/en/language.control-structures.php", + "type": "article" + } + ] }, "VLRLymQmLfscrBfzXKvHi": { "title": "Constants", - "description": "Constants in PHP are fixed values that do not change during the execution of the script. They can be handy for values that need to be reused often like a website's URL, a company's name, or even a hardcoded database connection string. Unlike variables, once a constant is defined, it cannot be undefined or reassigned. Constants are case-sensitive by default but this can be overridden. They are defined using the define() function or the const keyword. For instance, you can create a constant to hold the value of Pi and call it in your script like this:\n\n define(\"PI\", 3.14);\n echo PI; // Outputs: 3.14\n \n\nFor more information, visit the PHP documentation on constants [here](https://www.php.net/manual/en/language.constants.php).", - "links": [] + "description": "Constants in PHP are fixed values that do not change during the execution of the script. They can be handy for values that need to be reused often like a website's URL, a company's name, or even a hardcoded database connection string. Unlike variables, once a constant is defined, it cannot be undefined or reassigned. Constants are case-sensitive by default but this can be overridden. They are defined using the define() function or the const keyword. For instance, you can create a constant to hold the value of Pi and call it in your script like this:\n\n define(\"PI\", 3.14);\n echo PI; // Outputs: 3.14\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Constants", + "url": "https://www.php.net/manual/en/language.constants.php", + "type": "article" + } + ] }, "WiGv7vi7Mtw-YqPMcnnyw": { "title": "Functions", - "description": "Functions in PHP are self-contained blocks of code that carry out specific tasks and can be reused throughout your application. A function is defined with the word \"function\" followed by a name, and it should return a value using the \"return\" statement. To use a function, you simply need to call it by its name. You can also pass parameters to functions to influence how they work. Here's a simple function:\n\n function greet($name) {\n return \"Hello, \" . $name;\n }\n \n echo greet(\"John\"); // Outputs: Hello, John\n \n\nIn the code above, \"greet\" is a function that takes one parameter \"name\". It concatenates \"Hello, \" with the name and returns the result. For more on PHP functions, visit the PHP documentation at [php.net](https://www.php.net/manual/en/language.functions.php).", - "links": [] + "description": "Functions in PHP are self-contained blocks of code that carry out specific tasks and can be reused throughout your application. A function is defined with the word \"function\" followed by a name, and it should return a value using the \"return\" statement. To use a function, you simply need to call it by its name. You can also pass parameters to functions to influence how they work. Here's a simple function:\n\n function greet($name) {\n return \"Hello, \" . $name;\n }\n \n echo greet(\"John\"); // Outputs: Hello, John\n \n\nIn the code above, \"greet\" is a function that takes one parameter \"name\". It concatenates \"Hello, \" with the name and returns the result.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Functions", + "url": "https://www.php.net/manual/en/language.functions.php", + "type": "article" + } + ] }, "1nODJchgSuWbcvSlxnWeE": { "title": "Function Declaration", - "description": "Function is the block of code that performs a specific task. It is a reusable code that can be called multiple times. In PHP, a function is declared using the `function` keyword followed by the function name and parentheses. The function name should be unique and descriptive. The parentheses may contain parameters that are passed to the function. The function body is enclosed within curly braces `{}`.\n\n function greeting($name) {\n echo \"Hello, \" . $name;\n }\n \n\nIn this case, 'greeting' is the function name, '$name' is the parameter, and 'echo \"Hello, \" . $name;' is the operation. To learn more, you can refer to the [PHP Documentation](https://www.php.net/manual/en/functions.user-defined.php).", - "links": [] + "description": "Function is the block of code that performs a specific task. It is a reusable code that can be called multiple times. In PHP, a function is declared using the `function` keyword followed by the function name and parentheses. The function name should be unique and descriptive. The parentheses may contain parameters that are passed to the function. The function body is enclosed within curly braces `{}`.\n\n function greeting($name) {\n echo \"Hello, \" . $name;\n }\n \n\nIn this case, 'greeting' is the function name, '$name' is the parameter, and 'echo \"Hello, \" . $name;' is the operation.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "User Defined Functions", + "url": "https://www.php.net/manual/en/functions.user-defined.php", + "type": "article" + } + ] }, "mpQKoBzsOa-5iWo08sOhQ": { "title": "Parameters / Return Values", - "description": "Parameters in PHP functions specify the input that the function expects to receive when it is called. They can be of various types like strings, integers, arrays, or even objects. PHP also supports default values for parameters and passing by reference. In PHP, the 'return' statement is often used to end the execution of a function and send back a value. Return values can be any data type. Here's a simple example:\n\n function addNumbers($num1, $num2) {\n $sum = $num1 + $num2;\n return $sum;\n }\n \n echo addNumbers(3, 4); // Outputs: 7\n \n\nIn the above code, `$num1` and `$num2` are parameters, and the sum of these numbers is the return value. To deepen your understanding, visit PHP function parameters and return values guide on the [official PHP website](https://www.php.net/manual/en/functions.arguments.php).", - "links": [] + "description": "Parameters in PHP functions specify the input that the function expects to receive when it is called. They can be of various types like strings, integers, arrays, or even objects. PHP also supports default values for parameters and passing by reference. In PHP, the 'return' statement is often used to end the execution of a function and send back a value. Return values can be any data type. Here's a simple example:\n\n function addNumbers($num1, $num2) {\n $sum = $num1 + $num2;\n return $sum;\n }\n \n echo addNumbers(3, 4); // Outputs: 7\n \n\nIn the above code, `$num1` and `$num2` are parameters, and the sum of these numbers is the return value.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Parameters / Return Values", + "url": "https://www.php.net/manual/en/functions.arguments.php", + "type": "article" + } + ] }, "RgVP99rJJ8FVecIA45w20": { "title": "Default / Optional Params", - "description": "In PHP, you can assign default values to your function parameters. These are called default or optional parameters. This is exceptionally useful when you want to make the function argument optional so if a value is not provided when the function is called, then the default value is used instead. Here's a simple code example:\n\n function greet($name = \"guest\") {\n echo \"Hello, $name!\";\n }\n \n greet(); // Outputs: Hello, guest!\n greet(\"John\"); // Outputs: Hello, John!\n \n\nIn this example, the `greet` function has a default value of \"guest\" for the `$name` parameter. So, if no argument is given while calling `greet`, it defaults to greet a \"guest\". If an argument is provided, like `John`, it overrides the default value. Follow this [link](https://www.php.net/manual/en/functions.arguments.php#functions.arguments.default) for the PHP documentation on function arguments.", - "links": [] + "description": "In PHP, you can assign default values to your function parameters. These are called default or optional parameters. This is exceptionally useful when you want to make the function argument optional so if a value is not provided when the function is called, then the default value is used instead. Here's a simple code example:\n\n function greet($name = \"guest\") {\n echo \"Hello, $name!\";\n }\n \n greet(); // Outputs: Hello, guest!\n greet(\"John\"); // Outputs: Hello, John!\n \n\nIn this example, the `greet` function has a default value of \"guest\" for the `$name` parameter. So, if no argument is given while calling `greet`, it defaults to greet a \"guest\". If an argument is provided, like `John`, it overrides the default value.", + "links": [ + { + "title": "Default Parameters", + "url": "https://www.php.net/manual/en/functions.arguments.php#functions.arguments.default", + "type": "article" + } + ] }, "RkNjYva8o_jXp9suz5YdG": { "title": "Named Arguments", - "description": "Named arguments in PHP, introduced with PHP 8.0, allow you to specify the values of required parameters by their names, instead of their position in the function call, thus making your code more readable, reducing mistakes, and allowing for unimportant arguments to be skipped. Here's an array\\_fill() function using named arguments:\n\n 0) {\n countDown($count - 1);\n }\n }\n countDown(5);\n \n\nIn this example, the function `countDown` calls itself until the count hits zero, displaying numbers from 5 to 0. To learn more about recursive functions, the PHP documentation is a helpful resource. Here's a direct link to it: [PHP Documentation](https://www.php.net/manual/en/language.functions.php).", - "links": [] + "description": "Recursion, as it applies to PHP, refers to a function that calls itself to solve a problem. A recursive function distinguishes itself by solving small parts of the problem until it resolves the main issue. Think of it as breaking down a task into smaller tasks that are easier to solve. However, careful design is needed to ensure the recursive function has a clear stopping point, or else it can result in an infinite loop. Here's a quick example of a simple recursive function in PHP:\n\n function countDown($count) {\n echo $count;\n if($count > 0) {\n countDown($count - 1);\n }\n }\n countDown(5);\n \n\nIn this example, the function `countDown` calls itself until the count hits zero, displaying numbers from 5 to 0.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Functions - Recursion", + "url": "https://www.php.net/manual/en/language.functions.php", + "type": "article" + } + ] }, "rtmytETfyyLdcXUC0QyzL": { "title": "Variadic Functions", - "description": "Variadic functions in PHP are functions that can accept any number of arguments. This gives you greater flexibility, as it allows for an undetermined number of arguments. You can create a variadic function by adding '...' before the function argument. Any number of arguments you provide when calling the function are treated as an array, which can be processed using common array functions. A simple code example:\n\n function sum(...$numbers) {\n return array_sum($numbers);\n }\n echo sum(1, 2, 3, 4);\n \n\nThis prints \"10\". The function accepts any number of arguments and adds them together. You can refer to the PHP manual at [php.net](http://php.net) for more details on variadic functions. [https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list](https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list)", - "links": [] + "description": "Variadic functions in PHP are functions that can accept any number of arguments. This gives you greater flexibility, as it allows for an undetermined number of arguments. You can create a variadic function by adding '...' before the function argument. Any number of arguments you provide when calling the function are treated as an array, which can be processed using common array functions.\n\nA simple code example:\n\n function sum(...$numbers) {\n return array_sum($numbers);\n }\n echo sum(1, 2, 3, 4);\n \n\nThis prints \"10\". The function accepts any number of arguments and adds them together.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Variadic Functions", + "url": "https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list", + "type": "article" + } + ] }, "Kaaqu-mN7xvHN6CbIn616": { "title": "require", - "description": "The 'require' statement is a built-in feature of PHP used to include and evaluate a specific file while executing the code. This is a crucial part of file handling in PHP because it enables the sharing of functions, classes, or elements across multiple scripts, promoting code reusability and neatness. Keep in mind, if the required file is missing, PHP will produce a fatal error and stop the code execution. The basic syntax is `require 'filename';`. For more insights into 'require', visit the PHP documentation [here](https://www.php.net/manual/en/function.require.php).", - "links": [] + "description": "The 'require' statement is a built-in feature of PHP used to include and evaluate a specific file while executing the code. This is a crucial part of file handling in PHP because it enables the sharing of functions, classes, or elements across multiple scripts, promoting code reusability and neatness. Keep in mind, if the required file is missing, PHP will produce a fatal error and stop the code execution. The basic syntax is `require 'filename';`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "require", + "url": "https://www.php.net/manual/en/function.require.php", + "type": "article" + } + ] }, "-CyJbsg2ho3RvfzKnJj5C": { "title": "require_once", - "description": "PHP uses the 'require\\_once' statement as an efficient way to include a PHP file into another one. There's an interesting quirk to this function: PHP checks if the file was previously included, and if so, it doesn't include the file again. This helps avoid problems with redundant function declarations, variable value reassignments, or coding loops. However, do remember that 'require\\_once' is distinct from 'include\\_once'. The key difference lies in error handling: if the file specified in 'require\\_once' cannot be found, PHP will emit a fatal error and halt script execution. Whereas, 'include\\_once', will only generate a warning.\n\nHere's how you can utilize 'require\\_once':\n\n \n \n\nThis code fetches all the functions and codes from 'somefile.php' and includes them in the current file. You can check more about this statement on the official PHP documentation: [require\\_once](https://www.php.net/manual/en/function.require-once.php)", - "links": [] + "description": "PHP uses the 'require\\_once' statement as an efficient way to include a PHP file into another one. There's an interesting quirk to this function: PHP checks if the file was previously included, and if so, it doesn't include the file again. This helps avoid problems with redundant function declarations, variable value reassignments, or coding loops. However, do remember that 'require\\_once' is distinct from 'include\\_once'. The key difference lies in error handling: if the file specified in 'require\\_once' cannot be found, PHP will emit a fatal error and halt script execution. Whereas, 'include\\_once', will only generate a warning.\n\nHere's how you can utilize 'require\\_once':\n\n \n \n\nThis code fetches all the functions and codes from 'somefile.php' and includes them in the current file.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "require_once", + "url": "https://www.php.net/manual/en/function.require-once.php", + "type": "article" + } + ] }, "hKfv7V6bl2LXssq9Ffi7C": { "title": "include", - "description": "The 'include' statement in PHP is a useful method for inserting code written in one file into another. It's mainly used when the same code needs to be used in multiple files, avoiding redundancy and making code maintenance easier. If it cannot find the file, PHP will emit a warning but continue to execute the rest of the script. Here's a simple example:\n\n \n \n\nIn this code snippet, 'filename.php' is the file containing the code that you want to insert. Just replace 'filename.php' with the actual file path you want to include. For the full details, check out the PHP documentation for 'include' [here](https://www.php.net/manual/en/function.include.php).", - "links": [] + "description": "The 'include' statement in PHP is a useful method for inserting code written in one file into another. It's mainly used when the same code needs to be used in multiple files, avoiding redundancy and making code maintenance easier. If it cannot find the file, PHP will emit a warning but continue to execute the rest of the script. Here's a simple example:\n\n \n \n\nIn this code snippet, 'filename.php' is the file containing the code that you want to insert. Just replace 'filename.php' with the actual file path you want to include.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "include", + "url": "https://www.php.net/manual/en/function.include.php", + "type": "article" + } + ] }, "SwtLDgyPmDry20qS4FBfH": { "title": "include_once", - "description": "The `include_once` statement is a part of PHP's file-handling toolkit, allowing developers to include a PHP file within another PHP file, but only for a one-time execution. This way, you can ensure that functions or objects defined in the included file are not duplicated leading to errors. It helps keep your code DRY (Don't Repeat Yourself) and clean. Here is a small example:\n\n include_once 'database.php';\n \n $db = new Database();\n \n\nIn this simple code snippet, we include the `database.php` file once, giving us access to the `Database` class. You can find reference in the PHP Documentation [here](https://www.php.net/manual/en/function.include-once.php).", - "links": [] + "description": "The `include_once` statement is a part of PHP's file-handling toolkit, allowing developers to include a PHP file within another PHP file, but only for a one-time execution. This way, you can ensure that functions or objects defined in the included file are not duplicated leading to errors. It helps keep your code DRY (Don't Repeat Yourself) and clean. Here is a small example:\n\n include_once 'database.php';\n \n $db = new Database();\n \n\nIn this simple code snippet, we include the `database.php` file once, giving us access to the `Database` class.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "include_once", + "url": "https://www.php.net/manual/en/function.include-once.php", + "type": "article" + } + ] }, "two4UycJaCfSp6jQqtTAb": { "title": "Writing Files", - "description": "Writing files plays a crucial part in PHP, allowing you to store data and modify it later. This process involves opening the file, writing the desired data, and then closing it. Writing can be done using different functions, but 'fwrite' is the most commonly used one. It requires two arguments the file pointer and the string of data to be written. Here's a brief snippet of code for instance:\n\n $file = 'data.txt';\n $current = file_get_contents($file);\n $current .= \"New Data\\n\";\n file_put_contents($file, $current);\n \n\nIn this code, file\\_get\\_contents() is used to get the current data, then new data is appended, and file\\_put\\_contents() is used to write back to the file. Do revisit the official PHP documentation to understand the nuances of file writing in PHP - [Writing to Files](https://www.php.net/manual/en/function.fwrite.php).", - "links": [] + "description": "Writing files plays a crucial part in PHP, allowing you to store data and modify it later. This process involves opening the file, writing the desired data, and then closing it. Writing can be done using different functions, but `fwrite()` is the most commonly used one. It requires two arguments the file pointer and the string of data to be written. Here's a brief snippet of code for instance:\n\n $file = 'data.txt';\n $current = file_get_contents($file);\n $current .= \"New Data\\n\";\n file_put_contents($file, $current);\n \n\nIn this code, `file_get_contents()` is used to get the current data, then new data is appended, and `file_put_contents()` is used to write back to the file.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Writing Files", + "url": "https://www.php.net/manual/en/function.fwrite.php", + "type": "article" + } + ] }, "S9wTlkbv9-R6dohhZ47hs": { "title": "Reading Files", - "description": "Reading files is a common task in PHP and it provides a range of functions for this purpose. You can use the `fopen()` function with the 'r' mode to open a file for reading. The `fgets()` function lets you read a file line by line, while `fread()` reads a specified number of bytes. For reading the entire file in one go, use `file_get_contents()`. Remember to always close the file after you're done with `fclose()`.\n\nHere's a small example using `fgets()`:\n\n $file = fopen(\"example.txt\", \"r\"); \n if ($file) {\n while (($line = fgets($file)) !== false) {\n echo $line;\n }\n fclose($file);\n } else {\n echo 'Error opening file';\n }\n \n\nCheck the [official PHP documentation](https://www.php.net/manual/en/book.filesystem.php) for more information on file system functions.", - "links": [] + "description": "Reading files is a common task in PHP and it provides a range of functions for this purpose. You can use the `fopen()` function with the 'r' mode to open a file for reading. The `fgets()` function lets you read a file line by line, while `fread()` reads a specified number of bytes. For reading the entire file in one go, use `file_get_contents()`. Remember to always close the file after you're done with `fclose()`.\n\nHere's a small example using `fgets()`:\n\n $file = fopen(\"example.txt\", \"r\"); \n if ($file) {\n while (($line = fgets($file)) !== false) {\n echo $line;\n }\n fclose($file);\n } else {\n echo 'Error opening file';\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Filesystem Operations", + "url": "https://www.php.net/manual/en/book.filesystem.php", + "type": "article" + } + ] }, "tgIyG6vHWpe9sz6lHmj5a": { "title": "File Permissions", - "description": "File permissions in PHP control who can read, write, and execute a file. They're crucial for the security and proper functioning of your PHP applications. When working with files, you can use functions like `chmod()`, `is_readable()`, and `is_writable()` to manage permissions. Typically, you would use `chmod()` to change the permissions of a file. The first parameter is the name of the file and the second parameter is the mode. For instance, `chmod($file, 0755)` would assign owner permissions to read, write, and execute, while everyone else would only have read and execute permissions. To know if a file is readable or writable, use `is_readable()` or `is_writable()` respectively. Each returns a Boolean value. To learn more, check out PHP's official [documentation on filesystem functions.](https://www.php.net/manual/en/ref.filesystem.php)", - "links": [] + "description": "File permissions in PHP control who can read, write, and execute a file. They're crucial for the security and proper functioning of your PHP applications. When working with files, you can use functions like `chmod()`, `is_readable()`, and `is_writable()` to manage permissions. Typically, you would use `chmod()` to change the permissions of a file. The first parameter is the name of the file and the second parameter is the mode. For instance, `chmod($file, 0755)` would assign owner permissions to read, write, and execute, while everyone else would only have read and execute permissions. To know if a file is readable or writable, use `is_readable()` or `is_writable()` respectively.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Filesystem Functions", + "url": "https://www.php.net/manual/en/ref.filesystem.php", + "type": "article" + } + ] }, "DB2cxZE58WCCavW2PNwmf": { "title": "JSON Processing", - "description": "JSON Processing in PHP refers to the handling, reading, and manipulation of JSON formatted data. JSON, or JavaScript Object Notation, is a versatile data format used worldwide due to its easy readability and robustness. PHP natively supports JSON and includes built-in functions like `json_encode()` and `json_decode()`. The `json_encode()` function returns a JSON representation of a value, particularly useful when you need to pass arrays or objects to a script. On the other hand, `json_decode()` is used to extract data from a JSON file or a JSON-encoded string, converting it into a PHP variable. Here's a quick example:\n\n // Create an array\n $data = array('a' => 1, 'b' => 2, 'c' => 3);\n \n // Encode the array into a JSON string\n $json = json_encode($data);\n echo $json;\n \n // Output: {\"a\":1,\"b\":2,\"c\":3}\n \n // Decode the JSON string back into an array\n $decoded = json_decode($json, true);\n print_r($decoded);\n \n // Output: Array ( [a] => 1 [b] => 2 [c] => 3 )\n \n\nTo master JSON processing in PHP, refer to the official documentation: [PHP JSON Manual](https://www.php.net/manual/en/book.json.php)", - "links": [] + "description": "JSON Processing in PHP refers to the handling, reading, and manipulation of JSON formatted data. JSON, or JavaScript Object Notation, is a versatile data format used worldwide due to its easy readability and robustness. PHP natively supports JSON and includes built-in functions like `json_encode()` and `json_decode()`. The `json_encode()` function returns a JSON representation of a value, particularly useful when you need to pass arrays or objects to a script. On the other hand, `json_decode()` is used to extract data from a JSON file or a JSON-encoded string, converting it into a PHP variable. Here's a quick example:\n\n // Create an array\n $data = array('a' => 1, 'b' => 2, 'c' => 3);\n \n // Encode the array into a JSON string\n $json = json_encode($data);\n echo $json;\n \n // Output: {\"a\":1,\"b\":2,\"c\":3}\n \n // Decode the JSON string back into an array\n $decoded = json_decode($json, true);\n print_r($decoded);\n \n // Output: Array ( [a] => 1 [b] => 2 [c] => 3 )\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "JSON Manual", + "url": "https://www.php.net/manual/en/book.json.php", + "type": "article" + } + ] }, "MRDjEjbkMpk7shcWAoPOF": { "title": "CSV Processing", - "description": "CSV processing refers to handling CSV (Comma Separated Values) files in PHP, an operation significantly useful for managing tabular data. PHP provides a few key functions to handle CSV files effectively. For example, `fgetcsv()` allows you to read CSV file line by line, `fputcsv()` lets you write line by line into a CSV file, and `str_getcsv()` allows you to parse a CSV string into an array. A quick example of reading a CSV file:\n\n if (($handle = fopen(\"sample.csv\", \"r\")) !== FALSE) {\n while (($data = fgetcsv($handle, 1000, \",\")) !== FALSE) {\n print_r($data);\n }\n fclose($handle);\n }\n \n\nIn this snippet, PHP reads through each line of the `sample.csv` file, converting each into an array with `fgetcsv()`. You can study more about CSV processing in PHP via the official [PHP documentation](https://php.net/manual/en/ref.fileinfo.php).", - "links": [] - }, - "ggkWo0DRSSDDkHpbiyUyf": { - "title": "XML Processing", - "description": "XML processing in PHP allows manipulation and interpretation of XML documents. PHP's XML Parser extension helps to parse XML data from strings and files, providing event-driven processing capabilities. This is especially useful during large XML parsing. To process XML in PHP, you first create an XML parser, set functionality through handler functions for the start and end of elements, character data, etc., and then parse the XML data. The `xml_parser_create()`, `xml_set_element_handler()`, `xml_parse()`, and `xml_parser_free()` functions come into play here. Here's a brief snippet showing XML parsing in PHP:\n\n $parser = xml_parser_create();\n xml_set_element_handler($parser, \"startElement\", \"endElement\");\n xml_parse($parser, $xml_data);\n xml_parser_free($parser);\n \n\nLook into PHP's official documentation on XML Parser for more details: [https://www.php.net/manual/en/book.xml.php](https://www.php.net/manual/en/book.xml.php).", - "links": [] + "description": "CSV processing refers to handling CSV (Comma Separated Values) files in PHP, an operation significantly useful for managing tabular data. PHP provides a few key functions to handle CSV files effectively. For example, `fgetcsv()` allows you to read CSV file line by line, `fputcsv()` lets you write line by line into a CSV file, and `str_getcsv()` allows you to parse a CSV string into an array. A quick example of reading a CSV file:\n\n if (($handle = fopen(\"sample.csv\", \"r\")) !== FALSE) {\n while (($data = fgetcsv($handle, 1000, \",\")) !== FALSE) {\n print_r($data);\n }\n fclose($handle);\n }\n \n\nIn this snippet, PHP reads through each line of the `sample.csv` file, converting each into an array with `fgetcsv()`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "CSV Processing", + "url": "https://php.net/manual/en/ref.fileinfo.php", + "type": "article" + } + ] + }, + "ggkWo0DRSSDDkHpbiyUyf": { + "title": "XML Processing", + "description": "XML processing in PHP allows manipulation and interpretation of XML documents. PHP's XML Parser extension helps to parse XML data from strings and files, providing event-driven processing capabilities. This is especially useful during large XML parsing. To process XML in PHP, you first create an XML parser, set functionality through handler functions for the start and end of elements, character data, etc., and then parse the XML data. The `xml_parser_create()`, `xml_set_element_handler()`, `xml_parse()`, and `xml_parser_free()` functions come into play here. Here's a brief snippet showing XML parsing in PHP:\n\n $parser = xml_parser_create();\n xml_set_element_handler($parser, \"startElement\", \"endElement\");\n xml_parse($parser, $xml_data);\n xml_parser_free($parser);\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "XML Processing", + "url": "https://www.php.net/manual/en/book.xml.php", + "type": "article" + } + ] }, "tn_iIfaJZVtPK6vFds7FH": { "title": "HTTP Methods", - "description": "PHP allows for handling HTTP methods, which are a way of defining the action to be performed on the resource identified by a given URL. In PHP, the $\\_SERVER superglobal array can be used to identify the HTTP method of a specific request, typically a GET, POST, PUT, DELETE or HEAD. For example, to identify if a request is a POST request, you can use `if ($_SERVER['REQUEST_METHOD'] == 'POST') { // your code here }`. More advanced handling can be done by utilizing built-in PHP libraries or third-party packages. You may read more about it on the PHP documentation [here](https://www.php.net/manual/en/reserved.variables.server.php).", - "links": [] + "description": "PHP allows for handling HTTP methods, which are a way of defining the action to be performed on the resource identified by a given URL. In PHP, the $\\_SERVER superglobal array can be used to identify the HTTP method of a specific request, typically a GET, POST, PUT, DELETE or HEAD. For example, to identify if a request is a POST request, you can use `if ($_SERVER['REQUEST_METHOD'] == 'POST') { // your code here }`. More advanced handling can be done by utilizing built-in PHP libraries or third-party packages.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "HTTP Methods", + "url": "https://www.php.net/manual/en/reserved.variables.server.php", + "type": "article" + } + ] }, "GFYGFVfxkOoPI5mI4zSt1": { "title": "$_GET", - "description": "$\\_GET is a pre-defined array in PHP, that's used to collect form-data sent through HTTP GET method. It's useful whenever you need to process or interact with data that has been passed in via a URL's query string. For an example if you have a form with a GET method, you can get the values of the form elements through this global $\\_GET array. Here’s an example:\n\n
\n Name: \n \n
\n \n\nUsing $\\_GET, you can fetch the 'fname' value from the URL:\n\n echo \"Name is: \" . $_GET['fname'];\n \n\nVisit the following resources to learn more:", + "description": "$\\_GET is a pre-defined array in PHP, that's used to collect form-data sent through HTTP GET method. It's useful whenever you need to process or interact with data that has been passed in via a URL's query string. For an example if you have a form with a GET method, you can get the values of the form elements through this global $\\_GET array. Here’s an example:\n\n
\n Name: \n \n
\n \n\nUsing $\\_GET in `test.php`, you can fetch the 'fname' value from the URL:\n\n echo \"Name is: \" . $_GET['fname'];\n \n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation", + "title": "$_GET", "url": "https://www.php.net/manual/en/reserved.variables.get.php", "type": "article" } @@ -310,10 +591,10 @@ }, "qNG-a4iIO-puZsMwAMzYC": { "title": "$_POST", - "description": "`$_POST` is a superglobal variable in PHP that's used to collect form data submitted via HTTP POST method. Your PHP script can access this data through `$_POST`. Let's say you have a simple HTML form on your webpage. When the user submits this form, the entered data can be fetched using `$_POST`. Here's a brief example:\n\n \n \n\nIn this code, $\\_POST\\[\"name\"\\] fetches the value entered in the 'name' field of the form. Always be cautious when using `$_POST` as it may contain user input which is a common source of vulnerabilities. Always validate and sanitize data from `$_POST` before using it.\n\nVisit the following resources to learn more:", + "description": "`$_POST` is a superglobal variable in PHP that's used to collect form data submitted via HTTP POST method. Your PHP script can access this data through `$_POST`. Let's say you have a simple HTML form on your webpage. When the user submits this form, the entered data can be fetched using `$_POST`. Here's a brief example:\n\n \n \n\nIn this code, `$_POST[\"name\"]` fetches the value entered in the 'name' field of the form. Always be cautious when using `$_POST` as it may contain user input which is a common source of vulnerabilities. Always validate and sanitize data from `$_POST` before using it.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation", + "title": "$_POST", "url": "https://www.php.net/manual/en/reserved.variables.post.php", "type": "article" } @@ -324,7 +605,7 @@ "description": "$\\_REQUEST is a PHP superglobal variable that contains the contents of both $\\_GET, $\\_POST, and $\\_COOKIE. It is used to collect data sent via both the GET and POST methods, as well as cookies. $\\_REQUEST is useful if you do not care about the method used to send data, but its usage is generally discouraged as it could lead to security vulnerabilities. Here's a simple example:\n\n $name = $_REQUEST['name'];\n \n\nThis statement will store the value of the 'name' field sent through either a GET or POST method. Always remember to sanitize user input to avoid security problems.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation", + "title": "$_REQUEST", "url": "https://www.php.net/manual/en/reserved.variables.request.php", "type": "article" } @@ -335,7 +616,7 @@ "description": "The `$_SERVER` is a superglobal in PHP, holding information about headers, paths, and script locations. $\\_SERVER is an associative array containing server variables created by the web server. This can include specific environmental configurations, the server signature, your PHP script's paths and details, client data, and the active request/response sequence. Among its many uses, `$_SERVER['REMOTE_ADDR']` can help get the visitor's IP while `$_SERVER['HTTP_USER_AGENT']` offers information about their browser. Don't forget to sanitize the content before use to prevent security exploits.\n\nHere's an easy code sample that prints the client's IP:\n\n echo 'Your IP is: ' . $_SERVER['REMOTE_ADDR'];\n \n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation", + "title": "$_SERVER", "url": "https://www.php.net/reserved.variables.server", "type": "article" } @@ -343,60 +624,120 @@ }, "sYI7f1PYP7G30_Uj2mZRv": { "title": "Form Processing", - "description": "Form processing is a common web function and in PHP, it's pretty straightforward. It typically involves accepting data from a user through a web form and then using PHP to handle, process and possibly store that data. PHP provides superglobal arrays (`$_GET`, `$_POST`, and `$_REQUEST`) which help to collect form data. Let's talk about a simple example of a form that accepts a name from a user and then displays it.\n\nMake sure to handle form data securely, for instance by using the `htmlspecialchars()` function to neutralize any harmful characters. More information about form processing in PHP can be found in the PHP [documentation](https://www.php.net/manual/en/tutorial.forms.php).", - "links": [] + "description": "Form processing is a common web function and in PHP, it's pretty straightforward. It typically involves accepting data from a user through a web form and then using PHP to handle, process and possibly store that data. PHP provides superglobal arrays (`$_GET`, `$_POST`, and `$_REQUEST`) which help to collect form data. Let's talk about a simple example of a form that accepts a name from a user and then displays it.\n\nMake sure to handle form data securely, for instance by using the `htmlspecialchars()` function to neutralize any harmful characters.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "HTML Form Processing", + "url": "https://www.php.net/manual/en/tutorial.forms.php", + "type": "article" + } + ] }, "HNo8QO4aPbvgePiA4l6tq": { "title": "File Uploads", - "description": "Uploading files in PHP is a commonly used functionality for many applications. This is typically done using the `$_FILES` superglobal array that allows you to manage uploaded files in your PHP script. It contains details like `name`, `type`, `size` etc of the file. An index is also present for each file in the case of multiple uploads. The `move_uploaded_file()` function is then used to move the uploaded file to the desired directory.\n\nDon't forget to pay attention to security considerations when accepting file uploads. For comprehensive details, you can refer to the PHP documentation [here](https://www.php.net/manual/en/features.file-upload.php).", - "links": [] + "description": "Uploading files in PHP is a commonly used functionality for many applications. This is typically done using the `$_FILES` superglobal array that allows you to manage uploaded files in your PHP script. It contains details like `name`, `type`, `size` etc of the file. An index is also present for each file in the case of multiple uploads. The `move_uploaded_file()` function is then used to move the uploaded file to the desired directory.\n\nDon't forget to pay attention to security considerations when accepting file uploads.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "File Uploads", + "url": "https://www.php.net/manual/en/features.file-upload.php", + "type": "article" + } + ] }, "CGehmZjcgTWC7fQAvxmNW": { "title": "State Management", - "description": "State management in PHP involves keeping track of user activity in the application, as HTTP protocol doesn't store earlier interactions. Typically, these data involve user details such as login info, form input data, etc. A prevalent method of state management in PHP is through sessions and cookies. Sessions work by keeping the state data on the server side and a session identifier on the client side. Note, session's info remains active until the user's session expires. On the other hand, cookies store data on the client side, having an expiry date or until the user deletes them. Here's how to set a cookie in PHP: `setcookie(\"test_cookie\", \"test\", time() + 3600, '/');`. To access sessions, use the `_SESSION` superglobal array: `$_SESSION[\"favcolor\"] = \"green\";`. To learn more, refer to the PHP documentation at [https://php.net/manual/en/session.examples.basic.php](https://php.net/manual/en/session.examples.basic.php) and [https://php.net/manual/en/function.setcookie.php](https://php.net/manual/en/function.setcookie.php).", - "links": [] + "description": "State management in PHP involves keeping track of user activity in the application, as HTTP protocol doesn't store earlier interactions. Typically, these data involve user details such as login info, form input data, etc. A prevalent method of state management in PHP is through sessions and cookies. Sessions work by keeping the state data on the server side and a session identifier on the client side. Note, session's info remains active until the user's session expires. On the other hand, cookies store data on the client side, having an expiry date or until the user deletes them. Here's how to set a cookie in PHP: `setcookie(\"test_cookie\", \"test\", time() + 3600, '/');`. To access sessions, use the `_SESSION` superglobal array: `$_SESSION[\"favcolor\"] = \"green\";`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "setcookie", + "url": "https://php.net/manual/en/function.setcookie.php", + "type": "article" + } + ] }, "so03-fK7E2WvTm6XsPq4i": { "title": "Cookies", - "description": "Cookies are a crucial part of state management in PHP. They enable storage of data on the user's browser, which can then be sent back to the server with each subsequent request. This permits persistent data between different pages or visits. To set a cookie in PHP, you can use the `setcookie()` function. For example, `setcookie(\"user\", \"John Doe\", time() + (86400 * 30), \"/\");` will set a cookie named \"user\" with the value \"John Doe\", that will expire after 30 days. The cookie will be available across the entire website due to the path parameter set as `/`. To retrieve the value of the cookie, you can use the global `$_COOKIE` array: `echo $_COOKIE[\"user\"];`. For more detailed information, you can visit [PHP's official documentation on cookies](https://www.php.net/manual/en/features.cookies.php).", - "links": [] + "description": "Cookies are a crucial part of state management in PHP. They enable storage of data on the user's browser, which can then be sent back to the server with each subsequent request. This permits persistent data between different pages or visits. To set a cookie in PHP, you can use the `setcookie()` function. For example, `setcookie(\"user\", \"John Doe\", time() + (86400 * 30), \"/\");` will set a cookie named \"user\" with the value \"John Doe\", that will expire after 30 days. The cookie will be available across the entire website due to the path parameter set as `/`. To retrieve the value of the cookie, you can use the global `$_COOKIE` array: `echo $_COOKIE[\"user\"];`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Cookies", + "url": "https://www.php.net/manual/en/features.cookies.php", + "type": "article" + } + ] }, "qobzzgzArNHLLn9Oiqc6G": { "title": "Sessions", - "description": "Sessions provide a way to preserve certain data across subsequent accesses. Unlike a cookie, the information is not stored on the user's computer but on the server. This is particularly useful when you want to store information related to a specific user's session on your platform, like user login status or user preferences. When a session is started in PHP, a unique session ID is generated for the user. This ID is then passed and tracked through a cookie in the user's browser. To start a session, you would use the PHP function session\\_start(). To save a value in a session, you'd use the $\\_SESSION superglobal array. For example, `$_SESSION['username'] = 'John';` assigns 'John' to the session variable 'username'. Official PHP documentation pertaining to sessions can be found at [PHP.net](https://www.php.net/manual/en/book.session.php).", - "links": [] + "description": "Sessions provide a way to preserve certain data across subsequent accesses. Unlike a cookie, the information is not stored on the user's computer but on the server. This is particularly useful when you want to store information related to a specific user's session on your platform, like user login status or user preferences. When a session is started in PHP, a unique session ID is generated for the user. This ID is then passed and tracked through a cookie in the user's browser. To start a session, you would use the PHP function session\\_start(). To save a value in a session, you'd use the $\\_SESSION superglobal array. For example, `$_SESSION['username'] = 'John';` assigns 'John' to the session variable 'username'.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Sessions", + "url": "https://www.php.net/manual/en/book.session.php", + "type": "article" + } + ] }, "93oEIZttb85S23C1fLraP": { "title": "Input Validation", - "description": "Input validation is a vital aspect of PHP security. It involves checking whether the user-provided data is in the expected format or not before it's processed further. This helps prevent potential security risks such as SQL injections, cross-site scripting (XSS) etc. Let's take an example of a simple form input validation:\n\n if (filter_var($email, FILTER_VALIDATE_EMAIL)) {\n echo(\"Email is valid\");\n } else {\n echo(\"Email is not valid\");\n }\n \n\nThis code uses PHP's built-in `filter_var()` function to ensure the data is a valid email address. If not, the form will not be submitted until valid data is entered. For more on PHP's built-in filters, visit [PHP Input Validation Documentation](https://www.php.net/manual/en/book.filter.php).", - "links": [] + "description": "Input validation is a vital aspect of PHP security. It involves checking whether the user-provided data is in the expected format or not before it's processed further. This helps prevent potential security risks such as SQL injections, cross-site scripting (XSS) etc. Let's take an example of a simple form input validation:\n\n if (filter_var($email, FILTER_VALIDATE_EMAIL)) {\n echo(\"Email is valid\");\n } else {\n echo(\"Email is not valid\");\n }\n \n\nThis code uses PHP's built-in `filter_var()` function to ensure the data is a valid email address. If not, the form will not be submitted until valid data is entered.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Input Validation", + "url": "https://www.php.net/manual/en/book.filter.php", + "type": "article" + } + ] }, "DxqQrToZSayWplKdCkTgT": { "title": "XSS Prevention", - "description": "Cross Site Scripting, often known as XSS, is a glaring risk in web security, and PHP also must address it. It occurs when someone is able to insert dangerous code into your site, which can then be executed by users. To prevent XSS in PHP, developers should deploy htmlspecialchars() function to escape potentially harmful characters. This function converts special characters to their HTML entities, reducing risk. For instance, '<' becomes '<'.\n\nSample PHP code to implement this:\n\n $secure_text = htmlspecialchars($raw_text, ENT_QUOTES, 'UTF-8');\n \n\nIn this code, $raw\\_text contains user input that might be risky. By using htmlspecialchars(), $secure\\_text will now hold a sanitized version of the user input.\n\nFind more on this topic in the PHP documentation. [https://www.php.net/manual/en/function.htmlspecialchars.php](https://www.php.net/manual/en/function.htmlspecialchars.php)", - "links": [] + "description": "Cross Site Scripting, often known as XSS, is a glaring risk in web security, and PHP also must address it. It occurs when someone is able to insert dangerous code into your site, which can then be executed by users. To prevent XSS in PHP, developers should deploy `htmlspecialchars()` function to escape potentially harmful characters. This function converts special characters to their HTML entities, reducing risk. For instance, '<' becomes '<'.\n\nSample PHP code to implement this:\n\n $secure_text = htmlspecialchars($raw_text, ENT_QUOTES, 'UTF-8');\n \n\nIn this code, `$raw_text` contains user input that might be risky. By using `htmlspecialchars()`, `$secure_text` will now hold a sanitized version of the user input.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Special Charsets", + "url": "https://www.php.net/manual/en/function.htmlspecialchars.php", + "type": "article" + } + ] }, "801vB_JMas4ucriUmfrLg": { "title": "SQL Injection", - "description": "SQL Injection is a crucial security topic in PHP. It is a code injection technique where an attacker may slip shady SQL code within a query. This attack can lead to data manipulation or loss and even compromise your database. To prevent this, PHP encourages the use of prepared statements with either the MySQLi or PDO extension. An example of a vulnerable code snippet would be: `$unsafe_variable = $_POST['user_input']; mysqli_query($link, \"INSERT INTO` table `(`column`) VALUES ('$unsafe_variable')\");`. Stop falling prey to injections by utilizing prepared statement like so: `$stmt = $pdo->prepare('INSERT INTO` table `(`column`) VALUES (?)'); $stmt->execute([$safe_variable]);`. For more secure PHP coding style, check out the PHP documentation's section on SQL injection: [https://www.php.net/manual/en/security.database.sql-injection.php](https://www.php.net/manual/en/security.database.sql-injection.php).", - "links": [] + "description": "SQL Injection is a crucial security topic in PHP. It is a code injection technique where an attacker may slip shady SQL code within a query. This attack can lead to data manipulation or loss and even compromise your database. To prevent this, PHP encourages the use of prepared statements with either the MySQLi or PDO extension. An example of a vulnerable code snippet would be: `$unsafe_variable = $_POST['user_input']; mysqli_query($link, \"INSERT INTO` table `(`column`) VALUES ('$unsafe_variable')\");`. Stop falling prey to injections by utilizing prepared statement like so: `$stmt = $pdo->prepare('INSERT INTO` table `(`column`) VALUES (?)'); $stmt->execute([$safe_variable]);`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "SQL Injection", + "url": "https://www.php.net/manual/en/security.database.sql-injection.php", + "type": "article" + } + ] }, "J9yIXZTtwbFzH2u4dI1ep": { "title": "CSRF Protection", - "description": "Cross-Site Request Forgery (CSRF) Protection in PHP is a method where a website can defend itself against unwanted actions performed on behalf of the users without their consent. It's a critical aspect of security as it safeguards users against potential harmful activities. Here's an example: if users are logged into a website and get tricked into clicking a deceitful link, CSRF attacks could be triggered. To protect your PHP applications from such attacks, you can generate a unique token for every session and include it as a hidden field for all form submissions. Afterwards, you need to verify this token on the server side before performing any action.\n\n \n \n\nEdge cases like AJAX requests and applications running across multiple domains require extra considerations. More about CSRF can be found in the [PHP Security Guide](https://php.net/manual/en/security.csrf.php).", - "links": [] + "description": "Cross-Site Request Forgery (CSRF) Protection in PHP is a method where a website can defend itself against unwanted actions performed on behalf of the users without their consent. It's a critical aspect of security as it safeguards users against potential harmful activities. Here's an example: if users are logged into a website and get tricked into clicking a deceitful link, CSRF attacks could be triggered. To protect your PHP applications from such attacks, you can generate a unique token for every session and include it as a hidden field for all form submissions. Afterwards, you need to verify this token on the server side before performing any action.\n\n \n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Security Guide", + "url": "https://php.net/manual/en/security.csrf.php", + "type": "article" + } + ] }, "JbWFfJiCRrXDhnuIx_lqx": { "title": "Password Hashing", - "description": "Password Hashing in PHP is a crucial aspect of security, which involves converting a plaintext password into a unique hash that cannot be easily reversed. PHP's built-in functions - `password_hash()` and `password_verify()` - are usually employed for this purpose. `password_hash()` creates a new password hash using a strong one-way hashing algorithm, while `password_verify()` checks if the given hash matches the password provided. This makes it extremely difficult for malicious actors to get the original password, even if they have the hash.\n\n // Hashing the password\n $hash = password_hash('mypassword', PASSWORD_DEFAULT);\n \n // Verifying the password\n if (password_verify('mypassword', $hash)) {\n echo 'Password is valid!';\n } else {\n echo 'Invalid password.';\n }\n \n\nUse PHP's built-in functions for password hashing to enhance your application's security. For more information, you can refer to [PHP documentation here](https://www.php.net/manual/en/function.password-hash.php).", - "links": [] + "description": "Password Hashing in PHP is a crucial aspect of security, which involves converting a plaintext password into a unique hash that cannot be easily reversed. PHP's built-in functions - `password_hash()` and `password_verify()` - are usually employed for this purpose. `password_hash()` creates a new password hash using a strong one-way hashing algorithm, while `password_verify()` checks if the given hash matches the password provided. This makes it extremely difficult for malicious actors to get the original password, even if they have the hash.\n\n // Hashing the password\n $hash = password_hash('mypassword', PASSWORD_DEFAULT);\n \n // Verifying the password\n if (password_verify('mypassword', $hash)) {\n echo 'Password is valid!';\n } else {\n echo 'Invalid password.';\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Password Hashing", + "url": "https://www.php.net/manual/en/function.password-hash.php", + "type": "article" + } + ] }, "HJJzKYXdK4BWITLP4APLZ": { "title": "Auth Mechanisms", "description": "When you are developing PHP application, security should always be a top priority and authentication mechanism forms it's very core. It ensures proper establishing of user identities before they can access your system's resources. PHP provides several methods to implement authentication like session-based, token-based, HTTP authentication, and more.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation - Auth Mechanisms", + "title": "Auth Mechanisms", "url": "https://www.php.net/manual/en/features.http-auth.php", "type": "article" } @@ -404,30 +745,54 @@ }, "tfC1tCrbvH5J43WUpG9Yb": { "title": "Sanitization Techniques", - "description": "Sanitization Techniques is a vital part of PHP security basics, which ensures that the user-provided data is safe to be used within your script. It can prevent harmful data from being inserted into the database or being used in other ways that could potentially be dangerous to your application. It includes functions which can strip off unwanted characters from the data. For instance, the `filter_var()` function in PHP can be applied to sanitize text.\n\n $dirty_data = \"

We love PHP!

\"; \n $clean_data = filter_var($dirty_data, FILTER_SANITIZE_STRING);\n echo $clean_data;\n \n\nThis will effectively remove any malicious scripts from the text. Take a look at the resource in the [PHP documentation](https://www.php.net/manual/en/function.filter-var.php) for more details.", - "links": [] + "description": "Sanitization Techniques is a vital part of PHP security basics, which ensures that the user-provided data is safe to be used within your script. It can prevent harmful data from being inserted into the database or being used in other ways that could potentially be dangerous to your application. It includes functions which can strip off unwanted characters from the data. For instance, the `filter_var()` function in PHP can be applied to sanitize text.\n\n $dirty_data = \"

We love PHP!

\"; \n $clean_data = filter_var($dirty_data, FILTER_SANITIZE_STRING);\n echo $clean_data;\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Sanitization Techniques", + "url": "https://www.php.net/manual/en/function.filter-var.php", + "type": "article" + } + ] }, "cJtPz1RMN1qDE4eRdv4N_": { "title": "PDO", - "description": "PDO (PHP Data Objects) is an interface in PHP that provides a lightweight, consistent way for working with databases in PHP. PDO allows you to use any database without changing your PHP code, making your code database-independent. Furthermore, it offers robust error handling and can utilize prepared statements to prevent SQL injection attacks. Here is how you could connect and fetch data from a MySQL database using PDO:\n\n try {\n $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');\n $stmt = $pdo->query('SELECT * FROM myTable');\n while ($row = $stmt->fetch()) {\n echo $row['name'] . \"\\n\";\n }\n } catch (PDOException $e) {\n echo \"Connection failed: \" . $e->getMessage();\n }\n \n\nYou can learn more about PDO at the official PHP documentation site: [PHP: PDO - Manual](https://www.php.net/manual/en/book.pdo.php).", - "links": [] + "description": "PDO (PHP Data Objects) is an interface in PHP that provides a lightweight, consistent way for working with databases in PHP. PDO allows you to use any database without changing your PHP code, making your code database-independent. Furthermore, it offers robust error handling and can utilize prepared statements to prevent SQL injection attacks. Here is how you could connect and fetch data from a MySQL database using PDO:\n\n try {\n $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');\n $stmt = $pdo->query('SELECT * FROM myTable');\n while ($row = $stmt->fetch()) {\n echo $row['name'] . \"\\n\";\n }\n } catch (PDOException $e) {\n echo \"Connection failed: \" . $e->getMessage();\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Data Objects", + "url": "https://www.php.net/manual/en/book.pdo.php", + "type": "article" + } + ] }, "YLuo0oZJzTCoiZoOSG57z": { "title": "MySQLi", - "description": "MySQLi is a PHP extension that allows PHP programs to connect with MySQL databases. This extension provides the capability to perform queries, retrieve data, and perform complex operations on MySQL databases using PHP. MySQLi comes with an object-oriented and procedural interface and supports prepared statements, multiple statements, and transactions. Here's a basic example of using MySQLi to connect to a MySQL database:\n\n $servername = \"localhost\";\n $username = \"username\";\n $password = \"password\";\n $dbname = \"myDB\";\n \n // Create connection\n $conn = new mysqli($servername, $username, $password, $dbname);\n \n // Check connection\n if ($conn->connect_error) {\n die(\"Connection failed: \" . $conn->connect_error);\n }\n echo \"Connected successfully\";\n \n\nYou can get more information about MySQLi from PHP documentation [here](https://www.php.net/manual/en/book.mysqli.php).", - "links": [] + "description": "MySQLi is a PHP extension that allows PHP programs to connect with MySQL databases. This extension provides the capability to perform queries, retrieve data, and perform complex operations on MySQL databases using PHP. MySQLi comes with an object-oriented and procedural interface and supports prepared statements, multiple statements, and transactions.\n\nHere's a basic example of using MySQLi to connect to a MySQL database:\n\n $servername = \"localhost\";\n $username = \"username\";\n $password = \"password\";\n $dbname = \"myDB\";\n \n // Create connection\n $conn = new mysqli($servername, $username, $password, $dbname);\n \n // Check connection\n if ($conn->connect_error) {\n die(\"Connection failed: \" . $conn->connect_error);\n }\n echo \"Connected successfully\";\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "MySQLi", + "url": "https://www.php.net/manual/en/book.mysqli.php", + "type": "article" + } + ] }, "SeqGIfcLuveZ2z5ZSXcOd": { "title": "Object-Relational Mapping (ORM)", - "description": "Object-Relational Mapping (ORM) is a popular technique used with PHP to convert data between incompatible type systems using an object-oriented programming language. Essentially, it saves PHP developers time by enabling them to work with databases using OOP standards and avoid writing long SQL queries. One commonly used ORM in PHP is Doctrine. For instance, to save data into a products table, you don't use SQL but OOP-style code:\n\n $product = new Product();\n $product->setName('New Product');\n $entityManager->persist($product);\n $entityManager->flush();\n \n\nYou can see a more detailed explanation about it at the PHP documentation on [Object Relational Mapping (ORM)](https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/getting-started.html).", - "links": [] + "description": "Object-Relational Mapping (ORM) is a popular technique used with PHP to convert data between incompatible type systems using an object-oriented programming language. Essentially, it saves PHP developers time by enabling them to work with databases using OOP standards and avoid writing long SQL queries. One commonly used ORM in PHP is Doctrine. For instance, to save data into a products table, you don't use SQL but OOP-style code:\n\n $product = new Product();\n $product->setName('New Product');\n $entityManager->persist($product);\n $entityManager->flush();\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Object Relational Mapping (ORM)", + "url": "https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/getting-started.html", + "type": "article" + } + ] }, "FY-F6n9j29hQrnFry3VGb": { "title": "Database Transactions", "description": "Database transactions in PHP refer to a unit of work performed within a database system, which is treated in a coordinated manner. This technique is vital when dealing with critical tasks like money transfer between accounts, where data consistency is crucial. If one part of the transaction fails, the entire transaction fails, ensuring that the database stays consistent even in an event of a failure.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation - PDO Transactions", + "title": "PDO Transactions", "url": "https://www.php.net/manual/en/pdo.transactions.php", "type": "article" } @@ -435,17 +800,34 @@ }, "txUyPR_tdC8iTJV3RtvBz": { "title": "Connection Pooling", - "description": "Connection pooling is a technique used in PHP to manage and maintain multiple open connections with a database. It reduces the time overhead of constantly opening and closing connections, and ensures efficient utilisation of resources. Connection pooling limits the number of connections opened with the database and instead reuses a pool of existing active connections, thereby significantly enhancing the performance of PHP applications. When a PHP script needs to communicate with the database, it borrows a connection from this pool, performs the operations, and then returns it back to the pool. Although PHP doesn't have native support for connection pooling, it can be achieved through third-party tools like 'pgBouncer' when using PostgreSQL or 'mysqlnd\\_ms' plugin with MySQL. Note, it's recommended to use connection pooling when you've a high-traffic PHP application.\n\nFor more information, visit PHP Database Extensions [here](https://www.php.net/manual/en/refs.database.php).", - "links": [] + "description": "Connection pooling is a technique used in PHP to manage and maintain multiple open connections with a database. It reduces the time overhead of constantly opening and closing connections, and ensures efficient utilisation of resources. Connection pooling limits the number of connections opened with the database and instead reuses a pool of existing active connections, thereby significantly enhancing the performance of PHP applications. When a PHP script needs to communicate with the database, it borrows a connection from this pool, performs the operations, and then returns it back to the pool. Although PHP doesn't have native support for connection pooling, it can be achieved through third-party tools like 'pgBouncer' when using PostgreSQL or 'mysqlnd\\_ms' plugin with MySQL. Note, it's recommended to use connection pooling when you've a high-traffic PHP application.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Connection Pooling", + "url": "https://www.php.net/manual/en/oci8.connection.php", + "type": "article" + }, + { + "title": "Database Extensions", + "url": "https://www.php.net/manual/en/refs.database.php", + "type": "article" + } + ] }, "M1nVsh_sCSFJRf6-7Ttsj": { "title": "Performance Optimization", - "description": "Performance Optimization linked with Advanced Database Techniques in PHP ensures your database-driven applications run efficiently. This involves techniques like indexing, using EXPLAIN SQL command, de-normalization, and caching query results. For instance, an effective technique is caching query results, which can significantly reduce the number of database calls. PHP offers functions to serialize and unserialize data, you can store your result set in a serialized form and when needed, retrieve it quickly, unserialize it and voila, you have your data ready with no database calls. Here's a simple example of caching MySQL query with PHP:\n\n $query = \"SELECT * FROM my_table\";\n $cache_file = '/tmp/cache/' . md5($query);\n \n if (file_exists($cache_file)) {\n $result_set = unserialize(file_get_contents($cache_file));\n } else {\n $result= mysql_query($query);\n $result_set= array();\n while ($row = mysql_fetch_array($result)) {\n $result_set[]= $row;\n }\n file_put_contents($cache_file, serialize($result_set));\n }\n \n\nFor more information, refer to the official [PHP documentation](https://www.php.net/manual/en/book.mysql.php).", - "links": [] + "description": "Performance Optimization linked with Advanced Database Techniques in PHP ensures your database-driven applications run efficiently. This involves techniques like indexing, using EXPLAIN SQL command, de-normalization, and caching query results. For instance, an effective technique is caching query results, which can significantly reduce the number of database calls. PHP offers functions to serialize and unserialize data, you can store your result set in a serialized form and when needed, retrieve it quickly, unserialize it and voila, you have your data ready with no database calls.\n\nHere's a simple example of caching MySQL query with PHP:\n\n $query = \"SELECT * FROM my_table\";\n $cache_file = '/tmp/cache/' . md5($query);\n \n if (file_exists($cache_file)) {\n $result_set = unserialize(file_get_contents($cache_file));\n } else {\n $result= mysql_query($query);\n $result_set= array();\n while ($row = mysql_fetch_array($result)) {\n $result_set[]= $row;\n }\n file_put_contents($cache_file, serialize($result_set));\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "MySQL Performance Optimization", + "url": "https://www.php.net/manual/en/book.mysql.php", + "type": "article" + } + ] }, "meplwvmHMtI3Sb_fyodzZ": { "title": "Database Migrations", - "description": "Database migrations help keep track of changes in your database schema, making it easier to move from one version of a database to another. Migrations allow us to evolve our database design iteratively and apply these updates across our development, staging, and production servers. This can save a lot of manual work. But more than that, migrations maintain consistency across all the environments, reducing the chances of unexpected behavior. There's no standard built-in migrations mechanism in PHP, but powerful and popular PHP frameworks like Laravel have robust solutions for migrations. Check out the [Laravel's migrations documentation](https://laravel.com/docs/migrations).", + "description": "Database migrations help keep track of changes in your database schema, making it easier to move from one version of a database to another. Migrations allow us to evolve our database design iteratively and apply these updates across our development, staging, and production servers. This can save a lot of manual work. But more than that, migrations maintain consistency across all the environments, reducing the chances of unexpected behavior. There's no standard built-in migrations mechanism in PHP, but powerful and popular PHP frameworks like Laravel have robust solutions for migrations.\n\nVisit the following resources to learn more:\n\n* [@article@Laravel Migrations](https://laravel.com/docs/migrations).", "links": [] }, "PIuplWreo7PFG3Mdn2t6W": { @@ -453,7 +835,7 @@ "description": "PHP supports object-oriented programming, offering a multi-paradigm way of coding through classes and objects. A class is like a blueprint for creating objects that encapsulate all faculties, properties and methods. An object, on the other hand, is an instance of a class where you can interact with the class's methods and change its properties. PHP lets you define a class using the keyword 'class', set properties and methods within it, and then create an object of that class using 'new'.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation - Classes", + "title": "Classes", "url": "https://www.php.net/manual/en/language.oop5.php", "type": "article" } @@ -461,20 +843,32 @@ }, "oNUt1oT8pYBVvH0S2P6cb": { "title": "Constructor / Destructor", - "description": "Constructor and Destructor methods are fundamental components of Object-Oriented Programming (OOP) in PHP. A constructor is a special type of method that automatically runs upon creating an object, often used to set property values or default behaviors. On the other hand, a destructor is a method that is automatically invoked when an object is due to be destroyed, perfect for cleanup activities. Here is a basic example:\n\n class TestClass {\n public $value;\n \n // Constructor Method\n public function __construct($val) {\n $this->value = $val;\n }\n \n // Destructor Method\n public function __destruct() {\n echo \"Object is being destroyed.\";\n }\n }\n \n $obj = new TestClass(\"Hello World\");\n echo $obj->value; \n // Displays: Hello World\n // And when the script ends, \"Object is being destroyed.\"\n \n\nVisit [PHP Constructors and Destructors](https://www.php.net/manual/en/language.oop5.decon.php) for a more detailed look at these vital concepts.", - "links": [] + "description": "Constructor and Destructor methods are fundamental components of Object-Oriented Programming (OOP) in PHP. A constructor is a special type of method that automatically runs upon creating an object, often used to set property values or default behaviors. On the other hand, a destructor is a method that is automatically invoked when an object is due to be destroyed, perfect for cleanup activities. Here is a basic example:\n\n class TestClass {\n public $value;\n \n // Constructor Method\n public function __construct($val) {\n $this->value = $val;\n }\n \n // Destructor Method\n public function __destruct() {\n echo \"Object is being destroyed.\";\n }\n }\n \n $obj = new TestClass(\"Hello World\");\n echo $obj->value; \n // Displays: Hello World\n // And when the script ends, \"Object is being destroyed.\"\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP Constructors and Destructors", + "url": "https://www.php.net/manual/en/language.oop5.decon.php", + "type": "article" + } + ] }, "MRAPXshy9RoYdReY6grf_": { "title": "Properties and Methods", - "description": "Properties and Methods are fundamental components of Object-Oriented Programming (OOP) in PHP. Properties are just like variables; they hold information that an object will need to use. Methods, on the other hand, are similar to functions; they perform an action on an object's properties. In PHP, properties are declared using visibility keywords (public, protected, or private) followed by a regular variable declaration, while methods are declared like functions but inside a class. Here is a simple example:\n\n class Car {\n public $color; // Property\n \n // Method\n public function setColor($color) {\n $this->color = $color;\n }\n }\n \n\nIn this example, `$color` is a property and `setColor()` is a method. Learn more through [PHP documentation](https://www.php.net/manual/en/language.oop5.properties.php).", - "links": [] + "description": "Properties and Methods are fundamental components of Object-Oriented Programming (OOP) in PHP. Properties are just like variables; they hold information that an object will need to use. Methods, on the other hand, are similar to functions; they perform an action on an object's properties. In PHP, properties are declared using visibility keywords (public, protected, or private) followed by a regular variable declaration, while methods are declared like functions but inside a class.\n\nHere is a simple example:\n\n class Car {\n public $color; // Property\n \n // Method\n public function setColor($color) {\n $this->color = $color;\n }\n }\n \n\nIn this example, `$color` is a property and `setColor()` is a method.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Properties and Methods", + "url": "https://www.php.net/manual/en/language.oop5.properties.php", + "type": "article" + } + ] }, "RD2RaBmA2XWkEa13PTCTX": { "title": "Access Specifiers", "description": "Access specifiers, also known as access modifiers, in PHP are keywords used in the class context which define the visibility and accessibility of properties, methods and constants. PHP supports three types of access specifiers: public, private, and protected. 'Public' specified properties or methods can be accessed from anywhere, 'private' ones can only be accessed within the class that defines them, while 'protected' ones can be accessed within the class itself and by inherited and parent classes. Here's an illustrative example:\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation", + "title": "Access Specifiers & Visibility", "url": "https://www.php.net/manual/en/language.oop5.visibility.php", "type": "article" } @@ -482,30 +876,54 @@ }, "qlkpwXfOc1p7j37hrzffI": { "title": "Static Methods and Properties", - "description": "Static methods and properties in PHP belong to the class rather than an instance of the class. This means they can be accessed without creating an object of the class. A static method is declared with the static keyword and can be invoked directly using the class name followed by the scope resolution operator. Similarly, a static property is also defined with the static keyword, but cannot be accessed directly, even from within the class methods - they must be accessed through static methods. Here's a simple example:\n\n class MyClass {\n static $myStaticProperty = \"Hello, world\";\n \n static function myStaticMethod() { \n return self::$myStaticProperty; \n }\n }\n \n echo MyClass::myStaticMethod(); \n \n\nIn this example, we're directly accessing `myStaticMethod` from `MyClass` without an instantiation. For more detail, check out the PHP documentation [here](https://www.php.net/manual/en/language.oop5.static.php).", - "links": [] + "description": "Static methods and properties in PHP belong to the class rather than an instance of the class. This means they can be accessed without creating an object of the class. A static method is declared with the static keyword and can be invoked directly using the class name followed by the scope resolution operator. Similarly, a static property is also defined with the static keyword, but cannot be accessed directly, even from within the class methods - they must be accessed through static methods. Here's a simple example:\n\n class MyClass {\n static $myStaticProperty = \"Hello, world\";\n \n static function myStaticMethod() { \n return self::$myStaticProperty; \n }\n }\n \n echo MyClass::myStaticMethod(); \n \n\nIn this example, we're directly accessing `myStaticMethod` from `MyClass` without an instantiation.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Static Methods and Properties", + "url": "https://www.php.net/manual/en/language.oop5.static.php", + "type": "article" + } + ] }, "c5q2e_jyMt8Pir5Od3lRi": { "title": "Inheritance", - "description": "Inheritance, a fundamental concept in object-oriented programming (OOP), is a feature that PHP supports. It lets us create classes which are extensions of other classes, inheriting their methods and properties. This concept allows the creation of more flexible and maintainable code, as it promotes code reuse. For instance, consider we have a 'Vehicle' class and we want to create a 'Car' class. Since cars are a type of vehicle, it would make sense for our 'Car' class to inherit from the 'Vehicle' class.\n\n class Vehicle {\n public $color;\n function drive() {\n echo \"Driving...\";\n }\n }\n \n class Car extends Vehicle {\n function horn() {\n echo \"Beeping...\";\n }\n }\n \n $myCar = new Car();\n $myCar->drive(); // Inherits drive method from Vehicle\n $myCar->horn(); // Unique to Car\n \n\nIn the above example, the 'Car' class inherits the drive method from the 'Vehicle' class but also has an additional method, horn. This is an illustration of how inheritance in PHP can help to organize your code efficiently and intuitively. Visit PHP's official documentation ([https://www.php.net/manual/en/keyword.extends.php](https://www.php.net/manual/en/keyword.extends.php)) for more details on inheritance.", - "links": [] + "description": "Inheritance, a fundamental concept in object-oriented programming (OOP), is a feature that PHP supports. It lets us create classes which are extensions of other classes, inheriting their methods and properties. This concept allows the creation of more flexible and maintainable code, as it promotes code reuse. For instance, consider we have a 'Vehicle' class and we want to create a 'Car' class. Since cars are a type of vehicle, it would make sense for our 'Car' class to inherit from the 'Vehicle' class.\n\n class Vehicle {\n public $color;\n function drive() {\n echo \"Driving...\";\n }\n }\n \n class Car extends Vehicle {\n function horn() {\n echo \"Beeping...\";\n }\n }\n \n $myCar = new Car();\n $myCar->drive(); // Inherits drive method from Vehicle\n $myCar->horn(); // Unique to Car\n \n\nIn the above example, the 'Car' class inherits the drive method from the 'Vehicle' class but also has an additional method, horn. This is an illustration of how inheritance in PHP can help to organize your code efficiently and intuitively.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Inheritance", + "url": "https://www.php.net/manual/en/keyword.extends.php", + "type": "article" + } + ] }, "yTviiPFR5b_dr3WyxdxxQ": { "title": "OOP Fundamentals", - "description": "In PHP, Object-Oriented Programming (OOP) Fundamentals cover critical aspects like classes, objects, properties, and methods. OOP facilitates efficient code reusability and makes it easier to manage and modify code. For example, here's a code snippet that represents a class with a method and a property in PHP:\n\n class Hello {\n public $greeting = \"Hello, world!\";\n \n public function displayGreeting() {\n echo $this->greeting;\n }\n }\n $hello = new Hello();\n $hello->displayGreeting(); // Outputs \"Hello, world!\"\n \n\nThis snippet defines a class `Hello` with a property `$greeting` and a method `displayGreeting()`. Instances of this class can access these methods and properties. OOP Fundamentals in PHP are much more comprehensive, encompassing concepts like inheritance, encapsulation, and polymorphism. To dive deeper, explore the [official PHP Documentation](https://php.net/manual/en/language.oop5.basic.php).", - "links": [] + "description": "In PHP, Object-Oriented Programming (OOP) Fundamentals cover critical aspects like classes, objects, properties, and methods. OOP facilitates efficient code reusability and makes it easier to manage and modify code. For example, here's a code snippet that represents a class with a method and a property in PHP:\n\n class Hello {\n public $greeting = \"Hello, world!\";\n \n public function displayGreeting() {\n echo $this->greeting;\n }\n }\n $hello = new Hello();\n $hello->displayGreeting(); // Outputs \"Hello, world!\"\n \n\nThis snippet defines a class `Hello` with a property `$greeting` and a method `displayGreeting()`. Instances of this class can access these methods and properties. OOP Fundamentals in PHP are much more comprehensive, encompassing concepts like inheritance, encapsulation, and polymorphism.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "OOP", + "url": "https://php.net/manual/en/language.oop5.basic.php", + "type": "article" + } + ] }, "gtq5KrghF28f5G8nuDcYQ": { "title": "Polymorphism", - "description": "Polymorphism is a core concept in object-oriented programming that PHP supports. It provides a mechanism to use one interface for different underlying forms, enabling different objects to process differently based on their data type. In PHP, polymorphism can be achieved through inheritance and interfaces. For example, you may have a parent class 'Shape' and child classes 'Circle', 'Rectangle', etc. They all can have a method 'draw' but with different implementations. It's not limited to classes; you can also use polymorphism with interfaces by implementing different classes with the same interface where each class will have different code for the same method.\n\nHere's a small sample code demonstrating the concept:\n\n draw();\n }\n \n drawShape(new Circle()); \n drawShape(new Rectangle()); \n ?>\n \n\nThis creates a scalable way to add more shapes, as you only need to follow the 'Shape' interface. For more details, you can read the PHP documentation on polymorphism [here](https://www.php.net/manual/en/language.oop5.polymorphism.php).", - "links": [] + "description": "Polymorphism is a core concept in object-oriented programming that PHP supports. It provides a mechanism to use one interface for different underlying forms, enabling different objects to process differently based on their data type. In PHP, polymorphism can be achieved through inheritance and interfaces. For example, you may have a parent class 'Shape' and child classes 'Circle', 'Rectangle', etc. They all can have a method 'draw' but with different implementations. It's not limited to classes; you can also use polymorphism with interfaces by implementing different classes with the same interface where each class will have different code for the same method.\n\nHere's a small sample code demonstrating the concept:\n\n draw();\n }\n \n drawShape(new Circle()); \n drawShape(new Rectangle()); \n ?>\n \n\nThis creates a scalable way to add more shapes, as you only need to follow the 'Shape' interface.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Polymorphism", + "url": "https://www.php.net/manual/en/language.oop5.polymorphism.php", + "type": "article" + } + ] }, "ub79EkMiOmPBwXLRuYFL8": { "title": "Abstract classes", "description": "Abstract classes in PHP are those which cannot be instantiated on their own. They are simply blueprints for other classes, providing a predefined structure. By declaring a class as abstract, you can define methods without having to implement them. Subsequent classes, when inheriting from an abstract class, must implement these undefined methods.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation", + "title": "Abstract Classes", "url": "https://www.php.net/manual/en/language.oop5.abstract.php", "type": "article" } @@ -513,50 +931,118 @@ }, "vu0H-TsD7hkJgOQbSRj92": { "title": "Interfaces", - "description": "Interfaces in PHP serve as a blueprint for designing classes. They ensure that a class adheres to a certain contract, all without defining how those methods should function. As PHP is not a strictly typed language, interfaces can be particularly useful in large codebases to maintain continuity and predictability. For example, in PHP, an interface 'iTemplate' could be defined with methods 'setVariable' and 'getHtml'. Any class that implements this interface must define these methods. Here is a snippet:\n\n interface iTemplate {\n public function setVariable($name, $var);\n public function getHtml($template); \n }\n \n class Template implements iTemplate {\n private $vars = array();\n \n public function setVariable($name, $var) {\n $this->vars[$name] = $var;\n }\n \n public function getHtml($template) {\n foreach($this->vars as $name => $value) {\n $template = str_replace('{' . $name . '}', $value, $template);\n }\n return $template;\n }\n }\n \n\nTo learn more about interfaces in PHP, please refer to the official [PHP Documentation](https://www.php.net/manual/en/language.oop5.interfaces.php).", - "links": [] + "description": "Interfaces in PHP serve as a blueprint for designing classes. They ensure that a class adheres to a certain contract, all without defining how those methods should function. As PHP is not a strictly typed language, interfaces can be particularly useful in large codebases to maintain continuity and predictability. For example, in PHP, an interface 'iTemplate' could be defined with methods 'setVariable' and 'getHtml'. Any class that implements this interface must define these methods.\n\nHere is a snippet:\n\n interface iTemplate {\n public function setVariable($name, $var);\n public function getHtml($template); \n }\n \n class Template implements iTemplate {\n private $vars = array();\n \n public function setVariable($name, $var) {\n $this->vars[$name] = $var;\n }\n \n public function getHtml($template) {\n foreach($this->vars as $name => $value) {\n $template = str_replace('{' . $name . '}', $value, $template);\n }\n return $template;\n }\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Interfaces", + "url": "https://www.php.net/manual/en/language.oop5.interfaces.php", + "type": "article" + } + ] }, "GR09ns9B-0cONQaQ_uj-7": { "title": "Traits", - "description": "Traits is a concept in PHP that allows code reusability by enabling developers to create reusable pieces of code which can be used in classes to extend functionality. They are a way to reduce intricacies of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes. Here's an example how to use a Trait:\n\n trait Greeting {\n public function sayHello() {\n return \"Hello\";\n }\n }\n class User {\n use Greeting;\n }\n $user = new User();\n echo $user->sayHello(); // Outputs: Hello\n \n\nIn the above code snippet, the `Greeting` trait is being used in the `User` class, and we are able to use its methods as if they were defined in the `User` class. Please consult the PHP documentation for more detailed information: [PHP Trait Documentation](https://www.php.net/manual/en/language.oop5.traits.php).", - "links": [] + "description": "Traits is a concept in PHP that allows code reusability by enabling developers to create reusable pieces of code which can be used in classes to extend functionality. They are a way to reduce intricacies of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes.\n\nHere's an example how to use a Trait:\n\n trait Greeting {\n public function sayHello() {\n return \"Hello\";\n }\n }\n class User {\n use Greeting;\n }\n $user = new User();\n echo $user->sayHello(); // Outputs: Hello\n \n\nIn the above code snippet, the `Greeting` trait is being used in the `User` class, and we are able to use its methods as if they were defined in the `User` class.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Traits", + "url": "https://www.php.net/manual/en/language.oop5.traits.php", + "type": "article" + } + ] }, "9raJ06lKRZITbjWeLil-F": { "title": "Namespaces", - "description": "Namespaces in PHP are a way of encapsulating items so that name collisions won't occur. When your code expands, there could be a situation where classes, interfaces, functions, or constants might have the same name, causing confusion or errors. Namespaces come to the rescue by grouping these items. You declare a namespace using the keyword 'namespace' at the top of your PHP file. Every class, function, or variable under this declaration is a part of the namespace until another namespace is declared, or the file ends. It's like creating a new room in your house solely for storing sports equipment. This makes it easier to find your tennis racket, as you won't have to rummage around in a closet full of mixed items. Here's a quick example: `namespace MyNamespace\\SubNamespace; function displayGreeting() { echo 'Hello World!'; }`. Dive into the PHP documentation for an in-depth understanding: [https://www.php.net/manual/en/language.namespaces.php](https://www.php.net/manual/en/language.namespaces.php)", - "links": [] + "description": "Namespaces in PHP are a way of encapsulating items so that name collisions won't occur. When your code expands, there could be a situation where classes, interfaces, functions, or constants might have the same name, causing confusion or errors. Namespaces come to the rescue by grouping these items. You declare a namespace using the keyword 'namespace' at the top of your PHP file. Every class, function, or variable under this declaration is a part of the namespace until another namespace is declared, or the file ends. It's like creating a new room in your house solely for storing sports equipment. This makes it easier to find your tennis racket, as you won't have to rummage around in a closet full of mixed items.\n\nHere's a quick example:\n\n namespace MyNamespace\\SubNamespace; \n function displayGreeting() {\n echo 'Hello World!'; \n } \n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Namespaces", + "url": "https://www.php.net/manual/en/language.namespaces.php", + "type": "article" + } + ] }, "rSXsPWto7Jeyw3Szl9pvf": { "title": "Magic methods", - "description": "PHP Magic Methods, often considered the hooks of the language, provide developers a way to change how objects will respond to particular language constructs. Magic methods are special functions that start with \"\\_\\_\" such as \\_\\_construct(), \\_\\_destruct(), \\_\\_call(), \\_\\_get(), \\_\\_set() and more. They enable us to perform certain tasks automatically when specific actions occur. For example, \\_\\_construct() executes when an object is created while \\_\\_destruct() triggers when an object is no longer needed. Let's see the \\_\\_construct magic method in action:\n\n class Car {\n public $color;\n public function __construct($color) {\n $this->color = $color;\n }\n }\n $blueCar = new Car(\"Blue\"); // This will call the __construct() method.\n echo $blueCar->color; // Outputs \"Blue\".\n \n\nTo delve deeper into magic methods and their various usages, you can check the official PHP documentation. Here's the link: [PHP Magic Methods](https://www.php.net/manual/en/language.oop5.magic.php)", - "links": [] + "description": "PHP Magic Methods, often considered the hooks of the language, provide developers a way to change how objects will respond to particular language constructs. Magic methods are special functions that start with \"\\_\\_\" such as `__construct()`, `__destruct(), __call(), __get(), __set()` and more. They enable us to perform certain tasks automatically when specific actions occur. For example, `__construct()` executes when an object is created while `__destruct()` triggers when an object is no longer needed. Let's see the `__construct` magic method in action:\n\n class Car {\n public $color;\n public function __construct($color) {\n $this->color = $color;\n }\n }\n $blueCar = new Car(\"Blue\"); // This will call the __construct() method.\n echo $blueCar->color; // Outputs \"Blue\".\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Magic Methods", + "url": "https://www.php.net/manual/en/language.oop5.magic.php", + "type": "article" + } + ] }, "KEE50C6lOS4eX8sAbfhYe": { "title": "Dependency injection", - "description": "Dependency injection is a design pattern used mainly for managing class dependencies. Here, instead of a class being responsible for creating its dependencies on its own, an injector (the \"client\") passes the requirements to the class (the \"service\"), centralizing control and encouraging code to follow the single responsibility principle. As a simple example, consider a situation where class B needs to utilize class A's methods. Instead of creating an object of class A within B, with dependency injection, we pass an instance of class A to B.\n\n class A {\n function display(){\n echo 'Hello, PHP dependency injection!';\n }\n }\n \n class B {\n private $a;\n \n public function __construct(A $classAInstance) {\n $this->a = $classAInstance;\n }\n \n public function callDisplayOwn() {\n $this->a->display();\n }\n }\n \n $instanceA = new A();\n $instanceB = new B($instanceA);\n $instanceB->callDisplayOwn(); // Outputs: \"Hello, PHP dependency injection!\"\n \n\nMore details can be found on [PHP Documentation](https://www.php.net/manual/en/language.oop5.php).", - "links": [] + "description": "Dependency injection is a design pattern used mainly for managing class dependencies. Here, instead of a class being responsible for creating its dependencies on its own, an injector (the \"client\") passes the requirements to the class (the \"service\"), centralizing control and encouraging code to follow the single responsibility principle. As a simple example, consider a situation where class B needs to utilize class A's methods. Instead of creating an object of class A within B, with dependency injection, we pass an instance of class A to B.\n\n class A {\n function display(){\n echo 'Hello, PHP dependency injection!';\n }\n }\n \n class B {\n private $a;\n \n public function __construct(A $classAInstance) {\n $this->a = $classAInstance;\n }\n \n public function callDisplayOwn() {\n $this->a->display();\n }\n }\n \n $instanceA = new A();\n $instanceB = new B($instanceA);\n $instanceB->callDisplayOwn(); // Outputs: \"Hello, PHP dependency injection!\"\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Understand Dependency Injection in PHP", + "url": "https://php-di.org/doc/understanding-di.html", + "type": "article" + } + ] }, "sPW-Ti2VyNYzxq6EYkbn7": { "title": "Type Declarations", - "description": "Type declarations, also known as type hints, are a feature in PHP that provides you options to specify the type of variable that a function is expected to receive or the type of value that it should return. Not only does it help to debug code quickly, it also makes the code more readable. In PHP, type declarations can be for both parameters in a function (parameter type declarations) and return values from a function (return type declarations). They can apply to classes, interfaces, callable, and scalar types (int, float, string, bool). Here's an example:\n\n function add(int $a, int $b): int {\n return $a + $b;\n }\n \n echo add(1, 2); // prints: 3\n \n\nIn this example, the function 'add' only accepts integers and also returns an integer. The PHP documentation provides more details: [PHP Manual: Function Arguments & ReturnType Declarations](https://www.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration)", - "links": [] + "description": "Type declarations, also known as type hints, are a feature in PHP that provides you options to specify the type of variable that a function is expected to receive or the type of value that it should return. Not only does it help to debug code quickly, it also makes the code more readable. In PHP, type declarations can be for both parameters in a function (parameter type declarations) and return values from a function (return type declarations). They can apply to classes, interfaces, callable, and scalar types (int, float, string, bool).\n\nHere's an example:\n\n function add(int $a, int $b): int {\n return $a + $b;\n }\n \n echo add(1, 2); // prints: 3\n \n\nIn this example, the function 'add' only accepts integers and also returns an integer.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Type Declarations", + "url": "https://www.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration", + "type": "article" + } + ] }, "zsscRQZIq5o0JZir9hlz-": { "title": "Laravel", - "description": "Laravel is a robust, elegant PHP framework perfect for web application development, providing developers with a lot of features that boost productivity. Laravel leverages the power of PHP for handling complex tasks such as routing, sessions, caching, and authentication, making it much simpler and quicker for PHP developers to build applications. Laravel's MVC architecture promotes clean, DRY code and separates business logic from UI which significantly improves scalability as well as ease of maintenance. A sample code for a basic Laravel route could be: `Route::get('/', function () { return view('welcome'); });`. For more insights on Laravel, you can check out the official Laravel documentation [here](https://laravel.com/docs).", - "links": [] + "description": "Laravel is a robust, elegant PHP framework perfect for web application development, providing developers with a lot of features that boost productivity. Laravel leverages the power of PHP for handling complex tasks such as routing, sessions, caching, and authentication, making it much simpler and quicker for PHP developers to build applications. Laravel's MVC architecture promotes clean, DRY code and separates business logic from UI which significantly improves scalability as well as ease of maintenance.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Laravel", + "url": "https://laravel.com/", + "type": "article" + }, + { + "title": "Laravel Installation", + "url": "https://laravel.com/docs/11.x/installation", + "type": "article" + }, + { + "title": "Laravel Documentation", + "url": "https://laravel.com/docs", + "type": "article" + } + ] }, "57VSMVePOr9qUD5x_LNdf": { "title": "Symfony", - "description": "Symfony is a set of PHP components and a framework for web projects. It aims to speed up the creation and maintenance of web applications and replace the recurring coding tasks. Symfony uses Composer, a PHP dependency manager, to manage its components. Below is an example of creating a new Symfony project:\n\n composer create-project symfony/website-skeleton myproject\n \n\nThis will download and install a new Symfony project in the 'myproject' directory. Symfony's components are reusable PHP libraries that will help you complete tasks, like routing, templating, or even creating form handling. More details can be found in the Symfony documentation: [https://symfony.com/doc/current/index.html](https://symfony.com/doc/current/index.html).", - "links": [] + "description": "Symfony is a set of PHP components and a framework for web projects. It aims to speed up the creation and maintenance of web applications and replace the recurring coding tasks. Symfony uses Composer, a PHP dependency manager, to manage its components. Below is an example of creating a new Symfony project:\n\n composer create-project symfony/website-skeleton myproject\n \n\nThis will download and install a new Symfony project in the 'myproject' directory. Symfony's components are reusable PHP libraries that will help you complete tasks, like routing, templating, or even creating form handling.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Symphony", + "url": "https://symfony.com/", + "type": "article" + }, + { + "title": "Symphony Documentation", + "url": "https://symfony.com/doc/current/index.html", + "type": "article" + } + ] }, "yVFDu2aTiEZ4PWMdKdW2P": { "title": "Composer", "description": "Composer is a fundamental tool in modern PHP development. It simplifies the management of project dependencies, allowing you to declare what you need and automatically installing those resources in your project. For example, if your PHP project requires a certain library, Composer will fetch the appropriate version and make sure it's available for your project. Here's an example of how to add a dependency using Composer:\n\n composer require vendor/package\n \n\nThis command adds the `vendor/package` dependency to your project. The same goes for removing dependencies, updating them, and more.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Composer Official Website", + "title": "Composer", + "url": "https://getcomposer.org/", + "type": "article" + }, + { + "title": "Composer Documentation", "url": "https://getcomposer.org/doc/", "type": "article" } @@ -564,15 +1050,26 @@ }, "xZf2jjnCVHwYfDH2hs9kR": { "title": "Packagist", - "description": "Packagist is the primary package repository for PHP, providing a service for hosting and distributing PHP package dependencies. Developers can use it to upload their PHP packages and share them with other developers globally. In conjunction with Composer, Packagist helps manage package versions and resolve dependencies for PHP, acting as a crucial part of modern PHP development. For example, to install a package from Packagist, you would run the command `composer require vendor/package`. You can find more information and documentation on the official [Packagist website](https://packagist.org/).", - "links": [] + "description": "Packagist is the primary package repository for PHP, providing a service for hosting and distributing PHP package dependencies. Developers can use it to upload their PHP packages and share them with other developers globally. In conjunction with Composer, Packagist helps manage package versions and resolve dependencies for PHP, acting as a crucial part of modern PHP development.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Packagist", + "url": "https://packagist.org/", + "type": "article" + }, + { + "title": "Package Documentation", + "url": "https://getcomposer.org/doc/01-basic-usage.md#package-versions", + "type": "article" + } + ] }, "qFiTsf6Es-gwqe6J6bdL1": { "title": "Autoloading", "description": "Autoloading is a convenient feature in PHP that allows for automated loading of classes or files when they are needed. For example, if you have a class that is not yet included or required in the script, and you're instantiating that class, PHP would automatically include that class file for you, given that it complies with the standard PHP autoloading conventions. This feature cuts down the need to manually include or require files and makes your code cleaner and more efficient to manage. Here's a simple example:\n\n spl_autoload_register(function ($class_name) {\n include $class_name . '.php';\n });\n \n $obj = new MyClass();\n \n\nIn this example, PHP will automatically load the MyClass.php file when the MyClass is instantiated.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentation - Autloading", + "title": "Autoloading", "url": "https://www.php.net/manual/en/language.oop5.autoload.php", "type": "article" } @@ -580,80 +1077,189 @@ }, "NfBKKwG2GGBPppOjoLLBg": { "title": "PHPUnit", - "description": "PHPUnit is a widely used testing framework in PHP. Automated testing allows developers to ensure their code functions as expected. With PHPUnit, you can write test cases in PHP to check the functionality of your codebase. It's particularly good for executing unit tests - tests that verify individual parts of the software. PHPUnit supports several types of assertions, making it versatile for any testing requirement. Here's a simple PHPUnit test case:\n\n assertEquals(0, count($stack));\n \n array_push($stack, 'foo');\n $this->assertEquals('foo', $stack[count($stack)-1]);\n $this->assertEquals(1, count($stack));\n \n $this->assertEquals('foo', array_pop($stack));\n $this->assertEquals(0, count($stack));\n }\n }\n ?>\n \n\nIn this example, we’re testing the 'push' and 'pop' functionality of an array. Want to go deeper into PHPUnit? Check out the [PHP documentation](https://phpunit.de/getting-started/phpunit-7.html).", - "links": [] + "description": "PHPUnit is a widely used testing framework in PHP. Automated testing allows developers to ensure their code functions as expected. With PHPUnit, you can write test cases in PHP to check the functionality of your codebase. It's particularly good for executing unit tests - tests that verify individual parts of the software. PHPUnit supports several types of assertions, making it versatile for any testing requirement. Here's a simple PHPUnit test case:\n\n assertEquals(0, count($stack));\n \n array_push($stack, 'foo');\n $this->assertEquals('foo', $stack[count($stack)-1]);\n $this->assertEquals(1, count($stack));\n \n $this->assertEquals('foo', array_pop($stack));\n $this->assertEquals(0, count($stack));\n }\n }\n ?>\n \n\nIn this example, we’re testing the 'push' and 'pop' functionality of an array.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP Unit", + "url": "https://phpunit.de/getting-started/phpunit-7.html", + "type": "article" + } + ] }, "d6MydchA52HIxfAUjmZui": { "title": "Pest", - "description": "Pest is an innovative and elegant testing framework for PHP. Think of it as a stylish and streamlined alternative to PHPUnit. Pest makes testing your PHP code a breeze by enabling expressive and flexible test cases. It provides higher-level abstractions to minimize boilerplate code without disrupting the ability to integrate traditional PHPUnit tests. For example, using Pest can make a test case as simple as writing a closure:\n\n it('has homepage', function () {\n $response = get('/');\n $response->assertStatus(200);\n });\n \n\nIt simplifies your testing workflow and makes it more readable and impactful. Check out the official Pest documentation at [https://pestphp.com/](https://pestphp.com/).", - "links": [] + "description": "Pest is an innovative and elegant testing framework for PHP. Think of it as a stylish and streamlined alternative to PHPUnit. Pest makes testing your PHP code a breeze by enabling expressive and flexible test cases. It provides higher-level abstractions to minimize boilerplate code without disrupting the ability to integrate traditional PHPUnit tests. For example, using Pest can make a test case as simple as writing a closure:\n\n it('has homepage', function () {\n $response = get('/');\n $response->assertStatus(200);\n });\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Pest", + "url": "https://pestphp.com/", + "type": "article" + }, + { + "title": "Pest Installation", + "url": "https://pestphp.com/docs/installation", + "type": "article" + } + ] }, "6eWgZVLV479oQzl0fu-Od": { "title": "Style Tools", - "description": "Style Tools in PHP primarily refer to coding standard tools that help maintain a consistent coding style throughout your PHP project. PHP\\_CodeSniffer is a popular tool in this category. It tokenizes PHP, JavaScript, and CSS files and detects violations of a defined set of coding standards. A brief example of PHP\\_CodeSniffer usage would be to run it in the command line like this: `phpcs /path/to/code/myfile.php`. Other tools such as PHP CS Fixer can automatically correct coding standard violations. Here's the PHP documentation link for more details: [PHP Coding Standards](https://www.php.net/manual/en/refs.basic.php.cs.php).", - "links": [] + "description": "Style Tools in PHP primarily refer to coding standard tools that help maintain a consistent coding style throughout your PHP project. PHP\\_CodeSniffer is a popular tool in this category. It tokenizes PHP, JavaScript, and CSS files and detects violations of a defined set of coding standards. A brief example of PHP\\_CodeSniffer usage would be to run it in the command line like this: `phpcs /path/to/code/myfile.php`. Other tools such as PHP CS Fixer can automatically correct coding standard violations.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Style Tools", + "url": "https://www.php.net/manual/en/refs.basic.php.cs.php", + "type": "article" + } + ] }, "fSpvZ_4kGFMbFVCWhA8vn": { "title": "PHPCodeSniffer", - "description": "PHPCodeSniffer, often abbreviated as PHPCS, is a fantastic tool designed for PHP developers to maintain neat and consistent coding styles across their projects. It does this by analyzing the PHP, JavaScript, and CSS files in your project to detect deviations from a defined set of coding standards. When PHPCodeSniffer finds a violation, it flags it for fixing, thus making your codebase more readable and harmonious. Here is an example of running PHPCS:\n\n phpcs --standard=PSR2 /path/to/your/phpfile.php \n \n\nThis command checks your PHP file against the PSR-2 coding standard. Detailed information and installation instructions for PHPCodeSniffer can be found at [PHP CodeSniffer Documentation](https://github.com/squizlabs/PHP_CodeSniffer/wiki).", - "links": [] + "description": "PHPCodeSniffer, often abbreviated as PHPCS, is a fantastic tool designed for PHP developers to maintain neat and consistent coding styles across their projects. It does this by analyzing the PHP, JavaScript, and CSS files in your project to detect deviations from a defined set of coding standards. When PHPCodeSniffer finds a violation, it flags it for fixing, thus making your codebase more readable and harmonious. Here is an example of running PHPCS:\n\n phpcs --standard=PSR2 /path/to/your/phpfile.php \n \n\nThis command checks your PHP file against the PSR-2 coding standard.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "CodeSniffer Documentation", + "url": "https://github.com/squizlabs/PHP_CodeSniffer/wiki", + "type": "opensource" + } + ] }, "r07k_hT2z2EiIBH4q3F7-": { "title": "PHP CS Fixer", - "description": "PHP CS Fixer is a valuable utility for PHP developers that examines and fixes your code to ensure it aligns with specific coding standards. This powerful tool diminishes the time and effort spent on manual code review and corrections. It reviews your PHP code's syntax, appearance, and structure and can automatically fix issues found. PHP CS Fixer supports PSR-1, PSR-2, Symfony standards, and more. Here's an example of how you can use PHP CS Fixer. First, install it via composer:\n\n composer global require friendsofphp/php-cs-fixer\n \n\nThen, run this command in your project directory:\n\n php-cs-fixer fix /path-to-your-php-files\n \n\nYou may refer to the official PHP documentation for more in-depth information here: [PHP CS Fixer Documentation](https://cs.symfony.com/).", - "links": [] + "description": "PHP CS Fixer is a valuable utility for PHP developers that examines and fixes your code to ensure it aligns with specific coding standards. This powerful tool diminishes the time and effort spent on manual code review and corrections. It reviews your PHP code's syntax, appearance, and structure and can automatically fix issues found. PHP CS Fixer supports PSR-1, PSR-2, Symfony standards, and more. Here's an example of how you can use PHP CS Fixer. First, install it via composer:\n\n composer global require friendsofphp/php-cs-fixer\n \n\nThen, run this command in your project directory:\n\n php-cs-fixer fix /path-to-your-php-files\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "CS Fixer", + "url": "https://cs.symfony.com/", + "type": "article" + } + ] }, "PrG_5dyBblXsWYYRcOJMa": { "title": "Static Analysis", - "description": "Static analysis in PHP is a method to inspect the source code before running it. Rather than testing programs on specific inputs (dynamic analysis), static analysis focuses on finding potential issues within code without executing it. It can help in identifying common coding mistakes and uncovering complex problems like dependency issues, unused variables, undeclared properties, and more. Using tools such as PHPStan or Psalm provides this static analysis feature in PHP. For instance, using PHPStan involves merely installing it via Composer and running it against your codebase.\n\n composer require --dev phpstan/phpstan\n ./vendor/bin/phpstan analyse src\n \n\nIt outputs information about any issues it finds in code. However, to reap the full benefits, understand that these tools require proper configuration and regular usage. Visit the [official PHPStan documentation](https://phpstan.org/user-guide/getting-started) to learn more about static analysis in PHP. The ultimate goal is clean, reliable, and maintainable code.", - "links": [] + "description": "Static analysis in PHP is a method to inspect the source code before running it. Rather than testing programs on specific inputs (dynamic analysis), static analysis focuses on finding potential issues within code without executing it. It can help in identifying common coding mistakes and uncovering complex problems like dependency issues, unused variables, undeclared properties, and more. Using tools such as PHPStan or Psalm provides this static analysis feature in PHP. For instance, using PHPStan involves merely installing it via Composer and running it against your codebase.\n\n composer require --dev phpstan/phpstan\n ./vendor/bin/phpstan analyse src\n \n\nIt outputs information about any issues it finds in code. However, to reap the full benefits, understand that these tools require proper configuration and regular usage.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP Stan", + "url": "https://phpstan.org/", + "type": "article" + }, + { + "title": "PHP Stan - Getting Started", + "url": "https://phpstan.org/user-guide/getting-started", + "type": "article" + } + ] }, "12k71gNfwAcT9K5aLWgbZ": { "title": "PHPStan", - "description": "PHPStan is a static analysis tool for PHP that focuses on discovering bugs in your code. As opposed to dynamic analysis which works while your program is running, static analysis examines your code without executing it. PHPStan can catch an entire class of bugs even before you write tests for the code, thus making it a valuable tool in PHP development. For example, PHPStan can prevent issues like accessing an undefined array key or calling a method that doesn't exist.\n\nHere's a basic example of how you can use PHPStan:\n\n // install PHPStan using composer\n $ composer require --dev phpstan/phpstan\n \n // analyse your code\n $ vendor/bin/phpstan analyse src\n \n\nFor more advanced configuration and usage options, refer to the [PHPStan documentation](https://phpstan.org/user-guide/getting-started).", - "links": [] + "description": "PHPStan is a static analysis tool for PHP that focuses on discovering bugs in your code. As opposed to dynamic analysis which works while your program is running, static analysis examines your code without executing it. PHPStan can catch an entire class of bugs even before you write tests for the code, thus making it a valuable tool in PHP development. For example, PHPStan can prevent issues like accessing an undefined array key or calling a method that doesn't exist.\n\nHere's a basic example of how you can use PHPStan:\n\n // install PHPStan using composer\n $ composer require --dev phpstan/phpstan\n \n // analyse your code\n $ vendor/bin/phpstan analyse src\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP Stan", + "url": "https://phpstan.org/user-guide/getting-started", + "type": "article" + } + ] }, "B45YVzov8X_iOtneiFEqa": { "title": "Phan", - "description": "Phan is a static analysis tool specially made for PHP language, greatly useful in catching common issues in the code before execution. It can analyze the syntax and behaviors in PHP code, detecting problems such as undeclared variables, type inconsistencies, uncaught exceptions, and more. Interestingly, Phan has a particular strength — it understands the relationships among PHP's different features, making the tool effective in finding subtle, complicated bugs. To use it, simply install it using composer and run the command 'phan' in your project directory. Want to learn more? The official PHP documentation can support you: [PHP Documentation](https://www.php.net/manual/en/).\n\n \n \n\nThe above script runs the 'ls' command that lists all files and directories in the current folder. For more details, check out the official PHP documentation [here](https://www.php.net/manual/en/ref.exec.php).", - "links": [] + "description": "PHP provides developers with the flexibility to invoke system commands directly from PHP scripts. This can be achieved with functions like `exec()`, `system()`, or `passthru()`, which allow your PHP script to execute system-level instructions and interact with the underlying server. This can be useful in several scenarios - for automating tasks, orchestrating system activities, or even for pulling out system information. However, it's important to use these functions with caution due to the security risks of executing system commands. Here's a simple example of using the exec() function:\n\n \n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Exec Function", + "url": "https://www.php.net/manual/en/ref.exec.php", + "type": "article" + } + ] }, "NTKUMgsKGYISIyhgOJPQn": { "title": "Process Control", - "description": "Process Control, a crucial aspect of PHP system interactions, pertains to the ability to manage child processes within larger PHP scripts. Through the Process Control Extensions, PHP can create, monitor and control these child processes efficiently. These functions help develop robust client-server systems by managing and bringing multi-threading capabilities to single-threaded PHP scripts. For instance, when creating a new child process using pcntl\\_fork() function, the return value in the parent process is the PID of the newly created child process whereas, in the child process, '0' is returned. Remember, this feature isn't enabled by default in PHP.\n\nHere's a short PHP code demonstrating Process Control:\n\n \n \n\nMore examples and commands can be found in PHP's official documentation: [Process Control Functions](https://www.php.net/manual/en/ref.pcntl.php)", - "links": [] + "description": "Process Control, a crucial aspect of PHP system interactions, pertains to the ability to manage child processes within larger PHP scripts. Through the Process Control Extensions, PHP can create, monitor and control these child processes efficiently. These functions help develop robust client-server systems by managing and bringing multi-threading capabilities to single-threaded PHP scripts. For instance, when creating a new child process using pcntl\\_fork() function, the return value in the parent process is the PID of the newly created child process whereas, in the child process, '0' is returned. Remember, this feature isn't enabled by default in PHP.\n\nHere's a short PHP code demonstrating Process Control:\n\n \n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Process Control", + "url": "https://www.php.net/manual/en/ref.pcntl.php", + "type": "article" + } + ] }, "fitjnLYKLHJ2P5G7JAvzm": { "title": "Environment Variables", - "description": "Environment variables provide a way to influence the behavior of software on your system. They consist of name/value pairs and are used for various purposes, such as to specify directory paths, usernames, or passwords that your PHP application might use. You can set PHP environment variables using the `putenv()` function, and retrieve them using `getenv()`. For example, if you want to set the environment variable \"FOO\" to \"bar\", you could do so like this:\n\n putenv(\"FOO=bar\");\n \n\nAnd then you can retrieve the value with `getenv()` like:\n\n echo getenv(\"FOO\"); // returns \"bar\"\n \n\nKeep in mind that environment variables set using `putenv()` are only available for the duration of the current request. If you want them to persist for future requests, you'll need to set them using your system's method for setting environment variables. More on this at the [official PHP documentation](https://www.php.net/manual/en/function.putenv.php).", - "links": [] + "description": "Environment variables provide a way to influence the behavior of software on your system. They consist of name/value pairs and are used for various purposes, such as to specify directory paths, usernames, or passwords that your PHP application might use. You can set PHP environment variables using the `putenv()` function, and retrieve them using `getenv()`. For example, if you want to set the environment variable \"FOO\" to \"bar\", you could do so like this:\n\n putenv(\"FOO=bar\");\n \n\nAnd then you can retrieve the value with `getenv()` like:\n\n echo getenv(\"FOO\"); // returns \"bar\"\n \n\nKeep in mind that environment variables set using `putenv()` are only available for the duration of the current request. If you want them to persist for future requests, you'll need to set them using your system's method for setting environment variables.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Environment Variables", + "url": "https://www.php.net/manual/en/function.putenv.php", + "type": "article" + } + ] }, "DTaAZaU1CwzW7esoDhj85": { "title": "Configuration Files", "description": "Configuration files are critical for PHP applications because they help manage dynamic settings like database connection information, error reporting, and many other PHP settings without hard coding, making your application flexible and secure. PHP uses an \"php.ini\" file to hold these settings. You can modify settings by accessing and changing values in this file. For example, to adjust the maximum file upload size, you might modify the `upload_max_filesize` directive. However, changes to the `php.ini` file take effect only after the server is restarted.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation - PHP Config", + "title": "PHP Config", "url": "https://www.php.net/manual/en/ini.list.php", "type": "article" } @@ -708,25 +1344,42 @@ }, "lFoHoMRywCWa056ii5cKQ": { "title": "Xdebug", - "description": "Xdebug is a PHP extension that provides debugging and profiling capabilities. It's a powerful tool that can help you understand what your code is doing, track down bugs, and optimize performance. With Xdebug, you can set breakpoints, watch variables, and step through your code one line at a time. For instance, to start using Xdebug, you first need to install it and then initialize it in your code like so:\n\n \n \n\nXdebug can significantly speed up bug-tracking and testing, making it an essential tool in any PHP developer's toolkit. For more in-depth information and usage guides, refer to the official documentation at [Xdebug's Official Site](https://xdebug.org/docs/).", - "links": [] + "description": "Xdebug is a PHP extension that provides debugging and profiling capabilities. It's a powerful tool that can help you understand what your code is doing, track down bugs, and optimize performance. With Xdebug, you can set breakpoints, watch variables, and step through your code one line at a time. For instance, to start using Xdebug, you first need to install it and then initialize it in your code like so:\n\n \n \n\nXdebug can significantly speed up bug-tracking and testing, making it an essential tool in any PHP developer's toolkit.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Xdebug", + "url": "https://xdebug.org/", + "type": "article" + }, + { + "title": "Xdebug Documentation", + "url": "https://xdebug.org/docs/", + "type": "article" + } + ] }, "KpQb5Zh3GUcbYUyXHvyu2": { "title": "Zend Debugger", - "description": "Zend Debugger is a PHP debugging extension used to identify issues in PHP scripts. It allows you to monitor and fix issues in your code, such as logical errors, and helps in boosting your web application's overall performance. Essentially, it becomes a simple yet powerful method for debugging server-side PHP scripts, by providing detailed debugging data and facilitating real-time interaction with the scripts. Using Zend Debugger with PHP can drastically improve the quality of your codebase and save considerable time in the development phase. A short usage example of Zend Debugger can be setting up a debug session, using the function 'zend\\_debugger\\_connector\\_address()' which returns the IP address of the debugger currently in use. Developer documentation for Zend Debugger can be found [here](https://www.zend.com/topics/Debugger-API).", - "links": [] + "description": "Zend Debugger is a PHP debugging extension used to identify issues in PHP scripts. It allows you to monitor and fix issues in your code, such as logical errors, and helps in boosting your web application's overall performance. Essentially, it becomes a simple yet powerful method for debugging server-side PHP scripts, by providing detailed debugging data and facilitating real-time interaction with the scripts. Using Zend Debugger with PHP can drastically improve the quality of your codebase and save considerable time in the development phase. A short usage example of Zend Debugger can be setting up a debug session, using the function `zend_debugger_connector_address()` which returns the IP address of the debugger currently in use.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Zend Debugger", + "url": "https://www.zend.com/topics/Debugger-API", + "type": "article" + } + ] }, "KMQqePqAjQ-ReDwHqeofx": { "title": "Apache", "description": "Apache is a popular web server that can efficiently host PHP applications. Apache integrates well with PHP, using its `mod_php` module, providing a stable and consistent environment for your PHP scripts to run. This compatibility creates a seamless user experience, as PHP pages are served as if they're part of the website and not just files being executed on the server.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PHP Documentations - Apache", + "title": "Apache PHP Documentation", "url": "https://www.php.net/manual/en/install.unix.apache2.php", "type": "article" }, { - "title": "Apache Website", + "title": "Apache", "url": "https://httpd.apache.org/", "type": "article" } @@ -734,12 +1387,24 @@ }, "aspZpACHEKOsi_Er5FYPY": { "title": "Nginx", - "description": "Nginx is often deployed as a reverse proxy server for PHP applications, helping to manage client requests and load balance. Unlike traditional servers, Nginx handles numerous simultaneous connections more efficiently, proving instrumental in delivering PHP content faster. For PHP, one common configuration with Nginx involves PHP-FPM (FastCGI Process Manager). FastCGI is a variation on the earlier CGI (Common Gateway Interface), it allows for long-lived PHP processes that can service many requests, improving the performance of PHP applications. For instance, your Nginx server configuration for serving PHP files might include directives like these:\n\n location ~ \\.php$ {\n include snippets/fastcgi-php.conf;\n fastcgi_pass unix:/run/php/php7.0-fpm.sock;\n }\n \n\nDo check out the [official Nginx documentation](https://nginx.org/en/docs/) for more in-depth learning.", - "links": [] + "description": "Nginx is often deployed as a reverse proxy server for PHP applications, helping to manage client requests and load balance. Unlike traditional servers, Nginx handles numerous simultaneous connections more efficiently, proving instrumental in delivering PHP content faster. For PHP, one common configuration with Nginx involves PHP-FPM (FastCGI Process Manager). FastCGI is a variation on the earlier CGI (Common Gateway Interface), it allows for long-lived PHP processes that can service many requests, improving the performance of PHP applications. For instance, your Nginx server configuration for serving PHP files might include directives like these:\n\n location ~ \\.php$ {\n include snippets/fastcgi-php.conf;\n fastcgi_pass unix:/run/php/php7.0-fpm.sock;\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Nginx Documentation", + "url": "https://nginx.org/en/docs/", + "type": "article" + } + ] }, "AoGS-5MSkp8gtJFQVPSBE": { "title": "PHP-FPM", - "description": "PHP-FPM, or PHP FastCGI Process Manager, is a robust and efficient way to serve PHP applications. It dramatically improves the speed and processing efficiency of PHP apps by isolating each request, thus preventing jobs from interfering with each other. With PHP-FPM, your server can handle more simultaneous visitors without a slowdown. For example, to start using PHP-FPM with NGINX, you may include this configuration in your NGINX server block:\n\n location ~ \\.php$ {\n try_files $uri =404;\n fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n \n\nHere `$uri` is the incoming request and `fastcgi_pass` should be the location where PHP-FPM listens. Visit this [link](https://www.php.net/manual/en/install.fpm.php) to learn more on installing and configuring PHP-FPM.", - "links": [] + "description": "PHP-FPM, or PHP FastCGI Process Manager, is a robust and efficient way to serve PHP applications. It dramatically improves the speed and processing efficiency of PHP apps by isolating each request, thus preventing jobs from interfering with each other. With PHP-FPM, your server can handle more simultaneous visitors without a slowdown. For example, to start using PHP-FPM with NGINX, you may include this configuration in your NGINX server block:\n\n location ~ \\.php$ {\n try_files $uri =404;\n fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n \n\nHere `$uri` is the incoming request and `fastcgi_pass` should be the location where PHP-FPM listens.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PHP FPM", + "url": "https://www.php.net/manual/en/install.fpm.php", + "type": "article" + } + ] } } \ No newline at end of file diff --git a/public/roadmap-content/system-design.json b/public/roadmap-content/system-design.json new file mode 100644 index 000000000..13c9bf7c4 --- /dev/null +++ b/public/roadmap-content/system-design.json @@ -0,0 +1,2076 @@ +{ + "_hYN0gEi9BL24nptEtXWU": { + "title": "Introduction", + "description": "System design is the process of defining the elements of a system, as well as their interactions and relationships, in order to satisfy a set of specified requirements.\n\nIt involves taking a problem statement, breaking it down into smaller components and designing each component to work together effectively to achieve the overall goal of the system. This process typically includes analyzing the current system (if any) and determining any deficiencies, creating a detailed plan for the new system, and testing the design to ensure that it meets the requirements. It is an iterative process that may involve multiple rounds of design, testing, and refinement.\n\nIn software engineering, system design is a phase in the software development process that focuses on the high-level design of a software system, including the architecture and components.\n\nIt is also one of the important aspects of the interview process for software engineers. Most of the companies have a dedicated system design interview round, where they ask the candidates to design a system for a given problem statement. The candidates are expected to come up with a detailed design of the system, including the architecture, components, and their interactions. They are also expected to discuss the trade-offs involved in their design and the alternatives that they considered.", + "links": [] + }, + "idLHBxhvcIqZTqmh_E8Az": { + "title": "What is System Design?", + "description": "System design is the process of defining the elements of a system, as well as their interactions and relationships, in order to satisfy a set of specified requirements.\n\nIt involves taking a problem statement, breaking it down into smaller components and designing each component to work together effectively to achieve the overall goal of the system. This process typically includes analyzing the current system (if any) and determining any deficiencies, creating a detailed plan for the new system, and testing the design to ensure that it meets the requirements. It is an iterative process that may involve multiple rounds of design, testing, and refinement.\n\nIn software engineering, system design is a phase in the software development process that focuses on the high-level design of a software system, including the architecture and components.\n\nIt is also one of the important aspects of the interview process for software engineers. Most of the companies have a dedicated system design interview round, where they ask the candidates to design a system for a given problem statement. The candidates are expected to come up with a detailed design of the system, including the architecture, components, and their interactions. They are also expected to discuss the trade-offs involved in their design and the alternatives that they considered.", + "links": [] + }, + "os3Pa6W9SSNEzgmlBbglQ": { + "title": "How to approach System Design?", + "description": "There are several steps that can be taken when approaching a system design:\n\n* **Understand the problem**: Gather information about the problem you are trying to solve and the requirements of the system. Identify the users and their needs, as well as any constraints or limitations of the system.\n* **Identify the scope of the system:** Define the boundaries of the system, including what the system will do and what it will not do.\n* **Research and analyze existing systems:** Look at similar systems that have been built in the past and identify what worked well and what didn't. Use this information to inform your design decisions.\n* **Create a high-level design:** Outline the main components of the system and how they will interact with each other. This can include a rough diagram of the system's architecture, or a flowchart outlining the process the system will follow.\n* **Refine the design:** As you work on the details of the design, iterate and refine it until you have a complete and detailed design that meets all the requirements.\n* **Document the design:** Create detailed documentation of your design for future reference and maintenance.\n* **Continuously monitor and improve the system:** The system design is not a one-time process, it needs to be continuously monitored and improved to meet the changing requirements.\n\nNote that this is a general approach to System Design. For interview specific answers, see the following resources:", + "links": [ + { + "title": "How to approach System Design?", + "url": "https://github.com/donnemartin/system-design-primer#how-to-approach-a-system-design-interview-question", + "type": "opensource" + }, + { + "title": "What are system design questions?", + "url": "https://www.hiredintech.com/system-design", + "type": "article" + }, + { + "title": "My System Design Template", + "url": "https://leetcode.com/discuss/career/229177/My-System-Design-Template", + "type": "article" + }, + { + "title": "Intro to Architecture and Systems Design Interviews", + "url": "https://www.youtube.com/watch?v=ZgdS0EUmn70", + "type": "video" + } + ] + }, + "e_15lymUjFc6VWqzPnKxG": { + "title": "Performance vs Scalability", + "description": "A service is **scalable** if it results in increased **performance** in a manner proportional to resources added. Generally, increasing performance means serving more units of work, but it can also be to handle larger units of work, such as when datasets grow.\n\nAnother way to look at performance vs scalability:\n\n* If you have a **performance** problem, your system is slow for a single user.\n* If you have a **scalability** problem, your system is fast for a single user but slow under heavy load.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Scalability, Availability & Stability Patterns", + "url": "https://www.slideshare.net/jboner/scalability-availability-stability-patterns/", + "type": "article" + }, + { + "title": "A Word on Scalability", + "url": "https://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html", + "type": "article" + }, + { + "title": "Performance vs Scalability", + "url": "https://blog.professorbeekums.com/performance-vs-scalability/", + "type": "article" + }, + { + "title": "Explore top posts about Performance", + "url": "https://app.daily.dev/tags/performance?ref=roadmapsh", + "type": "article" + } + ] + }, + "O3wAHLnzrkvLWr4afHDdr": { + "title": "Latency vs Throughput", + "description": "Latency and throughput are two important measures of a system's performance. **Latency** refers to the amount of time it takes for a system to respond to a request. **Throughput** refers to the number of requests that a system can handle at the same time.\n\nGenerally, you should aim for maximal throughput with acceptable latency.\n\nLearn more from the following links:", + "links": [ + { + "title": "System Design: Latency vs Throughput", + "url": "https://cs.fyi/guide/latency-vs-throughput/", + "type": "article" + }, + { + "title": "Understanding Latency versus Throughput", + "url": "https://community.cadence.com/cadence_blogs_8/b/fv/posts/understanding-latency-vs-throughput", + "type": "article" + }, + { + "title": "Latency and Throughput - MIT", + "url": "https://www.youtube.com/watch?v=3HIV4MnLGCw", + "type": "video" + } + ] + }, + "uJc27BNAuP321HQNbjftn": { + "title": "Availability vs Consistency", + "description": "Availability refers to the ability of a system to provide its services to clients even in the presence of failures. This is often measured in terms of the percentage of time that the system is up and running, also known as its uptime.\n\nConsistency, on the other hand, refers to the property that all clients see the same data at the same time. This is important for maintaining the integrity of the data stored in the system.\n\nIn distributed systems, it is often a trade-off between availability and consistency. Systems that prioritize high availability may sacrifice consistency, while systems that prioritize consistency may sacrifice availability. Different distributed systems use different approaches to balance the trade-off between availability and consistency, such as using replication or consensus algorithms.\n\nHave a look at the following resources to learn more:", + "links": [ + { + "title": "CAP FAQ", + "url": "https://github.com/henryr/cap-faq", + "type": "opensource" + }, + { + "title": "CAP Theorem Revisited", + "url": "https://robertgreiner.com/cap-theorem-revisited/", + "type": "article" + }, + { + "title": "A plain english introduction to CAP Theorem", + "url": "http://ksat.me/a-plain-english-introduction-to-cap-theorem", + "type": "article" + }, + { + "title": "CAP Theorem", + "url": "https://www.youtube.com/watch?v=_RbsFXWRZ10&t=1s", + "type": "video" + } + ] + }, + "tcGdVQsCEobdV9hgOq3eG": { + "title": "CAP Theorem", + "description": "According to CAP theorem, in a distributed system, you can only support two of the following guarantees:\n\n* **Consistency** - Every read receives the most recent write or an error\n* **Availability** - Every request receives a response, without guarantee that it contains the most recent version of the information\n* **Partition Tolerance** - The system continues to operate despite arbitrary partitioning due to network failures\n\nNetworks aren't reliable, so you'll need to support partition tolerance. You'll need to make a software tradeoff between consistency and availability.\n\nCP - consistency and partition tolerance\n----------------------------------------\n\nWaiting for a response from the partitioned node might result in a timeout error. CP is a good choice if your business needs require atomic reads and writes.\n\nAP - availability and partition tolerance\n-----------------------------------------\n\nResponses return the most readily available version of the data available on any node, which might not be the latest. Writes might take some time to propagate when the partition is resolved.\n\nAP is a good choice if the business needs to allow for [eventual consistency](https://github.com/donnemartin/system-design-primer#eventual-consistency) or when the system needs to continue working despite external errors.\n\nFor more information, have a look at the following resources:", + "links": [ + { + "title": "CAP FAQ", + "url": "https://github.com/henryr/cap-faq", + "type": "opensource" + }, + { + "title": "CAP theorem revisited", + "url": "http://robertgreiner.com/2014/08/cap-theorem-revisited/", + "type": "article" + }, + { + "title": "A plain english introduction to CAP theorem", + "url": "http://ksat.me/a-plain-english-introduction-to-cap-theorem", + "type": "article" + }, + { + "title": "The CAP theorem", + "url": "https://www.youtube.com/watch?v=k-Yaq8AHlFA", + "type": "video" + } + ] + }, + "GHe8V-REu1loRpDnHbyUn": { + "title": "Consistency Patterns", + "description": "Consistency patterns refer to the ways in which data is stored and managed in a distributed system, and how that data is made available to users and applications. There are three main types of consistency patterns:\n\n* Strong consistency\n* Weak consistency\n* Eventual Consistency\n\nEach of these patterns has its own advantages and disadvantages, and the choice of which pattern to use will depend on the specific requirements of the application or system.\n\nHave a look at the following resources to learn more:", + "links": [ + { + "title": "Consistency Patterns in Distributed Systems", + "url": "https://cs.fyi/guide/consistency-patterns-week-strong-eventual/", + "type": "article" + } + ] + }, + "EKD5AikZtwjtsEYRPJhQ2": { + "title": "Weak Consistency", + "description": "After an update is made to the data, it is not guaranteed that any subsequent read operation will immediately reflect the changes made. The read may or may not see the recent write.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Consistency Patterns in Distributed Systems", + "url": "https://cs.fyi/guide/consistency-patterns-week-strong-eventual/", + "type": "article" + } + ] + }, + "rRDGVynX43inSeQ9lR_FS": { + "title": "Eventual Consistency", + "description": "Eventual consistency is a form of Weak Consistency. After an update is made to the data, it will be eventually visible to any subsequent read operations. The data is replicated in an asynchronous manner, ensuring that all copies of the data are eventually updated.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Consistency Patterns in Distributed Systems", + "url": "https://cs.fyi/guide/consistency-patterns-week-strong-eventual/", + "type": "article" + } + ] + }, + "JjB7eB8gdRCAYf5M0RcT7": { + "title": "Strong Consistency", + "description": "After an update is made to the data, it will be immediately visible to any subsequent read operations. The data is replicated in a synchronous manner, ensuring that all copies of the data are updated at the same time.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Consistency Patterns in Distributed Systems", + "url": "https://cs.fyi/guide/consistency-patterns-week-strong-eventual/", + "type": "article" + } + ] + }, + "ezptoTqeaepByegxS5kHL": { + "title": "Availability Patterns", + "description": "Availability is measured as a percentage of uptime, and defines the proportion of time that a system is functional and working. Availability is affected by system errors, infrastructure problems, malicious attacks, and system load. Cloud applications typically provide users with a service level agreement (SLA), which means that applications must be designed and implemented to maximize availability.", + "links": [ + { + "title": "Availability Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/framework/resiliency/reliability-patterns#availability", + "type": "article" + } + ] + }, + "L_jRfjvMGjFbHEbozeVQl": { + "title": "Fail-Over", + "description": "Failover is an availability pattern that is used to ensure that a system can continue to function in the event of a failure. It involves having a backup component or system that can take over in the event of a failure.\n\nIn a failover system, there is a primary component that is responsible for handling requests, and a secondary (or backup) component that is on standby. The primary component is monitored for failures, and if it fails, the secondary component is activated to take over its duties. This allows the system to continue functioning with minimal disruption.\n\nFailover can be implemented in various ways, such as active-passive, active-active, and hot-standby.\n\nActive-passive\n--------------\n\nWith active-passive fail-over, heartbeats are sent between the active and the passive server on standby. If the heartbeat is interrupted, the passive server takes over the active's IP address and resumes service.\n\nThe length of downtime is determined by whether the passive server is already running in 'hot' standby or whether it needs to start up from 'cold' standby. Only the active server handles traffic.\n\nActive-passive failover can also be referred to as master-slave failover.\n\nActive-active\n-------------\n\nIn active-active, both servers are managing traffic, spreading the load between them.\n\nIf the servers are public-facing, the DNS would need to know about the public IPs of both servers. If the servers are internal-facing, application logic would need to know about both servers.\n\nActive-active failover can also be referred to as master-master failover.\n\nDisadvantages of Failover\n-------------------------\n\n* Fail-over adds more hardware and additional complexity.\n* There is a potential for loss of data if the active system fails before any newly written data can be replicated to the passive.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Fail Over Pattern - High Availability", + "url": "https://www.filecloud.com/blog/2015/12/architectural-patterns-for-high-availability/", + "type": "article" + } + ] + }, + "0RQ5jzZKdadYY0h_QZ0Bb": { + "title": "Replication", + "description": "Replication is an availability pattern that involves having multiple copies of the same data stored in different locations. In the event of a failure, the data can be retrieved from a different location. There are two main types of replication: Master-Master replication and Master-Slave replication.\n\n* **Master-Master replication:** In this type of replication, multiple servers are configured as \"masters,\" and each one can accept read and write operations. This allows for high availability and allows any of the servers to take over if one of them fails. However, this type of replication can lead to conflicts if multiple servers update the same data at the same time, so some conflict resolution mechanism is needed to handle this.\n \n* **Master-Slave replication:** In this type of replication, one server is designated as the \"master\" and handles all write operations, while multiple \"slave\" servers handle read operations. If the master fails, one of the slaves can be promoted to take its place. This type of replication is simpler to set up and maintain compared to Master-Master replication.\n \n\nVisit the following links for more resources:", + "links": [ + { + "title": "Replication: Availability Pattern", + "url": "https://github.com/donnemartin/system-design-primer#replication", + "type": "opensource" + } + ] + }, + "uHdrZllrZFAnVkwIB3y5-": { + "title": "Availability in Numbers", + "description": "Availability is often quantified by uptime (or downtime) as a percentage of time the service is available. Availability is generally measured in number of 9s--a service with 99.99% availability is described as having four 9s.\n\n99.9% Availability - Three 9s:\n------------------------------\n\n Duration | Acceptable downtime\n ------------- | -------------\n Downtime per year | 8h 41min 38s\n Downtime per month | 43m 28s\n Downtime per week | 10m 4.8s\n Downtime per day | 1m 26s\n \n\n99.99% Availability - Four 9s\n-----------------------------\n\n Duration | Acceptable downtime\n ------------- | -------------\n Downtime per year | 52min 9.8s\n Downtime per month | 4m 21s\n Downtime per week | 1m 0.5s\n Downtime per day | 8.6s\n \n\nAvailability in parallel vs in sequence\n---------------------------------------\n\nIf a service consists of multiple components prone to failure, the service's overall availability depends on whether the components are in sequence or in parallel.\n\n### In sequence\n\nOverall availability decreases when two components with availability < 100% are in sequence:\n\n Availability (Total) = Availability (Foo) * Availability (Bar)\n \n\nIf both `Foo` and `Bar` each had 99.9% availability, their total availability in sequence would be 99.8%.\n\n### In parallel\n\nOverall availability increases when two components with availability < 100% are in parallel:\n\n Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))\n \n\nIf both `Foo` and `Bar` each had 99.9% availability, their total availability in parallel would be 99.9999%.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Availability in System Design", + "url": "https://www.enjoyalgorithms.com/blog/availability-system-design-concept/", + "type": "article" + }, + { + "title": "Uptime calculator: How much downtime corresponds to 99.9 % uptime", + "url": "https://uptime.is/", + "type": "article" + } + ] + }, + "DOESIlBThd_wp2uOSd_CS": { + "title": "Background Jobs", + "description": "Background jobs in system design refer to tasks that are executed in the background, independently of the main execution flow of the system. These tasks are typically initiated by the system itself, rather than by a user or another external agent.\n\nBackground jobs can be used for a variety of purposes, such as:\n\n* Performing maintenance tasks: such as cleaning up old data, generating reports, or backing up the database.\n* Processing large volumes of data: such as data import, data export, or data transformation.\n* Sending notifications or messages: such as sending email notifications or push notifications to users.\n* Performing long-running computations: such as machine learning or data analysis.\n\nLearn more from the following links:", + "links": [ + { + "title": "Background Jobs - Best Practices", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/background-jobs", + "type": "article" + } + ] + }, + "NEsPjQifNDlZJE-2YLVl1": { + "title": "Event-Driven", + "description": "Event-driven invocation uses a trigger to start the background task. Examples of using event-driven triggers include:\n\n* The UI or another job places a message in a queue. The message contains data about an action that has taken place, such as the user placing an order. The background task listens on this queue and detects the arrival of a new message. It reads the message and uses the data in it as the input to the background job. This pattern is known as asynchronous message-based communication.\n* The UI or another job saves or updates a value in storage. The background task monitors the storage and detects changes. It reads the data and uses it as the input to the background job.\n* The UI or another job makes a request to an endpoint, such as an HTTPS URI, or an API that is exposed as a web service. It passes the data that is required to complete the background task as part of the request. The endpoint or web service invokes the background task, which uses the data as its input.\n\nLearn more from the following links:", + "links": [ + { + "title": "Background Jobs - Event Driven Triggers", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/background-jobs#event-driven-triggers", + "type": "article" + } + ] + }, + "zoViI4kzpKIxpU20T89K_": { + "title": "Schedule Driven", + "description": "Schedule-driven invocation uses a timer to start the background task. Examples of using schedule-driven triggers include:\n\n* A timer that is running locally within the application or as part of the application's operating system invokes a background task on a regular basis.\n* A timer that is running in a different application, such as Azure Logic Apps, sends a request to an API or web service on a regular basis. The API or web service invokes the background task.\n* A separate process or application starts a timer that causes the background task to be invoked once after a specified time delay, or at a specific time.\n\nTypical examples of tasks that are suited to schedule-driven invocation include batch-processing routines (such as updating related-products lists for users based on their recent behavior), routine data processing tasks (such as updating indexes or generating accumulated results), data analysis for daily reports, data retention cleanup, and data consistency checks.\n\nLearn more from the following links:", + "links": [ + { + "title": "Schedule Driven - Background Jobs", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/background-jobs#schedule-driven-triggers", + "type": "article" + } + ] + }, + "2gRIstNT-fTkv5GZ692gx": { + "title": "Returning Results", + "description": "Background jobs execute asynchronously in a separate process, or even in a separate location, from the UI or the process that invoked the background task. Ideally, background tasks are \"fire and forget\" operations, and their execution progress has no impact on the UI or the calling process. This means that the calling process does not wait for completion of the tasks. Therefore, it cannot automatically detect when the task ends.\n\nLearn more from the following links:", + "links": [ + { + "title": "Returning Results - Background Jobs", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/background-jobs#returning-results", + "type": "article" + } + ] + }, + "Uk6J8JRcKVEFz4_8rLfnQ": { + "title": "Domain Name System", + "description": "A Domain Name System (DNS) translates a domain name such as [www.example.com](http://www.example.com) to an IP address.\n\nDNS is hierarchical, with a few authoritative servers at the top level. Your router or ISP provides information about which DNS server(s) to contact when doing a lookup. Lower level DNS servers cache mappings, which could become stale due to DNS propagation delays. DNS results can also be cached by your browser or OS for a certain period of time, determined by the time to live (TTL).\n\n* NS record (name server) - Specifies the DNS servers for your domain/subdomain.\n* MX record (mail exchange) - Specifies the mail servers for accepting messages.\n* A record (address) - Points a name to an IP address.\n* CNAME (canonical) - Points a name to another name or CNAME ([example.com](http://example.com) to [www.example.com](http://www.example.com)) or to an A record.\n\nServices such as [CloudFlare](https://www.cloudflare.com/dns/) and [Route53](https://aws.amazon.com/route53/) provide managed DNS services. Some DNS services can route traffic through various methods:\n\n* [@article@Weighted Round Robin](https://www.jscape.com/blog/load-balancing-algorithms)\n * Prevent traffic from going to servers under maintenance\n * Balance between varying cluster sizes\n * A/B testing\n* [@article@Latency Based](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency)\n* [@article@Geolocation Based](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-geo)\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Getting started with Domain Name System", + "url": "https://github.com/donnemartin/system-design-primer#domain-name-system", + "type": "opensource" + }, + { + "title": "What is DNS?", + "url": "https://www.cloudflare.com/learning/dns/what-is-dns/", + "type": "article" + } + ] + }, + "O730v5Ww3ByAiBSs6fwyM": { + "title": "Content Delivery Networks", + "description": "A content delivery network (CDN) is a globally distributed network of proxy servers, serving content from locations closer to the user. Generally, static files such as HTML/CSS/JS, photos, and videos are served from CDN, although some CDNs such as Amazon's CloudFront support dynamic content. The site's DNS resolution will tell clients which server to contact.\n\nServing content from CDNs can significantly improve performance in two ways:\n\n* Users receive content from data centers close to them\n* Your servers do not have to serve requests that the CDN fulfills\n\nLearn more about CDNs from the following links:", + "links": [ + { + "title": "Introduction to CDNs", + "url": "https://github.com/donnemartin/system-design-primer#content-delivery-network", + "type": "opensource" + }, + { + "title": "The Differences Between Push And Pull CDNs", + "url": "http://www.travelblogadvice.com/technical/the-differences-between-push-and-pull-cdns/", + "type": "article" + }, + { + "title": "Brief about Content delivery network", + "url": "https://en.wikipedia.org/wiki/Content_delivery_network", + "type": "article" + } + ] + }, + "uIerrf_oziiLg-KEyz8WM": { + "title": "Push CDNs", + "description": "Push CDNs receive new content whenever changes occur on your server. You take full responsibility for providing content, uploading directly to the CDN and rewriting URLs to point to the CDN. You can configure when content expires and when it is updated. Content is uploaded only when it is new or changed, minimizing traffic, but maximizing storage.\n\nSites with a small amount of traffic or sites with content that isn't often updated work well with push CDNs. Content is placed on the CDNs once, instead of being re-pulled at regular intervals.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Introduction to CDNs", + "url": "https://github.com/donnemartin/system-design-primer#content-delivery-network", + "type": "opensource" + } + ] + }, + "HkXiEMLqxJoQyAHav3ccL": { + "title": "Pull CDNs", + "description": "Pull CDNs grab new content from your server when the first user requests the content. You leave the content on your server and rewrite URLs to point to the CDN. This results in a slower request until the content is cached on the CDN.\n\nA time-to-live (TTL) determines how long content is cached. Pull CDNs minimize storage space on the CDN, but can create redundant traffic if files expire and are pulled before they have actually changed. Sites with heavy traffic work well with pull CDNs, as traffic is spread out more evenly with only recently-requested content remaining on the CDN.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Introduction to CDNs", + "url": "https://github.com/donnemartin/system-design-primer#content-delivery-network", + "type": "opensource" + }, + { + "title": "The Differences Between Push And Pull CDNs", + "url": "http://www.travelblogadvice.com/technical/the-differences-between-push-and-pull-cdns/", + "type": "article" + } + ] + }, + "14KqLKgh090Rb3MDwelWY": { + "title": "Load Balancers", + "description": "Load balancers distribute incoming client requests to computing resources such as application servers and databases. In each case, the load balancer returns the response from the computing resource to the appropriate client. Load balancers are effective at:\n\n* Preventing requests from going to unhealthy servers\n* Preventing overloading resources\n* Helping to eliminate a single point of failure\n\nLoad balancers can be implemented with hardware (expensive) or with software such as HAProxy. Additional benefits include:\n\n* **SSL termination** - Decrypt incoming requests and encrypt server responses so backend servers do not have to perform these potentially expensive operations\n * Removes the need to install X.509 certificates on each server\n* **Session persistence** - Issue cookies and route a specific client's requests to same instance if the web apps do not keep track of sessions\n\nDisadvantages of load balancer\n------------------------------\n\n* The load balancer can become a performance bottleneck if it does not have enough resources or if it is not configured properly.\n* Introducing a load balancer to help eliminate a single point of failure results in increased complexity.\n* A single load balancer is a single point of failure, configuring multiple load balancers further increases complexity.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Scalability", + "url": "https://cs.fyi/guide/scalability-for-dummies", + "type": "article" + }, + { + "title": "NGINX Architecture", + "url": "https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/", + "type": "article" + }, + { + "title": "HAProxy Architecture Guide", + "url": "http://www.haproxy.org/download/1.2/doc/architecture.txt", + "type": "article" + } + ] + }, + "ocdcbhHrwjJX0KWgmsOL6": { + "title": "LB vs Reverse Proxy", + "description": "* Deploying a load balancer is useful when you have multiple servers. Often, load balancers route traffic to a set of servers serving the same function.\n* Reverse proxies can be useful even with just one web server or application server, opening up the benefits described in the previous section.\n* Solutions such as NGINX and HAProxy can support both layer 7 reverse proxying and load balancing.\n\nDisadvantages of Reverse Proxy:\n-------------------------------\n\n* Introducing a reverse proxy results in increased complexity.\n* A single reverse proxy is a single point of failure, configuring multiple reverse proxies (ie a failover) further increases complexity.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Reverse Proxy vs Load Balancer", + "url": "https://www.nginx.com/resources/glossary/reverse-proxy-vs-load-balancer/", + "type": "article" + }, + { + "title": "NGINX Architecture", + "url": "https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/", + "type": "article" + }, + { + "title": "HAProxy Architecture Guide", + "url": "http://www.haproxy.org/download/1.2/doc/architecture.txt", + "type": "article" + }, + { + "title": "Reverse Proxy", + "url": "https://en.wikipedia.org/wiki/Reverse_proxy", + "type": "article" + } + ] + }, + "urSjLyLTE5IIz0TFxMBWL": { + "title": "Load Balancing Algorithms", + "description": "A load balancer is a software or hardware device that keeps any one server from becoming overloaded. A load balancing algorithm is the logic that a load balancer uses to distribute network traffic between servers (an algorithm is a set of predefined rules).\n\nThere are two primary approaches to load balancing. Dynamic load balancing uses algorithms that take into account the current state of each server and distribute traffic accordingly. Static load balancing distributes traffic without making these adjustments. Some static algorithms send an equal amount of traffic to each server in a group, either in a specified order or at random.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Types of Load Balancing Algorithms", + "url": "https://www.cloudflare.com/learning/performance/types-of-load-balancing-algorithms/", + "type": "article" + }, + { + "title": "Explore top posts about Algorithms", + "url": "https://app.daily.dev/tags/algorithms?ref=roadmapsh", + "type": "article" + } + ] + }, + "e69-JVbDj7dqV_p1j1kML": { + "title": "Layer 7 Load Balancing", + "description": "Layer 7 load balancers look at the application layer to decide how to distribute requests. This can involve contents of the header, message, and cookies. Layer 7 load balancers terminate network traffic, reads the message, makes a load-balancing decision, then opens a connection to the selected server. For example, a layer 7 load balancer can direct video traffic to servers that host videos while directing more sensitive user billing traffic to security-hardened servers.\n\nAt the cost of flexibility, layer 4 load balancing requires less time and computing resources than Layer 7, although the performance impact can be minimal on modern commodity hardware.", + "links": [] + }, + "MpM9rT1-_LGD7YbnBjqOk": { + "title": "Layer 4 Load Balancing", + "description": "Layer 4 load balancers look at info at the transport layer to decide how to distribute requests. Generally, this involves the source, destination IP addresses, and ports in the header, but not the contents of the packet. Layer 4 load balancers forward network packets to and from the upstream server, performing Network Address Translation (NAT).", + "links": [] + }, + "IkUCfSWNY-02wg2WCo1c6": { + "title": "Horizontal Scaling", + "description": "Load balancers can also help with horizontal scaling, improving performance and availability. Scaling out using commodity machines is more cost efficient and results in higher availability than scaling up a single server on more expensive hardware, called Vertical Scaling. It is also easier to hire for talent working on commodity hardware than it is for specialized enterprise systems.\n\nDisadvantages of horizontal scaling\n-----------------------------------\n\n* Scaling horizontally introduces complexity and involves cloning servers\n * Servers should be stateless: they should not contain any user-related data like sessions or profile pictures\n * Sessions can be stored in a centralized data store such as a database (SQL, NoSQL) or a persistent cache (Redis, Memcached)\n* Downstream servers such as caches and databases need to handle more simultaneous connections as upstream servers scale out.", + "links": [] + }, + "XXuzTrP5UNVwSpAk-tAGr": { + "title": "Application Layer", + "description": "Separating out the web layer from the application layer (also known as platform layer) allows you to scale and configure both layers independently. Adding a new API results in adding application servers without necessarily adding additional web servers. The single responsibility principle advocates for small and autonomous services that work together. Small teams with small services can plan more aggressively for rapid growth.\n\n![](https://i.imgur.com/F0cjurv.png)\n\nDisadvantages\n-------------\n\n* Adding an application layer with loosely coupled services requires a different approach from an architectural, operations, and process viewpoint (vs a monolithic system).\n* Microservices can add complexity in terms of deployments and operations.\n\nFor more resources, visit the following links:", + "links": [ + { + "title": "Intro to architecting systems for scale", + "url": "http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer", + "type": "article" + } + ] + }, + "UKTiaHCzYXnrNw31lHriv": { + "title": "Microservices", + "description": "Related to the \"Application Layer\" discussion are microservices, which can be described as a suite of independently deployable, small, modular services. Each service runs a unique process and communicates through a well-defined, lightweight mechanism to serve a business goal. 1\n\nPinterest, for example, could have the following microservices: user profile, follower, feed, search, photo upload, etc.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Introduction to Microservices", + "url": "https://aws.amazon.com/microservices/", + "type": "article" + }, + { + "title": "Microservices - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Microservices", + "type": "article" + }, + { + "title": "Microservices", + "url": "https://martinfowler.com/articles/microservices.html", + "type": "article" + }, + { + "title": "Explore top posts about Microservices", + "url": "https://app.daily.dev/tags/microservices?ref=roadmapsh", + "type": "article" + } + ] + }, + "Nt0HUWLOl4O77elF8Is1S": { + "title": "Service Discovery", + "description": "Systems such as [Consul](https://www.consul.io/docs/index.html), [Etcd](https://coreos.com/etcd/docs/latest), and [Zookeeper](http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper) can help services find each other by keeping track of registered names, addresses, and ports. [Health checks](https://www.consul.io/intro/getting-started/checks.html) help verify service integrity and are often done using an HTTP endpoint. Both Consul and Etcd have a built in key-value store that can be useful for storing config values and other shared data.\n\nVisit the following links to learn more:", + "links": [ + { + "title": "Intro to Service Discovery", + "url": "https://github.com/donnemartin/system-design-primer#Service-Discovery", + "type": "opensource" + }, + { + "title": "What is Service-oriented architecture?", + "url": "https://en.wikipedia.org/wiki/Service-oriented_architecture", + "type": "article" + }, + { + "title": "Explore top posts about Architecture", + "url": "https://app.daily.dev/tags/architecture?ref=roadmapsh", + "type": "article" + } + ] + }, + "5FXwwRMNBhG7LT5ub6t2L": { + "title": "Databases", + "description": "Picking the right database for a system is an important decision, as it can have a significant impact on the performance, scalability, and overall success of the system. Some of the key reasons why it's important to pick the right database include:\n\n* Performance: Different databases have different performance characteristics, and choosing the wrong one can lead to poor performance and slow response times.\n* Scalability: As the system grows and the volume of data increases, the database needs to be able to scale accordingly. Some databases are better suited for handling large amounts of data than others.\n* Data Modeling: Different databases have different data modeling capabilities and choosing the right one can help to keep the data consistent and organized.\n* Data Integrity: Different databases have different capabilities for maintaining data integrity, such as enforcing constraints, and can have different levels of data security.\n* Support and maintenance: Some databases have more active communities and better documentation, making it easier to find help and resources.\n\nOverall, by choosing the right database, you can ensure that your system will perform well, scale as needed, and be maintainable in the long run.", + "links": [ + { + "title": "Explore top posts about Backend Development", + "url": "https://app.daily.dev/tags/backend?ref=roadmapsh", + "type": "article" + }, + { + "title": "Scaling up to your first 10 million users", + "url": "https://www.youtube.com/watch?v=kKjm4ehYiMs", + "type": "video" + } + ] + }, + "KLnpMR2FxlQkCHZP6-tZm": { + "title": "SQL vs NoSQL", + "description": "SQL databases, such as MySQL and PostgreSQL, are best suited for structured, relational data and use a fixed schema. They provide robust ACID (Atomicity, Consistency, Isolation, Durability) transactions and support complex queries and joins.\n\nNoSQL databases, such as MongoDB and Cassandra, are best suited for unstructured, non-relational data and use a flexible schema. They provide high scalability and performance for large amounts of data and are often used in big data and real-time web applications.\n\nThe choice between SQL and NoSQL depends on the specific use case and requirements of the project. If you need to store and query structured data with complex relationships, an SQL database is likely a better choice. If you need to store and query large amounts of unstructured data with high scalability and performance, a NoSQL database may be a better choice.\n\nLearn more from the following links:", + "links": [ + { + "title": "SQL vs NoSQL: The Differences", + "url": "https://www.sitepoint.com/sql-vs-nosql-differences/", + "type": "article" + }, + { + "title": "SQL vs. NoSQL Databases: What’s the Difference?", + "url": "https://www.ibm.com/blog/sql-vs-nosql/", + "type": "article" + }, + { + "title": "NoSQL vs. SQL Databases", + "url": "https://www.mongodb.com/nosql-explained/nosql-vs-sql", + "type": "article" + }, + { + "title": "Explore top posts about NoSQL", + "url": "https://app.daily.dev/tags/nosql?ref=roadmapsh", + "type": "article" + } + ] + }, + "dc-aIbBwUdlwgwQKGrq49": { + "title": "Replication", + "description": "Replication is the process of copying data from one database to another. Replication is used to increase availability and scalability of databases. There are two types of replication: master-slave and master-master.\n\nMaster-slave Replication:\n-------------------------\n\nThe master serves reads and writes, replicating writes to one or more slaves, which serve only reads. Slaves can also replicate to additional slaves in a tree-like fashion. If the master goes offline, the system can continue to operate in read-only mode until a slave is promoted to a master or a new master is provisioned.\n\nMaster-master Replication:\n--------------------------\n\nBoth masters serve reads and writes and coordinate with each other on writes. If either master goes down, the system can continue to operate with both reads and writes.", + "links": [] + }, + "FX6dcV_93zOfbZMdM_-li": { + "title": "Sharding", + "description": "Sharding distributes data across different databases such that each database can only manage a subset of the data. Taking a users database as an example, as the number of users increases, more shards are added to the cluster.\n\nSimilar to the advantages of federation, sharding results in less read and write traffic, less replication, and more cache hits. Index size is also reduced, which generally improves performance with faster queries. If one shard goes down, the other shards are still operational, although you'll want to add some form of replication to avoid data loss. Like federation, there is no single central master serializing writes, allowing you to write in parallel with increased throughput.\n\nLearn more from the following links:", + "links": [ + { + "title": "The coming of the Shard", + "url": "http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html", + "type": "article" + }, + { + "title": "Shard (database architecture)", + "url": "https://en.wikipedia.org/wiki/Shard_(database_architecture)", + "type": "article" + }, + { + "title": "Explore top posts about Backend Development", + "url": "https://app.daily.dev/tags/backend?ref=roadmapsh", + "type": "article" + } + ] + }, + "DGmVRI7oWdSOeIUn_g0rI": { + "title": "Federation", + "description": "Federation (or functional partitioning) splits up databases by function. For example, instead of a single, monolithic database, you could have three databases: forums, users, and products, resulting in less read and write traffic to each database and therefore less replication lag. Smaller databases result in more data that can fit in memory, which in turn results in more cache hits due to improved cache locality. With no single central master serializing writes you can write in parallel, increasing throughput.", + "links": [] + }, + "Zp9D4--DgtlAjE2nIfaO_": { + "title": "Denormalization", + "description": "Denormalization attempts to improve read performance at the expense of some write performance. Redundant copies of the data are written in multiple tables to avoid expensive joins. Some RDBMS such as PostgreSQL and Oracle support materialized views which handle the work of storing redundant information and keeping redundant copies consistent.\n\nOnce data becomes distributed with techniques such as federation and sharding, managing joins across data centers further increases complexity. Denormalization might circumvent the need for such complex joins.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Denormalization", + "url": "https://en.wikipedia.org/wiki/Denormalization", + "type": "article" + } + ] + }, + "fY8zgbB13wxZ1CFtMSdZZ": { + "title": "SQL Tuning", + "description": "SQL tuning is a broad topic and many books have been written as reference. It's important to benchmark and profile to simulate and uncover bottlenecks.\n\n* Benchmark - Simulate high-load situations with tools such as ab.\n* Profile - Enable tools such as the slow query log to help track performance issues.\n\nBenchmarking and profiling might point you to the following optimizations.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Optimizing MySQL Queries", + "url": "https://aiddroid.com/10-tips-optimizing-mysql-queries-dont-suck/", + "type": "article" + }, + { + "title": "How we optimized PostgreSQL queries 100x", + "url": "https://towardsdatascience.com/how-we-optimized-postgresql-queries-100x-ff52555eabe?gi=13caf5bcf32e", + "type": "article" + }, + { + "title": "Explore top posts about SQL", + "url": "https://app.daily.dev/tags/sql?ref=roadmapsh", + "type": "article" + } + ] + }, + "KFtdmmce4bRkDyvFXZzLN": { + "title": "Key-Value Store", + "description": "A key-value store generally allows for `O(1)` reads and writes and is often backed by memory or SSD. Data stores can maintain keys in lexicographic order, allowing efficient retrieval of key ranges. Key-value stores can allow for storing of metadata with a value.\n\nKey-value stores provide high performance and are often used for simple data models or for rapidly-changing data, such as an in-memory cache layer. Since they offer only a limited set of operations, complexity is shifted to the application layer if additional operations are needed.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Key–value database", + "url": "https://en.wikipedia.org/wiki/Key%E2%80%93value_database", + "type": "article" + }, + { + "title": "What are the disadvantages of using a key/value table?", + "url": "https://stackoverflow.com/questions/4056093/what-are-the-disadvantages-of-using-a-key-value-table-over-nullable-columns-or", + "type": "article" + } + ] + }, + "didEznSlVHqqlijtyOSr3": { + "title": "Document Store", + "description": "A document store is centered around documents (XML, JSON, binary, etc), where a document stores all information for a given object. Document stores provide APIs or a query language to query based on the internal structure of the document itself. Note, many key-value stores include features for working with a value's metadata, blurring the lines between these two storage types.\n\nBased on the underlying implementation, documents are organized by collections, tags, metadata, or directories. Although documents can be organized or grouped together, documents may have fields that are completely different from each other.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Document-oriented database", + "url": "https://en.wikipedia.org/wiki/Document-oriented_database", + "type": "article" + } + ] + }, + "WHq1AdISkcgthaugE9uY7": { + "title": "Wide Column Store", + "description": "A wide column store's basic unit of data is a column (name/value pair). A column can be grouped in column families (analogous to a SQL table). Super column families further group column families. You can access each column independently with a row key, and columns with the same row key form a row. Each value contains a timestamp for versioning and for conflict resolution.\n\nGoogle introduced Bigtable as the first wide column store, which influenced the open-source HBase often-used in the Hadoop ecosystem, and Cassandra from Facebook. Stores such as BigTable, HBase, and Cassandra maintain keys in lexicographic order, allowing efficient retrieval of selective key ranges.\n\nLearn more from the following links:", + "links": [ + { + "title": "Bigtable architecture", + "url": "https://www.read.seas.harvard.edu/~kohler/class/cs239-w08/chang06bigtable.pdf", + "type": "article" + } + ] + }, + "6RLgnL8qLBzYkllHeaI-Z": { + "title": "Graph Databases", + "description": "In a graph database, each node is a record and each arc is a relationship between two nodes. Graph databases are optimized to represent complex relationships with many foreign keys or many-to-many relationships.\n\nGraphs databases offer high performance for data models with complex relationships, such as a social network. They are relatively new and are not yet widely-used; it might be more difficult to find development tools and resources. Many graphs can only be accessed with REST APIs.\n\nLearn more from the following links:", + "links": [ + { + "title": "Graph database", + "url": "https://en.wikipedia.org/wiki/Graph_database", + "type": "article" + }, + { + "title": "Explore top posts about Backend Development", + "url": "https://app.daily.dev/tags/backend?ref=roadmapsh", + "type": "article" + }, + { + "title": "Introduction to NoSQL", + "url": "https://www.youtube.com/watch?v=qI_g07C_Q5I", + "type": "video" + } + ] + }, + "-X4g8kljgVBOBcf1DDzgi": { + "title": "Caching", + "description": "Caching is the process of storing frequently accessed data in a temporary storage location, called a cache, in order to quickly retrieve it without the need to query the original data source. This can improve the performance of an application by reducing the number of times a data source must be accessed.\n\nThere are several caching strategies:\n\n* Refresh Ahead\n* Write-Behind\n* Write-through\n* Cache Aside\n\nAlso, you can have the cache in several places, examples include:\n\n* Client Caching\n* CDN Caching\n* Web Server Caching\n* Database Caching\n* Application Caching\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Caching Strategies", + "url": "https://medium.com/@mmoshikoo/cache-strategies-996e91c80303", + "type": "article" + } + ] + }, + "Bgqgl67FK56ioLNFivIsc": { + "title": "Refresh Ahead", + "description": "You can configure the cache to automatically refresh any recently accessed cache entry prior to its expiration.\n\nRefresh-ahead can result in reduced latency vs read-through if the cache can accurately predict which items are likely to be needed in the future.\n\nDisadvantage of refresh-ahead:\n------------------------------\n\n* Not accurately predicting which items are likely to be needed in the future can result in reduced performance than without refresh-ahead.\n\n![](https://i.imgur.com/sBXb7lb.png)\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "From cache to in-memory data grid", + "url": "http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast", + "type": "article" + } + ] + }, + "vNndJ-MWetcbaF2d-3-JP": { + "title": "Write-behind", + "description": "In write-behind, the application does the following:\n\n* Add/update entry in cache\n* Asynchronously write entry to the data store, improving write performance\n\nDisadvantages of write-behind:\n------------------------------\n\n* There could be data loss if the cache goes down prior to its contents hitting the data store.\n* It is more complex to implement write-behind than it is to implement cache-aside or write-through.\n\n![Scalability, availability, stability, patterns](https://i.imgur.com/XDsb7RS.png)\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Scalability, availability, stability, patterns", + "url": "http://www.slideshare.net/jboner/scalability-availability-stability-patterns/", + "type": "article" + } + ] + }, + "RNITLR1FUQWkRbSBXTD_z": { + "title": "Write-through", + "description": "The application uses the cache as the main data store, reading and writing data to it, while the cache is responsible for reading and writing to the database:\n\n* Application adds/updates entry in cache\n* Cache synchronously writes entry to data store\n* Return\n\nApplication code:\n\n set_user(12345, {\"foo\":\"bar\"})\n \n\nCache code:\n\n def set_user(user_id, values):\n user = db.query(\"UPDATE Users WHERE id = {0}\", user_id, values)\n cache.set(user_id, user)\n \n\nWrite-through is a slow overall operation due to the write operation, but subsequent reads of just written data are fast. Users are generally more tolerant of latency when updating data than reading data. Data in the cache is not stale.\n\nDisadvantages\n-------------\n\n* When a new node is created due to failure or scaling, the new node will not cache entries until the entry is updated in the database. Cache-aside in conjunction with write through can mitigate this issue.\n* Most data written might never be read, which can be minimized with a TTL.\n\n![Write through](https://i.imgur.com/Ujf0awN.png)\n\nHave a look at the following resources to learn more:", + "links": [ + { + "title": "Scalability, availability, stability, patterns", + "url": "http://www.slideshare.net/jboner/scalability-availability-stability-patterns/", + "type": "article" + } + ] + }, + "bffJlvoLHFldS0CluWifP": { + "title": "Cache Aside", + "description": "The application is responsible for reading and writing from storage. The cache does not interact with storage directly. The application does the following:\n\n* Look for entry in cache, resulting in a cache miss\n* Load entry from the database\n* Add entry to cache\n* Return entry\n\n def get_user(self, user_id):\n user = cache.get(\"user.{0}\", user_id)\n if user is None:\n user = db.query(\"SELECT * FROM users WHERE user_id = {0}\", user_id)\n if user is not None:\n key = \"user.{0}\".format(user_id)\n cache.set(key, json.dumps(user))\n return user\n \n\n[Memcached](https://memcached.org/) is generally used in this manner. Subsequent reads of data added to cache are fast. Cache-aside is also referred to as lazy loading. Only requested data is cached, which avoids filling up the cache with data that isn't requested.\n\n![Cache Aside](https://i.imgur.com/Ujf0awN.png)\n\nTo learn more, have a look at the following resources:", + "links": [ + { + "title": "From cache to in-memory data grid", + "url": "https://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast", + "type": "article" + } + ] + }, + "RHNRb6QWiGvCK3KQOPK3u": { + "title": "Client Caching", + "description": "Client-side caching refers to the practice of storing frequently accessed data on the client's device rather than the server. This type of caching can help improve the performance of an application by reducing the number of times the client needs to request data from the server.\n\nOne common example of client-side caching is web browsers caching frequently accessed web pages and resources. When a user visits a web page, the browser stores a copy of the page and its resources (such as images, stylesheets, and scripts) in the browser's cache. If the user visits the same page again, the browser can retrieve the cached version of the page and its resources instead of requesting them from the server, which can reduce the load time of the page.\n\nAnother example of client-side caching is application-level caching. Some applications, such as mobile apps, can cache data on the client's device to improve performance and reduce the amount of data that needs to be transferred over the network.\n\nClient side caching has some advantages like reducing server load, faster page load times, and reducing network traffic. However, it also has some drawbacks like the potential for stale data if the client-side cache is not properly managed, or consuming memory or disk space on the client's device.\n\nLearn more from the following links:", + "links": [ + { + "title": "HTTP Caching", + "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching", + "type": "article" + } + ] + }, + "Kisvxlrjb7XnKFCOdxRtb": { + "title": "CDN Caching", + "description": "A Content Delivery Network (CDN) is a distributed network of servers that are strategically placed in various locations around the world. The main purpose of a CDN is to serve content to end-users with high availability and high performance by caching frequently accessed content on servers that are closer to the end-users.\n\nWhen a user requests content from a website that is using a CDN, the CDN will first check if the requested content is available in the cache of a nearby server. If the content is found in the cache, it is served to the user from the nearby server. If the content is not found in the cache, it is requested from the origin server (the original source of the content) and then cached on the nearby server for future requests.\n\nCDN caching can significantly improve the performance and availability of a website by reducing the distance that data needs to travel, reducing the load on the origin server, and allowing for faster delivery of content to end-users.", + "links": [] + }, + "o532nPnL-d2vXJn9k6vMl": { + "title": "Web Server Caching", + "description": "[Reverse proxies](https://github.com/donnemartin/system-design-primer#reverse-proxy-web-server) and caches such as [Varnish](https://www.varnish-cache.org/) can serve static and dynamic content directly. Web servers can also cache requests, returning responses without having to contact application servers.", + "links": [] + }, + "BeIg4jzbij2cwc_a_VpYG": { + "title": "Database Caching", + "description": "Your database usually includes some level of caching in a default configuration, optimized for a generic use case. Tweaking these settings for specific usage patterns can further boost performance. it's like having a quick-access memory for frequently used data in applications. Here's a simplified explanation:\n\n1. **Quick Access**: Imagine you're looking up information in a big library (the database). Instead of going to the library every time you need the same book (data), you keep a copy of it on your desk (cache).\n \n2. **Faster Retrieval**: When you need that book again, you first check your desk (cache). If it's there, great! You get it right away without going to the library (database) again.\n \n3. **Saving Time**: If the book isn't on your desk (cache miss), you go to the library (database) to get it. But you make sure to put a copy on your desk for next time, so you won't have to go to the library again if you need it soon.\n \n4. **Different Types**: There are different ways to do this caching. You can cache the results of searches (like bookmarking), whole pieces of information (like keeping a paper copy), or even entire web pages (like saving a snapshot).\n \n5. **Benefits**: By keeping frequently used data close by, you save time and reduce the strain on the library (database). It's like having your most-used books right at your fingertips, making your work faster and more efficient.\n \n\nHowever, it's important to keep the cached data up to date. Otherwise, you might end up with outdated information, like using an old edition of a book instead of the latest one. So, managing this cache properly is key to keeping things running smoothly.", + "links": [] + }, + "5Ux_JBDOkflCaIm4tVBgO": { + "title": "Application Caching", + "description": "In-memory caches such as Memcached and Redis are key-value stores between your application and your data storage. Since the data is held in RAM, it is much faster than typical databases where data is stored on disk. RAM is more limited than disk, so [cache invalidation](https://en.wikipedia.org/wiki/Cache_algorithms) algorithms such as [least recently used (LRU)](https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_\\(LRU\\)) can help invalidate 'cold' entries and keep 'hot' data in RAM.\n\nRedis has the following additional features:\n\n* Persistence option\n* Built-in data structures such as sorted sets and lists\n\nGenerally, you should try to avoid file-based caching, as it makes cloning and auto-scaling more difficult.\n\nVisit the following links to learn more:", + "links": [ + { + "title": "Intro to Application Caching", + "url": "https://github.com/donnemartin/system-design-primer#application-caching", + "type": "opensource" + } + ] + }, + "84N4XY31PwXRntXX1sdCU": { + "title": "Asynchronism", + "description": "Asynchronous workflows help reduce request times for expensive operations that would otherwise be performed in-line. They can also help by doing time-consuming work in advance, such as periodic aggregation of data.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Asynchronous Thinking for Microservice System Design", + "url": "https://www.datamachines.io/blog/asynchronous-thinking-for-microservice-system-design", + "type": "article" + }, + { + "title": "Patterns for microservices - Sync vs Async", + "url": "https://medium.com/inspiredbrilliance/patterns-for-microservices-e57a2d71ff9e", + "type": "article" + }, + { + "title": "Applying back pressure when overloaded", + "url": "http://mechanical-sympathy.blogspot.com/2012/05/apply-back-pressure-when-overloaded.html", + "type": "article" + }, + { + "title": "Little's law", + "url": "https://en.wikipedia.org/wiki/Little%27s_law", + "type": "article" + }, + { + "title": "What is the difference between a message queue and a task queue?", + "url": "https://www.quora.com/What-is-the-difference-between-a-message-queue-and-a-task-queue-Why-would-a-task-queue-require-a-message-broker-like-RabbitMQ-Redis-Celery-or-IronMQ-to-function", + "type": "article" + }, + { + "title": "It's all a numbers game", + "url": "https://www.youtube.com/watch?v=1KRYH75wgy4", + "type": "video" + } + ] + }, + "YiYRZFE_zwPMiCZxz9FnP": { + "title": "Back Pressure", + "description": "If queues start to grow significantly, the queue size can become larger than memory, resulting in cache misses, disk reads, and even slower performance. [Back pressure](http://mechanical-sympathy.blogspot.com/2012/05/apply-back-pressure-when-overloaded.html) can help by limiting the queue size, thereby maintaining a high throughput rate and good response times for jobs already in the queue. Once the queue fills up, clients get a server busy or HTTP 503 status code to try again later. Clients can retry the request at a later time, perhaps with [exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff).", + "links": [] + }, + "a9wGW_H1HpvvdYCXoS-Rf": { + "title": "Task Queues", + "description": "Tasks queues receive tasks and their related data, runs them, then delivers their results. They can support scheduling and can be used to run computationally-intensive jobs in the background.\n\n[Celery](https://docs.celeryproject.org/en/stable/) has support for scheduling and primarily has python support.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Celery - Distributed Task Queue", + "url": "https://docs.celeryq.dev/en/stable/", + "type": "article" + } + ] + }, + "37X1_9eCmkZkz5RDudE5N": { + "title": "Message Queues", + "description": "Message queues receive, hold, and deliver messages. If an operation is too slow to perform inline, you can use a message queue with the following workflow:\n\n* An application publishes a job to the queue, then notifies the user of job status\n* A worker picks up the job from the queue, processes it, then signals the job is complete\n\nThe user is not blocked and the job is processed in the background. During this time, the client might optionally do a small amount of processing to make it seem like the task has completed. For example, if posting a tweet, the tweet could be instantly posted to your timeline, but it could take some time before your tweet is actually delivered to all of your followers.\n\n* [@article@Redis](https://redis.io/) is useful as a simple message broker but messages can be lost.\n* [@article@RabbitMQ](https://www.rabbitmq.com/) is popular but requires you to adapt to the 'AMQP' protocol and manage your own nodes.\n* [@article@AWS SQS](https://aws.amazon.com/sqs/) is hosted but can have high latency and has the possibility of messages being delivered twice.\n* [@article@Apache Kafka](https://kafka.apache.org/) is a distributed event store and stream-processing platform.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "What is Redis?", + "url": "https://redis.io/", + "type": "article" + }, + { + "title": "RabbitMQ in Message Queues", + "url": "https://www.rabbitmq.com/", + "type": "article" + }, + { + "title": "Overview of Amazon SQS", + "url": "https://aws.amazon.com/sqs/", + "type": "article" + }, + { + "title": "Apache Kafka", + "url": "https://kafka.apache.org/", + "type": "article" + }, + { + "title": "RabbitMQ for beginners", + "url": "https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html", + "type": "article" + } + ] + }, + "3pRi8M4xQXsehkdfUNtYL": { + "title": "Idempotent Operations", + "description": "Idempotent operations are operations that can be applied multiple times without changing the result beyond the initial application. In other words, if an operation is idempotent, it will have the same effect whether it is executed once or multiple times.\n\nIt is also important to understand the benefits of [idempotent](https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning) operations, especially when using message or task queues that do not guarantee _exactly once_ processing. Many queueing systems guarantee _at least once_ message delivery or processing. These systems are not completely synchronized, for instance, across geographic regions, which simplifies some aspects of their implementation or design. Designing the operations that a task queue executes to be idempotent allows one to use a queueing system that has accepted this design trade-off.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "What is an idempotent operation?", + "url": "https://stackoverflow.com/questions/1077412/what-is-an-idempotent-operation", + "type": "article" + }, + { + "title": "Overview of Idempotent Operation", + "url": "https://www.baeldung.com/cs/idempotent-operations", + "type": "article" + } + ] + }, + "uQFzD_ryd-8Dr1ppjorYJ": { + "title": "Communication", + "description": "Network protocols are a key part of systems today, as no system can exist in isolation - they all need to communicate with each other. You should learn about the networking protocols such as HTTP, TCP, UDP. Also, learn about the architectural styles such as RPC, REST, GraphQL and gRPC.", + "links": [] + }, + "I_nR6EwjNXSG7_hw-_VhX": { + "title": "HTTP", + "description": "HTTP is a method for encoding and transporting data between a client and a server. It is a request/response protocol: clients issue requests and servers issue responses with relevant content and completion status info about the request. HTTP is self-contained, allowing requests and responses to flow through many intermediate routers and servers that perform load balancing, caching, encryption, and compression.\n\nA basic HTTP request consists of a verb (method) and a resource (endpoint). Below are common HTTP verbs:\n\n Verb | Description | Idempotent* | Safe | Cacheable |\n -------|-------------------------------|-------------|------|-----------------------------------------|\n GET | Reads a resource | Yes | Yes | Yes |\n POST | Creates a resource or trigger | No | No | Yes if response contains freshness info |\n PUT | Creates or replace a resource | Yes | No | No |\n PATCH | Partially updates a resource | No | No | Yes if response contains freshness info |\n DELETE | Deletes a resource | Yes | No | No |\n \n \n\nHTTP is an application layer protocol relying on lower-level protocols such as TCP and UDP.", + "links": [ + { + "title": "Everything you need to know about HTTP", + "url": "https://cs.fyi/guide/http-in-depth", + "type": "article" + }, + { + "title": "What Is HTTP?", + "url": "https://www.nginx.com/resources/glossary/http/", + "type": "article" + }, + { + "title": "What is the difference between HTTP protocol and TCP protocol?", + "url": "https://www.quora.com/What-is-the-difference-between-HTTP-protocol-and-TCP-protocol", + "type": "article" + } + ] + }, + "2nF5uC6fYKbf0RFgGNHiP": { + "title": "TCP", + "description": "TCP is a connection-oriented protocol over an [IP network](https://en.wikipedia.org/wiki/Internet_Protocol). Connection is established and terminated using a [handshake](https://en.wikipedia.org/wiki/Handshaking). All packets sent are guaranteed to reach the destination in the original order and without corruption through:\n\n* Sequence numbers and [checksum fields](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Checksum_computation) for each packet\n* [@article@Acknowledgement](https://en.wikipedia.org/wiki/Acknowledgement_\\(data_networks\\)) packets and automatic retransmission\n\nIf the sender does not receive a correct response, it will resend the packets. If there are multiple timeouts, the connection is dropped. TCP also implements [flow control](https://en.wikipedia.org/wiki/Flow_control_\\(data\\)) and congestion control. These guarantees cause delays and generally result in less efficient transmission than UDP.\n\nTo ensure high throughput, web servers can keep a large number of TCP connections open, resulting in high memory usage. It can be expensive to have a large number of open connections between web server threads and say, a [memcached server](https://memcached.org/). [Connection pooling](https://en.wikipedia.org/wiki/Connection_pool) can help in addition to switching to UDP where applicable.\n\nTCP is useful for applications that require high reliability but are less time critical. Some examples include web servers, database info, SMTP, FTP, and SSH.\n\nUse TCP over UDP when:\n\n* You need all of the data to arrive intact\n* You want to automatically make a best estimate use of the network throughput\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "What Is TCP?", + "url": "https://github.com/donnemartin/system-design-primer#transmission-control-protocol-tcp", + "type": "opensource" + }, + { + "title": "What is the difference between HTTP protocol and TCP protocol?", + "url": "https://www.quora.com/What-is-the-difference-between-HTTP-protocol-and-TCP-protocol", + "type": "article" + }, + { + "title": "Networking for game programming", + "url": "http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/", + "type": "article" + }, + { + "title": "Key differences between TCP and UDP protocols", + "url": "http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/", + "type": "article" + }, + { + "title": "Difference between TCP and UDP", + "url": "http://stackoverflow.com/questions/5970383/difference-between-tcp-and-udp", + "type": "article" + }, + { + "title": "Transmission control protocol", + "url": "https://en.wikipedia.org/wiki/Transmission_Control_Protocol", + "type": "article" + }, + { + "title": "User datagram protocol", + "url": "https://en.wikipedia.org/wiki/User_Datagram_Protocol", + "type": "article" + }, + { + "title": "Scaling memcache at Facebook", + "url": "http://www.cs.bu.edu/~jappavoo/jappavoo.github.com/451/papers/memcache-fb.pdf", + "type": "article" + } + ] + }, + "LC5aTmUKNiw9RuSUt3fSE": { + "title": "UDP", + "description": "UDP is connectionless. Datagrams (analogous to packets) are guaranteed only at the datagram level. Datagrams might reach their destination out of order or not at all. UDP does not support congestion control. Without the guarantees that TCP support, UDP is generally more efficient.\n\nUDP can broadcast, sending datagrams to all devices on the subnet. This is useful with DHCP because the client has not yet received an IP address, thus preventing a way for TCP to stream without the IP address.\n\nUDP is less reliable but works well in real time use cases such as VoIP, video chat, streaming, and realtime multiplayer games.\n\nUse UDP over TCP when:\n\n* You need the lowest latency\n* Late data is worse than loss of data\n* You want to implement your own error correction\n\nTo learn more, visit the following link:", + "links": [ + { + "title": "Networking for game programming", + "url": "http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/", + "type": "article" + }, + { + "title": "Key differences between TCP and UDP protocols", + "url": "http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/", + "type": "article" + }, + { + "title": "Difference between TCP and UDP", + "url": "http://stackoverflow.com/questions/5970383/difference-between-tcp-and-udp", + "type": "article" + }, + { + "title": "Transmission control protocol", + "url": "https://en.wikipedia.org/wiki/Transmission_Control_Protocol", + "type": "article" + }, + { + "title": "User datagram protocol", + "url": "https://en.wikipedia.org/wiki/User_Datagram_Protocol", + "type": "article" + }, + { + "title": "Scaling memcache at Facebook", + "url": "http://www.cs.bu.edu/~jappavoo/jappavoo.github.com/451/papers/memcache-fb.pdf", + "type": "article" + } + ] + }, + "ixqucoAkgnphWYAFnsMe-": { + "title": "RPC", + "description": "In an RPC, a client causes a procedure to execute on a different address space, usually a remote server. The procedure is coded as if it were a local procedure call, abstracting away the details of how to communicate with the server from the client program. Remote calls are usually slower and less reliable than local calls so it is helpful to distinguish RPC calls from local calls. Popular RPC frameworks include [Protobuf](https://developers.google.com/protocol-buffers/), [Thrift](https://thrift.apache.org/), and [Avro](https://avro.apache.org/docs/current/).\n\nRPC is a request-response protocol:\n\n* Client program - Calls the client stub procedure. The parameters are pushed onto the stack like a local procedure call.\n* Client stub procedure - Marshals (packs) procedure id and arguments into a request message.\n* Client communication module - OS sends the message from the client to the server.\n* Server communication module - OS passes the incoming packets to the server stub procedure.\n* Server stub procedure - Unmarshalls the results, calls the server procedure matching the procedure id and passes the given arguments.\n* The server response repeats the steps above in reverse order.\n\nSample RPC calls:\n\n GET /someoperation?data=anId\n \n POST /anotheroperation\n {\n \"data\":\"anId\";\n \"anotherdata\": \"another value\"\n }\n \n\nRPC is focused on exposing behaviors. RPCs are often used for performance reasons with internal communications, as you can hand-craft native calls to better fit your use cases.\n\nDisadvantage of RPC\n-------------------\n\n* RPC clients become tightly coupled to the service implementation.\n* A new API must be defined for every new operation or use case.\n* It can be difficult to debug RPC.\n* You might not be able to leverage existing technologies out of the box. For example, it might require additional effort to ensure [RPC calls are properly cached](http://etherealbits.com/2012/12/debunking-the-myths-of-rpc-rest/) on caching servers such as [Squid](http://www.squid-cache.org/).\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "What Is RPC?", + "url": "https://github.com/donnemartin/system-design-primer#remote-procedure-call-rpc", + "type": "opensource" + }, + { + "title": "Explore top posts about Backend Development", + "url": "https://app.daily.dev/tags/backend?ref=roadmapsh", + "type": "article" + } + ] + }, + "6-bgmfDTAQ9zABhpmVoHV": { + "title": "REST", + "description": "REST is an architectural style enforcing a client/server model where the client acts on a set of resources managed by the server. The server provides a representation of resources and actions that can either manipulate or get a new representation of resources. All communication must be stateless and cacheable.\n\nThere are four qualities of a RESTful interface:\n\n* Identify resources (URI in HTTP) - use the same URI regardless of any operation.\n* Change with representations (Verbs in HTTP) - use verbs, headers, and body.\n* Self-descriptive error message (status response in HTTP) - Use status codes, don't reinvent the wheel.\n* HATEOAS (HTML interface for HTTP) - your web service should be fully accessible in a browser.\n\nREST is focused on exposing data. It minimizes the coupling between client/server and is often used for public HTTP APIs. REST uses a more generic and uniform method of exposing resources through URIs, representation through headers, and actions through verbs such as GET, POST, PUT, DELETE, and PATCH. Being stateless, REST is great for horizontal scaling and partitioning.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "What Is REST?", + "url": "https://github.com/donnemartin/system-design-primer#representational-state-transfer-rest", + "type": "opensource" + }, + { + "title": "What are the drawbacks of using RESTful APIs?", + "url": "https://www.quora.com/What-are-the-drawbacks-of-using-RESTful-APIs", + "type": "article" + }, + { + "title": "Explore top posts about REST API", + "url": "https://app.daily.dev/tags/rest-api?ref=roadmapsh", + "type": "article" + } + ] + }, + "Hw2v1rCYn24qxBhhmdc28": { + "title": "gRPC", + "description": "gRPC is a high-performance, open-source framework for building remote procedure call (RPC) APIs. It is based on the Protocol Buffers data serialization format and supports a variety of programming languages, including C#, Java, and Python.\n\nLearn more from the following links:", + "links": [ + { + "title": "What Is gRPC?", + "url": "https://www.wallarm.com/what/the-concept-of-grpc", + "type": "article" + }, + { + "title": "Explore top posts about gRPC", + "url": "https://app.daily.dev/tags/grpc?ref=roadmapsh", + "type": "article" + } + ] + }, + "jwv2g2Yeq-6Xv5zSd746R": { + "title": "GraphQL", + "description": "GraphQL is a query language and runtime for building APIs. It allows clients to define the structure of the data they need and the server will return exactly that. This is in contrast to traditional REST APIs, where the server exposes a fixed set of endpoints and the client must work with the data as it is returned.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "GraphQL Server", + "url": "https://www.howtographql.com/basics/3-big-picture/", + "type": "article" + }, + { + "title": "What is GraphQL?", + "url": "https://www.redhat.com/en/topics/api/what-is-graphql", + "type": "article" + }, + { + "title": "Explore top posts about GraphQL", + "url": "https://app.daily.dev/tags/graphql?ref=roadmapsh", + "type": "article" + } + ] + }, + "p--uEm6klLx_hKxKJiXE5": { + "title": "Performance Antipatterns", + "description": "Performance antipatterns in system design refer to common mistakes or suboptimal practices that can lead to poor performance in a system. These patterns can occur at different levels of the system and can be caused by a variety of factors such as poor design, lack of optimization, or lack of understanding of the workload.\n\nSome of the examples of performance antipatterns include:\n\n* **N+1 queries:** This occurs when a system makes multiple queries to a database to retrieve related data, instead of using a single query to retrieve all the necessary data.\n* **Chatty interfaces:** This occurs when a system makes too many small and frequent requests to an external service or API, instead of making fewer, larger requests.\n* **Unbounded data:** This occurs when a system retrieves or processes more data than is necessary for the task at hand, leading to increased resource usage and reduced performance.\n* **Inefficient algorithms:** This occurs when a system uses an algorithm that is not well suited to the task at hand, leading to increased resource usage and reduced performance.\n\nLearn more from the following links:", + "links": [ + { + "title": "Performance antipatterns for cloud applications", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/", + "type": "article" + }, + { + "title": "Explore top posts about Performance", + "url": "https://app.daily.dev/tags/performance?ref=roadmapsh", + "type": "article" + } + ] + }, + "hxiV2uF7tvhZKe4K-4fTn": { + "title": "Busy Database", + "description": "A busy database in system design refers to a database that is handling a high volume of requests or transactions, this can occur when a system is experiencing high traffic or when a database is not properly optimized for the workload it is handling. This can lead to Performance degradation, Increased resource utilization, Deadlocks and contention, Data inconsistencies. To address a busy database, a number of approaches can be taken such as Scaling out, Optimizing the schema, Caching, and Indexing.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Busy Database antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/busy-database/", + "type": "article" + }, + { + "title": "Explore top posts about Database", + "url": "https://app.daily.dev/tags/database?ref=roadmapsh", + "type": "article" + } + ] + }, + "i_2M3VloG-xTgWDWp4ngt": { + "title": "Busy Frontend", + "description": "Performing asynchronous work on a large number of background threads can starve other concurrent foreground tasks of resources, decreasing response times to unacceptable levels.\n\nResource-intensive tasks can increase the response times for user requests and cause high latency. One way to improve response times is to offload a resource-intensive task to a separate thread. This approach lets the application stay responsive while processing happens in the background. However, tasks that run on a background thread still consume resources. If there are too many of them, they can starve the threads that are handling requests.\n\nThis problem typically occurs when an application is developed as monolithic piece of code, with all of the business logic combined into a single tier shared with the presentation layer.\n\nTo learn more about this and how to fix this pattern, visit the following link:", + "links": [ + { + "title": "Busy Front End antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/busy-front-end/", + "type": "article" + }, + { + "title": "Explore top posts about Frontend Development", + "url": "https://app.daily.dev/tags/frontend?ref=roadmapsh", + "type": "article" + } + ] + }, + "0IzQwuYi_E00bJwxDuw2B": { + "title": "Chatty I/O", + "description": "The cumulative effect of a large number of I/O requests can have a significant impact on performance and responsiveness.\n\nNetwork calls and other I/O operations are inherently slow compared to compute tasks. Each I/O request typically has significant overhead, and the cumulative effect of numerous I/O operations can slow down the system. Here are some common causes of chatty I/O.\n\n* Reading and writing individual records to a database as distinct requests\n* Implementing a single logical operation as a series of HTTP requests\n* Reading and writing to a file on disk\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Chatty I/O antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/chatty-io/", + "type": "article" + } + ] + }, + "6u3XmtJFWyJnyZUnJcGYb": { + "title": "Extraneous Fetching", + "description": "Extraneous fetching in system design refers to the practice of retrieving more data than is needed for a specific task or operation. This can occur when a system is not optimized for the specific workload or when the system is not properly designed to handle the data requirements.\n\nExtraneous fetching can lead to a number of issues, such as:\n\n* Performance degradation\n* Increased resource utilization\n* Increased network traffic\n* Poor user experience\n\nVisit the following links to learn more:", + "links": [ + { + "title": "Extraneous Fetching antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/extraneous-fetching/", + "type": "article" + } + ] + }, + "lwMs4yiUHF3nQwcvauers": { + "title": "Improper Instantiation", + "description": "Improper instantiation in system design refers to the practice of creating unnecessary instances of an object, class or service, which can lead to performance and scalability issues. This can happen when the system is not properly designed, when the code is not written in an efficient way, or when the code is not optimized for the specific use case.\n\nLearn more from the following links:", + "links": [ + { + "title": "Improper Instantiation antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/", + "type": "article" + } + ] + }, + "p1QhCptnwzTGUXVMnz_Oz": { + "title": "Monolithic Persistence", + "description": "Monolithic Persistence refers to the use of a single, monolithic database to store all of the data for an application or system. This approach can be used for simple, small-scale systems but as the system grows and evolves it can become a bottleneck, resulting in poor scalability, limited flexibility, and increased complexity. To address these limitations, a number of approaches can be taken such as Microservices, Sharding, and NoSQL databases.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Monolithic Persistence antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/monolithic-persistence/", + "type": "article" + } + ] + }, + "klvHk1_e03Jarn5T46QNi": { + "title": "No Caching", + "description": "No caching antipattern occurs when a cloud application that handles many concurrent requests, repeatedly fetches the same data. This can reduce performance and scalability.\n\nWhen data is not cached, it can cause a number of undesirable behaviors, including:\n\n* Repeatedly fetching the same information from a resource that is expensive to access, in terms of I/O overhead or latency.\n* Repeatedly constructing the same objects or data structures for multiple requests.\n* Making excessive calls to a remote service that has a service quota and throttles clients past a certain limit.\n\nIn turn, these problems can lead to poor response times, increased contention in the data store, and poor scalability.", + "links": [ + { + "title": "No Caching antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/no-caching/", + "type": "article" + } + ] + }, + "r7uQxmurvfsYtTCieHqly": { + "title": "Noisy Neighbor", + "description": "Noisy neighbor refers to a situation in which one or more components of a system are utilizing a disproportionate amount of shared resources, leading to resource contention and reduced performance for other components. This can occur when a system is not properly designed or configured to handle the workload, or when a component is behaving unexpectedly.\n\nExamples of noisy neighbor scenarios include:\n\n* One user on a shared server utilizing a large amount of CPU or memory, leading to reduced performance for other users on the same server.\n* One process on a shared server utilizing a large amount of I/O, causing other processes to experience slow I/O and increased latency.\n* One application consuming a large amount of network bandwidth, causing other applications to experience reduced throughput.\n\nLearn from the following links:", + "links": [ + { + "title": "Noisy Neighbor antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor", + "type": "article" + } + ] + }, + "LNmAJmh2ndFtOQIpvX_ga": { + "title": "Retry Storm", + "description": "Retry Storm refers to a situation in which a large number of retries are triggered in a short period of time, leading to a significant increase in traffic and resource usage. This can occur when a system is not properly designed to handle failures or when a component is behaving unexpectedly. This can lead to Performance degradation, Increased resource utilization, Increased network traffic, and Poor user experience. To address retry storms, a number of approaches can be taken such as Exponential backoff, Circuit breaking, and Monitoring and alerting.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Retry Storm antipattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/antipatterns/retry-storm/", + "type": "article" + }, + { + "title": "How To Avoid Retry Storms In Distributed Systems", + "url": "https://faun.pub/how-to-avoid-retry-storms-in-distributed-systems-91bf34f43c7f", + "type": "article" + } + ] + }, + "Ihnmxo_bVgZABDwg1QGGk": { + "title": "Synchronous I/O", + "description": "Blocking the calling thread while I/O completes can reduce performance and affect vertical scalability.\n\nA synchronous I/O operation blocks the calling thread while the I/O completes. The calling thread enters a wait state and is unable to perform useful work during this interval, wasting processing resources.\n\nCommon examples of I/O include:\n\n* Retrieving or persisting data to a database or any type of persistent storage.\n* Sending a request to a web service.\n* Posting a message or retrieving a message from a queue.\n* Writing to or reading from a local file.\n\nThis antipattern typically occurs because:", + "links": [] + }, + "hDFYlGFYwcwWXLmrxodFX": { + "title": "Monitoring", + "description": "Distributed applications and services running in the cloud are, by their nature, complex pieces of software that comprise many moving parts. In a production environment, it's important to be able to track the way in which users use your system, trace resource utilization, and generally monitor the health and performance of your system. You can use this information as a diagnostic aid to detect and correct issues, and also to help spot potential problems and prevent them from occurring.\n\nVisit the following to learn more:", + "links": [ + { + "title": "Monitoring and Diagnostics Guidance", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "hkjYvLoVt9xKDzubm0Jy3": { + "title": "Health Monitoring", + "description": "A system is healthy if it is running and capable of processing requests. The purpose of health monitoring is to generate a snapshot of the current health of the system so that you can verify that all components of the system are functioning as expected.\n\nLearn more from the following:", + "links": [ + { + "title": "Health Monitoring of a System", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#health-monitoring", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "rVrwaioGURvrqNBufF2dj": { + "title": "Availability Monitoring", + "description": "A truly healthy system requires that the components and subsystems that compose the system are available. Availability monitoring is closely related to health monitoring. But whereas health monitoring provides an immediate view of the current health of the system, availability monitoring is concerned with tracking the availability of the system and its components to generate statistics about the uptime of the system.\n\nLearn more from the following:", + "links": [ + { + "title": "Availability Monitoring", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#availability-monitoring", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "x1i3qWFtNNjd00-kAvFHw": { + "title": "Performance Monitoring", + "description": "As the system is placed under more and more stress (by increasing the volume of users), the size of the datasets that these users access grows and the possibility of failure of one or more components becomes more likely. Frequently, component failure is preceded by a decrease in performance. If you're able detect such a decrease, you can take proactive steps to remedy the situation.\n\nLearn more from following links:", + "links": [ + { + "title": "Performance Monitoring", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#performance-monitoring", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "I_NfmDcBph8-oyFVFTknL": { + "title": "Security Monitoring", + "description": "All commercial systems that include sensitive data must implement a security structure. The complexity of the security mechanism is usually a function of the sensitivity of the data. In a system that requires users to be authenticated, you should record:\n\n* All sign-in attempts, whether they fail or succeed.\n* All operations performed by—and the details of all resources accessed by—an authenticated user.\n* When a user ends a session and signs out.\n\nMonitoring might be able to help detect attacks on the system. For example, a large number of failed sign-in attempts might indicate a brute-force attack. An unexpected surge in requests might be the result of a distributed denial-of-service (DDoS) attack. You must be prepared to monitor all requests to all resources regardless of the source of these requests. A system that has a sign-in vulnerability might accidentally expose resources to the outside world without requiring a user to actually sign in.\n\nVisit the following to learn more:", + "links": [ + { + "title": "Security Monitoring", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#security-monitoring", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "eSZq74lROh5lllLyTBK5a": { + "title": "Usage Monitoring", + "description": "Usage monitoring tracks how the features and components of an application are used. An operator can use the gathered data to:\n\n* Determine which features are heavily used and determine any potential hotspots in the system. High-traffic elements might benefit from functional partitioning or even replication to spread the load more evenly. An operator can also use this information to ascertain which features are infrequently used and are possible candidates for retirement or replacement in a future version of the system.\n* Obtain information about the operational events of the system under normal use. For example, in an e-commerce site, you can record the statistical information about the number of transactions and the volume of customers that are responsible for them. This information can be used for capacity planning as the number of customers grows.\n* Detect (possibly indirectly) user satisfaction with the performance or functionality of the system. For example, if a large number of customers in an e-commerce system regularly abandon their shopping carts, this might be due to a problem with the checkout functionality.\n* Generate billing information. A commercial application or multitenant service might charge customers for the resources that they use.\n* Enforce quotas. If a user in a multitenant system exceeds their paid quota of processing time or resource usage during a specified period, their access can be limited or processing can be throttled.\n\nLearn more from the following links:", + "links": [ + { + "title": "Usage Monitoring", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#usage-monitoring", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "Q0fKphqmPwjTD0dhqiP6K": { + "title": "Instrumentation", + "description": "Instrumentation is a critical part of the monitoring process. You can make meaningful decisions about the performance and health of a system only if you first capture the data that enables you to make these decisions. The information that you gather by using instrumentation should be sufficient to enable you to assess performance, diagnose problems, and make decisions without requiring you to sign in to a remote production server to perform tracing (and debugging) manually. Instrumentation data typically comprises metrics and information that's written to trace logs.\n\nLearn more from the following links:", + "links": [ + { + "title": "Instrumenting an application", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#instrumenting-an-application", + "type": "article" + }, + { + "title": "Instrumenting using Open Telemetry", + "url": "https://opentelemetry.io/docs/concepts/what-is-opentelemetry", + "type": "article" + } + ] + }, + "IwMOTpsYHApdvHZOhXtIw": { + "title": "Visualization & Alerts", + "description": "An important aspect of any monitoring system is the ability to present the data in such a way that an operator can quickly spot any trends or problems. Also important is the ability to quickly inform an operator if a significant event has occurred that might require attention.\n\nLearn more from the following links:", + "links": [ + { + "title": "Visualize Data and Raise Alerts", + "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/monitoring#visualizing-data-and-raising-alerts", + "type": "article" + } + ] + }, + "THlzcZTNnPGLRiHPWT-Jv": { + "title": "Cloud Design Patterns", + "description": "Cloud design patterns are solutions to common problems that arise when building systems that run on a cloud platform. These patterns provide a way to design and implement systems that can take advantage of the unique characteristics of the cloud, such as scalability, elasticity, and pay-per-use pricing. Some common cloud design patterns include Scalability, Elasticity, Fault Tolerance, Microservices, Serverless, Data Management, Front-end and Back-end separation and Hybrid.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Cloud Design Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/", + "type": "article" + }, + { + "title": "Explore top posts about Cloud", + "url": "https://app.daily.dev/tags/cloud?ref=roadmapsh", + "type": "article" + } + ] + }, + "dsWpta3WIBvv2K9pNVPo0": { + "title": "Messaging", + "description": "Messaging is a pattern that allows for the communication and coordination between different components or systems, using messaging technologies such as message queues, message brokers, and event buses. This pattern allows for decoupling of the sender and receiver, and can be used to build scalable and flexible systems.\n\nLearn more from the following links:", + "links": [ + { + "title": "Messaging Cloud Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/category/messaging", + "type": "article" + } + ] + }, + "VgvUWAC6JYFyPZKBRoEqf": { + "title": "Sequential Convoy", + "description": "Sequential Convoy is a pattern that allows for the execution of a series of tasks, or convoy, in a specific order. This pattern can be used to ensure that a set of dependent tasks are executed in the correct order and to handle errors or failures during the execution of the tasks. It can be used in scenarios like workflow and transaction. It can be implemented using a variety of technologies such as state machines, workflows, and transactions.\n\nLearn more from the following links:", + "links": [ + { + "title": "What is Sequential Convoy?", + "url": "https://learn.microsoft.com/en-us/biztalk/core/sequential-convoys", + "type": "article" + }, + { + "title": "Overview - Sequential Convoy pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/sequential-convoy", + "type": "article" + } + ] + }, + "uR1fU6pm7zTtdBcNgSRi4": { + "title": "Scheduling Agent Supervisor", + "description": "Coordinate a set of distributed actions as a single operation. If any of the actions fail, try to handle the failures transparently, or else undo the work that was performed, so the entire operation succeeds or fails as a whole. This can add resiliency to a distributed system, by enabling it to recover and retry actions that fail due to transient exceptions, long-lasting faults, and process failures.\n\nLearn more from the following links:", + "links": [ + { + "title": "Scheduler Agent Supervisor pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/scheduler-agent-supervisor", + "type": "article" + } + ] + }, + "LncTxPg-wx8loy55r5NmV": { + "title": "Queu-based Load Leveling", + "description": "Use a queue that acts as a buffer between a task and a service it invokes in order to smooth intermittent heavy loads that can cause the service to fail or the task to time out. This can help to minimize the impact of peaks in demand on availability and responsiveness for both the task and the service.\n\nLearn more from the following links:", + "links": [ + { + "title": "Queue-Based Load Leveling pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/queue-based-load-leveling", + "type": "article" + } + ] + }, + "2ryzJhRDTo98gGgn9mAxR": { + "title": "Publisher/Subscriber", + "description": "Enable an application to announce events to multiple interested consumers asynchronously, without coupling the senders to the receivers.\n\nLearn more from the following links:", + "links": [ + { + "title": "Publisher-Subscriber pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/publisher-subscriber", + "type": "article" + } + ] + }, + "DZcZEOi7h3u0744YhASet": { + "title": "Priority Queue", + "description": "Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority. This pattern is useful in applications that offer different service level guarantees to individual clients.\n\nLearn more from the following links:", + "links": [ + { + "title": "Priority Queue pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/priority-queue", + "type": "article" + } + ] + }, + "siXdR3TB9-4wx_qWieJ5w": { + "title": "Pipes and Filters", + "description": "Decompose a task that performs complex processing into a series of separate elements that can be reused. This can improve performance, scalability, and reusability by allowing task elements that perform the processing to be deployed and scaled independently.\n\nLearn more from the following links:", + "links": [ + { + "title": "Pipes and Filters pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/pipes-and-filters", + "type": "article" + } + ] + }, + "9Ld07KLOqP0ICtXEjngYM": { + "title": "Competing Consumers", + "description": "Enable multiple concurrent consumers to process messages received on the same messaging channel. With multiple concurrent consumers, a system can process multiple messages concurrently to optimize throughput, to improve scalability and availability, and to balance the workload.\n\nLearn more from the following links:", + "links": [ + { + "title": "Competing Consumers pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/competing-consumers", + "type": "article" + } + ] + }, + "aCzRgUkVBvtHUeLU6p5ZH": { + "title": "Choreography", + "description": "Have each component of the system participate in the decision-making process about the workflow of a business transaction, instead of relying on a central point of control.\n\nLearn more from the following links:", + "links": [ + { + "title": "Choreography pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/choreography", + "type": "article" + } + ] + }, + "kl4upCnnZvJSf2uII1Pa0": { + "title": "Claim Check", + "description": "Split a large message into a claim check and a payload. Send the claim check to the messaging platform and store the payload to an external service. This pattern allows large messages to be processed, while protecting the message bus and the client from being overwhelmed or slowed down. This pattern also helps to reduce costs, as storage is usually cheaper than resource units used by the messaging platform.\n\nLearn more from the following links:", + "links": [ + { + "title": "Claim Check - Cloud Design patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/claim-check", + "type": "article" + } + ] + }, + "eNFNXPsFiryVxFe4unVxk": { + "title": "Async Request Reply", + "description": "Decouple backend processing from a frontend host, where backend processing needs to be asynchronous, but the frontend still needs a clear response.\n\nLearn more from the following links:", + "links": [ + { + "title": "Asynchronous Request-Reply pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/async-request-reply", + "type": "article" + } + ] + }, + "W0cUCrhiwH_Nrzxw50x3L": { + "title": "Data Management", + "description": "Data management is the key element of cloud applications, and influences most of the quality attributes. Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.\n\nLearn more from the following links:", + "links": [ + { + "title": "Data management patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/category/data-management", + "type": "article" + }, + { + "title": "Explore top posts about Data Management", + "url": "https://app.daily.dev/tags/data-management?ref=roadmapsh", + "type": "article" + } + ] + }, + "stZOcr8EUBOK_ZB48uToj": { + "title": "Valet Key", + "description": "Use a token that provides clients with restricted direct access to a specific resource, in order to offload data transfer from the application. This is particularly useful in applications that use cloud-hosted storage systems or queues, and can minimize cost and maximize scalability and performance.\n\nLearn more from the following links:", + "links": [ + { + "title": "Valet Key pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/valet-key", + "type": "article" + } + ] + }, + "-lKq-LT7EPK7r3xbXLgwS": { + "title": "Static Content Hosting", + "description": "Deploy static content to a cloud-based storage service that can deliver them directly to the client. This can reduce the need for potentially expensive compute instances.\n\nLearn more from the following links:", + "links": [ + { + "title": "Static Content Hosting pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/static-content-hosting", + "type": "article" + } + ] + }, + "R6YehzA3X6DDo6oGBoBAx": { + "title": "Sharding", + "description": "Sharding is a technique used to horizontally partition a large data set across multiple servers, in order to improve the performance, scalability, and availability of a system. This is done by breaking the data set into smaller chunks, called shards, and distributing the shards across multiple servers. Each shard is self-contained and can be managed and scaled independently of the other shards. Sharding can be used in scenarios like scalability, availability, and geo-distribution. Sharding can be implemented using several different algorithms such as range-based sharding, hash-based sharding, and directory-based sharding.\n\nLearn more from the following links:", + "links": [ + { + "title": "Sharding pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/sharding", + "type": "article" + }, + { + "title": "Explore top posts about Backend Development", + "url": "https://app.daily.dev/tags/backend?ref=roadmapsh", + "type": "article" + } + ] + }, + "WB7vQ4IJ0TPh2MbZvxP6V": { + "title": "Materialized View", + "description": "Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations. This can help support efficient querying and data extraction, and improve application performance.\n\nLearn more from the following links:", + "links": [ + { + "title": "Materialized View pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/materialized-view", + "type": "article" + } + ] + }, + "AH0nVeVsfYOjcI3vZvcdz": { + "title": "Index Table", + "description": "Create indexes over the fields in data stores that are frequently referenced by queries. This pattern can improve query performance by allowing applications to more quickly locate the data to retrieve from a data store.\n\nLearn more from the following links:", + "links": [ + { + "title": "Index Table pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/index-table", + "type": "article" + } + ] + }, + "7OgRKlwFqrk3XO2z49EI1": { + "title": "Event Sourcing", + "description": "Instead of storing just the current state of the data in a domain, use an append-only store to record the full series of actions taken on that data. The store acts as the system of record and can be used to materialize the domain objects. This can simplify tasks in complex domains, by avoiding the need to synchronize the data model and the business domain, while improving performance, scalability, and responsiveness. It can also provide consistency for transactional data, and maintain full audit trails and history that can enable compensating actions.\n\nLearn more from the following links:", + "links": [ + { + "title": "Event Sourcing pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/event-sourcing", + "type": "article" + }, + { + "title": "Explore top posts about Architecture", + "url": "https://app.daily.dev/tags/architecture?ref=roadmapsh", + "type": "article" + } + ] + }, + "LTD3dn05c0ruUJW0IQO7z": { + "title": "CQRS", + "description": "CQRS stands for Command and Query Responsibility Segregation, a pattern that separates read and update operations for a data store. Implementing CQRS in your application can maximize its performance, scalability, and security. The flexibility created by migrating to CQRS allows a system to better evolve over time and prevents update commands from causing merge conflicts at the domain level.\n\nLearn more from the following links:", + "links": [ + { + "title": "CQRS pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs", + "type": "article" + } + ] + }, + "PK4V9OWNVi8StdA2N13X2": { + "title": "Cache-Aside", + "description": "Load data on demand into a cache from a data store. This can improve performance and also helps to maintain consistency between data held in the cache and data in the underlying data store.\n\nLearn more from the following links:", + "links": [ + { + "title": "Cache-Aside pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/cache-aside", + "type": "article" + } + ] + }, + "PtJ7-v1VCLsyaWWYHYujV": { + "title": "Design & Implementation", + "description": "Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Design and implementation patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/category/design-implementation", + "type": "article" + } + ] + }, + "VIbXf7Jh9PbQ9L-g6pHUG": { + "title": "Strangler Fig", + "description": "Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services. As features from the legacy system are replaced, the new system eventually replaces all of the old system's features, strangling the old system and allowing you to decommission it.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "What is Strangler fig?", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/strangler-fig", + "type": "article" + } + ] + }, + "izPT8NfJy1JC6h3i7GJYl": { + "title": "Static Content Hosting", + "description": "Deploy static content to a cloud-based storage service that can deliver them directly to the client. This can reduce the need for potentially expensive compute instances.\n\nLearn more from the following links:", + "links": [ + { + "title": "Static Content Hosting pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/static-content-hosting", + "type": "article" + } + ] + }, + "AAgOGrra5Yz3_eG6tD2Fx": { + "title": "Sidecar", + "description": "Deploy components of an application into a separate process or container to provide isolation and encapsulation. This pattern can also enable applications to be composed of heterogeneous components and technologies.\n\nThis pattern is named Sidecar because it resembles a sidecar attached to a motorcycle. In the pattern, the sidecar is attached to a parent application and provides supporting features for the application. The sidecar also shares the same lifecycle as the parent application, being created and retired alongside the parent. The sidecar pattern is sometimes referred to as the sidekick pattern and is a decomposition pattern.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Sidecar pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/sidecar", + "type": "article" + }, + { + "title": "Explore top posts about Infrastructure", + "url": "https://app.daily.dev/tags/infrastructure?ref=roadmapsh", + "type": "article" + } + ] + }, + "WkoFezOXLf1H2XI9AtBtv": { + "title": "Pipes & Filters", + "description": "Decompose a task that performs complex processing into a series of separate elements that can be reused. This can improve performance, scalability, and reusability by allowing task elements that perform the processing to be deployed and scaled independently.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Pipe and Filter Architectural Style", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/pipes-and-filters", + "type": "article" + } + ] + }, + "beWKUIB6Za27yhxQwEYe3": { + "title": "Leader Election", + "description": "Coordinate the actions performed by a collection of collaborating instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the others. This can help to ensure that instances don't conflict with each other, cause contention for shared resources, or inadvertently interfere with the work that other instances are performing.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Leader Election Pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/leader-election", + "type": "article" + } + ] + }, + "LXH_mDlILqcyIKtMYTWqy": { + "title": "Gateway Routing", + "description": "Route requests to multiple services or multiple service instances using a single endpoint. The pattern is useful when you want to:\n\n* Expose multiple services on a single endpoint and route to the appropriate service based on the request\n* Expose multiple instances of the same service on a single endpoint for load balancing or availability purposes\n* Expose differing versions of the same service on a single endpoint and route traffic across the different versions\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Gateway Routing pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-routing", + "type": "article" + } + ] + }, + "0SOWAA8hrLM-WsG5k66fd": { + "title": "Gateway Offloading", + "description": "Offload shared or specialized service functionality to a gateway proxy. This pattern can simplify application development by moving shared service functionality, such as the use of SSL certificates, from other parts of the application into the gateway.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Gateway Offloading pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-offloading", + "type": "article" + } + ] + }, + "bANGLm_5zR9mqMd6Oox8s": { + "title": "Gateway Aggregation", + "description": "Use a gateway to aggregate multiple individual requests into a single request. This pattern is useful when a client must make multiple calls to different backend systems to perform an operation.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Gateway Aggregation pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation", + "type": "article" + } + ] + }, + "BrgXwf7g2F-6Rqfjryvpj": { + "title": "External Config Store", + "description": "Move configuration information out of the application deployment package to a centralized location. This can provide opportunities for easier management and control of configuration data, and for sharing configuration data across applications and application instances.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "External Configuration Store pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/external-configuration-store", + "type": "article" + } + ] + }, + "ODjVoXnvJasPvCS2A5iMO": { + "title": "Compute Resource Consolidation", + "description": "Consolidate multiple tasks or operations into a single computational unit. This can increase compute resource utilization, and reduce the costs and management overhead associated with performing compute processing in cloud-hosted applications.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Compute Resource Consolidation pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/compute-resource-consolidation", + "type": "article" + } + ] + }, + "ivr3mh0OES5n86FI1PN4N": { + "title": "CQRS", + "description": "CQRS stands for Command and Query Responsibility Segregation, a pattern that separates read and update operations for a data store. Implementing CQRS in your application can maximize its performance, scalability, and security. The flexibility created by migrating to CQRS allows a system to better evolve over time and prevents update commands from causing merge conflicts at the domain level.\n\nLearn more from the following links:", + "links": [ + { + "title": "CQRS pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs", + "type": "article" + } + ] + }, + "n4It-lr7FFtSY83DcGydX": { + "title": "Backens for Frontend", + "description": "Create separate backend services to be consumed by specific frontend applications or interfaces. This pattern is useful when you want to avoid customizing a single backend for multiple interfaces. This pattern was first described by Sam Newman.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Backends for Frontends pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/backends-for-frontends", + "type": "article" + }, + { + "title": "Explore top posts about Frontend Development", + "url": "https://app.daily.dev/tags/frontend?ref=roadmapsh", + "type": "article" + } + ] + }, + "4hi7LvjLcv8eR6m-uk8XQ": { + "title": "Anti-Corruption Layer", + "description": "Implement a facade or adapter layer between different subsystems that don't share the same semantics. This layer translates requests that one subsystem makes to the other subsystem. Use this pattern to ensure that an application's design is not limited by dependencies on outside subsystems. This pattern was first described by Eric Evans in Domain-Driven Design.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Anti-corruption Layer pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/anti-corruption-layer", + "type": "article" + } + ] + }, + "Hja4YF3JcgM6CPwB1mxmo": { + "title": "Ambassador", + "description": "Create helper services that send network requests on behalf of a consumer service or application. An ambassador service can be thought of as an out-of-process proxy that is co-located with the client.\n\nThis pattern can be useful for offloading common client connectivity tasks such as monitoring, logging, routing, security (such as TLS), and resiliency patterns in a language agnostic way. It is often used with legacy applications, or other applications that are difficult to modify, in order to extend their networking capabilities. It can also enable a specialized team to implement those features.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Ambassador pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/ambassador", + "type": "article" + } + ] + }, + "DYkdM_L7T2GcTPAoZNnUR": { + "title": "Reliability Patterns", + "description": "These patterns provide a way to design and implement systems that can withstand failures, maintain high levels of performance, and recover quickly from disruptions. Some common reliability patterns include Failover, Circuit Breaker, Retry, Bulkhead, Backpressure, Cache-Aside, Idempotent Operations and Health Endpoint Monitoring.\n\nLearn more from the following links:", + "links": [ + { + "title": "Reliability Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/framework/resiliency/reliability-patterns", + "type": "article" + } + ] + }, + "Xzkvf4naveszLGV9b-8ih": { + "title": "Availability", + "description": "Availability is measured as a percentage of uptime, and defines the proportion of time that a system is functional and working. Availability is affected by system errors, infrastructure problems, malicious attacks, and system load. Cloud applications typically provide users with a service level agreement (SLA), which means that applications must be designed and implemented to maximize availability.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Availability Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/framework/resiliency/reliability-patterns#availability", + "type": "article" + } + ] + }, + "FPPJw-I1cw8OxKwmDh0dT": { + "title": "Deployment Stamps", + "description": "The deployment stamp pattern involves provisioning, managing, and monitoring a heterogeneous group of resources to host and operate multiple workloads or tenants. Each individual copy is called a stamp, or sometimes a service unit, scale unit, or cell. In a multi-tenant environment, every stamp or scale unit can serve a predefined number of tenants. Multiple stamps can be deployed to scale the solution almost linearly and serve an increasing number of tenants. This approach can improve the scalability of your solution, allow you to deploy instances across multiple regions, and separate your customer data.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Deployment Stamps pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/deployment-stamp", + "type": "article" + }, + { + "title": "Deployment Stamps 101", + "url": "https://blog.devgenius.io/deployment-stamps-101-7c04a6f704a2", + "type": "article" + }, + { + "title": "Explore top posts about CI/CD", + "url": "https://app.daily.dev/tags/cicd?ref=roadmapsh", + "type": "article" + } + ] + }, + "Ml9lPDGjRAJTHkBnX51Un": { + "title": "Geodes", + "description": "The Geode pattern involves deploying a collection of backend services into a set of geographical nodes, each of which can service any request for any client in any region. This pattern allows serving requests in an active-active style, improving latency and increasing availability by distributing request processing around the globe.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Geode pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/geodes", + "type": "article" + }, + { + "title": "Geode Formation, Types & Appearance | What is a Geode?", + "url": "https://study.com/academy/lesson/geode-formation-types-appearance.html", + "type": "article" + } + ] + }, + "cNJQoMNZmxNygWAJIA8HI": { + "title": "Health Endpoint Monitoring", + "description": "Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals. This can help to verify that applications and services are performing correctly.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Health Endpoint Monitoring pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring", + "type": "article" + }, + { + "title": "Explaining the health endpoint monitoring pattern", + "url": "https://www.oreilly.com/library/view/java-ee-8/9781788830621/5012c01e-90ca-4809-a210-d3736574f5b3.xhtml", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "-M3Zd8w79sKBAY6_aJRE8": { + "title": "Queue-Based Load Leveling", + "description": "Use a queue that acts as a buffer between a task and a service it invokes in order to smooth intermittent heavy loads that can cause the service to fail or the task to time out. This can help to minimize the impact of peaks in demand on availability and responsiveness for both the task and the service.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Queue-Based Load Leveling pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/queue-based-load-leveling", + "type": "article" + } + ] + }, + "6YVkguDOtwveyeP4Z1NL3": { + "title": "Throttling", + "description": "Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. This can allow the system to continue to function and meet service level agreements, even when an increase in demand places an extreme load on resources.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Throttling pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/throttling", + "type": "article" + } + ] + }, + "wPe7Xlwqws7tEpTAVvYjr": { + "title": "High Availability", + "description": "Azure infrastructure is composed of geographies, regions, and Availability Zones, which limit the blast radius of a failure and therefore limit potential impact to customer applications and data. The Azure Availability Zones construct was developed to provide a software and networking solution to protect against datacenter failures and to provide increased high availability (HA) to our customers. With HA architecture there is a balance between high resilience, low latency, and cost.\n\nLearn more from the following links:", + "links": [ + { + "title": "High availability Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/framework/resiliency/reliability-patterns#high-availability", + "type": "article" + } + ] + }, + "Ze471tPbAwlwZyU4oIzH9": { + "title": "Deployment Stamps", + "description": "The deployment stamp pattern involves provisioning, managing, and monitoring a heterogeneous group of resources to host and operate multiple workloads or tenants. Each individual copy is called a stamp, or sometimes a service unit, scale unit, or cell. In a multi-tenant environment, every stamp or scale unit can serve a predefined number of tenants. Multiple stamps can be deployed to scale the solution almost linearly and serve an increasing number of tenants. This approach can improve the scalability of your solution, allow you to deploy instances across multiple regions, and separate your customer data.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Deployment Stamps pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/deployment-stamp", + "type": "article" + }, + { + "title": "Deployment Stamps 101", + "url": "https://blog.devgenius.io/deployment-stamps-101-7c04a6f704a2", + "type": "article" + }, + { + "title": "Explore top posts about CI/CD", + "url": "https://app.daily.dev/tags/cicd?ref=roadmapsh", + "type": "article" + } + ] + }, + "6hOSEZJZ7yezVN67h5gmS": { + "title": "Geodes", + "description": "The Geode pattern involves deploying a collection of backend services into a set of geographical nodes, each of which can service any request for any client in any region. This pattern allows serving requests in an active-active style, improving latency and increasing availability by distributing request processing around the globe.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Geode pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/geodes", + "type": "article" + }, + { + "title": "Geode Formation, Types & Appearance | What is a Geode?", + "url": "https://study.com/academy/lesson/geode-formation-types-appearance.html", + "type": "article" + } + ] + }, + "uK5o7NgDvr2pV0ulF0Fh9": { + "title": "Health Endpoint Monitoring", + "description": "Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals. This can help to verify that applications and services are performing correctly.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Health Endpoint Monitoring pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring", + "type": "article" + }, + { + "title": "Explaining the health endpoint monitoring pattern", + "url": "https://www.oreilly.com/library/view/java-ee-8/9781788830621/5012c01e-90ca-4809-a210-d3736574f5b3.xhtml", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "IR2_kgs2U9rnAJiDBmpqK": { + "title": "Bulkhead", + "description": "The Bulkhead pattern is a type of application design that is tolerant of failure. In a bulkhead architecture, elements of an application are isolated into pools so that if one fails, the others will continue to function. It's named after the sectioned partitions (bulkheads) of a ship's hull. If the hull of a ship is compromised, only the damaged section fills with water, which prevents the ship from sinking.\n\nLearn more from the following links:", + "links": [ + { + "title": "Bulkhead pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/bulkhead", + "type": "article" + }, + { + "title": "Get started with Bulkhead", + "url": "https://dzone.com/articles/resilient-microservices-pattern-bulkhead-pattern", + "type": "article" + } + ] + }, + "D1OmCoqvd3-_af3u0ciHr": { + "title": "Circuit Breaker", + "description": "Handle faults that might take a variable amount of time to recover from, when connecting to a remote service or resource. This can improve the stability and resiliency of an application.\n\nLearn more from the following links:", + "links": [ + { + "title": "Circuit breaker design pattern", + "url": "https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern", + "type": "article" + }, + { + "title": "Overview of Circuit Breaker", + "url": "https://medium.com/geekculture/design-patterns-for-microservices-circuit-breaker-pattern-276249ffab33", + "type": "article" + } + ] + }, + "wlAWMjxZF6yav3ZXOScxH": { + "title": "Resiliency", + "description": "Resiliency is the ability of a system to gracefully handle and recover from failures, both inadvertent and malicious.\n\nThe nature of cloud hosting, where applications are often multi-tenant, use shared platform services, compete for resources and bandwidth, communicate over the Internet, and run on commodity hardware means there is an increased likelihood that both transient and more permanent faults will arise. The connected nature of the internet and the rise in sophistication and volume of attacks increase the likelihood of a security disruption.\n\nDetecting failures and recovering quickly and efficiently, is necessary to maintain resiliency.\n\nLearn more from the following links:", + "links": [ + { + "title": "Resiliency Patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/framework/resiliency/reliability-patterns#resiliency", + "type": "article" + } + ] + }, + "PLn9TF9GYnPcbpTdDMQbG": { + "title": "Bulkhead", + "description": "The Bulkhead pattern is a type of application design that is tolerant of failure. In a bulkhead architecture, elements of an application are isolated into pools so that if one fails, the others will continue to function. It's named after the sectioned partitions (bulkheads) of a ship's hull. If the hull of a ship is compromised, only the damaged section fills with water, which prevents the ship from sinking.\n\nLearn more from the following links:", + "links": [ + { + "title": "Bulkhead pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/bulkhead", + "type": "article" + }, + { + "title": "Get started with Bulkhead", + "url": "https://dzone.com/articles/resilient-microservices-pattern-bulkhead-pattern", + "type": "article" + } + ] + }, + "O4zYDqvVWD7sMI27k_0Nl": { + "title": "Circuit Breaker", + "description": "Handle faults that might take a variable amount of time to recover from, when connecting to a remote service or resource. This can improve the stability and resiliency of an application.\n\nLearn more from the following links:", + "links": [ + { + "title": "Circuit breaker design pattern", + "url": "https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern", + "type": "article" + }, + { + "title": "Overview of Circuit Breaker", + "url": "https://medium.com/geekculture/design-patterns-for-microservices-circuit-breaker-pattern-276249ffab33", + "type": "article" + } + ] + }, + "MNlWNjrG8eh5OzPVlbb9t": { + "title": "Compensating Transaction", + "description": "Undo the work performed by a series of steps, which together define an eventually consistent operation, if one or more of the steps fail. Operations that follow the eventual consistency model are commonly found in cloud-hosted applications that implement complex business processes and workflows.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Compensating Transaction pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/compensating-transaction", + "type": "article" + }, + { + "title": "Intro to Compensation Transaction", + "url": "https://en.wikipedia.org/wiki/Compensating_transaction", + "type": "article" + } + ] + }, + "CKCNk3obx4u43rBqUj2Yf": { + "title": "Health Endpoint Monitoring", + "description": "Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals. This can help to verify that applications and services are performing correctly.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Health Endpoint Monitoring pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring", + "type": "article" + }, + { + "title": "Explaining the health endpoint monitoring pattern", + "url": "https://www.oreilly.com/library/view/java-ee-8/9781788830621/5012c01e-90ca-4809-a210-d3736574f5b3.xhtml", + "type": "article" + }, + { + "title": "Explore top posts about Monitoring", + "url": "https://app.daily.dev/tags/monitoring?ref=roadmapsh", + "type": "article" + } + ] + }, + "AJLBFyAsEdQYF6ygO0MmQ": { + "title": "Leader Election", + "description": "Coordinate the actions performed by a collection of collaborating instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the others. This can help to ensure that instances don't conflict with each other, cause contention for shared resources, or inadvertently interfere with the work that other instances are performing.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Leader Election Pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/leader-election", + "type": "article" + } + ] + }, + "NybkOwl1lgaglZPRJQJ_Z": { + "title": "Queue-Based Load Leveling", + "description": "Use a queue that acts as a buffer between a task and a service it invokes in order to smooth intermittent heavy loads that can cause the service to fail or the task to time out. This can help to minimize the impact of peaks in demand on availability and responsiveness for both the task and the service.\n\nTo learn more visit the following links:", + "links": [ + { + "title": "Queue-Based Load Leveling pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/queue-based-load-leveling", + "type": "article" + } + ] + }, + "xX_9VGUaOkBYFH3jPjnww": { + "title": "Retry ", + "description": "Enable an application to handle transient failures when it tries to connect to a service or network resource, by transparently retrying a failed operation. This can improve the stability of the application.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Retry pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/retry", + "type": "article" + } + ] + }, + "RTEJHZ26znfBLrpQPtNvn": { + "title": "Scheduler Agent Supervisor", + "description": "Coordinate a set of distributed actions as a single operation. If any of the actions fail, try to handle the failures transparently, or else undo the work that was performed, so the entire operation succeeds or fails as a whole. This can add resiliency to a distributed system, by enabling it to recover and retry actions that fail due to transient exceptions, long-lasting faults, and process failures.\n\nLearn more from the following links:", + "links": [ + { + "title": "Scheduler Agent Supervisor pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/scheduler-agent-supervisor", + "type": "article" + } + ] + }, + "ZvYpE6-N5dAtRDIwqcAu6": { + "title": "Security", + "description": "Security provides confidentiality, integrity, and availability assurances against malicious attacks on information systems (and safety assurances for attacks on operational technology systems). Losing these assurances can negatively impact your business operations and revenue, as well as your organization's reputation in the marketplace. Maintaining security requires following well-established practices (security hygiene) and being vigilant to detect and rapidly remediate vulnerabilities and active attacks.\n\nLearn more from the following links:", + "links": [ + { + "title": "Security patterns", + "url": "https://learn.microsoft.com/en-us/azure/architecture/framework/security/security-patterns", + "type": "article" + }, + { + "title": "Explore top posts about Security", + "url": "https://app.daily.dev/tags/security?ref=roadmapsh", + "type": "article" + } + ] + }, + "lHPl-kr1ArblR7bJeQEB9": { + "title": "Federated Identity", + "description": "Delegate authentication to an external identity provider. This can simplify development, minimize the requirement for user administration, and improve the user experience of the application.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Federated Identity pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/federated-identity", + "type": "article" + } + ] + }, + "DTQJu0AvgWOhMFcOYqzTD": { + "title": "Gatekeeper", + "description": "Protect applications and services using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them. This can provide an additional layer of security and limit the system's attack surface.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Gatekeeper pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/gatekeeper", + "type": "article" + } + ] + }, + "VltZgIrApHOwZ8YHvdmHB": { + "title": "Valet Key", + "description": "Use a token that provides clients with restricted direct access to a specific resource, in order to offload data transfer from the application. This is particularly useful in applications that use cloud-hosted storage systems or queues, and can minimize cost and maximize scalability and performance.\n\nLearn more from the following links:", + "links": [ + { + "title": "Valet Key pattern", + "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/valet-key", + "type": "article" + } + ] + } +} \ No newline at end of file