<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on Alain Nicolas</title>
    <link>https://alain.nuage.is/</link>
    <description>Recent content in Home on Alain Nicolas</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 16 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://alain.nuage.is/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building a Fourier waves visualizer in 2 hours</title>
      <link>https://alain.nuage.is/posts/waves/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/waves/</guid>
      <description>&lt;p&gt;A friend of mine creates physics explainer videos. He needed a visual to demonstrate how harmonics combine to create complex sounds — Fourier waves in action. I told him I&amp;rsquo;d build something quick.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-tools&#34;&gt;The tools&lt;/h3&gt;&#xA;&lt;p&gt;I used &lt;a href=&#34;https://github.com/opencode-ai/opencode&#34;&gt;OpenCode&lt;/a&gt; with Claude Opus 4.5. The whole thing took about an afternoon, from first prompt to deployed site.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-we-built&#34;&gt;What we built&lt;/h3&gt;&#xA;&lt;p&gt;A dark, oscilloscope-style visualization showing:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5 harmonics (fundamental + 4 overtones)&lt;/li&gt;&#xA;&lt;li&gt;Real-time audio synthesis via Web Audio API&lt;/li&gt;&#xA;&lt;li&gt;Two visualization modes: standing wave vs traveling wave&lt;/li&gt;&#xA;&lt;li&gt;Overlay mode to see all waves superimposed&lt;/li&gt;&#xA;&lt;li&gt;Sliders for everything: frequency, amplitude, speed, volume&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The standing wave mode (&lt;code&gt;sin(spatial) * sin(time)&lt;/code&gt;) makes the wave &amp;ldquo;breathe&amp;rdquo; up and down — like a vibrating guitar string. That&amp;rsquo;s what my friend needed for his video.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This blog has been resurrected</title>
      <link>https://alain.nuage.is/posts/blog-resurrected/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/blog-resurrected/</guid>
      <description>&lt;p&gt;This blog was dead. Now it&amp;rsquo;s back.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-happened&#34;&gt;What happened?&lt;/h3&gt;&#xA;&lt;p&gt;I recently decided to migrate all my services from an old VPS to a new one, under the nuage.is domain. The old Jekyll blog on alainicolas.net was gathering dust. Time to bring it back to life.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-tools&#34;&gt;The tools&lt;/h3&gt;&#xA;&lt;p&gt;I used &lt;a href=&#34;https://github.com/opencode-ai/opencode&#34;&gt;OpenCode&lt;/a&gt; with &lt;a href=&#34;https://github.com/music-soul1-1/oh-my-opencode&#34;&gt;Oh My OpenCode&lt;/a&gt; to orchestrate the whole migration. Hugo replaced Jekyll. A custom minimalist theme was created on the fly because GitHub was having a bad day (500 errors everywhere).&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPTs configuring my lab network</title>
      <link>https://alain.nuage.is/posts/gpts-configuring-your-network/</link>
      <pubDate>Wed, 15 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/gpts-configuring-your-network/</guid>
      <description>&lt;p&gt;OpenAI recently releases several features to Chat GPT, and one of them is GPTs. It is a tailor made chatGPT, that can ingest personnal data, and use API… That is a whole new world.&lt;/p&gt;&#xA;&lt;h3 id=&#34;use-case&#34;&gt;Use case?&lt;/h3&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve decided to make a &lt;a href=&#34;https://www.youtube.com/watch?v=G4TY0yCVovQ&#34;&gt;short video&lt;/a&gt; about what you can do with GPTs. Using ngrok as reverse proxy to my private lab, connected to 2 XRd containers. My API is just waiting for a host IP and a list of commands (&amp;ldquo;command1,command2&amp;rdquo;), and chat GPT do the rest according to the OpenAPI schema. Now we just need to plug this to an APIC or a Nexus Dashboard!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Help! My XRd is not booting!</title>
      <link>https://alain.nuage.is/posts/xrd-not-booting/</link>
      <pubDate>Thu, 20 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/xrd-not-booting/</guid>
      <description>&lt;p&gt;I recently faced an issue where my XRd device was not booting on a brand new ubuntu VM, and I wanted to share the solution with 0.0.0.0/0.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-issue&#34;&gt;The issue&lt;/h3&gt;&#xA;&lt;p&gt;I was playing with containerlab (&lt;a href=&#34;https://github.com/srl-labs/containerlab)&#34;&gt;https://github.com/srl-labs/containerlab)&lt;/a&gt;, and tried to boot up a cool XRd lab. Unfortunately, the XRd was not rechable. Took me a while to troubleshoot this. In a nutshell :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;XRd was not booting&lt;/li&gt;&#xA;&lt;li&gt;I downloaded xrd-tool, to try to boot a single container with some more logs easily (&lt;a href=&#34;https://github.com/ios-xr/xrd-tools&#34;&gt;https://github.com/ios-xr/xrd-tools&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Found some dirty logs :&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ctrace_enable_configuration(): inotify_init() failed. Too many open files (24)&#xA;ctrace_enable_configuration2 failed with error 0x2&#xA;shelfmgr: infra/infra/lw_messaging/linux/src/lw_mess_socket_ds_funcs.c:633: void lwm_ds_connect(event_mgr_p): Assertion &amp;#39;0&amp;#39; failed.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-solution&#34;&gt;The solution&lt;/h2&gt;&#xA;&lt;p&gt;It turns out it is the ubuntu max user instance that is breaking the XRd boot sequence, by limiting the number of inotify instances. You can check the current value with the following command :&lt;/p&gt;</description>
    </item>
    <item>
      <title>Span on Drop</title>
      <link>https://alain.nuage.is/posts/span-on-drop/</link>
      <pubDate>Thu, 13 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/span-on-drop/</guid>
      <description>&lt;p&gt;Already wondered how you are going to find where these drops came from? Say no more, we are going to talk about the Span-on-drop feature, especially on Nexus 9000.&lt;/p&gt;&#xA;&lt;h3 id=&#34;how-is-it-working&#34;&gt;How is it working&lt;/h3&gt;&#xA;&lt;p&gt;Packets drops are very common in networks, and may be caused by a a lot of different things. In order to troubleshoot them, we can use SPAN on drop. It will copy the packet that is dropped to a destination interface, so we can analyze it. It is a very useful tool, especially when you see drops, but you don&amp;rsquo;t know where they come from! The &amp;lsquo;Span-on-Drop&amp;rsquo; feature can pinpoint packets lost due to congestion or forwarding issues. When a packet is earmarked for dropping, the system duplicates it into a separate buffer, designates it as &amp;lsquo;Span-on-Drop&amp;rsquo;, and then send it to the pre-set &amp;lsquo;Span-on-Drop&amp;rsquo; destination. The packet is then dropped as usual. The &amp;lsquo;Span-on-Drop&amp;rsquo; feature is supported on (almost) all Cisco Nexus 9000 Series switches.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Span to CPU</title>
      <link>https://alain.nuage.is/posts/span-to-cpu/</link>
      <pubDate>Thu, 13 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/span-to-cpu/</guid>
      <description>&lt;p&gt;Are you really receiving this DHCP discover the delivery team is talking about? Let&amp;rsquo;s improve your time to innocence today, by capturing traffic directly on your switch. Erspan and destination interfaces are not needed anymore!&lt;/p&gt;&#xA;&lt;h3 id=&#34;how-is-it-working&#34;&gt;How is it working&lt;/h3&gt;&#xA;&lt;p&gt;Quick post about a feature I love to use : SPAN to CPU. It allows you to capture traffic directly on your switch, and save it to a pcap file. It is very useful when you want to capture traffic on a remote switch, or when you don&amp;rsquo;t have a SPAN destination available.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACI Simulator topology discovering issue</title>
      <link>https://alain.nuage.is/posts/aci-simulator/</link>
      <pubDate>Thu, 24 Feb 2022 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/aci-simulator/</guid>
      <description>&lt;p&gt;ACI Simulator is small virtual topology containing one ACI Controller, one spine, and two leafs. It comes as a packaged OVA file. I recently had an issue while playing with it : the APIC was not able to discover the demo topology.&lt;/p&gt;&#xA;&lt;p&gt;I was able to configure the controller on boot, but wasn&amp;rsquo;t able to discover the spine and leafs. The nodes were invisible. I found out that you should not modify anything during the initialization of the controller! Especially the TEP vlans and subnets. I just play with the management ip address and gateway, and finally was able to discover my spine and leafs under &amp;ldquo;Nodes Pending Registration&amp;rdquo; in &amp;ldquo;Fabric Membership&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mixing Python and EEM on XR</title>
      <link>https://alain.nuage.is/posts/python-eem/</link>
      <pubDate>Thu, 28 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/posts/python-eem/</guid>
      <description>&lt;p&gt;Embedded Event Manager scripts are used since ages to capture outputs, or make action right after an external trigger. Unfortunately, they are still limited to the good old TCL language. Nowadays, the majority of engineers prefer modern languages, like Python. So let&amp;rsquo;s mix things up!&lt;/p&gt;&#xA;&lt;p&gt;Examples were taken on IOS-XR 6.3.3.&lt;/p&gt;&#xA;&lt;h3 id=&#34;python-on-xr&#34;&gt;Python on XR?&lt;/h3&gt;&#xA;&lt;p&gt;eXR platforms are powered with Linux kernel, and includes Python. Let&amp;rsquo;s start slowly, and call a show clock in python. To find the system version of your favorite IOS-XR regular command, you can use the command &amp;ldquo;describe&amp;rdquo; :&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://alain.nuage.is/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alain.nuage.is/about/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m Alain, 37, network architect at Cisco. I spent my early years rebooting routers and tracking down lost packets at Orange, Monaco Telecom, and Criteo. I&amp;rsquo;m into NoOps, NetDevOps, and AS Monaco Football Club. I enjoy cooking what I eat, improv theater, and ceramics.&lt;/p&gt;&#xA;&lt;p&gt;I live in Montréal, Canada.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Exonerating network teams since 2009&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;contact&#34;&gt;Contact&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:aln.nicolas@gmail.com&#34;&gt;aln.nicolas@gmail.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/alainicolas&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/alainicolas&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
