<?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: niedal</title>
    <description>The latest articles on DEV Community by niedal (@niedal76).</description>
    <link>https://dev.to/niedal76</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3419450%2F2db24127-2f0c-40d6-bad8-30283935e449.png</url>
      <title>DEV Community: niedal</title>
      <link>https://dev.to/niedal76</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/niedal76"/>
    <language>en</language>
    <item>
      <title>ERR_CONNECTION_REFUSED, TIMED_OUT, or NXDOMAIN? A Developer's Troubleshooting Checklist</title>
      <dc:creator>niedal</dc:creator>
      <pubDate>Sat, 05 Sep 2026 13:03:00 +0000</pubDate>
      <link>https://dev.to/niedal76/errconnectionrefused-timedout-or-nxdomain-a-developers-troubleshooting-checklist-39fb</link>
      <guid>https://dev.to/niedal76/errconnectionrefused-timedout-or-nxdomain-a-developers-troubleshooting-checklist-39fb</guid>
      <description>&lt;p&gt;A browser's "site can't be reached" page looks simple, but the smaller error code often points to a very different failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DNS_PROBE_FINISHED_NXDOMAIN&lt;/strong&gt;, &lt;strong&gt;ERR_CONNECTION_REFUSED&lt;/strong&gt;, and &lt;strong&gt;ERR_CONNECTION_TIMED_OUT&lt;/strong&gt; do not happen at the same stage of a connection. Treating them as one problem usually leads to random cache clearing, router restarts, and network resets without learning what actually failed.&lt;/p&gt;

&lt;p&gt;A better approach is to test the path in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scope&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;TCP and the destination port&lt;/li&gt;
&lt;li&gt;TLS&lt;/li&gt;
&lt;li&gt;HTTP and the browser&lt;/li&gt;
&lt;li&gt;The server&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This checklist is designed for developers, support engineers, and anyone who needs evidence before changing a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the layer suggested by the symptom
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Browser symptom&lt;/th&gt;
&lt;th&gt;Likely layer&lt;/th&gt;
&lt;th&gt;Useful first check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NXDOMAIN or ERR_NAME_NOT_RESOLVED&lt;/td&gt;
&lt;td&gt;DNS&lt;/td&gt;
&lt;td&gt;nslookup or dig&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERR_CONNECTION_REFUSED&lt;/td&gt;
&lt;td&gt;TCP or service&lt;/td&gt;
&lt;td&gt;Test the destination port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERR_CONNECTION_TIMED_OUT&lt;/td&gt;
&lt;td&gt;Routing, firewall, or server&lt;/td&gt;
&lt;td&gt;Try another network and test the port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificate or handshake error&lt;/td&gt;
&lt;td&gt;TLS&lt;/td&gt;
&lt;td&gt;curl verbose output or OpenSSL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fails in one browser only&lt;/td&gt;
&lt;td&gt;Browser, proxy, cache, or extension&lt;/td&gt;
&lt;td&gt;DevTools and a clean profile&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are starting points, not verdicts. A proxy, VPN, CDN, firewall, or split-DNS setup can make one layer look like another.&lt;/p&gt;

&lt;p&gt;If you are helping a non-technical user on Windows or Android, these &lt;a href="https://idraaak.com/this-site-cant-be-reached/" rel="noopener noreferrer"&gt;Arabic troubleshooting steps for website connection errors&lt;/a&gt; cover browser cache, proxy, DNS, router checks, and network reset in a simpler order.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Define the blast radius
&lt;/h2&gt;

&lt;p&gt;Before running commands, answer five questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does one URL fail, or the entire domain?&lt;/li&gt;
&lt;li&gt;Do unrelated websites also fail?&lt;/li&gt;
&lt;li&gt;Does the same URL fail in another browser?&lt;/li&gt;
&lt;li&gt;Does it fail on another device connected to the same network?&lt;/li&gt;
&lt;li&gt;Does it work through mobile data or another network?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern matters.&lt;/p&gt;

&lt;p&gt;If only one browser fails, start with that browser, its extensions, and its proxy configuration. If every device on one network fails but mobile data works, investigate the router, DNS resolver, VPN, or network policy. If one domain fails from several independent networks, the domain's DNS, CDN, firewall, or origin server becomes more likely.&lt;/p&gt;

&lt;p&gt;Avoid turning these clues into absolute conclusions. The goal is to reduce the search area.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Check DNS before resetting the network
&lt;/h2&gt;

&lt;p&gt;Ask a resolver what the hostname maps to:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nslookup example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On systems with dig:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dig example.com A
dig example.com AAAA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A missing A or AAAA record&lt;/li&gt;
&lt;li&gt;A CNAME pointing to a name that no longer exists&lt;/li&gt;
&lt;li&gt;An unexpected private or old IP address&lt;/li&gt;
&lt;li&gt;Different answers inside and outside a VPN&lt;/li&gt;
&lt;li&gt;A local hosts-file override&lt;/li&gt;
&lt;li&gt;A DNS answer that differs between resolvers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can compare with a public resolver without changing the system-wide configuration:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nslookup example.com 1.1.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;An NXDOMAIN response means the resolver says the name does not exist. That may be correct because of a typo or missing record, or it may be caused by stale negative caching, a broken CNAME chain, split DNS, or a filtering resolver.&lt;/p&gt;

&lt;p&gt;On Windows, flushing the local DNS cache is a reasonable targeted test after you record the current result:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ipconfig /flushdns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Do not jump immediately to a full network reset. It changes more variables than necessary and can remove useful evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Let curl show where the connection stops
&lt;/h2&gt;

&lt;p&gt;A HEAD request is a quick first probe:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -I https://example.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For more detail:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -v --connect-timeout 10 https://example.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Verbose output can reveal the resolved address, connection attempt, TLS negotiation, request, response status, and redirects. This often tells you whether the failure occurs before or after HTTP begins.&lt;/p&gt;

&lt;p&gt;Be careful when sharing verbose output. Remove Authorization headers, cookies, tokens, and private hostnames.&lt;/p&gt;

&lt;p&gt;To test a specific origin IP while preserving the hostname used by HTTP and TLS, use &lt;strong&gt;--resolve&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -v --resolve example.com:443:203.0.113.10 https://example.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The address above is reserved for documentation. This test bypasses DNS for one request without changing the hosts file. If the request works with &lt;strong&gt;--resolve&lt;/strong&gt; but fails normally, DNS or CDN routing deserves closer inspection.&lt;/p&gt;

&lt;p&gt;For a deeper explanation of what verbose mode reports, see &lt;a href="https://everything.curl.dev/usingcurl/verbose/index.html" rel="noopener noreferrer"&gt;Everything curl: verbose operations&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Test the TCP port directly
&lt;/h2&gt;

&lt;p&gt;On Windows PowerShell:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Test-NetConnection example.com -Port 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On macOS or Linux, if netcat is available:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nc -vz example.com 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Interpret the result carefully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connection refused&lt;/strong&gt; usually means an endpoint actively rejected the TCP connection. The service may be stopped, listening on another port, bound only to localhost, or rejected by a proxy or firewall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection timed out&lt;/strong&gt; means no usable response arrived before the limit. Packets may be dropped by a firewall, routed incorrectly, sent to an old IP, or reaching an overloaded endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection succeeded&lt;/strong&gt; proves that the port accepted TCP. It does not prove that TLS, HTTP, virtual-host routing, or the application works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The official &lt;a href="https://learn.microsoft.com/en-us/powershell/module/nettcpip/test-netconnection" rel="noopener noreferrer"&gt;Test-NetConnection documentation&lt;/a&gt; also covers route and diagnostic output.&lt;/p&gt;

&lt;p&gt;Ping is not a substitute for a port test. Many networks block ICMP while allowing HTTPS, and a successful ping does not prove that port 443 is open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Isolate TLS and SNI problems
&lt;/h2&gt;

&lt;p&gt;If TCP connects but HTTPS fails, inspect the handshake:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openssl s_client -connect example.com:443 -servername example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;strong&gt;-servername&lt;/strong&gt; argument sends the hostname through Server Name Indication. Without it, a shared server may present the wrong certificate.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The certificate subject and hostnames&lt;/li&gt;
&lt;li&gt;The issuing chain&lt;/li&gt;
&lt;li&gt;Start and expiry dates&lt;/li&gt;
&lt;li&gt;The verification result&lt;/li&gt;
&lt;li&gt;Whether the server closes the connection during the handshake&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://docs.openssl.org/3.0/man1/openssl-s_client/" rel="noopener noreferrer"&gt;OpenSSL s_client documentation&lt;/a&gt; lists additional diagnostic options.&lt;/p&gt;

&lt;p&gt;Do not bypass certificate warnings when credentials, payments, or private data are involved. A warning may indicate a misconfiguration, interception, or an actual security risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Compare the browser with a clean HTTP client
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://developer.chrome.com/docs/devtools/network/" rel="noopener noreferrer"&gt;Chrome DevTools Network panel&lt;/a&gt; before reloading the page. Inspect the main document request, not only images or scripts.&lt;/p&gt;

&lt;p&gt;Useful fields include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status or failure reason&lt;/li&gt;
&lt;li&gt;Remote address&lt;/li&gt;
&lt;li&gt;Request and response headers&lt;/li&gt;
&lt;li&gt;Redirect chain&lt;/li&gt;
&lt;li&gt;Timing phases&lt;/li&gt;
&lt;li&gt;Whether the request was served by a service worker or cache&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normal browser window&lt;/li&gt;
&lt;li&gt;Incognito or a clean browser profile&lt;/li&gt;
&lt;li&gt;Browser with extensions disabled&lt;/li&gt;
&lt;li&gt;Browser with VPN or proxy disabled&lt;/li&gt;
&lt;li&gt;curl from the same device and network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If curl succeeds but one browser fails, focus on browser policy, extensions, cached redirects, service workers, proxy settings, and security software. If both fail at the same stage, the problem is probably lower in the stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Look for local overrides and proxies
&lt;/h2&gt;

&lt;p&gt;Check the hosts file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows: C:\Windows\System32\drivers\etc\hosts&lt;/li&gt;
&lt;li&gt;macOS and Linux: /etc/hosts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A forgotten development entry can silently direct a production hostname to localhost or an old server.&lt;/p&gt;

&lt;p&gt;On macOS or Linux, inspect proxy environment variables:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;env | grep -i proxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In PowerShell:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Get-ChildItem Env: | Where-Object Name -Match 'proxy'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Also check system proxy settings, browser-specific proxy configuration, VPN clients, corporate security agents, and container environments. On managed devices, document the configuration before changing it and follow the organization's policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: If you own the server, work from the edge inward
&lt;/h2&gt;

&lt;p&gt;Once client-side checks point to the service, verify:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The domain resolves to the intended CDN, load balancer, or origin.&lt;/li&gt;
&lt;li&gt;Firewall rules and cloud security groups allow the required port.&lt;/li&gt;
&lt;li&gt;The reverse proxy is listening on the public interface.&lt;/li&gt;
&lt;li&gt;The upstream application is healthy.&lt;/li&gt;
&lt;li&gt;Container port mappings match the proxy configuration.&lt;/li&gt;
&lt;li&gt;The TLS certificate and virtual host match the requested hostname.&lt;/li&gt;
&lt;li&gt;CDN, WAF, reverse-proxy, and application logs show the same request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On a Linux server, these commands can provide a useful starting point:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ss -lntp
docker ps
docker logs --tail 100 &amp;lt;container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A common cause of ERR_CONNECTION_REFUSED is an application listening only on &lt;strong&gt;127.0.0.1&lt;/strong&gt; when the reverse proxy or container network expects another interface. A common cause of timeouts is a firewall rule, stale DNS address, unreachable upstream, or overloaded service.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the common browser errors usually mean
&lt;/h2&gt;

&lt;h3&gt;
  
  
  DNS_PROBE_FINISHED_NXDOMAIN
&lt;/h3&gt;

&lt;p&gt;The resolver reports that the hostname does not exist. Check spelling, registration, DNS records, CNAME targets, resolver differences, and split-DNS rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERR_CONNECTION_REFUSED
&lt;/h3&gt;

&lt;p&gt;The connection reached an endpoint that rejected it, or an intermediary generated an equivalent refusal. Check whether the service is running, listening on the expected address and port, and reachable through the firewall and proxy path.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERR_CONNECTION_TIMED_OUT
&lt;/h3&gt;

&lt;p&gt;The browser did not receive a usable response in time. Check routing, dropped packets, incorrect IP addresses, firewall rules, server load, and unreachable upstream services.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERR_CONNECTION_RESET
&lt;/h3&gt;

&lt;p&gt;A connection was established and then closed unexpectedly. Investigate proxies, WAF rules, TLS negotiation, middleboxes, application crashes, and server logs.&lt;/p&gt;

&lt;p&gt;The wording is a clue, not a root-cause report.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal decision tree
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Reproduce the failure and record the exact error code.&lt;/li&gt;
&lt;li&gt;Test another browser, device, and network to define the scope.&lt;/li&gt;
&lt;li&gt;Resolve the hostname and verify the returned addresses.&lt;/li&gt;
&lt;li&gt;Test the actual destination port.&lt;/li&gt;
&lt;li&gt;Inspect TLS if TCP succeeds but HTTPS fails.&lt;/li&gt;
&lt;li&gt;Compare curl with the browser and inspect DevTools.&lt;/li&gt;
&lt;li&gt;If you own the service, correlate CDN, proxy, and application logs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This order keeps each test narrow. It also gives you evidence that can be handed to a hosting provider, network administrator, or another developer without saying only "the website is down."&lt;/p&gt;

&lt;p&gt;When the path is tested one layer at a time, most connection errors stop being mysterious. You may still need to restart a service, flush a cache, correct DNS, or change a firewall rule—but you will know which change is justified and how to verify it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>debugging</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>ADB Says Unauthorized, Offline, or Shows No Device? A Practical USB Debugging Checklist</title>
      <dc:creator>niedal</dc:creator>
      <pubDate>Sat, 05 Sep 2026 12:36:15 +0000</pubDate>
      <link>https://dev.to/niedal76/adb-says-unauthorized-offline-or-shows-no-device-a-practical-usb-debugging-checklist-3b3h</link>
      <guid>https://dev.to/niedal76/adb-says-unauthorized-offline-or-shows-no-device-a-practical-usb-debugging-checklist-3b3h</guid>
      <description>&lt;p&gt;When &lt;strong&gt;adb devices&lt;/strong&gt; does not show the result you expect, reinstalling random drivers is rarely the best first move. The output already tells you which layer is failing.&lt;/p&gt;

&lt;p&gt;This checklist separates the most common states:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;device&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;unauthorized&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;offline&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;An empty device list&lt;/li&gt;
&lt;li&gt;ADB not recognized by the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to diagnose the connection in a logical order: tool, cable, USB mode, authorization, and finally drivers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before troubleshooting
&lt;/h2&gt;

&lt;p&gt;Make sure the basic setup is correct:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the latest &lt;a href="https://developer.android.com/tools/releases/platform-tools" rel="noopener noreferrer"&gt;Android SDK Platform-Tools&lt;/a&gt; from Google.&lt;/li&gt;
&lt;li&gt;Use a USB cable that supports data, not only charging.&lt;/li&gt;
&lt;li&gt;Unlock the Android phone.&lt;/li&gt;
&lt;li&gt;Enable Developer options and USB debugging.&lt;/li&gt;
&lt;li&gt;Connect directly to the computer when possible instead of using an unpowered hub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The location of Developer options differs between Samsung, Xiaomi, Pixel, Huawei, OnePlus, and other interfaces. If you need the device-specific menu paths, this &lt;a href="https://idraaak.com/%D8%AA%D8%B5%D8%AD%D9%8A%D8%AD-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-usb/" rel="noopener noreferrer"&gt;guide to enabling USB debugging on Android phones&lt;/a&gt; covers the common manufacturers and the RSA authorization step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with one command
&lt;/h2&gt;

&lt;p&gt;Open Terminal, PowerShell, or Command Prompt inside the Platform-Tools folder and run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For extra information, use:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb devices -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A normal result looks similar to this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List of devices attached
R58M123ABCD    device product:example model:Example device:example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The word after the serial number is the important part.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each ADB state means
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Where to look first&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;device&lt;/td&gt;
&lt;td&gt;ADB can communicate with the phone&lt;/td&gt;
&lt;td&gt;The connection is ready&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unauthorized&lt;/td&gt;
&lt;td&gt;The phone has not authorized this computer&lt;/td&gt;
&lt;td&gt;Phone screen and RSA prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;offline&lt;/td&gt;
&lt;td&gt;ADB sees the device but cannot communicate reliably&lt;/td&gt;
&lt;td&gt;ADB server, cable, port, or device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empty list&lt;/td&gt;
&lt;td&gt;The computer is not exposing the phone to ADB&lt;/td&gt;
&lt;td&gt;Cable, USB mode, driver, or debugging setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;adb not recognized&lt;/td&gt;
&lt;td&gt;The shell cannot find the ADB executable&lt;/td&gt;
&lt;td&gt;Platform-Tools folder or PATH&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Case 1: The result is device
&lt;/h2&gt;

&lt;p&gt;This is the success state. ADB can send commands to the phone.&lt;/p&gt;

&lt;p&gt;You can test the connection with a harmless command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb shell getprop ro.product.model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If the phone appears as &lt;strong&gt;device&lt;/strong&gt; but File Explorer does not show its storage, ADB is not the problem. ADB and MTP are separate connection modes. Open the USB notification on the phone and select &lt;strong&gt;File transfer&lt;/strong&gt; if you want to browse photos and documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: The result is unauthorized
&lt;/h2&gt;

&lt;p&gt;This usually means the physical USB connection works, but Android has not accepted the computer's RSA key.&lt;/p&gt;

&lt;p&gt;Try these steps in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unlock the phone and keep the screen on.&lt;/li&gt;
&lt;li&gt;Look for the &lt;strong&gt;Allow USB debugging?&lt;/strong&gt; prompt.&lt;/li&gt;
&lt;li&gt;Check that the RSA fingerprint belongs to the computer you are using.&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;Allow&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;adb devices&lt;/strong&gt; again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not select “Always allow from this computer” on a shared or public machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  If the RSA prompt does not appear
&lt;/h3&gt;

&lt;p&gt;Open Developer options on the phone and use &lt;strong&gt;Revoke USB debugging authorizations&lt;/strong&gt;. Then disconnect and reconnect the cable.&lt;/p&gt;

&lt;p&gt;You can also restart the local ADB server:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb kill-server
adb start-server
adb devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Revoking authorizations removes previously trusted computer keys. Android should display a new approval prompt after the next connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3: The result is offline
&lt;/h2&gt;

&lt;p&gt;An offline device has been detected, but the ADB server cannot maintain a usable session.&lt;/p&gt;

&lt;p&gt;Use this sequence:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb kill-server
adb start-server
adb devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If the device remains offline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disconnect and reconnect the cable.&lt;/li&gt;
&lt;li&gt;Try another USB port.&lt;/li&gt;
&lt;li&gt;Avoid a loose adapter or unpowered hub.&lt;/li&gt;
&lt;li&gt;Unlock the phone and check for a new authorization prompt.&lt;/li&gt;
&lt;li&gt;Update Platform-Tools.&lt;/li&gt;
&lt;li&gt;Restart the phone if the state persists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not start with a factory reset. An offline ADB state is normally a connection or server problem, not a reason to erase the device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 4: The device list is empty
&lt;/h2&gt;

&lt;p&gt;If the output only says &lt;strong&gt;List of devices attached&lt;/strong&gt; and nothing appears below it, work from the physical layer upward.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Check the cable
&lt;/h3&gt;

&lt;p&gt;A phone can charge through a cable that has no working data lines. Test with a known data-capable cable.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Change the port
&lt;/h3&gt;

&lt;p&gt;Connect directly to another USB port on the computer. Remove hubs and adapters while testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Check the phone's USB notification
&lt;/h3&gt;

&lt;p&gt;Select &lt;strong&gt;File transfer&lt;/strong&gt; or another data mode. ADB can work independently of MTP on many phones, but choosing a data mode helps expose cable and driver problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Confirm USB debugging
&lt;/h3&gt;

&lt;p&gt;Make sure both the main Developer options switch and &lt;strong&gt;USB debugging&lt;/strong&gt; are enabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Check Windows drivers
&lt;/h3&gt;

&lt;p&gt;On Windows, open Device Manager. A warning icon, “Unknown device,” or an incorrectly identified Android device points to a driver issue.&lt;/p&gt;

&lt;p&gt;Install the official OEM USB driver when the manufacturer provides one. Avoid old “Minimal ADB” packages and generic driver bundles from unknown download sites.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Restart ADB
&lt;/h3&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb kill-server
adb start-server
adb devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  7. Test another computer
&lt;/h3&gt;

&lt;p&gt;If the same phone and cable work elsewhere, the problem is probably the original computer's driver, port, or software configuration.&lt;/p&gt;
&lt;h2&gt;
  
  
  Case 5: adb is not recognized
&lt;/h2&gt;

&lt;p&gt;Messages such as “adb is not recognized” or “command not found” mean the shell cannot locate the executable. They do not indicate a phone problem.&lt;/p&gt;

&lt;p&gt;On Windows PowerShell, from inside the Platform-Tools folder, try:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\adb.exe devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On macOS or Linux, from the same folder, try:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./adb devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For frequent use, add Platform-Tools to the system PATH. For occasional use, running the command from the extracted folder is simpler and reduces PATH mistakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  More than one device or emulator
&lt;/h2&gt;

&lt;p&gt;If several devices are listed, specify the serial number with the &lt;strong&gt;-s&lt;/strong&gt; option:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb -s R58M123ABCD shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Copy the serial exactly from &lt;strong&gt;adb devices&lt;/strong&gt;. This prevents a command from being sent to the wrong phone or emulator.&lt;/p&gt;

&lt;h2&gt;
  
  
  When USB remains unreliable
&lt;/h2&gt;

&lt;p&gt;Android 11 and later support wireless debugging on compatible devices. The phone and computer must be on the same network, and the device must be paired through the Wireless debugging screen.&lt;/p&gt;

&lt;p&gt;Wireless debugging can avoid cable and Windows driver problems, but it should not be treated as a way to bypass authorization. Android still requires the pairing step.&lt;/p&gt;

&lt;p&gt;The official &lt;a href="https://developer.android.com/tools/adb" rel="noopener noreferrer"&gt;Android Debug Bridge documentation&lt;/a&gt; explains USB and wireless connections in detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security cleanup after troubleshooting
&lt;/h2&gt;

&lt;p&gt;USB debugging gives an authorized computer a powerful communication channel to the phone.&lt;/p&gt;

&lt;p&gt;After finishing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disable USB debugging if you do not use it regularly.&lt;/li&gt;
&lt;li&gt;Revoke authorizations after using a shared computer.&lt;/li&gt;
&lt;li&gt;Remove wireless debugging pairings that you no longer need.&lt;/li&gt;
&lt;li&gt;Never approve an RSA key on a computer you do not trust.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enabling USB debugging does not erase data, but individual ADB commands can change files, applications, or device settings. Understand a command before running it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shortest useful diagnostic flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If ADB is not recognized, fix the Platform-Tools location or PATH.&lt;/li&gt;
&lt;li&gt;If the list is empty, check the cable, port, USB mode, debugging setting, and driver.&lt;/li&gt;
&lt;li&gt;If the result is unauthorized, approve or reset the RSA authorization.&lt;/li&gt;
&lt;li&gt;If the result is offline, restart the ADB server and reconnect the device.&lt;/li&gt;
&lt;li&gt;If the result is device, the ADB connection is working.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This order avoids the classic troubleshooting ritual of reinstalling everything, rebooting five times, and hoping the USB gods are finally satisfied.&lt;/p&gt;

</description>
      <category>android</category>
      <category>debugging</category>
      <category>tutorial</category>
      <category>mobile</category>
    </item>
    <item>
      <title>How to Remove Music From a Video Without Losing Quality: 3 Practical Methods</title>
      <dc:creator>niedal</dc:creator>
      <pubDate>Thu, 07 Aug 2025 12:28:34 +0000</pubDate>
      <link>https://dev.to/niedal76/how-to-remove-music-from-a-video-without-losing-quality-tools-tips-b7f</link>
      <guid>https://dev.to/niedal76/how-to-remove-music-from-a-video-without-losing-quality-tools-tips-b7f</guid>
      <description>&lt;p&gt;“Remove music from a video” can mean three very different things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove &lt;strong&gt;all sound&lt;/strong&gt; from the file.&lt;/li&gt;
&lt;li&gt;Mute the audio in a browser editor.&lt;/li&gt;
&lt;li&gt;Remove background music while trying to keep speech.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Choosing the wrong method can delete dialogue, reduce video quality, or create strange audio artifacts. This guide explains which approach to use and how to avoid unnecessary re-encoding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your goal&lt;/th&gt;
&lt;th&gt;Best approach&lt;/th&gt;
&lt;th&gt;Main trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Remove every audio track without changing video quality&lt;/td&gt;
&lt;td&gt;FFmpeg stream copy&lt;/td&gt;
&lt;td&gt;Voice and sound effects are removed too&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mute a short clip without installing software&lt;/td&gt;
&lt;td&gt;Browser-based video editor&lt;/td&gt;
&lt;td&gt;The file is uploaded and may be re-encoded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep dialogue but remove background music&lt;/td&gt;
&lt;td&gt;AI dialogue or stem separation&lt;/td&gt;
&lt;td&gt;Results depend heavily on the original mix&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Method 1: Remove all audio with FFmpeg
&lt;/h2&gt;

&lt;p&gt;If you want a silent video and care about preserving the original video stream, FFmpeg is the cleanest option.&lt;/p&gt;

&lt;p&gt;Download FFmpeg from the &lt;a href="https://ffmpeg.org/download.html" rel="noopener noreferrer"&gt;official website&lt;/a&gt;, open a terminal in the folder containing your video, and run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ffmpeg -i input.mp4 -map 0 -c copy -an output.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;What the options do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-i input.mp4 selects the source file.&lt;/li&gt;
&lt;li&gt;-map 0 keeps the available non-audio streams from the input.&lt;/li&gt;
&lt;li&gt;-c copy copies streams instead of re-encoding them.&lt;/li&gt;
&lt;li&gt;-an removes all audio streams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the video stream is copied, this method does not reduce its visual quality. It is also fast because FFmpeg is not rendering every frame again.&lt;/p&gt;

&lt;p&gt;Important: this removes &lt;strong&gt;all audio&lt;/strong&gt;, not only music. If the clip contains dialogue that you want to preserve, use the third method instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 2: Mute the video in a browser
&lt;/h2&gt;

&lt;p&gt;For a quick social-media clip, an online editor can be easier than a command-line tool. Services such as VEED, Kapwing, Clideo, and Adobe Express provide controls for muting or deleting an audio track.&lt;/p&gt;

&lt;p&gt;The basic workflow is similar in most editors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload the original video.&lt;/li&gt;
&lt;li&gt;Select the video or audio track on the timeline.&lt;/li&gt;
&lt;li&gt;Set the volume to zero or remove the audio track.&lt;/li&gt;
&lt;li&gt;Export at the original resolution and frame rate when those options are available.&lt;/li&gt;
&lt;li&gt;Watch the exported file from beginning to end before publishing it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach is convenient, but it has two drawbacks. First, the video is uploaded to a third-party service, which may be unsuitable for private footage. Second, many browser editors re-encode the video during export. The result may still look good, but it is not the same as copying the original stream with FFmpeg.&lt;/p&gt;

&lt;p&gt;For sensitive or very large files, use a local editor or FFmpeg instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 3: Keep speech and remove background music
&lt;/h2&gt;

&lt;p&gt;This is the difficult case.&lt;/p&gt;

&lt;p&gt;A normal video file usually contains one mixed audio track. Music, dialogue, ambience, and sound effects are already combined. Muting that track removes everything.&lt;/p&gt;

&lt;p&gt;To keep speech, you need a tool described as one of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dialogue isolation&lt;/li&gt;
&lt;li&gt;Voice separation&lt;/li&gt;
&lt;li&gt;Vocal remover&lt;/li&gt;
&lt;li&gt;Stem separation&lt;/li&gt;
&lt;li&gt;AI noise or music removal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools estimate which parts of the waveform belong to speech and which belong to music. They can work surprisingly well when the voice is clear and centered, but they are not magic. Music that overlaps heavily with speech may leave metallic sounds, echoes, or missing syllables.&lt;/p&gt;

&lt;p&gt;A safer workflow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep an untouched copy of the original video.&lt;/li&gt;
&lt;li&gt;Extract or upload the highest-quality audio available.&lt;/li&gt;
&lt;li&gt;Run dialogue or vocal separation.&lt;/li&gt;
&lt;li&gt;Listen with headphones, especially at transitions and quiet speech.&lt;/li&gt;
&lt;li&gt;Replace the original audio with the cleaned dialogue track.&lt;/li&gt;
&lt;li&gt;Export only once after the final check.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the separation sounds artificial, lowering the music instead of removing it completely may produce a more natural result.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to preserve video quality
&lt;/h2&gt;

&lt;p&gt;No matter which tool you use, these checks reduce avoidable quality loss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the original resolution. Do not export a 4K source at 1080p unless you intentionally want a smaller file.&lt;/li&gt;
&lt;li&gt;Match the original frame rate whenever possible.&lt;/li&gt;
&lt;li&gt;Avoid editing and exporting the same video several times.&lt;/li&gt;
&lt;li&gt;Use a high-quality export preset if re-encoding is required.&lt;/li&gt;
&lt;li&gt;Keep the original aspect ratio to prevent stretching or cropping.&lt;/li&gt;
&lt;li&gt;Preview fast motion, text, faces, and dark scenes after export.&lt;/li&gt;
&lt;li&gt;Save the original file until the final version has been checked.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“High resolution” alone does not guarantee quality. A 1080p export with an extremely low bitrate can look worse than a well-encoded 720p file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using a mute tool when dialogue must remain
&lt;/h3&gt;

&lt;p&gt;Mute controls affect the complete audio track. They do not understand which sound is music and which is speech.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assuming every AI result will be clean
&lt;/h3&gt;

&lt;p&gt;AI separation depends on the mix. Background vocals, reverb, and music in the same frequency range as speech make separation harder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Uploading private footage without checking the service
&lt;/h3&gt;

&lt;p&gt;Read the storage and deletion policy before uploading confidential, family, client, or workplace videos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Re-exporting repeatedly
&lt;/h3&gt;

&lt;p&gt;Every lossy export can introduce more compression artifacts. Work from the original and make the final export once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arabic walkthrough
&lt;/h2&gt;

&lt;p&gt;Readers who prefer step-by-step instructions in Arabic can use this &lt;a href="https://idraaak.com/%d8%a5%d8%b2%d8%a7%d9%84%d8%a9-%d8%a7%d9%84%d9%85%d9%88%d8%b3%d9%8a%d9%82%d9%89-%d9%85%d9%86-%d8%a7%d9%84%d9%81%d9%8a%d8%af%d9%8a%d9%88/" rel="noopener noreferrer"&gt;Arabic guide to removing music from a video&lt;/a&gt;, which covers browser-based options and practical steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final recommendation
&lt;/h2&gt;

&lt;p&gt;Use FFmpeg when you want a completely silent video without re-encoding the video stream. Use a browser editor when convenience matters more than perfect stream preservation. Use AI separation only when speech must remain, and always listen to the full result before publishing.&lt;/p&gt;

&lt;p&gt;The key is to decide whether you want to remove &lt;strong&gt;all audio&lt;/strong&gt; or only &lt;strong&gt;the music&lt;/strong&gt; before choosing a tool.&lt;/p&gt;

</description>
      <category>videoediting</category>
      <category>ffmpeg</category>
      <category>tutorial</category>
      <category>resources</category>
    </item>
  </channel>
</rss>
