<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Baconao.NET Posts</title>
    <description>Baconao.NET posts on technology stuff
</description>
    <link>https://baconao.net/posts/</link>
    <atom:link href="https://baconao.net/posts/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 01 Jul 2026 02:40:37 -0500</pubDate>
    <lastBuildDate>Wed, 01 Jul 2026 02:40:37 -0500</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>Mobile AI and Cloud Context: Connecting Joey iOS to FastMCP on Render</title>
        <description>&lt;h1 id=&quot;end-to-end-blueprint-connecting-intervalsicu-mcp-to-joey-ios-via-render-and-openrouter&quot;&gt;End-to-End Blueprint: Connecting Intervals.icu MCP to Joey iOS via Render and OpenRouter&lt;/h1&gt;

&lt;p&gt;The Model Context Protocol (MCP) allows LLMs to interact with remote tools and data sources. While desktop clients typically rely on persistent local connections, mobile setups require an architecture optimized for short-lived, atomic network requests.&lt;/p&gt;

&lt;p&gt;This guide outlines how to configure and link four distinct systems—&lt;strong&gt;Intervals.icu&lt;/strong&gt;, &lt;strong&gt;Render&lt;/strong&gt;, &lt;strong&gt;OpenRouter&lt;/strong&gt;, and &lt;strong&gt;Joey iOS&lt;/strong&gt;—into a stateless, single-endpoint engine to query fitness metrics and training load insights natively from your phone.&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-intervalsicu-extracting-api-credentials&quot;&gt;1. Intervals.icu: Extracting API Credentials&lt;/h2&gt;

&lt;p&gt;The Python MCP container acts as a direct proxy to your training logs. It requires developer authentication parameters from the Intervals.icu platform to execute queries successfully.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Log into your desktop dashboard at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://intervals.icu&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; and scroll down to the &lt;strong&gt;API Keys&lt;/strong&gt; section.&lt;/li&gt;
  &lt;li&gt;Locate and copy your &lt;strong&gt;Athlete ID&lt;/strong&gt; (a unique identifier alphanumeric or numerical string, distinct from your public username).&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;Generate API Key&lt;/strong&gt;. Copy the random string immediately and store it securely.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-render-containerization--transport-routing&quot;&gt;2. Render: Containerization &amp;amp; Transport Routing&lt;/h2&gt;

&lt;p&gt;To accept payloads from a mobile device without connection degradation, your containerized server must run a unified, stateless HTTP transport layer instead of streaming Server-Sent Events (SSE).&lt;/p&gt;

&lt;h3 id=&quot;step-a-the-start-command&quot;&gt;Step A: The Start Command&lt;/h3&gt;
&lt;p&gt;In your Render Web Service settings under &lt;strong&gt;Build &amp;amp; Deploy&lt;/strong&gt;, swap out your default launch arguments. Force the application executable to run its native stateless HTTP configuration.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Note: The command below uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\&lt;/code&gt; to break the line so it remains fully visible on narrow screens, with no trailing backslash on the final argument)&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/app/.venv/bin/intervals-icu-mcp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--transport&lt;/span&gt; streamable-http &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--port&lt;/span&gt; 10000 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--host&lt;/span&gt; 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-b-production-environment-variables&quot;&gt;Step B: Production Environment Variables&lt;/h3&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Environment Variables&lt;/strong&gt; on Render. Inject the following parameters to eliminate internal state/redirect tracking loops and provide platform access:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Key&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Value / Format&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Architectural Purpose&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FASTMCP_STATELESS_HTTP&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Forces the FastMCP framework to process requests via individual, stateless HTTP transactions.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FASTMCP_PATH&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Aligns the underlying server mounting layout straight to the base directory.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INTERVALS_ICU_ATHLETE_ID&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;your_athlete_id&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Identifies your profile to the underlying application engine during API loops.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INTERVALS_ICU_API_KEY&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;your_generated_key&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Authenticates backend calls passing through your Render proxy.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Click &lt;strong&gt;Save Changes&lt;/strong&gt;. Render will automatically trigger a clean rebuild and redeploy your container.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-openrouter-api-key-provisioning&quot;&gt;3. OpenRouter: API Key Provisioning&lt;/h2&gt;

&lt;p&gt;Because Joey acts as a consumer interface, it passes prompt queries to a hosted language model engine. OpenRouter serves as the LLM aggregator, handling context execution and tool-calling logic.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Go to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://openrouter.ai&lt;/code&gt; and sign into your developer console.&lt;/li&gt;
  &lt;li&gt;Navigate to &lt;strong&gt;Keys&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create Key&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Name the token contextually (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Joey-MCP-Link&lt;/code&gt;) and generate it. Copy the string immediately. Ensure your account balance contains credits to handle tool-calling inference loops.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-joey-ios-endpoint-consolidation&quot;&gt;4. Joey iOS: Endpoint Consolidation&lt;/h2&gt;

&lt;p&gt;With the cloud infrastructure running a unified HTTP transport layer, input the final routing configuration parameters directly into your iOS mobile client.&lt;/p&gt;

&lt;h3 id=&quot;step-a-llm-setup&quot;&gt;Step A: LLM Setup&lt;/h3&gt;
&lt;p&gt;In the Joey settings panel, paste your newly generated OpenRouter API token into the provider configurations and select an intelligent, tool-capable model (such as Anthropic’s Claude 3.5 Sonnet or OpenAI’s GPT-4o).&lt;/p&gt;

&lt;h3 id=&quot;step-b-server-integration&quot;&gt;Step B: Server Integration&lt;/h3&gt;
&lt;p&gt;Tap &lt;strong&gt;MCP Servers&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Add Server&lt;/strong&gt; and configure the endpoint fields exactly as specified below:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://intervals-icu-mcp-2j3k.onrender.com/mcp&lt;/code&gt; &lt;em&gt;(Note: Do not include an additional trailing slash at the absolute end of the URL string).&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Custom Headers:&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Key:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authorization&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Value:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bearer your_chosen_mcp_access_token&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;connection-verification&quot;&gt;Connection Verification&lt;/h2&gt;

&lt;p&gt;When Joey saves the configuration, it initiates a single &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;POST&lt;/code&gt; handshake request to the server. The proxy validates the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authorization&lt;/code&gt; header, maps the payload to the stateless engine, and returns a successful connection status in your Render logs:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;INFO:     31.154.8.117:0 - &quot;POST /mcp HTTP/1.1&quot; 200 OK
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The status indicator inside Joey will illuminate green, confirming that the LLM now has full visibility of your custom Intervals.icu tools.&lt;/p&gt;

</description>
        <pubDate>Tue, 30 Jun 2026 00:00:00 -0500</pubDate>
        <link>https://baconao.net/posts/2026/intervals-icu-openrouter-render-joey/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2026/intervals-icu-openrouter-render-joey/</guid>
        
        <category>ai</category>
        
        <category>mobile</category>
        
        <category>intervals.cu</category>
        
        <category>render</category>
        
        <category>openrouter</category>
        
        
      </item>
    
      <item>
        <title>Using Local AI Agents to Analyze Personal Fitness Data</title>
        <description>&lt;h1 id=&quot;-using-local-ai-agents-to-analyze-personal-fitness-data&quot;&gt;💻 Using Local AI Agents to Analyze Personal Fitness Data&lt;/h1&gt;

&lt;p&gt;Model Context Protocol (MCP) and AI agents are frequently discussed in the context of enterprise software development. However, these tools are also highly effective for personal hobbies and data analysis.&lt;/p&gt;

&lt;p&gt;I wanted a way to query my cycling and recovery metrics securely without relying on premium AI subscriptions. By combining open-source tools and custom inference endpoints, I built a local training assistant for free.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;the-setup&quot;&gt;The Setup&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The Data Source: Intervals.icu&lt;/strong&gt; Tracks fitness metrics like training load, fatigue, and form (CTL/ATL/TSB) and provides an open API.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The Terminal: Warp&lt;/strong&gt; Warp’s AI Agent natively supports MCP. I configured a local MCP server (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;intervals-icu-mcp&lt;/code&gt;) to let the terminal communicate directly with the API.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The LLM: OpenRouter&lt;/strong&gt; To bypass standard platform credit limits, I used Warp’s “Bring Your Own Inference” capability to connect to OpenRouter, routing queries through free models like Qwen or Llama.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-workflow&quot;&gt;The Workflow&lt;/h2&gt;

&lt;p&gt;I can open the AI panel in my terminal and ask:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“Analyze my training load from this week. Based on my current injury recovery, should I take a rest day tomorrow?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent fetches the real-time data via the local MCP server, processes it through OpenRouter, and returns a data-driven recovery recommendation in seconds.&lt;/p&gt;

&lt;p&gt;Using local tools and open APIs makes it straightforward to build custom, private data pipelines for any hobby.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;#AI #ModelContextProtocol #DataScience #WarpTerminal #OpenRouter #FitnessTech&lt;/p&gt;
</description>
        <pubDate>Sun, 21 Jun 2026 00:00:00 -0500</pubDate>
        <link>https://baconao.net/posts/2026/intervals-icu-warp-openrouter/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2026/intervals-icu-warp-openrouter/</guid>
        
        <category>ai</category>
        
        <category>intervals.cu</category>
        
        <category>warp terminal</category>
        
        <category>openrouter</category>
        
        
      </item>
    
      <item>
        <title>Install WhatsApp on Mac with Nativefier</title>
        <description>&lt;p&gt;WhatsApp has an official Mac app, but it can be heavy on resources and sometimes lacks flexibility. An alternative is to wrap WhatsApp Web into a standalone desktop app using &lt;strong&gt;Nativefier&lt;/strong&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;what-is-nativefier&quot;&gt;What is Nativefier?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/nativefier/nativefier&quot;&gt;Nativefier&lt;/a&gt; is a command-line tool that creates a desktop application from any web page using Electron. It gives you a lightweight, standalone window without the overhead of a full browser.&lt;/p&gt;

&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;

&lt;p&gt;You need &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;npm&lt;/strong&gt; installed. If you don’t have them, install via Homebrew:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;brew &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;node
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;install-nativefier&quot;&gt;Install Nativefier&lt;/h2&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-g&lt;/span&gt; nativefier
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;create-the-whatsapp-app&quot;&gt;Create the WhatsApp App&lt;/h2&gt;

&lt;p&gt;Run the following command:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nativefier &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;WhatsApp&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;https://web.whatsapp.com&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--single-instance&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will generate a folder in your current directory containing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.app&lt;/code&gt; bundle.&lt;/p&gt;

&lt;h3 id=&quot;useful-options&quot;&gt;Useful options&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--icon icon.png&lt;/code&gt; - Use a custom icon (download a WhatsApp icon in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.png&lt;/code&gt; format first)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--single-instance&lt;/code&gt; - Prevents opening multiple instances&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--internal-urls &quot;.*whatsapp.*&quot;&lt;/code&gt; - Keeps all WhatsApp-related navigation inside the app&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--darwin-dark-mode-support&lt;/code&gt; - Enables dark mode support on macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A more complete example:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nativefier &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;WhatsApp&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--single-instance&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--internal-urls&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;.*whatsapp.*&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--darwin-dark-mode-support&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;https://web.whatsapp.com&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;move-the-app-to-applications&quot;&gt;Move the App to Applications&lt;/h2&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mv &lt;/span&gt;WhatsApp-darwin-&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;/WhatsApp.app /Applications/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can now launch &lt;strong&gt;WhatsApp&lt;/strong&gt; from Spotlight or your Applications folder. On first launch, scan the QR code with your phone to link the session, just like you would in the browser.&lt;/p&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Nativefier is archived&lt;/strong&gt; - The project is no longer actively maintained but still works. An actively maintained alternative is &lt;a href=&quot;https://github.com/nicedayfor/pake&quot;&gt;Pake&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;The app stores its session data locally, so you won’t need to re-scan the QR code every time.&lt;/li&gt;
  &lt;li&gt;To update the app, simply re-run the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nativefier&lt;/code&gt; command and replace the old &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.app&lt;/code&gt; bundle.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 19 Apr 2026 00:00:00 -0500</pubDate>
        <link>https://baconao.net/posts/2026/install-whatsapp-mac-nativefier/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2026/install-whatsapp-mac-nativefier/</guid>
        
        <category>mac</category>
        
        <category>nativefier</category>
        
        <category>whatsapp</category>
        
        
      </item>
    
      <item>
        <title>Warp - Shell with an AI attitute</title>
        <description>&lt;ul&gt;
  &lt;li&gt;Do you like using shells: sh, cmd, ps&lt;/li&gt;
  &lt;li&gt;Do you feel forgetting how to do things, 
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;what's the command to remove all directories and sub and force and and recursive and all?&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Do you like AI or talking to AI, or just want to say you are AI aware?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, my very serious recomendation:&lt;/p&gt;

&lt;p&gt;Go &lt;strong&gt;Warp&lt;/strong&gt; a very neat, cool, easy-to-use, and powerful command line (shell) tool, with AI built-in&lt;/p&gt;

&lt;p&gt;https://www.warp.dev/terminal&lt;/p&gt;

</description>
        <pubDate>Tue, 01 Apr 2025 00:00:00 -0500</pubDate>
        <link>https://baconao.net/posts/2025/warp-shell-with-ai/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2025/warp-shell-with-ai/</guid>
        
        
      </item>
    
      <item>
        <title>Setting up GitHub Pages</title>
        <description>&lt;p&gt;GitHub allows you to host pages directly from your repo 
Here are the steps I did:
For GitHub:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Create a repository for your project (you can name it anything).&lt;/li&gt;
  &lt;li&gt;Add your HTML file (e.g., index.html) to the repository.&lt;/li&gt;
  &lt;li&gt;Go to the repository’s Settings &amp;gt; Pages.&lt;/li&gt;
  &lt;li&gt;In the Source section, select the branch where your HTML file is located, and choose the root folder.&lt;/li&gt;
  &lt;li&gt;GitHub will provide you with a link to access your hosted HTML page.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 28 Jan 2025 00:00:00 -0600</pubDate>
        <link>https://baconao.net/posts/2025/github-pages/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2025/github-pages/</guid>
        
        
      </item>
    
      <item>
        <title>Fedora Server on Minix NEO Z64W</title>
        <description>&lt;p&gt;The Minix NEO Z64-W is intended to run Windows, but, since it has an Intel chipset, it runs Linux Server pretty well.
Until a few days ago, I had a stable version of Ubuntu Server 20 LTS running there. A failed attempt to upgrade to Ubuntu LTS 22 brings me here.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The preparation process is straighforward:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Download &lt;strong&gt;Fedora Server&lt;/strong&gt; iso image&lt;/li&gt;
  &lt;li&gt;Use &lt;strong&gt;Rufus&lt;/strong&gt; to create bootable USB drive&lt;/li&gt;
  &lt;li&gt;Disable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bit Execute&lt;/code&gt; on the BIOS to boot from the USB drive&lt;/li&gt;
  &lt;li&gt;Next, Next, Next (be sue to enable root for ssh if you intend to use it headless)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dnf upgrade&lt;/code&gt; broke the whole installation, so I had to start over&lt;/p&gt;

&lt;h2 id=&quot;stuff-i-installed&quot;&gt;Stuff I installed&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dnf install&lt;/code&gt; nano samba git qbitorrent-nox pip3 nfs-utils&lt;/p&gt;

&lt;h1 id=&quot;mounting-external-usb-drives&quot;&gt;Mounting External USB Drives&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mkdir /media/external /media/backup&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mount /dev/sda1 /media/external&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mount /dev/sda2 /media/backup&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;blkid /dev/sda1&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp /etc/fstab /etc/fstab.backup&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nano /etc/fstab&lt;/code&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;UUID=384A8DB912EAB6E6 /media/backup auto nosuid,nodev,nofail 0 0
UUID=96A803ADA8038AC7 /media/external auto nosuid,nodev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;nfs-configuration-for-everyone&quot;&gt;NFS Configuration for everyone&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;systemctl enable --now rpcbind nfs-server&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;systemctl start nfs-server&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nano /etc/exports&lt;/code&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/media/external/transmission 192.168.1.0/24(rw,sync,insecure,all_squash,anonuid=0,anongid=0)
/media/backup 192.168.1.0/24(rw,sync,insecure,all_squash,anonuid=0,anongid=0)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exportfs -ra&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;disable-firewall&quot;&gt;Disable Firewall&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;systemctl stop firewalld&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;systemctl disable firewalld&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;reloading-usb-after-unplugging-the-extenal-drive&quot;&gt;Reloading USB after unplugging the extenal drive&lt;/h2&gt;

&lt;p&gt;Check disk
‘
sudo fdisk -l | grep sd
‘&lt;/p&gt;

&lt;p&gt;List USB devices:
‘
lsblk -f
‘&lt;/p&gt;

</description>
        <pubDate>Tue, 31 Oct 2023 00:00:00 -0500</pubDate>
        <link>https://baconao.net/posts/2023/installing-Fedora-Minix-NEO-Z64W/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2023/installing-Fedora-Minix-NEO-Z64W/</guid>
        
        <category>linux</category>
        
        <category>fedora</category>
        
        
      </item>
    
      <item>
        <title>Moving from Android to iPhone</title>
        <description>&lt;p&gt;After several years on Android, I moved recently to iPhone.
Here are my takes on the process&lt;/p&gt;

&lt;p&gt;Android history: Galaxy 2, Galaxy 4, Galaxy 6, Pocofone, Pixel 4 XL
Moving to: iPhone 14 Max&lt;/p&gt;

&lt;!--more--&gt;

&lt;h1 id=&quot;what-i-like&quot;&gt;What I like&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;Smoothness, both switching apps and within apps&lt;/li&gt;
  &lt;li&gt;Font control over particular apps&lt;/li&gt;
  &lt;li&gt;Apple Pay&lt;/li&gt;
  &lt;li&gt;Car Play&lt;/li&gt;
  &lt;li&gt;Silent physical button&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;what-i-miss&quot;&gt;What I miss&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;Trusted device/location to unlock device&lt;/li&gt;
  &lt;li&gt;Google News integrated on swipe right&lt;/li&gt;
  &lt;li&gt;Scan to PDF to Google Drive&lt;/li&gt;
  &lt;li&gt;Control over audio control&lt;/li&gt;
  &lt;li&gt;Built-in Translation to Hebrew&lt;/li&gt;
  &lt;li&gt;Multi language assistant - Siri works with only one language&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;whats-very-similar-and-not-worth-moving-for&quot;&gt;What’s very similar and not worth moving for&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;Camera&lt;/li&gt;
  &lt;li&gt;Battery life&lt;/li&gt;
  &lt;li&gt;Audio quality&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Wed, 31 May 2023 00:00:00 -0500</pubDate>
        <link>https://baconao.net/posts/2023/moving-from-Android-to-iPhone/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2023/moving-from-Android-to-iPhone/</guid>
        
        <category>iPhone</category>
        
        <category>Android</category>
        
        
      </item>
    
      <item>
        <title>Calling AWS Lambda functions from LINQPad</title>
        <description>&lt;ul&gt;
  &lt;li&gt;Open LINQPad&lt;/li&gt;
  &lt;li&gt;Add reference to JSON.NET&lt;/li&gt;
  &lt;li&gt;Use this C# statement to call a Lambda function in AWS:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lambdaUrl&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;https://&amp;lt;base&amp;gt;.amazonaws.com/default/&amp;lt;api&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;some message&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;payloadJson&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;JsonConvert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;SerializeObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;client&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;HttpClient&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;HttpRequestMessage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HttpMethod&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lambdaUrl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;StringContent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;payloadJson&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UTF8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;SendAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WriteLine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ReadAsStringAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In order to create/configure the lambda function, follow these steps:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Login to AWS&lt;/li&gt;
  &lt;li&gt;Search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Lambda&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Create new function
    &lt;ul&gt;
      &lt;li&gt;Select existing permission &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lambda_execution&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Go to Configuration
    &lt;ul&gt;
      &lt;li&gt;Create New trigger of type API Gateway&lt;/li&gt;
      &lt;li&gt;Set Security to None&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 03 Jan 2023 00:00:00 -0600</pubDate>
        <link>https://baconao.net/posts/2023/calling-AWS-lambda-functions/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2023/calling-AWS-lambda-functions/</guid>
        
        <category>AWS</category>
        
        
      </item>
    
      <item>
        <title>Grep - Powershell style</title>
        <description>&lt;p&gt;Use this powershell command to find text in files, grep style:&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gci&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'some text'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-ChildItem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Recurse&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Select-String&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'some text'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Sun, 09 Jan 2022 00:00:00 -0600</pubDate>
        <link>https://baconao.net/posts/2022/pwshell-grep/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2022/pwshell-grep/</guid>
        
        <category>powershell</category>
        
        
      </item>
    
      <item>
        <title>Fix apt upgrade error when connecting to fr.archive.ubuntu.com</title>
        <description>&lt;p&gt;Recently, when trying to upgrade my tiny Ubuntu Server, got this error:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Failed to fetch http://fr.archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease  Cannot initiate the connection to fr.archive.ubuntu.com:80 (2001:bc8:1600:4:63f:72ff:feaf:a2de). - connect (101: Network is unreachable)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I thought that the issue was related to IPv6, so I disabled it:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nano /etc/sysctl.conf1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sysctl -p&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Confirm &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat /proc/sys/net/ipv6/conf/all/disable_ipv6&lt;/code&gt;
It should return 1 (disabled)&lt;/p&gt;

&lt;p&gt;This didn’t help (also got error with IPv4)&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;W: Failed to fetch http://fr.archive.ubuntu.com/ubuntu/dists/focal/InRelease  Could not connect to fr.archive.ubuntu.com:80 (51.158.154.169), connection timed out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, after doing a ping to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fr.archive.ubuntu.com&lt;/code&gt; and confirming it’s down, just replaced it with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;us.archive.ubuntu.com&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally packages upgrade is running&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt-get update
apt upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Fri, 03 Dec 2021 00:00:00 -0600</pubDate>
        <link>https://baconao.net/posts/2021/fix-apt-upgrade-error-on-fr-ubuntu/</link>
        <guid isPermaLink="true">https://baconao.net/posts/2021/fix-apt-upgrade-error-on-fr-ubuntu/</guid>
        
        <category>ubuntu</category>
        
        
      </item>
    
  </channel>
</rss>
