Amusewiki 2.500

Well, well, today I released Amusewiki 2.500 and I noticed that time has passed since the last announcement here. This doesn't mean that the Amusewiki development has stopped. On the contrary. The development pace has been steady, with new features, improvements and bug-fixes. In the meanwhile Amusewiki got a new logo as well!

The most notable changes are:

  • Installation size has been cut down to the minimum with a TeXlive! repackaging (which can be installed on the fly by the installation script or via the unofficial Debian packages).

  • Support for attached files has been extended. You can now upload and display audio and video files.

  • Custom category types: you are no longer limited to authors and topics, you can have custom categories.

As usual, documentation for old and new features can be found at, unofficial Debian package are at and sources are at

Detailed changelogs can be found here:

It's worth noting that the Emacs Muse markup is supported by Pandoc (as a reader and a writer) since version 2.0, and if you use the Atom editor, there is a package for it.


Perl Weekly Challenge 84: Reverse Integer and Find Square Matrices

These are some answers to the Week 84 of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Spoiler Alert: This weekly challenge deadline is due in a few days (November 1, 2020). This blog post offers some solutions to this challenge, please don’t read on if you intend to complete the challenge on your own.

Task 1: Reverse Integer

You are given an integer $N.

Write a script to reverse the given integer and print the result. Print 0 if the result doesn’t fit in 32-bit signed integer.

The number 2,147,483,647 is the maximum positive value for a 32-bit signed binary integer in computing.

Example 1:

Input: 1234
Output: 4321

Example 2:

Input: -1234
Output: -4321

Example 3:

CY's Take on PWC#083

If you want to challenge yourself on programming, especially on Perl and/or Raku, go to, code the latest challenges, submit codes on-time (by GitHub or email).

... before coding

Long time no blogging for The Weekly Challenge!

I found that I use "and/or" quite frequently in writing. I know, (mathematical-)logically we only need "or". It seems to me to be a language tricky part as the use of gender neutral terms.

I made a logical error for the "Lonely X" task in challenge 077.

$segment =~ s/XI/II/g;
$segment =~ s/IX/II/g;
$segment =~ s/XX/II/g;

should be

$segment =~ s/XX/II/g;
$segment =~ s/XI/II/g;
$segment =~ s/IX/II/g;

Task 1 Words Length

I immediately checked out the "Llama book" and checked the usage of match variables in regular expressions. The result is a 3-line solution! Yo:

$_ = <STDIN>;
print length $2,"\n";

Oooooooooooops, it works for 3-word string.

Why you should use ppport.h in your XS code modules

The answer comes down to two words: Security and Reliability.
As a bonus, less work on your part.

It's surprising to find that there are modules on CPAN that aren't using
ppport.h that could stand to benefit from it.

ppport.h is a file that is part of the Devel::PPPort distribution. As you
know, Perl has evolved over the years, adding new features, and new API for XS
writers to use. Some of that is to support the new features, and some to make
tasks easier to accomplish. ppport.h implements portions of the API that
people have found desirable to have when a module gets installed in a Perl that
was released before that API element was created. You can write your module
using the latest API, and have it automatically work on old Perls, simply by
#including ppport.h in your XS code. ppport.h generally provides support for
an API element as is reasonably practicable, with many supported to 5.03007.

System Setup for Modern Perl Projects

From 2015, but it came across my screen this morning. Seems like it is still relevant.

System setup for modern perl projects

Perl Weekly Challenge 83: Words Length and Flip Array

These are some answers to the Week 83 of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Spoiler Alert: This weekly challenge deadline is due in a couple of days (October 25, 2020). This blog post offers some solutions to this challenge, please don’t read on if you intend to complete the challenge on your own.

Task 1: Words Length

You are given a string $S with 3 or more words.

Write a script to find the length of the string except the first and last words ignoring whitespace.

Example 1:

Input: $S = "The Weekly Challenge"

Output: 6

Example 2:

Input: $S = "The purpose of our lives is to be happy"

Output: 23

Words Length in Raku

A lifetime of programming books ... to give away

I am writing this blog post to hand over all my programming books, (mostly perl) to any person that would like to use them.

This includes about a dozen O'rielly perl books (including the camel book) as well as other classics like:

The C programing language by K+R
TCP/IP by Comer
Design Patterns by GHJV

all free, but must take the whole box.

Contact me at freddo411 (at) gmail.

I am located in the Seattle area.

Load a list of lines into an array (easily)

This blog post describes a common task my colleagues ask often about repeating a dynamic string in a defined token and adding some or, and, = in between, plus finishing smartly.

I like to use the Perl's __DATA__ token at the end of my scripts for this. The __DATA__ token strength is to make possible to « "embed” a file inside a Perl program then read it from the DATA filehandle ». It saves you the creation and opening of a real file and is very handy for quick prototypes and tests.

San Diego Perl Mongers Meeting, Tuesday, October 13th

This is a quick reminder that the quarterly San Diego Perl Mongers meeting will be occurring on Tuesday evening, starting at our normal time of 7 PM PDT.  As has been for the last several meetings, we’re going to meet online, as in-person meetings are discouraged, and online meetings seem to be a bit more popular.

Tau Station, The Internal Adventures: DBIx::Class::Row cache (avoid the rabbits!)

Tau Station, "the free-to-play narrative sci-fi MMORPG (TM)", has a nicely complex database. Currently, we have 190 tables with 740 relationships between those tables. DBIx::Class does an amazing job at managing that complexity, since each relationship is simply an accessor on the DBIx::Class::Row object.

However, there is a subtle issue when using those relationship accessors. Using a relationship accessor creates a new Row object and stores it in the calling object. This behavior can easily leads to duplicate DBIC Row objects for a single database row. At best, the duplicates cause wasted resources duplicating the Rows. At worst, they cause update anomalies, since updates done to one Row object are not seen by the duplicate objects.

With a highly-connected schema like we have in Tau Station, trying to handle the object duplication can pretty soon feel like we're trying to handle rabbits in Australia.

In order to avoid this Row duplication, we have developed a cache of DBIC Row objects that is shared within the application. In most cases, this allows us to ensure that we have one DBIC Row object per database row while processing an HTTP request, avoiding those subtle update anomalies.

Week #081: Common Base Strings & Frequency Sort

Please follow the blog where I discuss the "Common Base Strings" and "Frequency Sort" task of "The Weekly Challenge - 081".

MNIST Handwriting Recognition Deep Learning Written in Pure Perl

The MNIST handwriting recognition deep learning written with Pure Perl is released.

Because it is pure Perl code, it can be used by Perl users to get an overview of deep learning algorithms.

MNIST Handwriting Recognition Deep Learning Written in Pure Perl

What do I use to release a module to CPAN for the first time?

Several months ago I read a tutorial on module creation. It got me thinking about releasing some of my modules. I got to work getting my code organized. At the time I had all of my work in the directory for my site. So I moved my general purpose modules to their own directory and then started reading more about what is needed to get a module published on CPAN.

I first installed Module::Starter. It seemed like a good place to start, but then Dist::Zilla was suggested, so I installed it. Most recently Minilla suggested, and now it is installed. The problem is, I do not know which one to use. Do I use any of those at all, or is there yet another packaging module (with executable) out there?

Opt-in your CPAN repos for Hacktoberfest

If you haven't heard, Hacktoberfest has now become opt-in, to reduce the number of spammy, or pointless, pull requests that people were doing, to get the t-shirt. In this post I'll describe how to opt your repos in, how to find opted-in repos, and why your repo might not be turning up in searches.

So if you've got repos with issues that you'd be happy to receive pull requests on, add the topic hacktoberfest, and make sure that your repo turns up in searches.

Week #080: Smallest Positive Number & Count Candies

Please follow the blog where I discuss the "Smallest Positive Number" and "Count Candies" task of "The Weekly Challenge - 080".

Perl4::CoreLibs y2k20 issue

timelocal, timegm yk20 problem

The Tau Station Kickstarter has gone live! (Oops)

Not words you want to hear late at night before you're going to bed: "we accidentally launched our Kickstarter."

That's right, the Tau Station MMORPG Kickstarter is live and we didn't mean to. However, apparently Kickstarter doesn't allow you to "unlaunch" a campaign.

It may not have been our launch window, but we're owning this.

A man in a strange, orange hazmat suit stands there with a security droid floating over his right shoulder.

Share this!

Tau Station is the world's first Biblio-RPG. It's a massive, immersive, narrative sci-fi MMO. Missions in most games are things like "kill five rabid dogs and get a dagger." BORING. Our missions are rich, immersive, short stories where you control the outcome.

It's 400,000 plus lines of Perl, with a PostgreSQL backend.

Applying Operators to Coderefs

In algebra, there's this pretty funky concept:

(f+g)(x) = f(x) + g(x)

And I was thinking if $f and $g were coderefs, what could $f + $g be?

Where do you like bugs reported?

In my last post, a meta issue for modules: bug tracking, I had noticed a problem with the bug tracking link for a module and discussed that problem. In the comments, one person said he preferred I began thinking about where to have bugs tracked for my modules. Since I have not published one yet, this is something I would like to know. I would like to know the good and bad and ugly of the various systems to make a more educated choice on issue tracking before my first release.

Are there specific issues with GitHub's, GitLab's, or other issue tracking systems making the more attractive choice?

On a side note, I prefer reporting issues on sites like GitHub and GitLab since my reply email is hidden and does not get spammed, or at least not yet. However, my email address gets a lot of spam, so much spam I had to make a rule to send all email I receive through that address to junk mail. So, should I receive a reply to an issue I opened on rt.cpan, I may miss it since it ends up in my junk mail, which I do not check that often.

Where do you like bugs reported and why?

A private not official branch for Perl 7 by several members of perl porters

I found A private not official branch for Perl 7 by several members of perl porters.

atoomic perl

It was mentioned on the mailing list, but I wrote it here to let more people know.

About is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.