<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lance Wicks Judo Geek</title>
	<atom:link href="https://lancewicks.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://lancewicks.com</link>
	<description>Lance Wicks BSc (Hons) Kiwi, Judoka, Geek, Husband Daddy! Working of Software Development</description>
	<lastBuildDate>Thu, 07 May 2026 14:41:32 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
<site xmlns="com-wordpress:feed-additions:1">99341071</site>	<item>
		<title>Hey, it&#8217;s been a while!</title>
		<link>https://lancewicks.com/2026/05/07/hey-its-been-a-while/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Thu, 07 May 2026 14:41:32 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=795</guid>

					<description><![CDATA[I&#8217;m sitting in a darkened sports arena in Kazakhstan as I write this. For the first time in 7 years I am again on the International Judo Federation world tour; working in the IT team. Life goes by fast, and blogs gather dust&#8230; as this one has. So what have [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I&#8217;m sitting in a darkened sports arena in Kazakhstan as I write this. For the first time in 7 years I am again on the International Judo Federation world tour; working in the IT team.</p>



<p class="wp-block-paragraph">Life goes by fast, and blogs gather dust&#8230; as this one has.</p>



<p class="wp-block-paragraph">So what have I been up to&#8230;</p>



<p class="wp-block-paragraph">Well, I continue to work in software development in a fully remote capacity. I&#8217;m building software in the recruitment software area and it&#8217;s a mix of legacy code and new. I&#8217;m mainly managing others and helping us all to navigate the new AI tools and technologies.</p>



<p class="wp-block-paragraph">Outside of work, my family is fine (thanks for asking).</p>



<p class="wp-block-paragraph">What has changed is that I&#8217;ve gotten involved in the amateur Sumo world. And somehow have entered several competitions and even won some medals in UK even at a European Cup in Norway. Beyond that I am on the board of both <a href="https://englandsumo.com/?utm_source=rss&utm_medium=rss">EnglandSumo</a> and <a href="https://britishsumo.com/?utm_source=rss&utm_medium=rss">BritishSumo</a>. This has been an invigorating and it&#8217;s been great to be involved.</p>



<p class="wp-block-paragraph">Project wise, I&#8217;ve continued to keep <a href="https://en.fantasy-judo.com/?utm_source=rss&utm_medium=rss">https://en.fantasy-judo.com/?utm_source=rss&utm_medium=rss</a> going with James. More recently I started <a href="https://keiko-league.com/?utm_source=rss&utm_medium=rss">https://keiko-league.com/?utm_source=rss&utm_medium=rss</a> which is a different idea, but related to Judo and Sumo. It allows informal tracking and competition at training sessions. <br><br>Running/jogging was something I was doing; but knees did not like it as much as riding bicycles. But riding bikes is a literal pain in the backside. So I tried recumbent bicycles and am a little addicted to riding them now. Take a look at <a href="https://hampshirerecumbentcycle.com/?utm_source=rss&utm_medium=rss">https://hampshirerecumbentcycle.com/?utm_source=rss&utm_medium=rss</a> to see a little more.</p>



<p class="wp-block-paragraph">Well thats a brief catchup, talk soon!<br><br>Lance</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">795</post-id>	</item>
		<item>
		<title>The ever changing social web</title>
		<link>https://lancewicks.com/2024/11/24/the-ever-changing-social-web/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Sun, 24 Nov 2024 13:36:45 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=713</guid>

					<description><![CDATA[Today I updated my &#8220;Contact&#8221; page, in effect retiring Twitter, which is a platform that I no longer use, the rapid deterioration of that platform has been remarkable. Mastodon has now become far more valuable to me, and email returning to be the main social networking tool in my bag. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Today I updated my &#8220;Contact&#8221; page, in effect retiring Twitter, which is a platform that I no longer use, the rapid deterioration of that platform has been remarkable.</p>



<p class="wp-block-paragraph">Mastodon has now become far more valuable to me, and email returning to be the main social networking tool in my bag. Newsletters have really improved things. Though RSS feeds may still hold first spot for news and information.</p>



<p class="wp-block-paragraph">New is Nostr, which for me is taking the place of SSB/Manyverse, which with Andre and other stepping away seems to have had it&#8217;s day. Nostr has a similar vibe to SSB when I discovered it, hopefully the good things from SSB transition.</p>



<p class="wp-block-paragraph">I am enjoying exploring the niches of the web again. As brands and corporations steamroll the internet, little pockets of creativity and innovation flourish in the wreckage. The <a href="https://en.wikipedia.org/wiki/Gemini_(protocol)?utm_source=rss&utm_medium=rss">Gemini Protocol</a> for example is fascinating to me.</p>



<p class="wp-block-paragraph">LinkedIn is a wreck, Facebook attrocious. Both lost as they try to out compete one another and try and survive twitter destroying expectations. The smaller innovators like WhatsApp, Instagram, TikTok getting wrecked in the venture capital hellscape.</p>



<p class="wp-block-paragraph">Pockets of sane appear, like <a href="https://www.beeper.com/?utm_source=rss&utm_medium=rss">Beeper</a>,  <a href="https://readwise.io/?utm_source=rss&utm_medium=rss">Readwise</a>, <a href="https://www.hey.com/?utm_source=rss&utm_medium=rss">Hey</a>.<br>These services that (currently) focus on giving a great experience at a reasonable price, where I am the customer and not the product really appeal more. And I am happy to pay real money for the serenity of these apps as escapes from the broken internet of Twitter, Facebook, etc.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">713</post-id>	</item>
		<item>
		<title>The right tool for the job, building a tool for the IJF in Go-lang</title>
		<link>https://lancewicks.com/2022/05/23/the-right-tool-for-the-job-building-a-tool-for-the-ijf-in-go-lang/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Mon, 23 May 2022 20:16:00 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=631</guid>

					<description><![CDATA[Recently I started building a new tool. It sends UDP data packets that the International Judo Federation (IJF) TV graphics software(s) listen for and present on screen. Normally these packets are sent by the four scoreboard systems at the event. The reason for the tool, is that to test the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Recently I started building a new tool. It sends UDP data packets that the International Judo Federation (IJF) TV graphics software(s) listen for and present on screen. Normally these packets are sent by the four scoreboard systems at the event.</p>



<p class="wp-block-paragraph">The reason for the tool, is that to test the graphics software you need packets of data.<br>That means running four computers with the scoreboard software running. This is inconvenient and also requires manual operation of the scoreboards. It&#8217;s the right way to test at an event where you care that those specific laptops can communicate with the wider systems&#8230; but for bug investigation or even regression testing after making changes it is not very convenient.</p>



<p class="wp-block-paragraph">I originally started in Perl, which is my preferred language for most things. <br>But to be frank&#8230; it did not feel comfortable. The other feeling I had was that I wanted to share this tool with people; and Perl can be difficult to make portable for non-techies. I thought of NodeJS (which the main live stream graphics is written in), but again it is difficult to make portable at times.</p>



<p class="wp-block-paragraph">So I was looking for a language with good network libraries that is portable&#8230; and I felt I could make a working prototype in.</p>



<p class="wp-block-paragraph">Go has networking in the standard libraries, so no need to find a third party module. Go also compiles to a single executable; and building a Windows exe from my Linux workstation was/is easy to do. Lastly, I&#8217;ve written Go and have friends who know it well, so I felt I had a good tool.</p>



<p class="wp-block-paragraph">So one Saturday morning, coffee in hand; I started.</p>



<p class="wp-block-paragraph">Thankfully, people have walked this path before me. I was able to find a <a href="https://www.linode.com/docs/guides/developing-udp-and-tcp-clients-and-servers-in-go/?utm_source=rss&utm_medium=rss" data-type="URL" data-id="https://www.linode.com/docs/guides/developing-udp-and-tcp-clients-and-servers-in-go/?utm_source=rss&utm_medium=rss">blog from Mihalis Tsoukalos</a> that got me started.<br>With this as my guide I was quickly able to build a server and client pair, and using  <code>go run server.go</code> was able to quickly capture the contents of the packets coming from the scoreboard software.</p>



<p class="wp-block-paragraph">Using these packets as my template, I was able to alter the &#8220;client&#8221; code to send a packet out; and after minimal adjustments, saw the packet data display on the graphics system we use to overlay on the video people watch online.</p>



<p class="wp-block-paragraph">Having proven this much, I tested building a Windows (32-bit) executable and ran that on a windows machine off a USB stick with no problems at all.</p>



<p class="wp-block-paragraph"><strong>Missions accomplished !</strong></p>



<p class="wp-block-paragraph">So then I made some adjustments, such as sending multiple mat information and tweaking the data packets. I refactored some of the IJF specifics into a module so that the main code is pretty small:</p>



<pre class="wp-block-code"><code>package main

import (
	"fmt"
	"ijf/ijf"
	"net"
)

func main() {
	s, _ := net.ResolveUDPAddr("udp4", "255.255.255.255:5000")
	c, _ := net.DialUDP("udp4", nil, s)


	fmt.Printf("Broadcasting UDP to %s\n", c.RemoteAddr().String())
	defer c.Close()

	for {
		for i := 1; i &lt; 5; i++ {
			packet := ijf.Mat(i)
			data := &#91;]byte(packet)
			_, _ = c.Write(data)
		}
	}
}</code></pre>



<p class="wp-block-paragraph">As you see, there is simple infinite loop, within which it loops around creating and sending packets for each of the contest mats.</p>



<p class="wp-block-paragraph">(<em>And yes, I have cut out all the error checking of <code>err</code> to make it even smaller for this post</em>)</p>



<p class="wp-block-paragraph">The windows EXE file is now with my colleague who will test it in anger next weekend in Tbilisi, Georgia.</p>



<p class="wp-block-paragraph">Next?</p>



<p class="wp-block-paragraph">I have started on a change to read a config file and send a specific scoreboard situation; and after Tbilisi I&#8217;ll be adding the ability to read the data file we capture of a scoreboard over an event and play that back. This will be helpful as a debugging tool when people tell us something rendered strangely. We should be able to use the exact data from the scoreboard(s) and replay it so that the TV graphics software can be observed, altered, and tested.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The weekend project was really rewarding and reminded me of how important it is to choose the right tool for the job (Go-lang). Not just the tool I know best (Perl)&#8230; or even the tool that has been used before (Javascript/Node).</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">631</post-id>	</item>
		<item>
		<title>Whats been going on?</title>
		<link>https://lancewicks.com/2022/03/21/whats-been-going-on/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Mon, 21 Mar 2022 20:18:08 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=615</guid>

					<description><![CDATA[In an effort to rebuild the muscles of regular blogging, I want to write something here; even if it is only a small something. So here is a short summary fo what has been happening. In $dayjob, a big project has some to a key point and gone pretty well. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In an effort to rebuild the muscles of regular blogging, I want to write something here; even if it is only a small something. So here is a short summary fo what has been happening.</p>



<p class="wp-block-paragraph">In $dayjob, a big project has some to a key point and gone pretty well. Last week was spent in many ways doing admin and answering queries around the work. </p>



<p class="wp-block-paragraph">Outside of work; I pushed some more updates to the WebService::SmartRow module on CPAN. It&#8217;s in a pretty good state and I have been able to get all the data I want to tell me the things the website isn&#8217;t. Which is handy as I now have set a 10,000 meter personal best; so was able to confirm that with code I wrote using the module!</p>



<p class="wp-block-paragraph">Fantasy-Judo.com has taken up some brain space, I have 80% of a very slow coming change written that allows people to see what they &#8220;spent&#8221; on their team at the time they picked it. As ever, the code bit took a while as it&#8217;s in Go and I write Perl most of the time; and it takes a while to change mental gears.</p>



<p class="wp-block-paragraph">It&#8217;ll soon be ready, I am not happy with the words I am using to describe the numbers I am now storing and displaying. There is an old saying about the hard things in computing including naming.</p>



<p class="wp-block-paragraph">But once that is done I can do the last 80% of the work and see if I can push it live.</p>



<p class="wp-block-paragraph">I/we have pushed a couple of things live on the site recently. Most recently a small change to handle incoming data being oddly formatted. What is great about the project is that it&#8217;s easy to work with despite it really not having had much attention for a couple of years. That is in part Go perhaps and partly the fact that it&#8217;s  built in what we humbly think is a sensible way&#8230; ok mainly Go. It is one of the selling points I read about for Go is that it is good for long-term maintenance.</p>



<p class="wp-block-paragraph">My kata competition software has been taking a little bit of a backseat. It &#8220;works&#8221; now; I think I need a tweak in how the calculations of scores work; but mainly I want a set of scoresheets to enter and results to compare against.</p>



<p class="wp-block-paragraph">PlanetJudo.com potters along; I am really pleased with how the Digital Ocean app service is working for it. Basically, there is zero effort to build and deploy. It &#8220;just works&#8221;. </p>



<p class="wp-block-paragraph">That is a bit of a theme I guess, both PlanetJudo and Fantasy-Judo have super easy &#8220;pipelines&#8221;; this leads to being able to push a small change easily. With lots of small changes over time rather than big deployments. It&#8217;s a lesson to be remembered for all professional (and hobby) projects. As GeePaw would say &#8220;Many more, much smaller steps&#8221;.</p>



<p class="wp-block-paragraph">I also managed to write a little something about the impact the Russia ban in Judo might be; this is based on some super quick work with Webservice::Judobase.</p>



<p class="wp-block-paragraph">That&#8217;s about it for now, thanks for reading. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png?utm_source=rss&utm_medium=rss" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">615</post-id>	</item>
		<item>
		<title>Keeping the ball rolling</title>
		<link>https://lancewicks.com/2022/03/11/keeping-the-ball-rolling/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Fri, 11 Mar 2022 22:47:11 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=612</guid>

					<description><![CDATA[Recently, I have been trying to refresh some of my projects that have gathered dust of late. So since I wrote last I have been spending my free time writing and coding.. and rowing. I took to rowing as running has this bad habit of me getting injured&#8230; and it&#8217;s [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Recently, I have been trying to refresh some of my projects that have gathered dust of late. So since I wrote last I have been spending my free time writing and coding.. and rowing.</p>



<p class="wp-block-paragraph">I took to rowing as running has this bad habit of me getting injured&#8230; and it&#8217;s cold outside!</p>



<p class="wp-block-paragraph">I&#8217;ve recently updated my rowing machine to have a <a href="https://smartrow.fit?utm_source=rss&utm_medium=rss">SmartRow</a> power monitor wheel. I hate some frustration with the statistics it provides via their website. I discovered it&#8217;s mainly javaascript with a JSON API. So I have started a small open source project wrapping the API (<a href="https://metacpan.org/pod/WebService::SmartRow?utm_source=rss&utm_medium=rss">https://metacpan.org/pod/WebService::SmartRow?utm_source=rss&utm_medium=rss</a>). This has allowed me to more easily see things like the average power (watts) per row and chart that to see if I am improving. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png?utm_source=rss&utm_medium=rss" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">This work has been interesting and gave me an opportunity to write up a small tale about the Dist::Zilla tool I am using to do most of the important parts of publishing a module to CPAN. It&#8217;s over on my Perl.Kiwi site at <a href="https://perl.kiwi/tales/2022/03/05/using-dist-zilla-to-create-a-new-cpan-module/?utm_source=rss&utm_medium=rss">https://perl.kiwi/tales/2022/03/05/using-dist-zilla-to-create-a-new-cpan-module/?utm_source=rss&utm_medium=rss</a></p>



<p class="wp-block-paragraph">On Tuesday evening this week I spent some time with James on <a href="https://fantasy-judo.com?utm_source=rss&utm_medium=rss">fantasy-judo.com</a> mainly looking at some of the many todo items while James added some new team name options. Later in the week I received from a user some German translations so I updated those. I have a feature I hope to work on this weekend and next week.</p>



<p class="wp-block-paragraph">I did a small amount of work on the Judo Kata Competition software project; mainly testing the UI and calculations.</p>



<p class="wp-block-paragraph">I was also able to write up a couple of blog posts on my Judo sites. On judocoach.com I wrote a short piece on the kata I have been doing to help with the shoulder pain I sometimes get (<a href="http://judocoach.com/blog/index.php?entry=entry220223-154007&utm_source=rss&utm_medium=rss">http://judocoach.com/blog/index.php?entry=entry220223-154007&utm_source=rss&utm_medium=rss</a>). Then on JudoMetrics I was able to promote an interesting site I have been reading (<a href="https://judometrics.com/2022/03/marcus-augustines-judo-de-base-website/?utm_source=rss&utm_medium=rss">https://judometrics.com/2022/03/marcus-augustines-judo-de-base-website/?utm_source=rss&utm_medium=rss</a>).</p>



<p class="wp-block-paragraph"> In my $dayjob, I have been busy deleting dead code and retrofitting tests. Specifically adding some coverage around a new system I have not worked on and some customer support issues have been escalated to the development team.</p>



<p class="wp-block-paragraph">I&#8217;ve been pretty busy; but not too much. The balance is pretty good so I am happy with the &#8220;rolling&#8221; of the proverbial ball.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">612</post-id>	</item>
		<item>
		<title>Dev Diary Feb 2022</title>
		<link>https://lancewicks.com/2022/02/26/dev-diary-feb-20222/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Sat, 26 Feb 2022 20:30:44 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=604</guid>

					<description><![CDATA[On scuttlebutt quite a few people do this development diary idea, so I thought I would post one up on here. This week, I have been pretty busy catching up on some side projects and trying to get some structure in place for some of the ones that are the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">On scuttlebutt quite a few people do this development diary idea, so I thought I would post one up on here.</p>



<p class="wp-block-paragraph">This week, I have been pretty busy catching up on some side projects and trying to get some structure in place for some of the ones that are the dustiest.</p>



<h2 class="wp-block-heading">Fantasy-Judo</h2>



<p class="wp-block-paragraph">The site has been really busy, possibly the steady flow of events meaning people have been choosing players for one event whilst results for the current one are still coming in.</p>



<p class="wp-block-paragraph">This week the site had a large part of the &#8220;plumbing&#8221; changed; James moved it to <a href="https://go-chi.io/#/?utm_source=rss&utm_medium=rss">Chi</a> for our routing system. This caused one small bug, one small side effect with a difference in how we had to handle parameters on team picks. We got that fixed up and a couple of other small things.</p>



<p class="wp-block-paragraph">The Discord has been busy of late and it&#8217;s causing us to want to have a bit of a hackathon on some new game modes.</p>



<h2 class="wp-block-heading">Judo Kata Competition system</h2>



<p class="wp-block-paragraph">This got a little love this week; mainly tidy up work after having made quite a lot of progress in February generally. The next phase is to do some thorough testing and usability improvements along with styling.</p>



<p class="wp-block-paragraph">At the moment the system is black text on white background. No styling or customisation. I&#8217;ll be adding in the ability to configure event details including logo and starting on the printable reports.</p>



<h2 class="wp-block-heading">Judo Blogs</h2>



<p class="wp-block-paragraph">I&#8217;ve run lots of Judo blogs over the years and a bunch of them have deteriorated and I have not kept them up to date or posted anything recently.</p>



<p class="wp-block-paragraph">So I took a few down, gave them a clean and brought them back; I posted a few short entries on a couple. I have missed writing about Judo so that was refreshing.</p>



<h2 class="wp-block-heading">ijf_ical</h2>



<p class="wp-block-paragraph">This is a small project that creates a ical feed (so you can subscribe to all the IJF competitions in Outlook etc). I finally got around to writing up one of the features about that; to calculate an approximate carbon footprint calculation for the IJF World Tour.</p>



<h2 class="wp-block-heading">perl.kiwi</h2>



<p class="wp-block-paragraph">In part driven by some activities at work and on these side projects; I spent some time working on Perl tooling and wrote it up on <a href="https://perl.kiwi/tales/2022/02/24/perl-tooling-less-well-known-but-powerful/?utm_source=rss&utm_medium=rss">perl.kiwi</a> </p>



<p class="wp-block-paragraph">Perl has some excellent tools, it was good to write some of that up.</p>



<h2 class="wp-block-heading">$dayjob</h2>



<p class="wp-block-paragraph">My current work involves working on a heavily used legacy system and this week has included adding a new reporting feature. So it&#8217;s been good to build something into the existing framework. </p>



<p class="wp-block-paragraph">With this sort of work it&#8217;s always a challenge to fit the style of the existing code; but it does mean often that most of the components you need are already there and that was the case this week.</p>



<p class="wp-block-paragraph">It was good to be able to quickly prototype the frontend; then work backwards initially cobbling the required code together, then incrementally tidying it up after confirming the frontend idea was sound.</p>



<p class="wp-block-paragraph">After initially being quite untidy; it was nice to observe as the code got tidier and tidier by the end of the week.</p>



<h2 class="wp-block-heading">March</h2>



<p class="wp-block-paragraph">In March, my hope is to get the Kata software near complete so it can be used in a real way. I am lucky that people are showing interest so I have some feedback to collect.</p>



<p class="wp-block-paragraph">PlanetJudo needs some more work; specifically I want to work on some of the unicode handling and see about working through the backlog of things I want to sharpen.</p>



<p class="wp-block-paragraph">Fantasy-Judo we hope to catchup one evening this week and then implement some ideas this month. Potentially an entire new game mode.</p>



<p class="wp-block-paragraph">Should be a good month!</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">604</post-id>	</item>
		<item>
		<title>2022&#8230; no seriously it&#8217;s 2022</title>
		<link>https://lancewicks.com/2022/02/19/2022-no-seriously-its-2022/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Sat, 19 Feb 2022 12:17:52 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=600</guid>

					<description><![CDATA[Wow&#8230; it&#8217;s so crazy that it&#8217;s been a while since 2020 when I last updated this site. So much has happened since then, and mostly it has gone by and life rolls on. I&#8217;m currently working developing Perl again full-tme which is a nice change from being heavily involved in [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wow&#8230; it&#8217;s so crazy that it&#8217;s been a while since 2020 when I last updated this site. So much has happened since then, and mostly it has gone by and life rolls on.</p>



<p class="wp-block-paragraph">I&#8217;m currently working developing Perl again full-tme which is a nice change from being heavily involved in managing people through a pandemic. </p>



<p class="wp-block-paragraph">Outside work I am also working on a fun project; I&#8217;m building a Judo Kata Competition software solution. Along with this I recently rebuilt my PlanetJudo project and am really happy with the DigitalOcean app hosting solution I used.</p>



<p class="wp-block-paragraph">Fantasy-Judo is quietly running; I am always happy when we get nice messages from people and each event we see more people play on the site.</p>



<p class="wp-block-paragraph">What has not been good, and this post is part of solving it, many of my sites are dusty and neglected. Someone said something in passing about the lack of content (specifically in Judo) which got me thinking about how I was prolific in the past. Blogs, podcasts, etc but I have been very quiet of late.</p>



<p class="wp-block-paragraph">So I am going to try and rekindle the habit of regular content. I am not going to be specific about how much or how often; but more content across my various sites and projects is the goal. Regular content.</p>



<p class="wp-block-paragraph">So&#8230; thats that.</p>



<p class="wp-block-paragraph">Welcome to 2022, stay tuned and please do say hello.</p>



<p class="wp-block-paragraph">Lance </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">600</post-id>	</item>
		<item>
		<title>All that matters is legacy software</title>
		<link>https://lancewicks.com/2020/09/19/all-that-matters-is-legacy-software/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Sat, 19 Sep 2020 11:58:28 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=515</guid>

					<description><![CDATA[Lately I have been working on a tool we use on the IJF World Tour to present real-time graphics on the live stream fo events; and it made me want to write something about how important &#8220;legacy&#8221; software is and how in fact we can argue that &#8220;legacy&#8221; software is [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Lately I have been working on a tool we use on the IJF World Tour to present real-time graphics on the live stream fo events; and it made me want to write something about how important &#8220;legacy&#8221; software is and how in fact we can argue that &#8220;legacy&#8221; software is the only software that matters.</p>



<p class="wp-block-paragraph">Specifically, I have been updating an Electron app that listened for UDP packets and displays them on the screen using HTML and CSS. We then chromakey that onto the camera feed of a Judo contest.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="656" height="73" data-attachment-id="516" data-permalink="https://lancewicks.com/2020/09/19/all-that-matters-is-legacy-software/screenshot-from-2020-09-03-11-09-17/?utm_source=rss&utm_medium=rss" data-orig-file="https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?fit=1551%2C172&amp;ssl=1&utm_source=rss&utm_medium=rss" data-orig-size="1551,172" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screenshot-from-2020-09-03-11-09-17" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?fit=656%2C73&amp;ssl=1&utm_source=rss&utm_medium=rss" src="https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?resize=656%2C73&#038;ssl=1&utm_source=rss&utm_medium=rss" alt="" class="wp-image-516" srcset="https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?resize=1024%2C114&amp;ssl=1&utm_source=rss&utm_medium=rss 1024w, https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?resize=300%2C33&amp;ssl=1&utm_source=rss&utm_medium=rss 300w, https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?resize=768%2C85&amp;ssl=1&utm_source=rss&utm_medium=rss 768w, https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?resize=1536%2C170&amp;ssl=1&utm_source=rss&utm_medium=rss 1536w, https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?w=1551&amp;ssl=1&utm_source=rss&utm_medium=rss 1551w, https://i0.wp.com/lancewicks.com/wp-content/uploads/2020/09/Screenshot-from-2020-09-03-11-09-17.png?w=1312&amp;ssl=1&utm_source=rss&utm_medium=rss 1312w" sizes="(max-width: 656px) 100vw, 656px" /></figure>



<p class="wp-block-paragraph">This software is used at every large IJF and EJU event and seen by people all over the world. So it is really &#8220;valuable&#8221;, it also &#8220;legacy&#8221;. In many sense of the term.</p>



<p class="wp-block-paragraph">It is legacy in that it does not have tests, it is legacy in that it&#8217;s old and not well maintained. It is legacy in that it provides value. It is legacy in that it is relied upon.</p>



<p class="wp-block-paragraph">I have been updating the software to match the latest style of graphics. But I have also been trimming away dead code, un-used features and general &#8220;cruft&#8221;.</p>



<p class="wp-block-paragraph">Having done that, I am not embarking on the classic &#8220;re-write&#8221;, changing it to use Elm and elm-ui on the front-end rather than JQuery/HTML/CSS(Bootstrap).</p>



<p class="wp-block-paragraph">The re-write builds on the foundations of the original. The Node code that listens to the UDP packets is not going away. It&#8217;s a slightly revised (smaller) version with less features, but fundamentally building on the legacy.</p>



<p class="wp-block-paragraph">The front-end although entirely new and written in a new language, is still building on the legacy of the original code. Again some features are gone and it&#8217;s simpler.</p>



<p class="wp-block-paragraph">And that is the point, legacy software informs new software. All new software builds on it&#8217;s legacy. And&#8230; within minutes of being written/released becomes legacy software itself. Which in turn becomes the legacy upon which the next thing is built.</p>



<p class="wp-block-paragraph">So although I sometimes describe myself as more of a &#8220;maintainer&#8221; than a &#8220;creator&#8221; I see the two intertwined. Both greenfield and legacy software are one in the same, yin/yang, two sides of the same coin.</p>



<p class="wp-block-paragraph">Creating software is an act of building on legacy software and creating legacy software. So only legacy software really matters&#8230; right?</p>



<p class="wp-block-paragraph">In creating this &#8220;new&#8221; version of the software, I am extending the life of the legacy software at it&#8217;s core. The UDP listener I recall is actually built on top of an even older piece of software I wrote tweeted contest results (which never gained traction) which was built on an even older piece of software that wrote all the packets to a database for analysis later&#8230; which was used twice I think before it became apparent it was not a good idea.</p>



<p class="wp-block-paragraph">So this shiny new version, written in a shiny new language is in fact just a new layer upon many layers of legacy code. </p>



<p class="wp-block-paragraph">It too will soon be legacy code.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">515</post-id>	</item>
		<item>
		<title>Skipping a @perlwchallenge week, to do some #judo coding in #perl</title>
		<link>https://lancewicks.com/2020/08/30/skipping-a-perlwchallenge-week-to-do-some-judo-coding-in-perl/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Sun, 30 Aug 2020 13:54:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=500</guid>

					<description><![CDATA[This week, I tried to do week 75 and it just did not click. 🙁 That said, I did do some Perl coding for someone looking at doing some research into Judo. They reached out to me as a result of my http://rwjl.net site I think. On that page I [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">This week, I tried to do week 75 and it just did not click. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png?utm_source=rss&utm_medium=rss" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">That said, I did do some Perl coding for someone looking at doing some research into Judo. They reached out to me as a result of my <a href="http://rwjl.net?utm_source=rss&utm_medium=rss">http://rwjl.net?utm_source=rss&utm_medium=rss</a> site I think. On that page I ran a research project into an alternative ranking system for Olympic Judo using the ELO system used in Chess.</p>



<p class="wp-block-paragraph">So the request via email, was a great surprise. It came from someone I deeply respect; so helping was a pleasure.</p>



<p class="wp-block-paragraph">Perl, has always been a tool for automating tasks. It is the superglue for many tasks. So this week I used it to automate collating some competition results into a format that suited.</p>



<p class="wp-block-paragraph">Specifically&#8230; the dreaded CSV format.</p>



<p class="wp-block-paragraph">But being Perl, this was easy! just two lines and it was done.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">So skipping to the CSV bit, I have an array of hashes. Each entry is the result of a contest in a international Judo competition. To write this data out to a .CSV file in perl looks like this:</p>



<pre class="wp-block-code"><code>use Text::CSV_XS 'csv';

...

my $err = csv( in => \@data, out => "summary_data.csv" );</code></pre>



<p class="wp-block-paragraph">That&#8217;s basically it; copied directly from the POD documentation for the module (<a href="https://metacpan.org/pod/Text::CSV_XS?utm_source=rss&utm_medium=rss">Text::CSV_XS</a>).</p>



<p class="wp-block-paragraph">This took the 167,000+ lines of data and produced a CSV with almost zero fuss. Perl rocks!</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">500</post-id>	</item>
		<item>
		<title>#Perl Weekly Challenge #74</title>
		<link>https://lancewicks.com/2020/08/22/perl-weekly-challenge-74/#utm_source=rss&#038;utm_medium=rss</link>
		
		<dc:creator><![CDATA[Lance]]></dc:creator>
		<pubDate>Sat, 22 Aug 2020 14:45:34 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lancewicks.com/?p=496</guid>

					<description><![CDATA[Hello once again; here is another post about the Perl Weekly Challenge. This time I have done both challenges in Perl 5. I livecoded both: Challenge-74, Task 1: https://www.youtube.com/watch?v=uM0TTQZaZ2Q Challenge-74, Task 2: Part 1: https://www.twitch.tv/videos/716304993 Part 2: https://www.twitch.tv/videos/716329311 So what did Task 1 look like: So pretty simple module; I [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hello once again; here is another post about the Perl Weekly Challenge. This time I have done both challenges  in Perl 5.</p>



<p class="wp-block-paragraph">I livecoded both:</p>



<ul class="wp-block-list"><li>Challenge-74, Task 1: <a href="https://www.youtube.com/watch?v=uM0TTQZaZ2Q&utm_source=rss&utm_medium=rss">https://www.youtube.com/watch?v=uM0TTQZaZ2Q&utm_source=rss&utm_medium=rss</a></li><li>Challenge-74, Task 2: <ul><li>Part 1: <a href="https://www.twitch.tv/videos/716304993?utm_source=rss&utm_medium=rss">https://www.twitch.tv/videos/716304993?utm_source=rss&utm_medium=rss</a></li><li>Part 2: <a href="https://www.twitch.tv/videos/716329311?utm_source=rss&utm_medium=rss">https://www.twitch.tv/videos/716329311?utm_source=rss&utm_medium=rss</a></li></ul></li></ul>



<p class="wp-block-paragraph">So what did Task 1 look like:</p>



<pre class="wp-block-code"><code>package Majority;

use strict;
use warnings;

use List::MoreUtils 'frequency';

sub element {
# Majority element in the list is the one that appears more than floor(size_of_list/2).
    my ( $self, @A ) = @_;
    my $majority_element = -1;

    my $floor = @A / 2;

    my %frequencies = frequency @A;

    for my $element ( @A ) {
        if ( $frequencies{$element} > $floor ) {
            $majority_element = $element;
            last;
        }
    }

    return $majority_element;
}

1;</code></pre>



<p class="wp-block-paragraph">So pretty simple module; I used List::MoreUtils to get the frequencies and from there it was pretty simple. If you watch the live coding you will see that I struggled a little with the documentation. As Mohammad Anwar was watching the result was he raised a PR on the module to change the POD to make it clearer for people like me! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png?utm_source=rss&utm_medium=rss" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">For the second challenge, my module looks like this:</p>



<pre class="wp-block-code"><code>package FNR;

use strict;
use warnings;

use List::MoreUtils 'frequency';

sub from_string {
    my ( $self, $string ) = @_;
    my $sequence = '';

    my $end = length $string;

    for my $offset ( 1 .. $end ) {
        my $chars = substr $string, 0, $offset;
        $sequence .= $self->_fnr($chars);
    }

    return $sequence;
}

sub _fnr {
    my ( $self, $chars ) = @_;
    my @characters =  split '', $chars;
    my %frequencies = frequency( @characters );

    for my $key ( reverse @characters ) {
        return $key if $frequencies{$key} == 1;
    }

    return '#';
}

1;</code></pre>



<p class="wp-block-paragraph">In this one, I enjoyed breaking the task down into two methods.</p>



<p class="wp-block-paragraph">The first method did the string manipulation; looping around the substrings. The second &#8220;private&#8221; method being called from the first which again used the frequency function from List::MoreUtils to determine the actual FNR.</p>



<p class="wp-block-paragraph">I was happy with the TDD approaches I took with both. Here is the test file for the second task:</p>



<pre class="wp-block-code"><code>use Test2::V0 -target => 'FNR';

subtest 'from_string()' => sub {
    subtest 'Example 1' => sub {
        note "Input: ‘ababc’";
        note "Output: ‘abb#c’";
        is $CLASS->from_string('ababc'), 'abb#c',
            'The first example is correct';
    };

    subtest 'Example 2' => sub {
        note "Input: ‘xyzzyx’";
        note "Output: ‘xyzyx#’";

        is $CLASS->from_string('xyzzyx'), 'xyzyx#',
            'The second example is correct';

    };
};

subtest '_fnr()' => sub {
    my %tests = (
        'a'     => 'a',
        'ab'    => 'b',
        'aba'   => 'b',
        'abab'  => '#',
        'ababc' => 'c'
    );

    while ( my ( $input, $expected ) = each %tests ) {
        is $CLASS->_fnr($input), $expected, "$input should return $expected";
    }
};

done_testing;
</code></pre>



<p class="wp-block-paragraph">The second subtest I wrote in a style where I had my inputs and expected outputs in a hash, then loop around them and repeat the test. It&#8217;s a mixed blessing. I mainly prefer manual tests and to have input, expected and got all together. But in this case it seemed to make sense.</p>



<p class="wp-block-paragraph">Like I said above; I was happy that I solved this task by</p>



<ol class="wp-block-list"><li>Solving the looping around the string</li><li>Solving the FNR part</li></ol>



<p class="wp-block-paragraph">Doing part one first helped me explore the problem without worrying about the solution. The examples in the challenge were helpful as it showed the loops. So as you see in the video; I was able to replicate that.</p>



<p class="wp-block-paragraph">Solving the fnr part was interesting as I hit the &#8220;flakey tests&#8221; problem. I had tests that passed some of the time. Why? Because I was looping around the keys of the hash&#8230; and hashes have random order. This was interesting as there was one situation in the test where it would fail. Changing to looping around an array (which has a fixed order) solved the problem.</p>



<p class="wp-block-paragraph">Having the tests running repeatedly via the linux watch command saved me from potential problems. If I had run them manually; or only tested the final script; then I might have missed the edge case. A lesson there for future Lance; testing repeatedly even after you have a passing test is a good thing.</p>



<p class="wp-block-paragraph">Anyway&#8230; please do checkout the twitch or youtube videos. The solutions are in the PerlWeeklyChallenge git repo if you want to check them out in detail: <a href="https://github.com/lancew/perlweeklychallenge-club/tree/branch--1/challenge-074/lance-wicks/perl?utm_source=rss&utm_medium=rss">https://github.com/lancew/perlweeklychallenge-club/tree/branch&#8211;1/challenge-074/lance-wicks/perl?utm_source=rss&utm_medium=rss</a> </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">496</post-id>	</item>
	</channel>
</rss>
