<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>myheats &amp;mdash; Jerry of the Week</title>
    <link>https://write.in0rdr.ch/tag:myheats</link>
    <description>ˈdʒɛri - Individual who sends life against the grain no matter the consequences</description>
    <pubDate>Tue, 28 Apr 2026 13:00:50 +0000</pubDate>
    <item>
      <title>Bump NPM dependencies with Updatecli</title>
      <link>https://write.in0rdr.ch/bump-npm-dependencies-with-updatecli</link>
      <description>&lt;![CDATA[I built a new Jenkins pipeline based on Updatecli for updating the NPM packages in my hobby project MyHeats.&#xA;&#xA;#updatecli #pipeline #jenkins #myheats #nodejs #npm&#xA;!--more--&#xA;&#xA;I was looking for a way to automatically bump the version of the npm dependencies (package.json) whenever there is an update available. This is also important for security reasons (e.g., have a look at the output of npm audit from time to time to see the recent security issues in the dependencies).&#xA;&#xA;I was looking into Renovate and Dependabot, but neither of these scratched my itch of simple automatic dependency updates.&#xA;&#xA;A coworker suggested me to try Updatecli and it fits my workflows perfectly well. The Jenkins example on the projects website got me started. So I created a Jenkins shared library function to run my own build, which includes npm to perform the version bumps:&#xA;&#xA;A class to describe the updatecli stages: https://code.in0rdr.ch/jenkins-lib/file/src/Updatecli.groovy.html&#xA;&#xA;The scripted pipeline in the repository of the application loads the library and performs the version bumps to a new branch:&#xA;&#xA;The Jenkinsfile that makes use of the updatecli groovy library: https://code.in0rdr.ch/myheats/file/Jenkinsfile.html&#xA;&#xA;I did not even have to configure Updatecli a lot, because the autodiscovery feature automatically detects that this is a npm repository/project. The final version of my pipeline includes all the git/scm steps in the updatecli.d/default.yaml configuration file:&#xA;&#xA;Updatecli configuration file: https://code.in0rdr.ch/myheats/file/updatecli.d/default.yaml.html&#xA;&#xA;First I tried to perform the SCM/git steps in Jenkins checkout and sh steps. But I noticed it could be much sleeker by defining the SCM/git settings in the Updatecli config file directly. This way, updatecli takes care of the clone/checkout/push steps. Here the extract from my previous pipeline with the &#34;manual git steps&#34; for comparison:&#xA;&#xA;// alternative approach I did not pursue any further&#xA;sh &#39;&#39;&#39;&#xA;git config --global user.name &#34;$GITAUTHORNAME&#34;&#xA;git config --global user.email &#34;$GITAUTHOREMAIL&#34;&#xA;&#39;&#39;&#39;&#xA;&#xA;dir(&#34;myyheats.git-$BUILDNUMBER&#34;) {&#xA;  // checkout update branch in new directory&#xA;  checkout scmGit(&#xA;      extensions: [localBranch(&#34;$branch&#34;)],&#xA;      userRemoteConfigs: [[url: &#39;https://git.in0rdr.ch/myheats.git&#39;]]&#xA;  )&#xA;&#xA;  updatecli.run(&#39;apply&#39;)&#xA;&#xA;  // commit changes&#xA;  sh &#39;&#39;&#39;&#xA;  git add -u&#xA;  git commit -m &#34;chore(updatecli-$BUILDNUMBER): bump node modules&#34;&#xA;  git push -f -u origin &#34;$branch&#34;&#xA;  &#39;&#39;&#39;&#xA;}&#xA;&#xA;I definitely like the updatecli configuration better, since it keeps the actual pipeline tidy. Also, I like how you can use the {{ requiredEnv &#34;GIT_PASSWORD&#34; }} configuration in updatecli to read secrets from the environment. The Git credentials are sourced from OpenBao with Nomad workload identities.&#xA;&#xA;I hope the post is helpful for anyone that would like to give updatecli a try or would like to configure a similar Jenkins pipeline.&#xA;&#xA;div style=&#34;text-align:center; font-size: 0.8em&#34;&#xD;&#xA;a href=&#34;https://write.in0rdr.ch/feed&#34;&amp;#128732; RSS/a | a href=&#34;https://m.in0rdr.ch/in0rdr&#34;&amp;#128024; Fediverse/a | a href=&#34;https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch&#34;&amp;#128172; XMPP/a&#xD;&#xA;/div]]&gt;</description>
      <content:encoded><![CDATA[<p>I built a new Jenkins pipeline based on <a href="https://www.updatecli.io">Updatecli</a> for updating the NPM packages in my hobby project <a href="https://myheats.p0c.ch">MyHeats</a>.</p>

<p><a href="https://write.in0rdr.ch/tag:updatecli" class="hashtag"><span>#</span><span class="p-category">updatecli</span></a> <a href="https://write.in0rdr.ch/tag:pipeline" class="hashtag"><span>#</span><span class="p-category">pipeline</span></a> <a href="https://write.in0rdr.ch/tag:jenkins" class="hashtag"><span>#</span><span class="p-category">jenkins</span></a> <a href="https://write.in0rdr.ch/tag:myheats" class="hashtag"><span>#</span><span class="p-category">myheats</span></a> <a href="https://write.in0rdr.ch/tag:nodejs" class="hashtag"><span>#</span><span class="p-category">nodejs</span></a> <a href="https://write.in0rdr.ch/tag:npm" class="hashtag"><span>#</span><span class="p-category">npm</span></a>
</p>

<p>I was looking for a way to automatically bump the version of the npm dependencies (<code>package.json</code>) whenever there is an update available. This is also important for security reasons (e.g., have a look at the output of <code>npm audit</code> from time to time to see the recent security issues in the dependencies).</p>

<p>I was looking into <a href="https://github.com/renovatebot/renovate">Renovate</a> and <a href="https://github.com/dependabot">Dependabot</a>, but neither of these scratched my itch of simple automatic dependency updates.</p>

<p>A coworker suggested me to try <a href="https://www.updatecli.io">Updatecli</a> and it fits my workflows perfectly well. The <a href="https://www.updatecli.io/docs/automate/jenkins">Jenkins example</a> on the projects website got me started. So I created a <a href="https://www.jenkins.io/doc/book/pipeline/shared-libraries">Jenkins shared library function</a> to run my own build, which includes <code>npm</code> to perform the version bumps:</p>
<ul><li>A class to describe the updatecli stages: <a href="https://code.in0rdr.ch/jenkins-lib/file/src/Updatecli.groovy.html">https://code.in0rdr.ch/jenkins-lib/file/src/Updatecli.groovy.html</a></li></ul>

<p>The scripted pipeline in the repository of the application loads the library and performs the version bumps to a new branch:</p>
<ul><li>The Jenkinsfile that makes use of the updatecli groovy library: <a href="https://code.in0rdr.ch/myheats/file/Jenkinsfile.html">https://code.in0rdr.ch/myheats/file/Jenkinsfile.html</a></li></ul>

<p>I did not even have to configure Updatecli a lot, because the <a href="https://www.updatecli.io/docs/core/autodiscovery">autodiscovery feature</a> automatically detects that this is a npm repository/project. The final version of my pipeline includes all the git/scm steps in the <code>updatecli.d/default.yaml</code> configuration file:</p>
<ul><li>Updatecli configuration file: <a href="https://code.in0rdr.ch/myheats/file/updatecli.d/default.yaml.html">https://code.in0rdr.ch/myheats/file/updatecli.d/default.yaml.html</a></li></ul>

<p>First I tried to perform the SCM/git steps in Jenkins <code>checkout</code> and <code>sh</code> steps. But I noticed it could be much sleeker by defining the SCM/git settings in the Updatecli config file directly. This way, updatecli takes care of the clone/checkout/push steps. Here the extract from my previous pipeline with the “manual git steps” for comparison:</p>

<pre><code class="language-java">// alternative approach I did not pursue any further
sh &#39;&#39;&#39;
git config --global user.name &#34;$GIT_AUTHOR_NAME&#34;
git config --global user.email &#34;$GIT_AUTHOR_EMAIL&#34;
&#39;&#39;&#39;

dir(&#34;myyheats.git-$BUILD_NUMBER&#34;) {
  // checkout update branch in new directory
  checkout scmGit(
      extensions: [localBranch(&#34;$branch&#34;)],
      userRemoteConfigs: [[url: &#39;https://git.in0rdr.ch/myheats.git&#39;]]
  )

  updatecli.run(&#39;apply&#39;)

  // commit changes
  sh &#39;&#39;&#39;
  git add -u
  git commit -m &#34;chore(updatecli-$BUILD_NUMBER): bump node modules&#34;
  git push -f -u origin &#34;$branch&#34;
  &#39;&#39;&#39;
}
</code></pre>

<p>I definitely like the <a href="https://code.in0rdr.ch/myheats/file/updatecli.d/default.yaml.html">updatecli configuration</a> better, since it keeps the actual pipeline tidy. Also, I like how you can use the <code>{{ requiredEnv &#34;GIT_PASSWORD&#34; }}</code> configuration in updatecli to read secrets from the environment. The Git credentials are sourced from OpenBao with Nomad workload identities.</p>

<p>I hope the post is helpful for anyone that would like to give updatecli a try or would like to configure a similar Jenkins pipeline.</p>

<div style="text-align:center; font-size: 0.8em">
<a href="https://write.in0rdr.ch/feed">🛜 RSS</a> | <a href="https://m.in0rdr.ch/in0rdr">🐘 Fediverse</a> | <a href="https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch">💬 XMPP</a>
</div>
]]></content:encoded>
      <guid>https://write.in0rdr.ch/bump-npm-dependencies-with-updatecli</guid>
      <pubDate>Fri, 26 Jul 2024 20:50:19 +0000</pubDate>
    </item>
    <item>
      <title>MyHeats v0.4</title>
      <link>https://write.in0rdr.ch/h1myheats-v0-4-h1</link>
      <description>&lt;![CDATA[I was hacking on a new version of the &#34;live-updating leaderboard&#34; with some bug fixes and a fresh new design (a href=&#34;https://code.in0rdr.ch/myheats/file/CHANGELOG.md.html&#34;CHANGELOG.md/a).&#xA;&#xA;a href=&#34;https://myheats.p0c.ch&#34;Project site/a&#xA;a href=&#34;https://myheats-demo.p0c.ch&#34;Demo instance/a&#xA;a href=&#34;https://code.in0rdr.ch/myheats&#34;Code/a&#xA;&#xA;#coding #sports #myheats&#xA;&#xA;!--more--&#xA;&#xA;I took advantage of the CSS flexbox layout to improve the design on mobile devices. The main idea was to reduce the table size to a minimum on small screen sizes. The individual cells of the table are shown as small boxes, with labels to indicate the content type.&#xA;&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats1.jpg&#34; alt=&#34;myheats leaderboard mobile layout&#34; /&#xA;&#xA;On larger displays, for instance, a big screen at the finish line of a sport event/run, the table is displayed in a traditional fashion.&#xA;&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats2.jpg&#34; alt=&#34;myheats leaderboard large display&#34; /&#xA;&#xA;Here some more screenshots of the admin section with the new design.&#xA;&#xA;The live-updating leaderboard:&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats3.png&#34; alt=&#34;myheats leaderboard mobile view&#34; /&#xA;&#xA;The scoring section where judges can enter the scores. In this section, I found it important to indicate the loading status whenever the score is changed and to make the input field big enough for usage on small smartphone screens:&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats4.png&#34; alt=&#34;myheats leaderboard mobile view scoring&#34; /&#xA;&#xA;Friends told me that similar software has a feature to &#34;lock&#34; the scores once the scoring is done. Currently, there exists no such feature in MyHeats, but that&#39;s a good idea for my next hacking sess.&#xA;&#xA;The section where event admins can create heats and manage the startlists for each run:&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats5.png&#34; alt=&#34;myheats leaderboard mobile view startlist&#34; /&#xA;&#xA;The administration of the athletes:&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats6.png&#34; alt=&#34;myheats leaderboard mobile view athletes&#34; /&#xA;&#xA;Athletes are not required to have a lastname. In this way, the leaderboard can equally well be used to score entire teams.&#xA;&#xA;And last but not least, if you are reading until down here and you are interested in the technical implementation and the arrangement of the data in the database, here the database schema:&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats7.png&#34; alt=&#34;myheats leaderboard supabase database schema&#34; /&#xA;&#xA;Interested in test-driving the scoring backend for judges and event admins? Drop me a line (see footer).&#xA;&#xA;div style=&#34;text-align:center; font-size: 0.8em&#34;&#xD;&#xA;a href=&#34;https://write.in0rdr.ch/feed&#34;&amp;#128732; RSS/a | a href=&#34;https://m.in0rdr.ch/in0rdr&#34;&amp;#128024; Fediverse/a | a href=&#34;https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch&#34;&amp;#128172; XMPP/a&#xD;&#xA;/div]]&gt;</description>
      <content:encoded><![CDATA[<p>I was hacking on a new version of the “live-updating leaderboard” with some bug fixes and a fresh new design (<a href="https://code.in0rdr.ch/myheats/file/CHANGELOG.md.html">CHANGELOG.md</a>).</p>
<ul><li><a href="https://myheats.p0c.ch">Project site</a></li>
<li><a href="https://myheats-demo.p0c.ch">Demo instance</a></li>
<li><a href="https://code.in0rdr.ch/myheats">Code</a></li></ul>

<p><a href="https://write.in0rdr.ch/tag:coding" class="hashtag"><span>#</span><span class="p-category">coding</span></a> <a href="https://write.in0rdr.ch/tag:sports" class="hashtag"><span>#</span><span class="p-category">sports</span></a> <a href="https://write.in0rdr.ch/tag:myheats" class="hashtag"><span>#</span><span class="p-category">myheats</span></a></p>



<p>I took advantage of the CSS flexbox layout to improve the design on mobile devices. The main idea was to reduce the table size to a minimum on small screen sizes. The individual cells of the table are shown as small boxes, with labels to indicate the content type.</p>

<p><img src="https://code.in0rdr.ch/pub/blog/myheats1.jpg" alt="myheats leaderboard mobile layout"/></p>

<p>On larger displays, for instance, a big screen at the finish line of a sport event/run, the table is displayed in a traditional fashion.</p>

<p><img src="https://code.in0rdr.ch/pub/blog/myheats2.jpg" alt="myheats leaderboard large display"/></p>

<p>Here some more screenshots of the admin section with the new design.</p>

<p>The live-updating leaderboard:
<img src="https://code.in0rdr.ch/pub/blog/myheats3.png" alt="myheats leaderboard mobile view"/></p>

<p>The scoring section where judges can enter the scores. In this section, I found it important to indicate the loading status whenever the score is changed and to make the input field big enough for usage on small smartphone screens:
<img src="https://code.in0rdr.ch/pub/blog/myheats4.png" alt="myheats leaderboard mobile view scoring"/></p>

<p>Friends told me that similar software has a feature to “lock” the scores once the scoring is done. Currently, there exists no such feature in MyHeats, but that&#39;s a good idea for my next hacking sess.</p>

<p>The section where event admins can create heats and manage the startlists for each run:
<img src="https://code.in0rdr.ch/pub/blog/myheats5.png" alt="myheats leaderboard mobile view startlist"/></p>

<p>The administration of the athletes:
<img src="https://code.in0rdr.ch/pub/blog/myheats6.png" alt="myheats leaderboard mobile view athletes"/></p>

<p>Athletes are not required to have a lastname. In this way, the leaderboard can equally well be used to score entire teams.</p>

<p>And last but not least, if you are reading until down here and you are interested in the technical implementation and the arrangement of the data in the database, here the database schema:
<img src="https://code.in0rdr.ch/pub/blog/myheats7.png" alt="myheats leaderboard supabase database schema"/></p>

<p>Interested in test-driving the scoring backend for judges and event admins? Drop me a line (see footer).</p>

<div style="text-align:center; font-size: 0.8em">
<a href="https://write.in0rdr.ch/feed">🛜 RSS</a> | <a href="https://m.in0rdr.ch/in0rdr">🐘 Fediverse</a> | <a href="https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch">💬 XMPP</a>
</div>
]]></content:encoded>
      <guid>https://write.in0rdr.ch/h1myheats-v0-4-h1</guid>
      <pubDate>Sun, 02 Jul 2023 17:09:26 +0000</pubDate>
    </item>
    <item>
      <title>MyHeats Update: Manage Heats</title>
      <link>https://write.in0rdr.ch/myheats-update-manage-heats</link>
      <description>&lt;![CDATA[Extended my newest coding pet project in React with the ability to delete heats.&#xA;&#xA;🚀 Demo instance: https://myheats.in0rdr.ch&#xA;🧬 Code: https://code.in0rdr.ch/myheats&#xA;&#xA;Plan to work on some features the next few days:&#xA;Add/remove athletes (bulk)&#xA;Improve UI&#xA;&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats-manage.png&#34; alt=&#34;manage-heats-myheats&#34; width=&#34;50%&#34; /&#xA;&#xA;#coding #sports #myheats&#xA;&#xA;!--more--&#xA;&#xA;For more background on the app, the idea and the problem(s) it could solve have a look at the original post a href=&#34;https://write.in0rdr.ch/live-heats-scoring-and-leaderboard-for-sport-events&#34;Live heats, Scoring and Leaderboard for Sport Events/a (March 11, 2023).&#xA;&#xA;hr /&#xA;&#xA;bedit 2023-04-04:/b Bug a href=&#34;https://code.in0rdr.ch/myheats/commit/6d58d104a4827c3fa9510f847d10d596c2286a75.html&#34;fixed/a in v0.2, thanks a href=&#34;https://github.com/JonnyBurger&#34;@JonnyBurger/a and @PatrickH!&#xA;&#xA;oh.. and, I might need your 🥺 help with a little 🐛 bug I encounter.&#xA;&#xA;⁉️ Anyone knows where this flickering comes from? Reproduce as follows:&#xA;ol&#xA;liAdd one heats to display/li&#xA;liRemove the heat again/li&#xA;liWait for the screen to update. Can you see that flickering?/li&#xA;/ol&#xA;&#xA;img src=&#34;https://code.in0rdr.ch/pub/blog/myheats-bug.gif&#34; alt=&#34;myheats-bug-flickering&#34; /&#xA;&#xA;How can I fix that? I&#39;m pretty new in that JavaScript business. If you know the fix, please shoot me a mail, ping me (see footer).&#xA;&#xA;The bug should be in a href=&#34;https://code.in0rdr.ch/myheats/file/src/Leaderboard.js.html&#34;Leaderboard.js/a somewhere.. Thanks for any hints!&#xA;&#xA;img src=&#34;https://media2.giphy.com/media/XjlNyeZp5lDri/giphy.gif?cid=ecf05e47bogzg24umo1f9ctjv19knprueeyzkr83vjfwypxn&amp;rid=giphy.gif&amp;ct=g&#34; /&#xA;&#xA;div style=&#34;text-align:center; font-size: 0.8em&#34;&#xD;&#xA;a href=&#34;https://write.in0rdr.ch/feed&#34;&amp;#128732; RSS/a | a href=&#34;https://m.in0rdr.ch/in0rdr&#34;&amp;#128024; Fediverse/a | a href=&#34;https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch&#34;&amp;#128172; XMPP/a&#xD;&#xA;/div]]&gt;</description>
      <content:encoded><![CDATA[<p>Extended my newest coding pet project in React with the ability to delete heats.</p>
<ul><li>🚀 Demo instance: <a href="https://myheats.in0rdr.ch">https://myheats.in0rdr.ch</a></li>
<li>🧬 Code: <a href="https://code.in0rdr.ch/myheats">https://code.in0rdr.ch/myheats</a></li></ul>

<p>Plan to work on some features the next few days:
* Add/remove athletes (bulk)
* Improve UI</p>

<p><img src="https://code.in0rdr.ch/pub/blog/myheats-manage.png" alt="manage-heats-myheats" width="50%"/></p>

<p><a href="https://write.in0rdr.ch/tag:coding" class="hashtag"><span>#</span><span class="p-category">coding</span></a> <a href="https://write.in0rdr.ch/tag:sports" class="hashtag"><span>#</span><span class="p-category">sports</span></a> <a href="https://write.in0rdr.ch/tag:myheats" class="hashtag"><span>#</span><span class="p-category">myheats</span></a></p>



<p>For more background on the app, the idea and the problem(s) it could solve have a look at the original post <a href="https://write.in0rdr.ch/live-heats-scoring-and-leaderboard-for-sport-events">Live heats, Scoring and Leaderboard for Sport Events</a> (March 11, 2023).</p>

<hr/>

<p><b>edit 2023-04-04:</b> Bug <a href="https://code.in0rdr.ch/myheats/commit/6d58d104a4827c3fa9510f847d10d596c2286a75.html">fixed</a> in v0.2, thanks <a href="https://github.com/JonnyBurger">@JonnyBurger</a> and @PatrickH!</p>

<p>oh.. and, I might need your 🥺 help with a little 🐛 bug I encounter.</p>

<p>⁉️ Anyone knows where this flickering comes from? Reproduce as follows:
<ol><li>Add one heats to display</li>
<li>Remove the heat again</li>
<li>Wait for the screen to update. Can you see that flickering?</li></ol></p>

<p><img src="https://code.in0rdr.ch/pub/blog/myheats-bug.gif" alt="myheats-bug-flickering"/></p>

<p>How can I fix that? I&#39;m pretty new in that JavaScript business. If you know the fix, please shoot me a mail, ping me (see footer).</p>

<p>The bug should be in <a href="https://code.in0rdr.ch/myheats/file/src/Leaderboard.js.html">Leaderboard.js</a> somewhere.. Thanks for any hints!</p>

<p><img src="https://media2.giphy.com/media/XjlNyeZp5lDri/giphy.gif?cid=ecf05e47bogzg24umo1f9ctjv19knprueeyzkr83vjfwypxn&amp;rid=giphy.gif&amp;ct=g"/></p>

<div style="text-align:center; font-size: 0.8em">
<a href="https://write.in0rdr.ch/feed">🛜 RSS</a> | <a href="https://m.in0rdr.ch/in0rdr">🐘 Fediverse</a> | <a href="https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch">💬 XMPP</a>
</div>
]]></content:encoded>
      <guid>https://write.in0rdr.ch/myheats-update-manage-heats</guid>
      <pubDate>Fri, 31 Mar 2023 23:00:47 +0000</pubDate>
    </item>
    <item>
      <title>Live heats, Scoring and Leaderboard for Sport Events</title>
      <link>https://write.in0rdr.ch/live-heats-scoring-and-leaderboard-for-sport-events</link>
      <description>&lt;![CDATA[After last weeks a href=&#34;https://www.rtr.ch/play/tv/redirect/detail/d4c565ac-ad0e-4a02-825d-f8f02b55529e&#34;Bündner Championship/a I found start list generation and ranking process to be error prone, especially for the disciplines that are judged by several experts, such as slopestyle (Ski or Snowboard) or the formation skiing teams. We were editing Excel sheets (stored on OneDrive) and printing the new start lists for the next runs. Just imagine the printer 🖨️ on the mountain 🏔️🤣. The grades of the experts/judges needed to be transferred from paper into Excel after every completed run or heat.&#xA;&#xA;#coding #sports #myheats&#xA;&#xA;!--more--&#xA;&#xA;I detected the following deficiencies which could be improved with a more digital approach (digital/mobile from the start):&#xA;ul&#xA;liMistakes can occur while copying ratings and numbers from paper into Excel/li&#xA;liSorting each Excel list (for every competition and run) manually is error prone, especially, with multiple competitions going on simultaneously (slopestyle ski or snowboard, formation skiing, men, women, several runs, etc.)/li&#xA;liThe results need to be printed on paper and published on the a href=&#34;https://skischule-savognin.ch/DE/winter/bm.html&#34;website (PDF)/a/li&#xA;liFormatting and printing these sheets (for each competition) takes quite some time and the result is not always consistent (in terms of formatting)/li&#xA;liThere are no live results. This is also not convenient for the athletes that want to know right after the run how they scored and how they rank in the competition. Ideally, the athletes get to know their scores right after they cross the finish line./li&#xA;liOneDrive syncing did not always work reliably (depending on the end users devices) and mailing the sheets was a pain/li&#xA;/ul&#xA;&#xA;I was looking into some existing solutions for systems to process the data, such as a href=&#34;https://liveheats.com&#34;liveheats/a. However, since most of these systems are finished products and there is no open source code available that I know of, I decided to quickly draft my own version of a live leaderboard for these kind of sport competitions.&#xA;&#xA;🚀 Demo instance: https://myheats.p0c.ch&#xA;&#xA;🧬 Code: https://code.in0rdr.ch/myheats&#xA;&#xA;Right now, there is only the leaderboard which automatically updates as soon as new data arrives in a href=&#34;https://supabase.com&#34;Supabase/a. During the process of creating this first draft, I became a huge fan of Supabase because it works really well. It is the open source Firebase alternative with Postgres database in the backend. I can highly recommend it for your next project, because it is extremely easy to get started with.&#xA;&#xA;For the purpose of the leaderboard, I was especially interested in the a href=&#34;https://supabase.com/realtime&#34;realtime aspects of Supabase/a. This allows me to update the table as soon as new data is entered in the backend (by the judges of the comptition).&#xA;&#xA;I&#39;m planning to update the code with some more features soonish, among others:&#xA;&#xA;ul&#xA;liAuthenticaiton for the experts that perform the ranking and rating/li&#xA;liA very simple user-interface or view for the experts to edit the score for a single athlete of a heat or run/li&#xA;liBetter import/export functionality for start list and rankings/li&#xA;/ul&#xA;&#xA;Stay tuned. If you have some input or tips feel free to drop me a line (see footer).&#xA;&#xA;div style=&#34;text-align:center; font-size: 0.8em&#34;&#xD;&#xA;a href=&#34;https://write.in0rdr.ch/feed&#34;&amp;#128732; RSS/a | a href=&#34;https://m.in0rdr.ch/in0rdr&#34;&amp;#128024; Fediverse/a | a href=&#34;https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch&#34;&amp;#128172; XMPP/a&#xD;&#xA;/div]]&gt;</description>
      <content:encoded><![CDATA[<p>After last weeks <a href="https://www.rtr.ch/play/tv/redirect/detail/d4c565ac-ad0e-4a02-825d-f8f02b55529e">Bündner Championship</a> I found start list generation and ranking process to be error prone, especially for the disciplines that are judged by several experts, such as slopestyle (Ski or Snowboard) or the formation skiing teams. We were editing Excel sheets (stored on OneDrive) and printing the new start lists for the next runs. Just imagine the printer 🖨️ on the mountain 🏔️🤣. The grades of the experts/judges needed to be transferred from paper into Excel after every completed run or heat.</p>

<p><a href="https://write.in0rdr.ch/tag:coding" class="hashtag"><span>#</span><span class="p-category">coding</span></a> <a href="https://write.in0rdr.ch/tag:sports" class="hashtag"><span>#</span><span class="p-category">sports</span></a> <a href="https://write.in0rdr.ch/tag:myheats" class="hashtag"><span>#</span><span class="p-category">myheats</span></a></p>



<p>I detected the following deficiencies which could be improved with a more digital approach (digital/mobile from the start):
<ul><li>Mistakes can occur while copying ratings and numbers from paper into Excel</li>
<li>Sorting each Excel list (for every competition and run) manually is error prone, especially, with multiple competitions going on simultaneously (slopestyle ski or snowboard, formation skiing, men, women, several runs, etc.)</li>
<li>The results need to be printed on paper and published on the <a href="https://skischule-savognin.ch/DE/winter/bm.html">website (PDF)</a></li>
<li>Formatting and printing these sheets (for each competition) takes quite some time and the result is not always consistent (in terms of formatting)</li>
<li>There are no live results. This is also not convenient for the athletes that want to know right after the run how they scored and how they rank in the competition. Ideally, the athletes get to know their scores right after they cross the finish line.</li>
<li>OneDrive syncing did not always work reliably (depending on the end users devices) and mailing the sheets was a pain</li></ul></p>

<p>I was looking into some existing solutions for systems to process the data, such as <a href="https://liveheats.com">liveheats</a>. However, since most of these systems are finished products and there is no open source code available that I know of, I decided to quickly draft my own version of a live leaderboard for these kind of sport competitions.</p>

<p>🚀 Demo instance: <a href="https://myheats.p0c.ch">https://myheats.p0c.ch</a></p>

<p>🧬 Code: <a href="https://code.in0rdr.ch/myheats">https://code.in0rdr.ch/myheats</a></p>

<p>Right now, there is only the leaderboard which automatically updates as soon as new data arrives in <a href="https://supabase.com">Supabase</a>. During the process of creating this first draft, I became a huge fan of Supabase because it works really well. It is the open source Firebase alternative with Postgres database in the backend. I can highly recommend it for your next project, because it is extremely easy to get started with.</p>

<p>For the purpose of the leaderboard, I was especially interested in the <a href="https://supabase.com/realtime">realtime aspects of Supabase</a>. This allows me to update the table as soon as new data is entered in the backend (by the judges of the comptition).</p>

<p>I&#39;m planning to update the code with some more features soonish, among others:</p>

<ul><li>Authenticaiton for the experts that perform the ranking and rating</li>
<li>A very simple user-interface or view for the experts to edit the score for a single athlete of a heat or run</li>
<li>Better import/export functionality for start list and rankings</li></ul>

<p>Stay tuned. If you have some input or tips feel free to drop me a line (see footer).</p>

<div style="text-align:center; font-size: 0.8em">
<a href="https://write.in0rdr.ch/feed">🛜 RSS</a> | <a href="https://m.in0rdr.ch/in0rdr">🐘 Fediverse</a> | <a href="https://chat.in0rdr.ch/#/guest?join=p0c@conference.in0rdr.ch">💬 XMPP</a>
</div>
]]></content:encoded>
      <guid>https://write.in0rdr.ch/live-heats-scoring-and-leaderboard-for-sport-events</guid>
      <pubDate>Sat, 11 Mar 2023 08:40:19 +0000</pubDate>
    </item>
  </channel>
</rss>