<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Expertise on Fortran 2026</title>
    <link>https://fortran.sh3d.com.au/expertise/</link>
    <description>Recent content in Expertise on Fortran 2026</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://fortran.sh3d.com.au/expertise/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>32 → 64-bit migration</title>
      <link>https://fortran.sh3d.com.au/expertise/migration-32-to-64/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fortran.sh3d.com.au/expertise/migration-32-to-64/</guid>
      <description>&lt;p&gt;Moving a real Fortran ERP from 32-bit to 64-bit is rarely a recompile. Pointer sizes, integer kinds, file formats, third-party libraries, and decades of implicit assumptions all have to be found and fixed without breaking business logic that has been correct for thirty years.&lt;/p&gt;&#xA;&lt;p&gt;We have done this on a production ERP — see &lt;a href=&#34;https://fortran.sh3d.com.au/projects/profitool/&#34;&gt;Projects → Profitool&lt;/a&gt; — and we know what to look for.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-we-add-value&#34;&gt;Where we add value&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#where-we-add-value&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Auditing the codebase&lt;/strong&gt; for 32-bit assumptions: integer kinds, pointer arithmetic, record sizes, common blocks, EQUIVALENCE.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Driving the translation&lt;/strong&gt; with &lt;a href=&#34;https://fortran.sh3d.com.au/tools/promula/&#34;&gt;Promula / gmFortran&lt;/a&gt; and hand-tuned changes where the tool can&amp;rsquo;t decide.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Locking the result with tests&lt;/strong&gt; so the 64-bit build provably matches the 32-bit one before you cut over — see &lt;a href=&#34;testing/&#34;&gt;Expertise → Testing&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Operational cutover&lt;/strong&gt;: data file formats, on-disk layouts, third-party library upgrades, and rollback plans.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;talk-to-us&#34;&gt;Talk to us&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#talk-to-us&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:simon@unisolve.com.au&#34;&gt;simon@unisolve.com.au&lt;/a&gt; or&#xA;&lt;a href=&#34;mailto:scottp@dd.com.au&#34;&gt;scottp@dd.com.au&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing</title>
      <link>https://fortran.sh3d.com.au/expertise/testing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fortran.sh3d.com.au/expertise/testing/</guid>
      <description>&lt;p&gt;A lot of long-running Fortran codebases have no automated tests at all. Every release is &amp;ldquo;compile, run the smoke script, hope&amp;rdquo;. We change that — without rewriting the code first.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-we-add-value&#34;&gt;Where we add value&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#where-we-add-value&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Native unit tests in Fortran&lt;/strong&gt; with TAP-style output and &lt;code&gt;prove&lt;/code&gt; runners — see the worked example at &lt;a href=&#34;https://fortran.sh3d.com.au/docs/unit/&#34;&gt;Examples → Unit Tests&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Regression testing&lt;/strong&gt; by capturing the output of the existing system on real inputs and locking it down before any change is allowed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Integration tests&lt;/strong&gt; across SQL, REST, and external libraries that we have added — see &lt;a href=&#34;https://fortran.sh3d.com.au/docs/sql/&#34;&gt;Examples → SQL&lt;/a&gt; and &lt;a href=&#34;https://fortran.sh3d.com.au/docs/api/&#34;&gt;Examples → REST API&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CI pipelines&lt;/strong&gt; that run the test suite on every change, in containers, before any deploy.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Test coverage specifically targeting the migration boundary&lt;/strong&gt; so a 32 → 64-bit cutover is provably safe.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;talk-to-us&#34;&gt;Talk to us&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#talk-to-us&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:simon@unisolve.com.au&#34;&gt;simon@unisolve.com.au&lt;/a&gt; or&#xA;&lt;a href=&#34;mailto:scottp@dd.com.au&#34;&gt;scottp@dd.com.au&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Version control</title>
      <link>https://fortran.sh3d.com.au/expertise/version-control/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fortran.sh3d.com.au/expertise/version-control/</guid>
      <description>&lt;p&gt;Plenty of Fortran codebases pre-date modern version control. We have repeatedly walked into engagements where &amp;ldquo;the source&amp;rdquo; is a folder on a fileserver, several zip backups, and tribal knowledge. That doesn&amp;rsquo;t work for testing, releases, or recovery — so we fix it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-we-add-value&#34;&gt;Where we add value&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#where-we-add-value&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Capturing the current truth&lt;/strong&gt;: figuring out which copy is real and getting it cleanly into Git (or whichever VCS you use).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Branching and release strategies&lt;/strong&gt; that match how your team actually works, not somebody else&amp;rsquo;s textbook.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hooking version control into builds, tests, and deploys&lt;/strong&gt; so what&amp;rsquo;s tagged is what runs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Recovering history from old backups&lt;/strong&gt; when you want to reconstruct a timeline — see &lt;a href=&#34;legacy-data/&#34;&gt;Expertise → Legacy data&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;talk-to-us&#34;&gt;Talk to us&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#talk-to-us&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:simon@unisolve.com.au&#34;&gt;simon@unisolve.com.au&lt;/a&gt; or&#xA;&lt;a href=&#34;mailto:scottp@dd.com.au&#34;&gt;scottp@dd.com.au&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Packaging</title>
      <link>https://fortran.sh3d.com.au/expertise/packaging/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fortran.sh3d.com.au/expertise/packaging/</guid>
      <description>&lt;p&gt;A Fortran build that only works on one engineer&amp;rsquo;s machine is a liability. We package Fortran systems so the same binary you tested is the binary that ships — and so the next person can build it five years from now without you in the room.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-we-add-value&#34;&gt;Where we add value&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#where-we-add-value&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Containerised builds&lt;/strong&gt; with pinned compilers and dependencies (HDF5, NetCDF, MPI, BLAS / LAPACK, vendor libraries).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Versioned, reproducible artefacts&lt;/strong&gt; — same inputs, same output, every time.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Deploy packages&lt;/strong&gt; that drop into your existing infrastructure rather than demanding a rewrite of it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Build-system rationalisation&lt;/strong&gt; when the existing Makefiles / scripts have grown organically over decades.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;talk-to-us&#34;&gt;Talk to us&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#talk-to-us&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:simon@unisolve.com.au&#34;&gt;simon@unisolve.com.au&lt;/a&gt; or&#xA;&lt;a href=&#34;mailto:scottp@dd.com.au&#34;&gt;scottp@dd.com.au&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backup and recovery</title>
      <link>https://fortran.sh3d.com.au/expertise/backup-recovery/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fortran.sh3d.com.au/expertise/backup-recovery/</guid>
      <description>&lt;p&gt;A Fortran ERP that loses a day&amp;rsquo;s data is not a software problem — it&amp;rsquo;s a business problem. We design backup and recovery for systems where the database, the data files, the binaries, and the build artefacts all matter, and all have to come back together.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-we-add-value&#34;&gt;Where we add value&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#where-we-add-value&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Backup strategies that actually get tested&lt;/strong&gt;, not just scheduled.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Restore drills&lt;/strong&gt; — proving recovery works before you need it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Point-in-time recovery&lt;/strong&gt; across SQL databases plus the on-disk Fortran data files that live alongside them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Disaster recovery plans&lt;/strong&gt; that account for the build system and the source tree, not just the data.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Migration of old backups&lt;/strong&gt; onto modern storage — tightly related to &lt;a href=&#34;legacy-data/&#34;&gt;Legacy data&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;talk-to-us&#34;&gt;Talk to us&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#talk-to-us&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:simon@unisolve.com.au&#34;&gt;simon@unisolve.com.au&lt;/a&gt; or&#xA;&lt;a href=&#34;mailto:scottp@dd.com.au&#34;&gt;scottp@dd.com.au&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Legacy data</title>
      <link>https://fortran.sh3d.com.au/expertise/legacy-data/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fortran.sh3d.com.au/expertise/legacy-data/</guid>
      <description>&lt;p&gt;A lot of Fortran systems sit on top of decades of data: binary records in undocumented formats, files copied from machines that no longer exist, tapes nobody has read in years. We are comfortable in that territory — and we know how to bring that data back into a system you can use today.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-we-add-value&#34;&gt;Where we add value&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#where-we-add-value&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reading old binary formats&lt;/strong&gt; — record-based, fixed-width, vendor-proprietary, or whatever the previous decade left you with.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reverse-engineering schemas&lt;/strong&gt; from the Fortran code that wrote the files, when documentation is long gone.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pulling data off old media&lt;/strong&gt; and old machines onto modern storage with integrity checks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Migrating recovered data&lt;/strong&gt; into modern stores (SQL, files, APIs) without losing fidelity — see &lt;a href=&#34;https://fortran.sh3d.com.au/docs/sql/&#34;&gt;Examples → SQL&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Long-term archiving plans&lt;/strong&gt; so this is the last time anyone has to do it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;talk-to-us&#34;&gt;Talk to us&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#talk-to-us&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:simon@unisolve.com.au&#34;&gt;simon@unisolve.com.au&lt;/a&gt; or&#xA;&lt;a href=&#34;mailto:scottp@dd.com.au&#34;&gt;scottp@dd.com.au&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
