﻿<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Noxysoft Blog</title>
  <id>https://blog.noxysoft.com/</id>
  <link rel="self" href="https://blog.noxysoft.com/atom.xml" />
  <updated>2026-07-27T00:00:00Z</updated>
  <author>
    <name>Noxysoft</name>
  </author>
  <entry>
    <title>Hello, blog</title>
    <id>https://blog.noxysoft.com/hello-blog/</id>
    <link href="https://blog.noxysoft.com/hello-blog/" />
    <updated>2026-07-27T00:00:00Z</updated>
    <summary>The Noxysoft blog is live, running on a small custom static generator.</summary>
    <content type="html">&lt;p&gt;Welcome. This blog runs on a small custom generator: markdown in, plain HTML out, no framework in sight. Posts land here first; cross-posts elsewhere point back to this page as canonical.&lt;/p&gt;
&lt;div class="callout callout-note"&gt;
&lt;p class="callout-title"&gt;What to expect&lt;/p&gt;
&lt;p&gt;Practical notes on C#, .NET, and Azure, at whatever pace real work allows.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Code samples get highlighted at build time, so your browser does no work:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
&lt;span class="keyword"&gt;var&lt;/span&gt; greeting = &lt;span class="string"&gt;&amp;quot;Hello, blog&amp;quot;&lt;/span&gt;;
Console.WriteLine(greeting);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Diagrams are rendered to SVG when the site is built, so they cost you no JavaScript either:&lt;/p&gt;
&lt;svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 818.781px; background-color: transparent;" viewBox="0 0 818.78125 68.5" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#my-svg{font-family:Inter,system-ui,sans-serif;font-size:15px;fill:#9fb3d1;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#0a1124;}#my-svg .error-text{fill:#9fb3d1;stroke:#9fb3d1;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5fb4e6;stroke:#5fb4e6;}#my-svg .marker.cross{stroke:#5fb4e6;}#my-svg svg{font-family:Inter,system-ui,sans-serif;font-size:15px;}#my-svg p{margin:0;}#my-svg .label{font-family:Inter,system-ui,sans-serif;color:#f2f6fc;}#my-svg .cluster-label text{fill:#f2f6fc;}#my-svg .cluster-label span{color:#f2f6fc;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#f2f6fc;color:#f2f6fc;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#101b36;stroke:#233456;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#5fb4e6!important;stroke-width:0;stroke:#5fb4e6;}#my-svg .arrowheadPath{fill:rgba(255, 255, 255, 0);}#my-svg .edgePath .path{stroke:#5fb4e6;stroke-width:1px;}#my-svg .flowchart-link{stroke:#5fb4e6;fill:none;}#my-svg .edgeLabel{background-color:#0a1124;text-align:center;}#my-svg .edgeLabel p{background-color:#0a1124;}#my-svg .edgeLabel rect{opacity:0.5;background-color:#0a1124;fill:#0a1124;}#my-svg .labelBkg{background-color:rgba(10, 17, 36, 0.5);}#my-svg .cluster rect{fill:#0a1124;stroke:#1d2a47;stroke-width:1px;}#my-svg .cluster text{fill:#f2f6fc;}#my-svg .cluster span{color:#f2f6fc;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Inter,system-ui,sans-serif;font-size:12px;background:#0a1124;border:1px solid #1d2a47;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#9fb3d1;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:#0a1124;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:#0a1124;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:#0a1124;fill:#0a1124;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#233456;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#233456;filter:none;}#my-svg [data-look="neo"].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"&gt;&lt;path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"&gt;&lt;polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/&gt;&lt;/marker&gt;&lt;marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/&gt;&lt;/marker&gt;&lt;g class="root"&gt;&lt;g class="clusters"/&gt;&lt;g class="edgePaths"&gt;&lt;path d="M145.469,34.25L149.635,34.25C153.802,34.25,162.135,34.25,169.802,34.25C177.469,34.25,184.469,34.25,187.969,34.25L191.469,34.25" id="my-svg-L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MTQ1LjQ2ODc1LCJ5IjozNC4yNX0seyJ4IjoxNzAuNDY4NzUsInkiOjM0LjI1fSx7IngiOjE5NS40Njg3NSwieSI6MzQuMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/&gt;&lt;path d="M331.641,34.25L335.807,34.25C339.974,34.25,348.307,34.25,355.974,34.25C363.641,34.25,370.641,34.25,374.141,34.25L377.641,34.25" id="my-svg-L_B_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_C_0" data-points="W3sieCI6MzMxLjY0MDYyNSwieSI6MzQuMjV9LHsieCI6MzU2LjY0MDYyNSwieSI6MzQuMjV9LHsieCI6MzgxLjY0MDYyNSwieSI6MzQuMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/&gt;&lt;path d="M531.047,34.25L535.214,34.25C539.38,34.25,547.714,34.25,555.38,34.25C563.047,34.25,570.047,34.25,573.547,34.25L577.047,34.25" id="my-svg-L_C_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_D_0" data-points="W3sieCI6NTMxLjA0Njg3NSwieSI6MzQuMjV9LHsieCI6NTU2LjA0Njg3NSwieSI6MzQuMjV9LHsieCI6NTgxLjA0Njg3NSwieSI6MzQuMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/&gt;&lt;/g&gt;&lt;g class="edgeLabels"&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A_B_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_B_C_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_C_D_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="nodes"&gt;&lt;g class="node default" id="my-svg-flowchart-A-0" data-look="classic" transform="translate(76.734375, 34.25)"&gt;&lt;rect class="basic label-container" style="" x="-68.734375" y="-26.25" width="137.46875" height="52.5"/&gt;&lt;g class="label" style="" transform="translate(-38.734375, -11.25)"&gt;&lt;rect/&gt;&lt;foreignObject width="77.46875" height="22.5"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;Markdown&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="my-svg-flowchart-B-1" data-look="classic" transform="translate(263.5546875, 34.25)"&gt;&lt;rect class="basic label-container" style="" x="-68.0859375" y="-26.25" width="136.171875" height="52.5"/&gt;&lt;g class="label" style="" transform="translate(-38.0859375, -11.25)"&gt;&lt;rect/&gt;&lt;foreignObject width="76.171875" height="22.5"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;Generator&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="my-svg-flowchart-C-3" data-look="classic" transform="translate(456.34375, 34.25)"&gt;&lt;rect class="basic label-container" style="" x="-74.703125" y="-26.25" width="149.40625" height="52.5"/&gt;&lt;g class="label" style="" transform="translate(-44.703125, -11.25)"&gt;&lt;rect/&gt;&lt;foreignObject width="89.40625" height="22.5"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;Static HTML&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="my-svg-flowchart-D-5" data-look="classic" transform="translate(695.9140625, 34.25)"&gt;&lt;rect class="basic label-container" style="" x="-114.8671875" y="-26.25" width="229.734375" height="52.5"/&gt;&lt;g class="label" style="" transform="translate(-84.8671875, -11.25)"&gt;&lt;rect/&gt;&lt;foreignObject width="169.734375" height="22.5"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;Azure Static Web Apps&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;defs&gt;&lt;filter id="my-svg-drop-shadow" height="130%" width="130%"&gt;&lt;feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;defs&gt;&lt;filter id="my-svg-drop-shadow-small" height="150%" width="150%"&gt;&lt;feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;linearGradient id="my-svg-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"&gt;&lt;stop offset="0%" stop-color="#233456" stop-opacity="1"/&gt;&lt;stop offset="100%" stop-color="#233456" stop-opacity="1"/&gt;&lt;/linearGradient&gt;&lt;/svg&gt;
&lt;p&gt;More soon.&lt;/p&gt;
</content>
  </entry>
</feed>