<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: KeyboardInterrupt</title>
    <description>The latest articles on DEV Community by KeyboardInterrupt (@keyboardinterrupt).</description>
    <link>https://dev.to/keyboardinterrupt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F454948%2Fdad9e464-a307-4971-a36d-1821e4d5b38b.png</url>
      <title>DEV Community: KeyboardInterrupt</title>
      <link>https://dev.to/keyboardinterrupt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keyboardinterrupt"/>
    <language>en</language>
    <item>
      <title>Service/Project Evaluation and Integration Checklist</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Tue, 11 Mar 2025 10:42:13 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/serviceproject-evaluation-and-integration-checklist-1kmd</link>
      <guid>https://dev.to/keyboardinterrupt/serviceproject-evaluation-and-integration-checklist-1kmd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4wzfw4yp8ki1h3k4xwr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4wzfw4yp8ki1h3k4xwr.jpg" alt="Service/Project Evaluation and Integration Checklist" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Launching or integrating a new service or project can be challenging. I've been in situations where I overlooked something important halfway through. To avoid that, I created this checklist of questions to reference whenever needed.&lt;/p&gt;

&lt;p&gt;It covers essential areas like ownership, infrastructure, security, compliance, and scalability, helping to assess risks, operational impact, and costs. By answering these questions, you gain a clearer understanding of dependencies, performance, and long-term maintainability.&lt;/p&gt;




&lt;h2&gt;
  
  
  Contact Persons and Project Responsibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Who are the primary internal contacts for the project within our company, clients, and partners/suppliers?&lt;/li&gt;
&lt;li&gt;How will communication be managed with these contacts (e.g., regular meetings, emails, project management tools)?&lt;/li&gt;
&lt;li&gt;What is the priority of this project compared to ongoing activities or other parallel projects?&lt;/li&gt;
&lt;li&gt;Who will be the point of contact for the project after implementation, and who will actively participate in the implementation phase?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Service Interface
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Who is responsible for each component of the project/operation (e.g., development, deployment, support)?&lt;/li&gt;
&lt;li&gt;What communication channels will be used for service requests, change requests, and support (e.g., email, ticketing system)?&lt;/li&gt;
&lt;li&gt;How frequently are service requests or change requests expected?&lt;/li&gt;
&lt;li&gt;What are the agreed-upon SLAs for:

&lt;ul&gt;
&lt;li&gt;Response times to requests?&lt;/li&gt;
&lt;li&gt;Processing times for requests?&lt;/li&gt;
&lt;li&gt;Resolution times for requests?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Is there an on-call service agreement in place with our clients and partners? If yes, what are the terms?&lt;/li&gt;

&lt;li&gt;Do our clients and partners also provide on-call service, and if so, what are the terms?&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Infrastructure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On which platforms will the service components operate (e.g., Cloud, VMware, OpenStack, Kubernetes, bare metal, on-premises)?&lt;/li&gt;
&lt;li&gt;Are there any external systems we depend on (e.g., VPN, third-party APIs, external databases)? If so, what are they?&lt;/li&gt;
&lt;li&gt;Do we need to distribute components across multiple availability zones to ensure availability through redundnacy?&lt;/li&gt;
&lt;li&gt;How will communication be handled between different platforms and systems in a mixed environment (e.g., cloud/on-premises, different cloud providers)?&lt;/li&gt;
&lt;li&gt;Are there any single points of failure (SPOFs) in the infrastructure that need to be addressed?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation, Commissioning, and Onboarding
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is the detailed commissioning process for the project or service?&lt;/li&gt;
&lt;li&gt;Who is responsible for carrying out the installation: a partner, the client, or our internal teams?&lt;/li&gt;
&lt;li&gt;Can the installation be automated, and thus, repeated easily across environments? Is this process documented?&lt;/li&gt;
&lt;li&gt;Does the installation depend on any external systems or tools (e.g., licensing servers, external configurations)?&lt;/li&gt;
&lt;li&gt;Are there licensing requirements (e.g., license keys, product activation)?&lt;/li&gt;
&lt;li&gt;What is the data migration process for transferring existing data to the new service, and how will this be managed during on-boarding?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What dependencies exist within internal teams (e.g., development, operations, security) and external partners/systems?&lt;/li&gt;
&lt;li&gt;What are the potential consequences if these dependencies are unavailable (e.g., service downtime, delayed timelines)?&lt;/li&gt;
&lt;li&gt;Are there clear processes for managing these dependencies and handling disruptions?&lt;/li&gt;
&lt;li&gt;Can the requirements in this document be answered for each identified dependency, including their availability and SLAs?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How will data be accessed and interacted with in the new service (e.g., via API, direct database access)?&lt;/li&gt;
&lt;li&gt;Where will the data be stored (e.g., on-premises storage, cloud storage, hybrid storage)?&lt;/li&gt;
&lt;li&gt;What type of storage will be used (e.g., SSDs for speed, HDDs for cost, object storage for scalability)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Protection
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Does the service comply with data protection regulations such as GDPR or local laws? Are we adhering to all applicable privacy laws?&lt;/li&gt;
&lt;li&gt;Are any personal data or sensitive information being stored or processed (e.g., customer names, financial data)?&lt;/li&gt;
&lt;li&gt;Can the data collection be minimized by adjusting log levels or anonymizing data?&lt;/li&gt;
&lt;li&gt;Is encryption implemented for data in transit (e.g., TLS/SSL) and data at rest (e.g., encrypted databases)?&lt;/li&gt;
&lt;li&gt;How is sensitive data stored securely, and is it encrypted as required by legal and regulatory standards?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Backup &amp;amp; Restore
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What specific data needs to be backed up (e.g., user data, system configurations, databases)?&lt;/li&gt;
&lt;li&gt;How often should backups occur (e.g., daily, weekly, monthly), and what is the retention policy for backups?&lt;/li&gt;
&lt;li&gt;Who will be responsible for managing and executing the backups?&lt;/li&gt;
&lt;li&gt;How will backup integrity be verified (e.g., checksum validation, periodic testing)?&lt;/li&gt;
&lt;li&gt;What happens if a backup is lost or corrupted, and how will this be mitigated?&lt;/li&gt;
&lt;li&gt;Who will have access to backups, and are there privacy and compliance concerns regarding backup access?&lt;/li&gt;
&lt;li&gt;What is the procedure for restoring backups in case of data loss or system failure?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disaster Recovery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In the event of a disaster, which components must be restored first (e.g., production systems before development)?&lt;/li&gt;
&lt;li&gt;Who needs to be informed during a disaster recovery event, and how will they be notified?&lt;/li&gt;
&lt;li&gt;What immediate actions must be taken following a failure (e.g., failover, rollback, emergency meetings)?&lt;/li&gt;
&lt;li&gt;What is the Recovery Time Objective (RTO) for the critical systems and services, i.e., how long can they be down before business operations are impacted?&lt;/li&gt;
&lt;li&gt;What is the Recovery Point Objective (RPO), i.e., how much data loss is acceptable during a failure?&lt;/li&gt;
&lt;li&gt;How often will we test disaster recovery procedures to ensure they work as expected?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Monitoring
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What monitoring endpoints are available for the service (e.g., health checks, performance metrics)?&lt;/li&gt;
&lt;li&gt;Who is responsible for monitoring the service components, and how will monitoring responsibilities be distributed?&lt;/li&gt;
&lt;li&gt;How will incidents be triggered and who will be notified (e.g., on-call staff, support teams)?&lt;/li&gt;
&lt;li&gt;Will the monitoring notifications depend on business hours, or will they be continuous (e.g., 24/7)?&lt;/li&gt;
&lt;li&gt;What are the most important business processes or KPIs that need to be monitored to ensure service performance?&lt;/li&gt;
&lt;li&gt;Are there any critical components (e.g., custom services) that require special monitoring beyond standard health checks?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Updates, Maintainability, and Maintenance Agreement
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How often will the software and services receive updates (e.g., weekly, monthly, as needed)?&lt;/li&gt;
&lt;li&gt;What is the expected timeline for installing updates, and who will manage them?&lt;/li&gt;
&lt;li&gt;What maintenance windows need to be agreed upon with clients, partners, and internal teams?&lt;/li&gt;
&lt;li&gt;Are there specific internal or partner teams required to support regular maintenance?&lt;/li&gt;
&lt;li&gt;What recurring maintenance tasks need to be automated (e.g., certificate renewals, scaling)?&lt;/li&gt;
&lt;li&gt;Can updates or upgrades be performed automatically ("unattended") without manual intervention?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Availability
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What are the service availability requirements (How many nines, 99.9%, 99.99%, 99,999%)?&lt;/li&gt;
&lt;li&gt;Is availability required at all times, or only during specific periods (e.g., business hours)?&lt;/li&gt;
&lt;li&gt;Can the service be deployed in a cluster for high availability or load balancing?&lt;/li&gt;
&lt;li&gt;What failover mechanisms are in place, and how are they tested (e.g., active/passive, automatic failover)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Non-Standard Software and Software Support
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What are the core technologies or software components that the service depends on (e.g., operating systems, databases, libraries)?&lt;/li&gt;
&lt;li&gt;Are these technologies standard or proprietary, and are there known risks (e.g., limited support, outdated)?&lt;/li&gt;
&lt;li&gt;Is there available support for these software components, and if not, what expertise is required to maintain them internally?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Personnel &amp;amp; Training
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Is training required for employees involved in operation, installation, or administration of the service?&lt;/li&gt;
&lt;li&gt;Which specific employees or teams will need to receive training?&lt;/li&gt;
&lt;li&gt;Does the project require additional personnel or outsourcing to meet staffing requirements?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Licensing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What type of licensing model is used for the service (e.g., subscription, perpetual, per-user)?&lt;/li&gt;
&lt;li&gt;Are there any obligations arising from the licensing model (e.g., open-source licensing, commercial licensing)?&lt;/li&gt;
&lt;li&gt;Are any licenses required for components, and what are the associated recurring or one-time costs?&lt;/li&gt;
&lt;li&gt;Are license upgrades or feature expansions expected, and could they impact costs or operations?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scaling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What growth is expected for the service in terms of user base, data, or traffic?&lt;/li&gt;
&lt;li&gt;How will scaling be achieved (e.g., horizontally, vertically)?&lt;/li&gt;
&lt;li&gt;What are the strategies for scaling down or releasing resources during off-peak times?&lt;/li&gt;
&lt;li&gt;Are there any known bottlenecks (e.g., database, network, compute) that might limit scalability?&lt;/li&gt;
&lt;li&gt;What are the cost implications of scaling (e.g., per-user, per-transaction, per-GB)?&lt;/li&gt;
&lt;li&gt;How will performance be monitored to detect scaling issues?&lt;/li&gt;
&lt;li&gt;What are the key performance indicators (KPIs) to track scalability (e.g., response time, throughput, latency)?&lt;/li&gt;
&lt;li&gt;How will load balancing be managed as the service scales?&lt;/li&gt;
&lt;li&gt;Will the scaling process be automated, and if so, how?&lt;/li&gt;
&lt;li&gt;What is the strategy for database scaling (e.g., sharding, replication)?&lt;/li&gt;
&lt;li&gt;How will data consistency be maintained during scaling (e.g., eventual consistency vs. strong consistency)?&lt;/li&gt;
&lt;li&gt;What is the approach for handling sudden traffic spikes (e.g., auto-scaling, traffic prioritization)?&lt;/li&gt;
&lt;li&gt;Are there regional considerations for scaling, such as data residency or latency concerns?&lt;/li&gt;
&lt;li&gt;What are the failover strategies in case of scaling issues or system failures?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compliance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What legal, regulatory, or industry standards must the service comply with (e.g., HIPAA, PCI-DSS, SOC 2)?&lt;/li&gt;
&lt;li&gt;Will the service be subject to audits? If so, what is the expected frequency and scope of these audits?&lt;/li&gt;
&lt;li&gt;What level of effort is required from the internal team to prepare for these audits?&lt;/li&gt;
&lt;li&gt;Does the service meet internal security standards (e.g., vulnerability management, patching)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Is there existing project or product documentation (e.g., requirements, design)?&lt;/li&gt;
&lt;li&gt;Who is responsible for creating or maintaining the operational manual?&lt;/li&gt;
&lt;li&gt;Is there a known issues log or troubleshooting guide available for the service?&lt;/li&gt;
&lt;li&gt;Is there an architecture diagram or documentation to clarify the service’s infrastructure and components?&lt;/li&gt;
&lt;li&gt;What additional documentation is available (e.g., user guides, tutorials, FAQs)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional Considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Are performance benchmarks (e.g., latency, throughput, uptime) defined, and are they being met?&lt;/li&gt;
&lt;li&gt;What is the process for managing changes to the service, including versioning, upgrades, and impact analysis?&lt;/li&gt;
&lt;li&gt;How will changes to the service affect users or clients, and how will these changes be communicated?&lt;/li&gt;
&lt;li&gt;Does the service/project have an &lt;strong&gt;exit strategy&lt;/strong&gt; , including data portability and service decommissioning?&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🖼 Foto von &lt;a href="https://unsplash.com/de/@hadijasaidi?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Hadija&lt;/a&gt; auf &lt;a href="https://unsplash.com/de/fotos/ein-schild-das-sich-an-der-seite-eines-hugels-befindet-jCfDzOQ2-C8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>checklist</category>
    </item>
    <item>
      <title>How to Amplify Team Productivity and Become a True 10x Developer</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Fri, 21 Feb 2025 12:37:12 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/how-to-amplify-team-productivity-and-become-a-true-10x-developer-2d3k</link>
      <guid>https://dev.to/keyboardinterrupt/how-to-amplify-team-productivity-and-become-a-true-10x-developer-2d3k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlk99jezb84prilita6z.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlk99jezb84prilita6z.jpeg" alt="How to Amplify Team Productivity and Become a True 10x Developer" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the world of software development, the term “ &lt;strong&gt;10x developer&lt;/strong&gt; ” is often thrown around to describe someone who can produce results far beyond the typical output. However, the true 10x developer isn’t focused on personal performance; they’re someone who drives the entire team to perform at its best.&lt;/p&gt;

&lt;p&gt;Here’s how you can become that developer—one who helps the whole team achieve greater success:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build for the Team, Not Just Yourself&lt;/strong&gt;
A great developer doesn’t make tech decisions based solely on personal preferences. By considering your team’s skill set, you ensure smoother collaboration and more predictable results. This approach makes everyone feel capable, boosting the team’s overall productivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negotiating Simpler Features for Less Complexity&lt;/strong&gt;
Simplicity is key. Instead of pushing for overly complex features, propose effective, simpler solutions that everyone can implement easily. This approach reduces mental load, helps everyone move faster, and ensures the team stays focused on what truly matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share Knowledge, Boost Efficiency&lt;/strong&gt;
A true 10x developer shares insights across different technical areas. By spotting patterns and connecting the dots, you help your colleagues avoid common pitfalls and tackle challenges more effectively. This creates a culture of learning that improves everyone’s output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rejecting Ambiguity – Clarity Equals Speed&lt;/strong&gt;
Ambiguity slows everything down. By ensuring everyone is on the same page from the start, you eliminate confusion and rework. Clear expectations keep the team moving forward, which means faster, more efficient progress.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documenting everything – Share What You’ve Learned&lt;/strong&gt;
Good documentation helps everyone understand and apply the patterns you’ve created. Instead of starting from scratch, your team can build on your work, saving time and reducing errors. Knowledge-sharing improves long-term team efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Becoming a 10x developer is about amplifying your team’s success&lt;/strong&gt; , not just your own. By simplifying, sharing, and ensuring clarity, you help everyone perform at their best. The result? Faster deliveries, fewer bottlenecks, and a team that works seamlessly together.&lt;/p&gt;

&lt;p&gt;Ultimately, a true 10x developer doesn’t focus on personal productivity—they focus on creating an environment where the entire team can excel. And that’s where the real magic happens.&lt;/p&gt;

</description>
      <category>10xdeveloper</category>
      <category>careergrowth</category>
    </item>
    <item>
      <title>Navigating the AI Hype: Stay Smart, Stay Calm, and Stay Ahead</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Sat, 15 Feb 2025 11:27:47 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/navigating-the-ai-hype-stay-smart-stay-calm-and-stay-ahead-26ke</link>
      <guid>https://dev.to/keyboardinterrupt/navigating-the-ai-hype-stay-smart-stay-calm-and-stay-ahead-26ke</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6crxfldh3dzw86csvk00.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6crxfldh3dzw86csvk00.jpg" alt="Navigating the AI Hype: Stay Smart, Stay Calm, and Stay Ahead" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everywhere you look, AI is making headlines. Influencers, media outlets, and corporate leaders are pushing the narrative that if you’re not diving headfirst into AI, your career is in jeopardy. The pressure is intense: tech gurus on social media proclaiming that if you don’t master AI today, you’ll be obsolete tomorrow. Companies restructuring, projects getting canceled, and employees getting laid off—all seemingly in the name of AI. But before you panic, let’s take a deep breath and look at this rationally.&lt;/p&gt;

&lt;h3&gt;
  
  
  The AI Hype Cycle: Who’s Benefiting?
&lt;/h3&gt;

&lt;p&gt;The buzz surrounding AI isn’t entirely organic. There are clear beneficiaries of the widespread fear and urgency around AI adoption. Let’s break it down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Media &amp;amp; Influencers&lt;/strong&gt;
Sensational headlines, clickbait thumbnails, and dramatic narratives—media companies and social influencers thrive on engagement. The more people panic, the more clicks, views, and ad revenue they generate. Whether it’s traditional news outlets or AI-focused influencers, many stand to gain by keeping you on edge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Corporate Leaders &amp;amp; Employers&lt;/strong&gt;
AI is a convenient excuse for layoffs and restructuring. If a company needs to trim its workforce, blaming AI makes it seem like an inevitable technological shift rather than a business decision. Some companies also use the AI hype to justify abandoning projects, reducing expenses, or implementing efficiency measures under the guise of AI-driven progress.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech Startups &amp;amp; Investors&lt;/strong&gt;
AI is a goldmine for startups looking to attract investors. Slap ‘AI’ on a business model, and funding is suddenly much easier to secure. While some companies are genuinely innovating with AI, others are simply capitalizing on the buzz without offering substantial technological advancements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training &amp;amp; Education Platforms&lt;/strong&gt;
The more anxiety there is around AI replacing jobs, the more online courses and training programs will sell. Many of these programs offer valuable education, but the urgency they create is often exaggerated. The reality? Not everyone needs to become an AI expert overnight.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Use AI Without Falling for the Hype
&lt;/h3&gt;

&lt;p&gt;Rather than reacting out of fear, let’s take a strategic approach. Here’s how you can leverage AI wisely while staying grounded in reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Become an AI Generalist, Not a Specialist (Yet)&lt;/strong&gt;
AI technologies are evolving rapidly. What’s groundbreaking today may be obsolete in six months. Instead of deep-diving into one specific AI tool, focus on developing a broad understanding of AI concepts and applications. This approach ensures long-term adaptability in an ever-changing tech landscape.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recognize Sensationalism &amp;amp; Stay Critical&lt;/strong&gt;
If an AI-related headline or influencer claim seems exaggerated, take a step back. Consider the source, their motivations, and whether the information is based on real, practical trends or just fear-mongering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You Are the Architect, AI is Your Tool&lt;/strong&gt;
AI can generate code and automate tasks, but it lacks true understanding and creativity. It needs a developer who knows what they’re doing—someone who can guide it, refine its output, and make informed decisions. Without human expertise in logic, structure, and best practices, AI is just a tool without direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use AI to Expand (Not Replace) Your Skillset&lt;/strong&gt;
Instead of fearing AI as a job killer, use it as a tool to make yourself more valuable. AI can help you improve communication, enhance problem-solving skills, and even accelerate learning. Whether it’s using ChatGPT for brainstorming or leveraging AI-powered data analysis tools, think of AI as an assistant rather than a competitor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore Non-Tech Industries for AI Applications&lt;/strong&gt;
AI’s biggest opportunities aren’t just in the tech sector. Small businesses, traditional industries, and non-technical fields are ripe for AI-driven innovation. Whether it’s optimizing processes in manufacturing, improving customer experiences in retail, or streamlining logistics, there’s massive potential for applying AI outside the typical tech bubble.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>careergrowth</category>
      <category>llm</category>
    </item>
    <item>
      <title>Avoiding Technical Debt Without Sacrificing Forward Momentum</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Wed, 11 Sep 2024 07:09:56 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/avoiding-technical-debt-without-sacrificing-forward-momentum-2dig</link>
      <guid>https://dev.to/keyboardinterrupt/avoiding-technical-debt-without-sacrificing-forward-momentum-2dig</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1k0b6z2aibyxcna32xx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1k0b6z2aibyxcna32xx.jpg" alt="Avoiding Technical Debt Without Sacrificing Forward Momentum" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;High pressure to deliver new features and rapidly iterate on your product can lead to accumulating technical debt. While some debt is unavoidable, you can minimize it by adopting strategies that balance maintaining code quality with forward progress. This article outlines methods to help you achieve that balance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Acknowledge and Accept Technical Debt&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the early stages of a startup, it’s common to accumulate technical debt fast! The focus is on speed and delivering value and viability, often at the expense of code quality. While this approach is necessary for gaining traction, it’s important to recognize that this debt needs to be managed as your product matures.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Allocate Time for Debt Reduction&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It’s essential to allocate a specific portion of your engineering time to address technical debt. A common approach is to dedicate around 10-20% of engineering resources to this task. This allocation ensures that you are making steady progress on debt reduction while still focusing on new feature development and other priorities.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Adopt a Strong Architectural Foundation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Building a strong architectural foundation from the start is crucial. This doesn’t mean over-engineering or getting lost in perfectionism, but rather:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modular Design&lt;/strong&gt; : Break your system into well-defined, modular components. This makes it easier to update or replace parts of your system without causing widespread disruption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable Infrastructure&lt;/strong&gt; : Consider future scaling needs and design your system to handle growth. Investing in scalable infrastructure early on can prevent costly rewrites later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Implement Continuous Integration and Continuous Delivery (CI/CD)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;CI/CD pipelines automate testing, integration, and deployment processes, which helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Catch Issues Early&lt;/strong&gt; : Automated tests run with every code change, catching bugs and regressions early, reducing the likelihood of technical debt accumulating unnoticed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequent, Small Releases&lt;/strong&gt; : CI/CD encourages frequent, smaller releases, which are easier to manage and troubleshoot. This approach minimizes the risk of introducing large, unmanageable chunks of debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Prioritize Code Reviews and Pair Programming&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Regular code reviews and pair programming sessions can significantly reduce the introduction of technical debt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Reviews&lt;/strong&gt; : Establish a robust code review process where peers assess each other’s work. This not only catches potential issues but also spreads knowledge and best practices across the team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair Programming&lt;/strong&gt; : Pair programming fosters collaboration and immediate feedback, leading to higher-quality code. It also helps distribute expertise across the team, reducing reliance on a single person’s knowledge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Emphasize Documentation and Knowledge Sharing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Clear documentation is crucial for preventing technical debt. Well-documented and easily understood code is far simpler to revisit and refactor than a hastily written, obscure solution with no indication of its purpose or significance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inline Documentation&lt;/strong&gt; : Encourage developers to write clear, concise comments in their code. This ensures that the rationale behind decisions is easily understood, even months or years later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Sharing&lt;/strong&gt; : Regularly hold knowledge-sharing sessions, such as lunch-and-learns or internal talks. This keeps the team aligned on architectural decisions and best practices, reducing the chances of divergent, debt-inducing implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proper Commit messages&lt;/strong&gt; : Git is an often overlooked communication and documentation tool! A well-crafted commit message explains &lt;em&gt;why&lt;/em&gt; a change was made, not just &lt;em&gt;what&lt;/em&gt; was changed. This is crucial for anyone revisiting the code later, making it easier to understand the reasoning behind certain decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Measure Technical Debt Effectively&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Although there isn’t a perfect method to quantify technical debt, you can use several approaches to gain insights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Issue Trackers&lt;/strong&gt; : Utilize issue tracking tools like Jira or GitHub. Tag issues related to tech debt and monitor their count and progress. This provides a tangible measure of the debt and helps in prioritizing fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DORA Metrics&lt;/strong&gt; : These metrics (Deployment Frequency, Lead Time for Changes, Change Failure Rate, and Time to Restore Service) can offer indirect insights into the impact of technical debt on your engineering processes. For instance, a higher failure rate for changes may indicate underlying tech debt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Feedback&lt;/strong&gt; : Regularly solicit feedback from your engineering team regarding the state of the codebase. Tracking their assessments over time can help gauge the level of technical debt and its impact on productivity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Adopt Agile Methodologies&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Agile methodologies help manage technical debt while keeping momentum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iterative Development&lt;/strong&gt; : Agile’s iterative approach allows for continuous improvement. By breaking down work into smaller, manageable chunks, teams can focus on delivering value while keeping technical debt in check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backlog Grooming&lt;/strong&gt; : Regularly prioritize and groom the backlog, ensuring that tech debt-related tasks are addressed alongside new feature development. This keeps the codebase healthy without stalling progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Balance Short-Term Gains with Long-Term Health&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Avoiding technical debt doesn’t mean avoiding all shortcuts—it’s about balancing them wisely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Make Conscious Trade-offs&lt;/strong&gt; : Sometimes, taking on a bit of debt is necessary to meet a deadline or seize a market opportunity. The key is to make these decisions consciously, understanding the trade-offs and planning to address them later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring as You Go&lt;/strong&gt; : Incorporate small refactoring efforts into your regular development process. This approach prevents the buildup of debt while keeping the codebase clean and maintainable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Double Down on Automated Testing
&lt;/h3&gt;

&lt;p&gt;Automated testing is a critical component in avoiding technical debt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unit and Integration Tests&lt;/strong&gt; : Writing comprehensive unit and integration tests ensures that new changes don’t break existing functionality. It also provides a safety net for future development, making it easier to refactor and enhance the codebase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test-Driven Development (TDD)&lt;/strong&gt;: Adopting TDD can help ensure that code is designed with testing in mind, leading to more modular and reliable software that’s less prone to accumulating debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Avoiding technical debt while maintaining forward momentum requires a proactive approach to development. By laying a solid architectural foundation, automating processes, fostering collaboration, and making conscious trade-offs, you can build a robust, scalable product without sacrificing speed. The goal is not to eliminate technical debt entirely—an unrealistic expectation—but to manage it effectively, ensuring your codebase remains healthy and your startup continues to innovate and grow.&lt;/p&gt;

</description>
      <category>agile</category>
      <category>technicaldebth</category>
      <category>softwareentropy</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Experimenting with Body Doubling</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Fri, 30 Aug 2024 13:02:39 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/my-focusmate-experiment-9bg</link>
      <guid>https://dev.to/keyboardinterrupt/my-focusmate-experiment-9bg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff73xptzby6ppr8qxcl3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff73xptzby6ppr8qxcl3j.png" alt="My Focusmate experiment" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've recently been experimenting with &lt;a href="https://focusmate.com/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;Focusmate&lt;/a&gt;, a virtual co-working platform designed to boost productivity through 25 or 75-minute sessions with a randomly chosen work partner. Here are three sessions I experienced on the platform, along with some insights.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Names have been randomly replaced to ensure anonymity of my mates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Tackling my First Session with John and Breaking Out of My Comfort Zone!
&lt;/h3&gt;

&lt;p&gt;My first session was with John, and I was a bit nervous. I’m not the most social person, so using Focusmate felt like stepping out of my comfort zone. John and I both had our tasks lined up and where ready to go: I intended on improving some metrics for one of our systems, while Jon was busy finishing his journal and generating invoices.&lt;/p&gt;

&lt;p&gt;While we worked on our tasks, we stayed quiet, each focused on our goals for the session. As the session came to an end, signaled by a chime, I was curious about what made Focusmate work for John. At that point, I hadn't yet felt a productivity boost—instead, my nervousness had made it easy for me to get distracted.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🗨: &lt;strong&gt;"&lt;/strong&gt; It helps to &lt;em&gt;schedule appointments and set specific goals!&lt;/em&gt; Plus, &lt;em&gt;meeting new people and not wanting to disappoint them keeps me coming back&lt;/em&gt;!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;John shared his insights about Focusmate, saying, "It helps to &lt;em&gt;schedule appointments and set specific goals&lt;/em&gt;. Plus, &lt;em&gt;meeting new people and not wanting to disappoint them keeps me coming back&lt;/em&gt;!"&lt;br&gt;&lt;br&gt;
I totally got that — knowing someone else is counting on you, showing up and being there, really ups the motivation. We both wrapped up our tasks and celebrated small wins together. It was a great start!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Quick Burst of Productivity with Mel&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Mel and I paired up for a short 25-minute session. I worked on improving a capacity management dashboard while Mel updated a course schedule.&lt;br&gt;&lt;br&gt;
The session went smoothly, and as this was my forth, or so, session, My nervousness was not as prevalent anymore. I stayed focused and on track the whole session.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🗨: &lt;em&gt;"Working in small sessions helps break stuff down!"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Afterwards I had a quick chat with Mel, discussing Focusmate, "&lt;em&gt;Working in small sessions helps break stuff down.&lt;/em&gt;" Mel mentioned, and I agree on that.&lt;/p&gt;

&lt;p&gt;By the end, we were both pleased with our progress. It’s amazing how much you can accomplish in a focused burst!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Unexpected Moments with an Empty Chair&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Then came a session with no one — well, almost. I was paired with someone who seemed to have pressing household chores. For two third of the session, I was working alongside an empty chair. It was kind of funny but also a bit weird.&lt;/p&gt;

&lt;p&gt;Despite that, I still managed to achieve my goals. When my partner eventually returned, they shared that they had made progress on their household tasks. A brief conversation revealed that they use Focusmate for various types of work and even for leisure activities. It seems that, Focusmate can be used for just about anything, and not just for office/desk Work.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Cancelled Plans and Understanding Mates&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;I had a session scheduled with Chris, but life got in the way. I had to cancel unexpectedly mid Session. I felt bad about it. But Chris was super understanding. Sometimes, things just come up.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Using Focusmate for a while, has been a surprisingly fun and productive experience. Apart from my initial nervousness or having to deal with technical difficulties. Every session has had its unique charm. It’s been great to be connect with people from different walks of life, each working on their own projects but all united by the desire to be more productive.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🗨:I playfully told a colleague that Focusmate is like "a multiplayer version of the &lt;a href="https://en.wikipedia.org/wiki/Pomodoro_Technique?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;Pomodoro technique&lt;/a&gt;, with extra steps 🍅." This might be why it works for me—the structured sessions combined with the chance to make random connections.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My main takeaway is that working "together" is more enjoyable than working alone. Combining this with organizational strategies like &lt;u&gt;scheduling work sessions&lt;/u&gt; and &lt;u&gt;setting clear, achievable goals&lt;/u&gt; in advance can significantly improve focus and productivity.&lt;/p&gt;

&lt;p&gt;I’m looking forward to more sessions, more random connections, and more productivity wins. I’ll probably keep experimenting with Focusmate and might even update this article in the future.&lt;/p&gt;

&lt;p&gt;What are your experiences with Focusmate or, in more general Terms, Body doubling?&lt;br&gt;
I would love to get your perspective on this :D&lt;/p&gt;

&lt;h3&gt;
  
  
  Links and Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.focusmate.com/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://app.focusmate.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.focusmate.com/blog/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://www.focusmate.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Pomodoro_Technique?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Pomodoro_Technique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Body_doubling?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Body_doubling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>producitivity</category>
      <category>focusmate</category>
    </item>
    <item>
      <title>Awesome little online helpers</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Fri, 20 Aug 2021 15:08:13 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/awesome-little-online-helpers-4hj</link>
      <guid>https://dev.to/keyboardinterrupt/awesome-little-online-helpers-4hj</guid>
      <description>&lt;p&gt;Hi, 👋 today I would like to ask for your contributions!  Everyone knows those neat little tools, those really helpful websites, those that you come back to every so often, those that make your life so much easier!&lt;/p&gt;

&lt;p&gt;I started an "Awesome List" to collect those tools, for easy reference, and to easily find them when in need ;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/KeyboardInterrupt/awesome-little-online-helpers" rel="noopener noreferrer"&gt;https://github.com/KeyboardInterrupt/awesome-little-online-helpers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please! add your awesome little online helper to the List.&lt;/p&gt;

&lt;p&gt;If you have an awesome Tool for, i don't know, a design, artificial intelligence or whatever profession/topic, please feel free to also add a new category/section as well :D&lt;/p&gt;

&lt;p&gt;If you don't feel like forking, and making a PR, just comment &lt;br&gt;
on this article, I will look through them and incorporate them.&lt;/p&gt;

&lt;p&gt;Thank you very much! ❤ 👍&lt;/p&gt;

</description>
      <category>awesome</category>
      <category>online</category>
      <category>helper</category>
      <category>tools</category>
    </item>
    <item>
      <title>Pipx, the brew for python based Applications 🍻🐍</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Mon, 31 Aug 2020 20:09:29 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/pipx-the-brew-for-python-based-applications-gkp</link>
      <guid>https://dev.to/keyboardinterrupt/pipx-the-brew-for-python-based-applications-gkp</guid>
      <description>&lt;p&gt;When getting into python, one can easily mess up their python environment, by mixing different methods of installing Python based applications, packages, libraries and dependencies.&lt;/p&gt;

&lt;p&gt;A common mistake is installing Python Packages both via your Linux distributions package manager e.G. &lt;code&gt;apt-get&lt;/code&gt; or &lt;code&gt;yum&lt;/code&gt; and via &lt;code&gt;pip&lt;/code&gt; possibly mixed with some &lt;code&gt;sudo pip&lt;/code&gt; Here and there.&lt;br&gt;
This way you are likely to mess up your Python environment with conflicting dependencies, and it is easy to loose track which Part of your Installation comes from what source...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pipxproject.github.io/pipx/" rel="noopener noreferrer"&gt;&lt;code&gt;pipx&lt;/code&gt; comes to the rescue!&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  So, what does pipx do?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;pipx&lt;/strong&gt; is a tool to help you install and run end-user applications written in Python. It's roughly similar to macOS's brew, JavaScript's npx, and Linux's apt.&lt;/p&gt;

&lt;p&gt;It's closely related to pip. In fact, it uses pip, but is focused on installing and managing Python packages that can be run from the command line directly as applications. &lt;a href="https://pipxproject.github.io/pipx/#overview-what-is-pipx" rel="noopener noreferrer"&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pipx provides easy installation and isolation of any python application that you can run from the commandline i.E. the &lt;code&gt;python-openstack&lt;/code&gt; client, &lt;code&gt;ansible&lt;/code&gt;, &lt;code&gt;salt&lt;/code&gt;, &lt;code&gt;cookiecutter&lt;/code&gt;, &lt;code&gt;black&lt;/code&gt; and many more.&lt;/p&gt;

&lt;p&gt;Whilst those and other python application might interfere with each other, when mangled together in one environment.&lt;br&gt;
When installing them via pipx Each application is automatically and individually, isolated into their own virtual Environment! 🎉&lt;/p&gt;

&lt;p&gt;In Example, To install &lt;a href="https://www.ansible.com/" rel="noopener noreferrer"&gt;Ansible&lt;/a&gt; via pipx simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx &lt;span class="nb"&gt;install &lt;/span&gt;ansible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And viola ✨, pipx will create a virtual environment for ansible, install it, and, add all the commandline tools provided by &lt;code&gt;ansible&lt;/code&gt; to your &lt;code&gt;$PATH&lt;/code&gt; variable!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# pipx list
venvs are in /home/keyboardinterrupt/.local/pipx/venvs
apps are exposed on your $PATH at /home/cstein/.local/bin
   package ansible 2.9.10, Python 3.6.9
    - ansible
    - ansible-config
    - ansible-connection
    - ansible-console
    - ansible-doc
    - ansible-galaxy
    - ansible-inventory
    - ansible-playbook
    - ansible-pull
    - ansible-test
    - ansible-vault
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I usually use pipx for installation of python based applications and only ever use virtual environments and pip directly whenever I am developing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pipxproject.github.io/pipx/" rel="noopener noreferrer"&gt;I highly recommend checking out pipx!&lt;/a&gt; It is a great tool to keep your python based tools neatly organized, ready to use, and easy to upgrade.&lt;/p&gt;

&lt;p&gt;I ❤ &lt;code&gt;pipx&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links and Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pipxproject.github.io/pipx/#overview-what-is-pipx" rel="noopener noreferrer"&gt;pipx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonbytes.fm/episodes/show/118/better-python-executable-management-with-pipx" rel="noopener noreferrer"&gt;Python Bytes Podcast - Episode #118: Better Python executable management with pipx &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pipxproject.github.io/pipx/comparisons/" rel="noopener noreferrer"&gt;pipx in comparison to other/similar tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.keyboardinterrupt.com/use-pipx-for-installing-python-software/" rel="noopener noreferrer"&gt;Pipx, the brew for python based Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Cover Art Image by &lt;a href="https://www.pexels.com/photo/beige-python-on-brown-branch-of-tree-1108192/" rel="noopener noreferrer"&gt;@worldspectrum&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Poor Man's Tools that are actually awesome! 💪</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Wed, 26 Aug 2020 20:21:28 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/poor-man-s-tools-that-are-actually-awesome-22fh</link>
      <guid>https://dev.to/keyboardinterrupt/poor-man-s-tools-that-are-actually-awesome-22fh</guid>
      <description>&lt;p&gt;These are 3 of the more outstanding Linux (and MAC) Tools which I use on a regular basis.&lt;/p&gt;

&lt;p&gt;I can highly recommend all of them, they made my live a lot easier! :)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;lnav&lt;/code&gt; - Poor Man's ELK Stack
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgq38aqzp5nvgki625icg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgq38aqzp5nvgki625icg.png" alt="lnav on an auth.log (yes ssh is on port 22 on this system.)" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you regularly have to deal with Log files I highly recommend checking out &lt;code&gt;lnav&lt;/code&gt;. &lt;code&gt;lnav&lt;/code&gt; is so freaking cool that I probably will have to Write a whole article about it eventually, but trust me on this, if you are on Linux or Mac and have to deal with log files. Check out &lt;code&gt;lnav&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Just a quick overview of some of the things lnav can do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically detects log Formats, merges multiple log files into a single view and decompresses GZIP'ed and BZIP2'ed files on the fly&lt;/li&gt;
&lt;li&gt;Syntax Highlighting!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter&lt;/strong&gt; Log files via regular Expressions! (press &lt;code&gt;:&lt;/code&gt; to get a command palette)&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Timeline View&lt;/strong&gt; shows a histogram of Messages over time. (By pressing &lt;code&gt;i&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;XML and JSON in log messages can be pretty Viewed. (by pressing &lt;code&gt;SHIFT + P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;SQL&lt;/code&gt; to Query Logs! (srsly!)&lt;/li&gt;
&lt;li&gt;VIM Key Bindings&lt;/li&gt;
&lt;li&gt;Easy Log Navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And so on! This is just the tip of the iceberg! Give lnav a try it's a poor man's ELK ;) &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lnav.org/" rel="noopener noreferrer"&gt;https://lnav.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lnav.readthedocs.io/en/latest/" rel="noopener noreferrer"&gt;https://lnav.readthedocs.io/en/latest/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lnav.readthedocs.io/en/latest/hotkeys.html" rel="noopener noreferrer"&gt;https://lnav.readthedocs.io/en/latest/hotkeys.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;sshuttle&lt;/code&gt; - Poor Man's VPN
&lt;/h2&gt;

&lt;p&gt;Sometimes you want to test a service, or access hosts that are running in a different Network which is only accessible via a Jump/Bastion Host, or maybe you are constantly adding more and more Ports to your SSH Port Forwarding configuration. What you really would like to have is VPN access into said Network to gain unhindered access to all the systems in it.&lt;/p&gt;

&lt;p&gt;That is where &lt;code&gt;sshuttle&lt;/code&gt; comes into play, given that you have a SSH Jump/Bastion host, that is able to access all the Network Resources you want direct access to, you can just run the following command on your System:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sshuttle &lt;span class="nt"&gt;-r&lt;/span&gt; username@jumphost &amp;lt;target_subnet&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And voila! All traffic for &lt;code&gt;&amp;lt;target_subnet&amp;gt;&lt;/code&gt; will be tunneled/routed through the Jumphost &lt;code&gt;sshuttle&lt;/code&gt;. To tear down the tunnel, simply close &lt;code&gt;sshuttle&lt;/code&gt; and your routing is back to normal!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sshuttle&lt;/code&gt; comes with a few limitations which makes it "only" a poor man's vpn, but it is a really useful Tool for a lot of situations! Check it out!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sshuttle/sshuttle" rel="noopener noreferrer"&gt;https://github.com/sshuttle/sshuttle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sshuttle.readthedocs.io/en/stable/" rel="noopener noreferrer"&gt;https://sshuttle.readthedocs.io/en/stable/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;PS: For real VPN, &lt;a href="https://www.wireguard.com/" rel="noopener noreferrer"&gt;check out Wireguard!&lt;/a&gt; 💚&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;netdata&lt;/code&gt; - Poor Man's Metrics / Monitoring and "top" on Steroids!
&lt;/h2&gt;

&lt;p&gt;Netdata is a Web based and lightweight Metrics and Monitoring Solution, It is a great Tool to get Metrics and Graphs of your Systems NOW, e.G. in a situation where your traditional monitoring does either not provide the right Metrics or is to slow.&lt;br&gt;
Netdata, unlike more traditional Monitoring Solutions, which do a poll for metrics only ever so often, is best compared to "top" but on steroids! 💪 and in beautiful ✨.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BGyA6LCg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://user-images.githubusercontent.com/1153921/80827388-b9fee100-8b98-11ea-8f60-0d7824667cd3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BGyA6LCg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://user-images.githubusercontent.com/1153921/80827388-b9fee100-8b98-11ea-8f60-0d7824667cd3.gif" alt="Netdata Demo GIF from Github" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Netdata Is not a long term Monitoring solution, in its default configuration no more than a few Hours of Metrics are stored, But it is a really great Tool to either find out which metrics you actually would like to monitor and for debugging of acute problems. In this regard, it is a poor man's Monitoring.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.netdata.cloud/#installation" rel="noopener noreferrer"&gt;https://learn.netdata.cloud/#installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.netdata.cloud/docs/agent/demo-sites" rel="noopener noreferrer"&gt;https://learn.netdata.cloud/docs/agent/demo-sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.netdata.cloud/docs/agent/packaging/docker" rel="noopener noreferrer"&gt;https://learn.netdata.cloud/docs/agent/packaging/docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it for now. I hope That you got something out of this List, and that I was able to introduce you to a Tool that will make your live easier!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you know of any Tools that are awesome in similar ways?&lt;/strong&gt; They don't have to be a Poor Man's Version of something, Leave a comment, and let me know! I am always on the look out for Tools that help me automate, and improve my work!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>productivity</category>
      <category>bash</category>
      <category>docker</category>
    </item>
    <item>
      <title>Tips and Resources for writing better Shell Scripts</title>
      <dc:creator>KeyboardInterrupt</dc:creator>
      <pubDate>Sun, 02 Sep 2018 14:16:15 +0000</pubDate>
      <link>https://dev.to/keyboardinterrupt/tips-and-resources-for-writing-better-shell-scripts-4l9l</link>
      <guid>https://dev.to/keyboardinterrupt/tips-and-resources-for-writing-better-shell-scripts-4l9l</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi34g3vne0w4xukm6d52u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi34g3vne0w4xukm6d52u.png" alt="Tips and Resources for writing better Shell Scripts" width="640" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Updated July 2020:&lt;/strong&gt; I added a Section about Shell Script Headers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is easy to write bad shell scripts, and there is a lot of room for mistakes!, possibly the best tip one could give is to use a higher-level language, like python, and try to avoid writing shell scripts at all. But if you just have to, or want to, here are some helpful Tips/Resources you can use to write better shell scripts ;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the Google Shell Style Guide
&lt;/h2&gt;

&lt;p&gt;Using a consistent coding style among your Team/Company is important, the same applies to shell scripts as well! Try to find out if there already exists a guideline within your Structure, and adopt it.&lt;br&gt;&lt;br&gt;
If there is none in place, you should take a look at Googles &lt;a href="https://google.github.io/styleguide/shell.xml?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;Shell Style Guide&lt;/a&gt; which is a really great reference! (&lt;em&gt;Maybe also check out &lt;a href="https://google.github.io/styleguide/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;their other Style Guides&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;
&lt;h2&gt;
  
  
  Use ShellCheck for linting
&lt;/h2&gt;

&lt;p&gt;While using Linters with "real" programming languages, like python, is the default and most specialized IDE's have linting functionality neatly integrated, most people don’t think about linting their bash scripts, as they are just considered to be "&lt;em&gt;quick hacks or whatever&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;Nevertheless it comes as a surprise that there also exist linters for bash and &lt;a href="https://github.com/koalaman/shellcheck?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;ShellCheck&lt;/a&gt; is a really good one!&lt;br&gt;&lt;br&gt;
You can easily install it locally and/or try it on-line by visiting &lt;a href="https://www.shellcheck.net/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;www.shellcheck.net&lt;/a&gt; (&lt;em&gt;don't blindly copy and paste your secrets into that, or any other website ;)&lt;/em&gt; )&lt;/p&gt;

&lt;p&gt;Most modern Text editors like Sublime or Atom also have a great ShellCheck integration, give it a try!&lt;/p&gt;
&lt;h2&gt;
  
  
  Use Shell settings to increase script safety
&lt;/h2&gt;

&lt;p&gt;If a command within your shell script goes wrong, a variable is not set or a piped command errors, the default behavior of bash is to, more or less, silently fail and go on with the script, as if nothing happened. This can be rather dangerous, and often results in unintended script behavior.&lt;/p&gt;

&lt;p&gt;To increase script safety and avoid unintended behavior, you must explicitly tell your shell to automatically exit when an error occurs!&lt;/p&gt;

&lt;p&gt;This can be done by setting &lt;code&gt;set -eu -o pipefail&lt;/code&gt; at the beginning of your script you tell bash to stop and exit immediately when a Step fails!&lt;br&gt;&lt;br&gt;
Read more about writing safe shell scripts, over here &lt;a href="https://sipb.mit.edu/doc/safe-shell/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://sipb.mit.edu/doc/safe-shell/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Put a descriptive Header at the Start of your script
&lt;/h2&gt;

&lt;p&gt;Even though Shellscripts are often intended as "throwaway" Solution or a "dirty quick fix" They more often than not, become permanent fixtures in critical Systems!&lt;/p&gt;

&lt;p&gt;By providing a descriptive Header with additional context at the start of your shell script, you can easily improve the lives of anyone stumbling upon your "quick fix", possibly years later.&lt;br&gt;&lt;br&gt;
Especially adding the &lt;code&gt;author&lt;/code&gt; Information helps track down the Person that knows what's up, when needed.&lt;/p&gt;

&lt;p&gt;i.E. this is the example header for a fictive Fish feeding shell script. (imagine a robotic fish feeder controlled via an http API. 🤖🐠🤷, No fish have been harmed!)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash
#title :feed_the_fish.sh
#description :This script feeds the Fish, via controlling the feed-the-fish.com API.
#author :frank.fish@example.com
#date :2017-05-20
#version :0.2.1
#usage :bash feed_the_fish.sh
#notes :This script depends on curl to call the fish API.
#bash_version :4.2.1(1)-release

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Having such a Header is a nice way keep a track of what your script does, when it was created, the author of the script, etc..&lt;/p&gt;

&lt;h3&gt;
  
  
  Update: how to write &lt;code&gt;idempotent&lt;/code&gt; Shell Scripts:
&lt;/h3&gt;

&lt;p&gt;I Recently found &lt;a href="https://arslan.io/2019/07/03/how-to-write-idempotent-bash-scripts/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;this Blog Post&lt;/a&gt;, and I think it is a great addition to this topic!&lt;/p&gt;

&lt;p&gt;Beware though that some of the Actions described in the Blog Post are &lt;strong&gt;NOT&lt;/strong&gt; truly idempotent, as i.E. &lt;code&gt;touch&lt;/code&gt; will alter the modification time of the file, and forcefully creating/recreating/deleting things are changes! But the Ideas and Concepts conveyed in this Article are good non the less, and it is an interesting Read!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arslan.io/2019/07/03/how-to-write-idempotent-bash-scripts/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://arslan.io/2019/07/03/how-to-write-idempotent-bash-scripts/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You still should use a Tool like Ansible or another truly idempotent Configuration Management Solution in most cases anyway tough!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Update: Use explainshell.com for explanation on what your Shell Script does.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://explainshell.com/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://explainshell.com/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/idank/explainshell?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;"Explainshell is a tool (with a web interface) capable of parsing man pages, extracting options and explain a given command-line by matching each argument to the relevant help text in the man page."&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  references and further reading material
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://sipb.mit.edu/doc/safe-shell/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://sipb.mit.edu/doc/safe-shell/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linux.com/learn/writing-simple-bash-script?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://www.linux.com/learn/writing-simple-bash-script&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://guide.bash.academy/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://guide.bash.academy/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://google.github.io/styleguide/shell.xml?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://google.github.io/styleguide/shell.xml&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.shellcheck.net/?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://www.shellcheck.net/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://landoflinux.com/linux_bash_scripting_structure.html?ref=blog.keyboardinterrupt.com" rel="noopener noreferrer"&gt;https://landoflinux.com/linux_bash_scripting_structure.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>shell</category>
    </item>
  </channel>
</rss>
