summaryrefslogtreecommitdiff
path: root/_posts
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2020-06-21 10:55:04 +0200
committerPatrick Spek <p.spek@tyil.nl>2020-06-21 10:55:04 +0200
commit2d03ce4f00c899da4a2af6674ce4184cd2ffb96e (patch)
tree61e635ab369e91e2e74b2ee90e01824028fab1e6 /_posts
parentd9bdc2d9d5136b3473525c4db015c133667bb05d (diff)
Add small blog post on my recent Raku projects
Diffstat (limited to '_posts')
-rw-r--r--_posts/2020-06-21-lately-in-raku.md156
1 files changed, 156 insertions, 0 deletions
diff --git a/_posts/2020-06-21-lately-in-raku.md b/_posts/2020-06-21-lately-in-raku.md
new file mode 100644
index 0000000..32e195a
--- /dev/null
+++ b/_posts/2020-06-21-lately-in-raku.md
@@ -0,0 +1,156 @@
+---
+title: Lately in Raku
+layout: post
+tags: Raku
+social:
+ email: mailto:~tyil/public-inbox@lists.sr.ht&subject=Lately in Raku
+description: >
+ A post on some Raku stuff I've been working on lately.
+---
+
+I've been working on some Raku projects, but each of them is *just* too small
+to make an individual blog post about. So, I decided to just pack them together
+in a slightly larger blog post instead.
+
+## Binary Rakudo Star builds for GNU+Linux and FreeBSD
+
+A friend on IRC asked if it was possible to get Rakudo Star precompiled for
+ARM, since compiling it on his machine took forever. I took a look around for
+potential build services, and settled for [Sourcehut](https://builds.sr.ht/).
+
+I added build instructions for amd64 FreeBSD, GNU+Linux, musl+Linux, and ARM
+GNU+Linux. Tarballs with precompiled binaries get build whenever I push to the
+Rakudo Star mirror on Sourcehut, and are uploaded to
+[dist.tyil.nl/tmp](https://dist.tyil.nl/tmp/). Currently, these are not
+considered to be an official part of Rakudo Star, but if interest increases and
+more people can test these packages, I can include them in official releases.
+
+## `IRC::Client` plugins
+
+IRC bots are great fun, and the
+[`IRC::Client`](https://github.com/raku-community-modules/perl6-IRC-Client)
+module allows for easy extension through *plugins*. For my own IRC bot,
+[musashi](https://git.sr.ht/~tyil/raku-local-musashi), I've created two new
+plugins, which are now available in the Raku ecosystem for anyone to use.
+
+### `IRC::Client::Plugin::Dicerolls`
+
+The first plugin I've created can do dice rolls, D&D style. You can roll any
+number of dice, with any number of sides, and add (or subtract) bonusses from
+these.
+
+ <@tyil> .roll 1d20
+ <+musashi> 1d20 = 1
+ <@tyil> .roll 5d20
+ <+musashi> 5d20 = 3 + 19 + 8 + 6 + 11 = 47
+ <@tyil> .roll 1d8+2d6+10
+ <+musashi> 1d8+2d6+10 = 4 + 6 + 4 + 10 = 24
+
+Since this is ripe for abuse, the plugin allows to set limits, and sets some
+defaults for the limits as well. This should help prevent your bot from getting
+killed for spam.
+
+### `IRC::Client::Plugin::Reminders`
+
+Everyone forgets things, and there's various tools helping people remember
+things in various situations. For IRC based situations, I created a reminder
+plugin for `IRC::Client`.
+
+ 10:19 <@tyil> musashi: remind me to write a blog post in 10 minutes
+ 10:19 <+musashi> Reminding you to write a blog post on 2020-06-21T08:29:00Z (UTC)
+ 10:29 <+musashi> tyil: Reminder to write a blog post
+
+It's not very sophisticated yet, working only with numbers and certain
+identifiers (minutes, hours, days, weeks), but I may add more useful
+identifiers later on such as "tomorrow", or "next Sunday". Contributions for
+such extended functionality are obviously also very welcome!
+
+There's [a small
+issue](https://git.sr.ht/~tyil/raku-irc-client-plugin-reminders/tree/master/lib/IRC/Client/Plugin/Reminders.rakumod#L69)
+with logging in a `start` block. It seems the dynamic variable `$*LOG` is no
+longer defined within it. If anyone has an idea why, and how I could fix this,
+please let me know!
+
+## Template program for D&D
+
+Another little utility I made for D&D purposes. My DM asked me how hard it'd be
+to create a program to fill out a number of templates he made, so he could use
+them in the game with another party. He was able to hand me a list of variables
+in the form of a CSV, so I set out to use that. With some help from `Text::CSV`
+and `Template::Mustache`, I had a working solution in a couple minutes, with
+all the required things nicely fit into a single file.
+
+I had not used `$=pod` before in Raku, and I'm quite happy with how easy it is
+to use, though I would like a cleaner way to refer to a Pod block by name.
+
+{% highlight perl6 %}
+{% raw %}
+#!/usr/bin/env raku
+
+use v6.d;
+
+use Template::Mustache;
+use Text::CSV;
+
+#| Read a CSV input file to render contracts with.
+sub MAIN () {
+ # Set the directory to write the contracts to.
+ my $output-dir = $*PROGRAM.parent(2).add('out');
+
+ # Make sure the output directory exists
+ $output-dir.mkdir;
+
+ # Load the template
+ my $template = $=pod
+ .grep({ $_.^can('name') && $_.name eq 'template' })
+ .first
+ .contents
+ .map(*.contents)
+ .join("\n\n")
+ ;
+
+ # Parse STDIN as CSV
+ my @records = Text::CSV
+ .new
+ .getline_all($*IN)
+ .skip
+ ;
+
+ # Create a contract out of each record
+ for @records -> @record {
+ $output-dir.add("contract-{@record[0]}.txt").spurt(
+ Template::Mustache.render($template, {
+ contractor => @record[2],
+ date => @record[1],
+ description => @record[6],
+ item => @record[3],
+ location => @record[5],
+ price => @record[4]
+ }) ~ "\n"
+ );
+ }
+}
+
+=begin template
+As per our verbal agreement this contract will detail the rewards, rights, and
+obligations of both parties involved.
+
+The contractor, to be known henceforth as {{ contractor }}.
+The contractee, to be known henceforth as the Association.
+
+{{ contractor }} requests the delivery of an object identified as the "{{ item }}"
+to be delivered by the Association at the location specified for the agreed
+upon compensation. The Association shall deliver the object within two weeks of
+the signing of this contract and receive compensation upon delivery.
+
+The location is to be known as "{{ location }}", described as "{{ description }}".
+The compensation agreed upon is {{ price }} pieces of Hondia standard
+gold-coin currency, or an equivalent in precious gemstones.
+
+Written and signed on the {{ date }}.
+
+For the association, Lan Torrez
+For the {{ contractor }}
+=end template
+{% endraw %}
+{% endhighlight %}