<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zak B. Elep</title>
    <description>The latest articles on DEV Community by Zak B. Elep (@zakame).</description>
    <link>https://dev.to/zakame</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F509328%2F1a2382d6-118b-45a4-928f-eeaf2d18289f.jpeg</url>
      <title>DEV Community: Zak B. Elep</title>
      <link>https://dev.to/zakame</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zakame"/>
    <language>en</language>
    <item>
      <title>A few tips for Perl on Docker and Kubernetes</title>
      <dc:creator>Zak B. Elep</dc:creator>
      <pubDate>Sun, 29 Nov 2020 11:49:11 +0000</pubDate>
      <link>https://dev.to/zakame/a-few-tips-for-perl-on-docker-and-kubernetes-29bg</link>
      <guid>https://dev.to/zakame/a-few-tips-for-perl-on-docker-and-kubernetes-29bg</guid>
      <description>&lt;p&gt;&lt;a class="comment-mentioned-user" href="https://dev.to/davorg"&gt;@davorg&lt;/a&gt;
 started a thread on the FB &lt;a href="https://web.facebook.com/groups/perlcommunity/permalink/877301896410771/"&gt;Perl Community&lt;/a&gt; and &lt;a href="https://web.facebook.com/groups/perlprogrammers/permalink/3786053688094058/"&gt;Perl Programmers&lt;/a&gt; about &lt;a href="https://hub.docker.com/_/perl"&gt;docker-perl&lt;/a&gt;, and as its maintainer, I'm overdue sharing some tips about it so might as well write them here now:&lt;/p&gt;

&lt;h3&gt;
  
  
  Use a custom name/tag for Perl images you use
&lt;/h3&gt;

&lt;p&gt;As documented in the Docker Hub, one can use the &lt;code&gt;perl&lt;/code&gt; image with something like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull perl
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; perl perl &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'say "hi there from Docker!"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While doing this is enough for simple or exploratory cases, it is inadequate for development or deployment scenarios, as &lt;code&gt;perl&lt;/code&gt; alone will pull the latest Perl image &lt;em&gt;build&lt;/em&gt; of the latest supported Perl version (which is &lt;code&gt;5.32.0&lt;/code&gt; &lt;em&gt;now&lt;/em&gt; but could be different later on.)  Fortunately, docker-perl provides &lt;em&gt;tags&lt;/em&gt; to indicate specific versions (as well as options like &lt;code&gt;:threaded&lt;/code&gt;) or size variants (like &lt;code&gt;:slim&lt;/code&gt;) so one can also do&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull perl:5.32-buster
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; perl:5.32-buster perl &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'say qq{hi again!}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is another concern though: while Docker images have tags, these tags are &lt;em&gt;floating&lt;/em&gt; in the sense that they don't always point to the same underlying image layer at creation time, as tags can be updated to point to another layer.  This is best seen in the &lt;code&gt;:latest&lt;/code&gt; tag which Docker uses by default when calling images with their bare names, but this behavior is also present in any other tags like &lt;code&gt;:5&lt;/code&gt; which is pointing currently to &lt;code&gt;:5.32.0&lt;/code&gt;, but might later be updated to point to &lt;code&gt;:5.32.1&lt;/code&gt; or even &lt;code&gt;:5.34.0&lt;/code&gt;, when the &lt;a href="https://github.com/docker-library/official-images/blob/master/library/perl"&gt;perl manifest on docker-library/official-images&lt;/a&gt; is updated.&lt;/p&gt;

&lt;p&gt;These tags also get updated indirectly by way of updates on their &lt;em&gt;base&lt;/em&gt; images; as docker-perl uses the &lt;a href="https://hub.docker.com/_/buildpack-deps"&gt;&lt;code&gt;buildpack-deps&lt;/code&gt;&lt;/a&gt; or &lt;a href="https://hub.docker.com/_/debian/"&gt;&lt;code&gt;debian:slim&lt;/code&gt;&lt;/a&gt; base images, when these get updated for security patches, these patches will eventually make their way into the &lt;code&gt;perl&lt;/code&gt; images as well through the &lt;a href="https://doi-janky.infosiftr.net/job/multiarch/"&gt;official-images build tooling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For cases that require finer control of images, it might be helpful then to use a custom image name, tag, or both, when using docker-perl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull perl:5.32-slim-threaded-buster
docker tag perl:5.32-slim-threaded-buster myorg/perl:5.32
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; myorg/perl:5.32 perl &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'printf "hello from myorg/perl v%vd!\n", $^V'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows for some independence for updates and development between the &lt;code&gt;perl&lt;/code&gt; published on Docker Hub and &lt;code&gt;myorg&lt;/code&gt;'s custom &lt;code&gt;perl&lt;/code&gt; image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# docker build -t myorg/myapp:dev .&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; myorg/perl:5.32&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="s"&gt; . /app&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;cpanm &lt;span class="nt"&gt;--installdeps&lt;/span&gt; .
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["perl", "myapp.pl"]&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Consider keeping a local/private registry to host Perl images
&lt;/h3&gt;

&lt;p&gt;Using the perl images (especially like in the previous section) means that these will be copied into the local Docker host image storage, usually in &lt;code&gt;/var/lib/docker/images&lt;/code&gt; but could vary depending on what &lt;a href="https://docs.docker.com/storage/storagedriver/select-storage-driver/"&gt;storage driver&lt;/a&gt; your host is using.  While this is usually enough in simple cases, consider that the base &lt;code&gt;perl&lt;/code&gt; image is usually big (around 700-800MB unpacked,) so pulling this image afresh over multiple container hosts on a network will probably be wasteful.&lt;/p&gt;

&lt;p&gt;Hence it is usually recommended to have some kind of local or private &lt;em&gt;registry&lt;/em&gt; in the host or on a network if frequently working with containers (and more so if internet connectivity is slower/expensive.)  There are several approaches to do this, and I've written about these before in my old blog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zakame.net/blog/2017/12/composing-a-docker-hub-mirror-and-private-registry.html"&gt;Composing a Docker Hub mirror and private registry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zakame.net/blog/2017/07/mirroring-the-docker-hub.html"&gt;Mirroring the Docker Hub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nowadays though, there are more options for using local/private registries: for example, if you have a Kubernetes cluster running in your network (or even as a small setup like &lt;a href="https://microk8s.io"&gt;microk8s&lt;/a&gt;, or an internal Docker container cluster using &lt;a href="https://kind.sigs.k8s.io"&gt;KinD&lt;/a&gt; or &lt;a href="https://k3d.io"&gt;k3d&lt;/a&gt;,) there's usually an addon &lt;br&gt;
that enables a local registry on the cluster.  Here's &lt;a href="https://microk8s.io/docs/registry-built-in"&gt;an example&lt;/a&gt; for microk8s, which I extended for my own local network to be served under a &lt;a href="https://kubernetes.github.io/ingress-nginx/examples/tls-termination/"&gt;TLS ingress&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;microk8s &lt;span class="nb"&gt;enable &lt;/span&gt;registry
microk8s kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; - &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;REGISTRY_SVC&lt;/span&gt;&lt;span class="sh"&gt;
apiVersion: v1
kind: Service
metadata:
  name: registry
  namespace: default
spec:
  # microk8s deploys registry in its own namespace, so reach out
  externalName: registry.container-registry.svc.cluster.local
  ports:
  - name: registry
    port: 5000
    protocol: TCP
    targetPort: 5000
  type: ExternalName
&lt;/span&gt;&lt;span class="no"&gt;REGISTRY_SVC
&lt;/span&gt;microk8s kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; - &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;REGISTRY_INGRESS&lt;/span&gt;&lt;span class="sh"&gt;
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: registry
  namespace: default
spec:
  rules:
  # I don't own home.example btw, just for illustration;
  # I use globally-accessible subdomains pointing to private IP
  - host: registry.home.example
    http:
      paths:
      - backend:
          serviceName: registry
          servicePort: 5000
  tls:
  - hosts:
    - registry.home.example
    secretName: wildcard-home-example
&lt;/span&gt;&lt;span class="no"&gt;REGISTRY_INGRESS
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I have a &lt;a href="https://letsencrypt.org"&gt;LetsEncrypt&lt;/a&gt; wildcard SSL cert installed and maintained on my microk8s via &lt;a href="https://cert-manager.io"&gt;cert-manager&lt;/a&gt;, so this lets me push to this registry anywhere on my local network as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push myorg/perl:5.32 registry.home.example/myorg/perl:5.32
docker push myorg/myapp:dev registry.home.example/myorg/myapp:dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and on somewhere else which might be running &lt;a href="https://podman.io"&gt;Podman&lt;/a&gt; instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;podman run &lt;span class="nt"&gt;-it&lt;/span&gt; registry.home.example/myorg/perl:5.32 perl &lt;span class="nt"&gt;-V&lt;/span&gt;
podman run &lt;span class="nt"&gt;-d&lt;/span&gt; registry.home.example/myorg/myapp:dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also works on authoring &lt;code&gt;Dockerfile&lt;/code&gt;s, especially useful when implementing GitOps workflows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# docker build -t myorg/mojo:8.65&lt;/span&gt;
&lt;span class="c"&gt;# docker push myorg/mojo:8.65 registry.home.example/myorg/mojo:8.65&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; registry.home.example/myorg/perl:5.32&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;cpanm Mojolicious@8.65
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["/usr/local/bin/mojo", "daemon"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more sophisticated/production deployments, consider using &lt;a href="https://goharbor.io/"&gt;Harbor&lt;/a&gt; or vendors such as &lt;a href="https://aws.amazon.com/ecr/"&gt;Amazon ECR&lt;/a&gt;, &lt;a href="https://cloud.google.com/container-registry/"&gt;Google Container Registry&lt;/a&gt; or &lt;a href="https://quay.io/"&gt;Red Hat Quay&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use container entrypoint for proper signals handling in Perl
&lt;/h3&gt;

&lt;p&gt;This is already documented in the &lt;a href="https://github.com/docker-library/docs/tree/master/perl#signal-handling-behavior-notice"&gt;official-images docs&lt;/a&gt; for perl, but bears repeating here: containers don't provide a &lt;em&gt;parent init process&lt;/em&gt; by default, which means that when starting a new container, any &lt;a href="https://docs.docker.com/engine/reference/builder/#entrypoint"&gt;ENTRYPOINT&lt;/a&gt; or &lt;a href="https://docs.docker.com/engine/reference/builder/#cmd"&gt;CMD&lt;/a&gt; set in the image the container will boot from will usually become the parent process within this container.  This is important to note here for Perl (and also for other languages) as these tend to fall back to their parent init process for handling signals, so without this, it can appear to become unresponsive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run perl:5.32 perl -E 'sleep 300'
^C
[refuses to die, even if sent SIGINT like above]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is particularly important for Kubernetes, as its &lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/"&gt;container pod lifecycle&lt;/a&gt; can use signals to probe for liveness or readiness of containers, and a running pod/container can seem to "hang" around indefinitely if these signals aren't handled correctly.&lt;/p&gt;

&lt;p&gt;For perl, one needs to install a &lt;a href="https://perldoc.pl/perlipc#Signals"&gt;&lt;code&gt;%SIG&lt;/code&gt; handler&lt;/a&gt; if they want/need to run perl directly as PID 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run perl:5.32 perl -E '$SIG{TERM} = sub { $sig++; say "recv TERM" }; sleep 300; say "waking up" if $sig'
^C
waking up
recv TERM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For most normal deployments however, it is easier to use a tool like &lt;a href="https://github.com/krallin/tini"&gt;tini&lt;/a&gt;, &lt;a href="https://github.com/openSUSE/catatonit"&gt;catatonit&lt;/a&gt;, or &lt;a href="https://github.com/Yelp/dumb-init"&gt;dumb-init&lt;/a&gt; for the container's &lt;code&gt;ENTRYPOINT&lt;/code&gt;, alongside your perl script/executable in &lt;code&gt;CMD&lt;/code&gt;, for example this small &lt;a href="https://mojolicious.org"&gt;Mojolicious&lt;/a&gt; demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# docker build -t mojo-with-tini:dev .&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; perl:5.32-buster&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; tini &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    cpanm Mojolicious
&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["/usr/bin/tini", "--"]&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["/usr/local/bin/mojo", "daemon"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Kubernetes, one can also set the &lt;a href="https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes"&gt;&lt;code&gt;command&lt;/code&gt; and &lt;code&gt;args&lt;/code&gt;&lt;/a&gt; for a pod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; - &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;MOJO_POD&lt;/span&gt;&lt;span class="sh"&gt;
apiVersion: v1
kind: Pod
metadata:
  name: mojo-with-tini-demo
  labels:
    purpose: demonstrate-perl-signal-handling
spec:
  containers:
  - name: mojo-with-tini-demo-container
    image: mojo-with-tini:dev
    # redundant as we already set these in the Dockerfile above,
    # but showing here for illustration
    command: ["/usr/bin/tini", "--"]
    args: ["/usr/local/bin/mojo", "daemon"]
&lt;/span&gt;&lt;span class="no"&gt;MOJO_POD
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Outro
&lt;/h3&gt;

&lt;p&gt;There's a few more tips on the queue that I'd write more here but this post is getting rather long now, so maybe later.&lt;/p&gt;

&lt;p&gt;I'd love to hear more about how people use docker-perl, and especially more about how make developing Perl projects on container environments easier!&lt;/p&gt;

</description>
      <category>perl</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Scheduling cron tasks for Slackware Linux laptops</title>
      <dc:creator>Zak B. Elep</dc:creator>
      <pubDate>Tue, 24 Nov 2020 05:39:28 +0000</pubDate>
      <link>https://dev.to/zakame/scheduling-cron-tasks-for-slackware-linux-laptops-k3i</link>
      <guid>https://dev.to/zakame/scheduling-cron-tasks-for-slackware-linux-laptops-k3i</guid>
      <description>&lt;p&gt;Here's a small tip for Slackware Linux users on laptops, especially those that have periodic tasks run via the standard &lt;code&gt;cron&lt;/code&gt; tool.&lt;/p&gt;

&lt;p&gt;A default full install of Slackware will include the &lt;a href="http://www.jimpryor.net/linux/dcron.html"&gt;dcron&lt;/a&gt; implementation of cron that runs some scheduled system maintenance tasks (like log rotation or building &lt;code&gt;locate&lt;/code&gt; databases) for &lt;code&gt;root&lt;/code&gt; with a config suitable for a 24/7 machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@darkstar:~# crontab &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;span class="c"&gt;# If you don't want the output of a cron job mailed to you, you have to direct&lt;/span&gt;
&lt;span class="c"&gt;# any output to /dev/null.  We'll do this here since these jobs should run&lt;/span&gt;
&lt;span class="c"&gt;# properly on a newly installed system.  If a script fails, run-parts will&lt;/span&gt;
&lt;span class="c"&gt;# mail a notice to root.&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Run the hourly, daily, weekly, and monthly cron jobs.&lt;/span&gt;
&lt;span class="c"&gt;# Jobs that need different timing may be entered into the crontab as before,&lt;/span&gt;
&lt;span class="c"&gt;# but most really don't need greater granularity than this.  If the exact&lt;/span&gt;
&lt;span class="c"&gt;# times of the hourly, daily, weekly, and monthly cron jobs do not suit your&lt;/span&gt;
&lt;span class="c"&gt;# needs, feel free to adjust them.&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Run hourly cron jobs at 47 minutes after the hour:&lt;/span&gt;
47 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /usr/bin/run-parts /etc/cron.hourly 1&amp;gt; /dev/null
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Run daily cron jobs at 4:40 every day:&lt;/span&gt;
40 4 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /usr/bin/run-parts /etc/cron.daily 1&amp;gt; /dev/null
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Run weekly cron jobs at 4:30 on the first day of the week:&lt;/span&gt;
30 4 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; 0 /usr/bin/run-parts /etc/cron.weekly 1&amp;gt; /dev/null
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Run monthly cron jobs at 4:20 on the first day of the month:&lt;/span&gt;
20 4 1 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /usr/bin/run-parts /etc/cron.monthly 1&amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On something like a laptop, this config will almost certainly not run adequately, especially if that laptop will be in sleep mode for the above scheduled times.  Fortunately though, the dcron that ships with Slackware (as of 14.2 and -current/15.0) has some &lt;a href="https://sourceforge.net/projects/anacron/"&gt;anacron&lt;/a&gt;-like features, so one can now replace this crontab with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@hourly ID=hourly /usr/bin/run-parts /etc/cron.hourly 1&amp;gt; /dev/null

@daily ID=daily /usr/bin/run-parts /etc/cron.daily 1&amp;gt; /dev/null

@weekly ID=weekly /usr/bin/run-parts /etc/cron.weekly 1&amp;gt; /dev/null

@monthly ID=monthly /usr/bin/run-parts /etc/cron.monthly 1&amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;@hourly ID=hourly&lt;/code&gt; syntax looks strange, but that's more a consequence of dcron's implementation of these features (see &lt;a href="https://github.com/dubiousjim/dcron/blob/master/crontab.markdown"&gt;crontab&lt;/a&gt;:)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The formats @hourly, @daily, @weekly, @monthly,  and  @yearly  need  to
update  timestamp  files  when their jobs have been run.  The timestamp
files are saved as /var/spool/cron/cronstamps/user.jobname.  So for all
of  these formats, the cron command needs a jobname, given by prefixing
the command with ID=jobname.  (This syntax was chosen to  maximize  the
chance that our crontab files will be readable by other cron daemons as
well.  They might just interpret the ID=jobname as a command-line envi‐
ronment variable assignment.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, as indicated above, just check &lt;code&gt;/var/spool/cron/cronstamps/root.{hourly,daily,weekly,monthly}&lt;/code&gt; to see the last periodic run for a given root cron job.  Of course, this tip isn't limited to just root/system tasks; normal users can also use these anacron-like features for their own crontabs as well.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>slackware</category>
      <category>linux</category>
      <category>cron</category>
      <category>crontab</category>
    </item>
    <item>
      <title>Hacktoberfest 2020 report</title>
      <dc:creator>Zak B. Elep</dc:creator>
      <pubDate>Fri, 13 Nov 2020 09:41:19 +0000</pubDate>
      <link>https://dev.to/zakame/hacktoberfest-2020-report-1p6i</link>
      <guid>https://dev.to/zakame/hacktoberfest-2020-report-1p6i</guid>
      <description>&lt;p&gt;FPBP!&lt;/p&gt;

&lt;p&gt;So, I'm rather new here at dev.to and since Hacktoberfest 2020 has come and gone, I might as well get started doing a new blog here.  I've been doing Hacktoberfests for maybe a couple of years now, and while this year has seen &lt;a href="https://joel.net/how-one-guy-ruined-hacktoberfest2020-drama"&gt;quite the kerfuffle&lt;/a&gt;, that alone should not be enough reason to stop doing it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Background
&lt;/h3&gt;

&lt;p&gt;I work primarily with #perl stuff with bits of #docker and other tools in between, so most of my previous Hacktoberfests have focused on contributing to these.  For this year though, I wanted to learn and use #nix some more, especially as I found the idea of &lt;a href="https://nixos.org/guides/declarative-and-reproducible-developer-environments.html"&gt;reproducible developer environments&lt;/a&gt; across different machines to be interesting, and I've tried doing similar things (to mixed results) with Docker.&lt;/p&gt;

&lt;p&gt;To help both Nix and Perl efforts, I thought learning enough of Nixpkgs to port missing CPAN modules I want or need would be a good idea to start...&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributions
&lt;/h3&gt;

&lt;p&gt;The Hacktoberfest game approved these PRs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/spwhitt/nix-zsh-completions/pull/37"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        Add --dry-run completion to nix-build and nix-shell
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#37&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/spwhitt/nix-zsh-completions/pull/37"&gt;&lt;time&gt;Oct 02, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;nix-build explicitly documents --dry-run in its --help, while nix-shell
passes it onto nix-store --realise.&lt;/p&gt;

&lt;h1&gt;&lt;/h1&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/spwhitt/nix-zsh-completions/pull/37"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This got me started as I'm using zsh as my default shell, but the Nix tooling uses bash.  Having become an avid user of &lt;code&gt;nix-shell&lt;/code&gt;, I used the &lt;code&gt;--dry-run&lt;/code&gt; flag (which it passes down to &lt;code&gt;nix-store --realise&lt;/code&gt;) for estimating download sizes of stuff I want in the shell.  Since this particular flag was missing in the completion, it seemed easy enough to add it in with this PR, despite some other note about changing the implementation entirely for the new &lt;code&gt;nix&lt;/code&gt; command interface.&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/NixOS/nixpkgs/pull/100652"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        perlPackages.FutureAsyncAwait: init at 0.44
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#100652&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/NixOS/nixpkgs/pull/100652"&gt;&lt;time&gt;Oct 15, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation for this change&lt;/h6&gt;
&lt;p&gt;This adds &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt; keywords to Perl to enhance the use of &lt;a href="https://search.nixos.org/packages?show=perl532Packages.Future&amp;amp;query=Future&amp;amp;from=0&amp;amp;size=30&amp;amp;sort=relevance&amp;amp;channel=unstable#disabled" rel="nofollow"&gt;Future&lt;/a&gt;-using code.&lt;/p&gt;
&lt;p&gt;This also adds &lt;a href="https://metacpan.org/release/XS-Parse-Sublike" rel="nofollow"&gt;XS::Parse::Sublike&lt;/a&gt; as a dependency of this package.&lt;/p&gt;
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Things done&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;[x] Tested using sandboxing (&lt;a href="https://nixos.org/nixos/manual/options.html#opt-nix.useSandbox" rel="nofollow"&gt;nix.useSandbox&lt;/a&gt; on NixOS, or option &lt;code&gt;sandbox&lt;/code&gt; in &lt;a href="https://nixos.org/nix/manual/#sec-conf-file" rel="nofollow"&gt;&lt;code&gt;nix.conf&lt;/code&gt;&lt;/a&gt; on non-NixOS linux)&lt;/li&gt;
&lt;li&gt;Built on platform(s)
&lt;ul&gt;
&lt;li&gt;[x] NixOS&lt;/li&gt;
&lt;li&gt;[ ] macOS&lt;/li&gt;
&lt;li&gt;[x] other Linux distributions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests"&gt;nixos/tests&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Tested compilation of all pkgs that depend on this change using &lt;code&gt;nix-shell -p nixpkgs-review --run "nixpkgs-review wip"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested execution of all binary files (usually in &lt;code&gt;./result/bin/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Determined the impact on package closure size (by running &lt;code&gt;nix path-info -S&lt;/code&gt; before and after)&lt;/li&gt;
&lt;li&gt;[ ] Ensured that relevant documentation is up to date&lt;/li&gt;
&lt;li&gt;[x] Fits &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/NixOS/nixpkgs/pull/100652"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;At my work, we're using &lt;a href="https://metacpan.org/pod/Future::AsyncAwait"&gt;Future::AsyncAwait&lt;/a&gt; heavily, so I missed this somewhat in Nixpkgs enough to get me started learning how to port it from CPAN to Nixpkgs.  Porting is somewhat easy to do using &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/maintainers/scripts/nix-generate-from-cpan.pl"&gt;nix-generate-from-cpan&lt;/a&gt;, but the other half of work is testing if it actually builds using &lt;code&gt;nix-build&lt;/code&gt; to make additional changes if needed, and testing builds of other packages depending on it with &lt;a href="https://github.com/Mic92/nixpkgs-review"&gt;nixpkgs-review&lt;/a&gt; preferably on both Nix-enhanced Linux installs as well as on native NixOS and macOS.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href="https://github.com/stigtsp"&gt;stigtsp&lt;/a&gt; for showing me the ropes!&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/NixOS/nixpkgs/pull/100820"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        perlPackages.IOAsyncSSL: init at 0.22
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#100820&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/NixOS/nixpkgs/pull/100820"&gt;&lt;time&gt;Oct 17, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation for this change&lt;/h6&gt;
&lt;p&gt;This pure-Perl addon for &lt;a href="https://search.nixos.org/packages?show=perl532Packages.IOAsync&amp;amp;query=IOAsync&amp;amp;from=0&amp;amp;size=30&amp;amp;sort=relevance&amp;amp;channel=unstable#disabled" rel="nofollow"&gt;IO::Async&lt;/a&gt; extends it to allow creating TLS/SSL servers or clients via &lt;a href="https://search.nixos.org/packages?show=perl532Packages.IOSocketSSL&amp;amp;query=IOSocketSSL&amp;amp;from=0&amp;amp;size=30&amp;amp;sort=relevance&amp;amp;channel=unstable#disabled" rel="nofollow"&gt;IO::Socket::SSL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a somewhat required module for other IO::Async-based code that connect/serve TLS/SSL resources, such as those in the &lt;a href="https://metacpan.org/search?size=20&amp;amp;q=Net%3A%3AAsync" rel="nofollow"&gt;Net::Async namespace&lt;/a&gt;.&lt;/p&gt;
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Things done&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;[x] Tested using sandboxing (&lt;a href="https://nixos.org/nixos/manual/options.html#opt-nix.useSandbox" rel="nofollow"&gt;nix.useSandbox&lt;/a&gt; on NixOS, or option &lt;code&gt;sandbox&lt;/code&gt; in &lt;a href="https://nixos.org/nix/manual/#sec-conf-file" rel="nofollow"&gt;&lt;code&gt;nix.conf&lt;/code&gt;&lt;/a&gt; on non-NixOS linux)&lt;/li&gt;
&lt;li&gt;Built on platform(s)
&lt;ul&gt;
&lt;li&gt;[x] NixOS&lt;/li&gt;
&lt;li&gt;[ ] macOS&lt;/li&gt;
&lt;li&gt;[X] other Linux distributions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests"&gt;nixos/tests&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Tested compilation of all pkgs that depend on this change using &lt;code&gt;nix-shell -p nixpkgs-review --run "nixpkgs-review wip"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested execution of all binary files (usually in &lt;code&gt;./result/bin/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Determined the impact on package closure size (by running &lt;code&gt;nix path-info -S&lt;/code&gt; before and after)&lt;/li&gt;
&lt;li&gt;[ ] Ensured that relevant documentation is up to date&lt;/li&gt;
&lt;li&gt;[X] Fits &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/NixOS/nixpkgs/pull/100820"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Pretty much anything external that one can substantially reach with &lt;a href="https://metacpan.org/pod/IO::Async"&gt;IO::Async&lt;/a&gt; needs TLS/SSL, so missing this in Nixpkgs seems odd.  Adding it here seems a no-brainer, and would help in upcoming packages like &lt;code&gt;Net::Async::HTTP&lt;/code&gt; and &lt;code&gt;Net::Async::WebSocket&lt;/code&gt; (with the latter having pretty much a hard dependency for IO::Async::SSL anyway for working on anything non-trivial.)&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/mojolicious/mojo/pull/1579"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        Convert t/mojolicious/exception_lite_app.t to use subtests
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#1579&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/mojolicious/mojo/pull/1579"&gt;&lt;time&gt;Oct 18, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Summary&lt;/h3&gt;
&lt;p&gt;As the title says.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation&lt;/h3&gt;
&lt;p&gt;I was already in the area for #1578 so might as well convert the test!&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;References&lt;/h3&gt;
&lt;p&gt;For #1520.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mojolicious/mojo/pull/1579"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This was a PR derived from an earlier more substantial work which was merged later, beyond the Hacktoberfest cutoff:&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/mojolicious/mojo/pull/1578"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        Replace prettify.js with highlight.js
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#1578&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/mojolicious/mojo/pull/1578"&gt;&lt;time&gt;Oct 17, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Summary&lt;/h3&gt;
&lt;p&gt;This replaces the old prettify.js highlighter with highlight.js.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation&lt;/h3&gt;
&lt;p&gt;prettify.js has long been abandoned by Google so we need to replace it.&lt;/p&gt;
&lt;p&gt;That said, highlight.js is also somewhat dormant (&lt;a href="https://github.com/highlightjs/highlight.js/issues/1678"&gt;https://github.com/highlightjs/highlight.js/issues/1678&lt;/a&gt;) but still sees enough activity to get around.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;References&lt;/h3&gt;
&lt;p&gt;This is an update of #737, fixes #1544.&lt;/p&gt;
&lt;p&gt;Most of the work was already done by @dotandimet, please give credit where due. I just updated it for latest Mojo and highlight.js 💪&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mojolicious/mojo/pull/1578"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I also made a few followup PRs to Nixpkgs that Hacktoberfest counted as bonus:&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/NixOS/nixpkgs/pull/101118"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        perlPackages.Future: 0.45 -&amp;gt; 0.46
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#101118&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/NixOS/nixpkgs/pull/101118"&gt;&lt;time&gt;Oct 20, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation for this change&lt;/h6&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/release/PEVANS/Future-0.46" rel="nofollow"&gt;https://metacpan.org/release/PEVANS/Future-0.46&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Things done&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;[x] Tested using sandboxing (&lt;a href="https://nixos.org/nixos/manual/options.html#opt-nix.useSandbox" rel="nofollow"&gt;nix.useSandbox&lt;/a&gt; on NixOS, or option &lt;code&gt;sandbox&lt;/code&gt; in &lt;a href="https://nixos.org/nix/manual/#sec-conf-file" rel="nofollow"&gt;&lt;code&gt;nix.conf&lt;/code&gt;&lt;/a&gt; on non-NixOS linux)&lt;/li&gt;
&lt;li&gt;Built on platform(s)
&lt;ul&gt;
&lt;li&gt;[x] NixOS&lt;/li&gt;
&lt;li&gt;[ ] macOS&lt;/li&gt;
&lt;li&gt;[X] other Linux distributions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests"&gt;nixos/tests&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Tested compilation of all pkgs that depend on this change using &lt;code&gt;nix-shell -p nixpkgs-review --run "nixpkgs-review wip"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested execution of all binary files (usually in &lt;code&gt;./result/bin/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Determined the impact on package closure size (by running &lt;code&gt;nix path-info -S&lt;/code&gt; before and after)&lt;/li&gt;
&lt;li&gt;[ ] Ensured that relevant documentation is up to date&lt;/li&gt;
&lt;li&gt;[X] Fits &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/NixOS/nixpkgs/pull/101118"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/NixOS/nixpkgs/pull/101182"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        perlPackages.LinuxInotify2: add description/license to meta
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#101182&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/NixOS/nixpkgs/pull/101182"&gt;&lt;time&gt;Oct 20, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation for this change&lt;/h6&gt;
&lt;p&gt;Applying my suggestion from &lt;a href="https://github.com/NixOS/nixpkgs/pull/101122#discussion_r508457565"&gt;https://github.com/NixOS/nixpkgs/pull/101122#discussion_r508457565&lt;/a&gt; to update package meta/documentation.  No functional changes.&lt;/p&gt;
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Things done&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;[X] Tested using sandboxing (&lt;a href="https://nixos.org/nixos/manual/options.html#opt-nix.useSandbox" rel="nofollow"&gt;nix.useSandbox&lt;/a&gt; on NixOS, or option &lt;code&gt;sandbox&lt;/code&gt; in &lt;a href="https://nixos.org/nix/manual/#sec-conf-file" rel="nofollow"&gt;&lt;code&gt;nix.conf&lt;/code&gt;&lt;/a&gt; on non-NixOS linux)&lt;/li&gt;
&lt;li&gt;Built on platform(s)
&lt;ul&gt;
&lt;li&gt;[X] NixOS&lt;/li&gt;
&lt;li&gt;[ ] macOS&lt;/li&gt;
&lt;li&gt;[ ] other Linux distributions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests"&gt;nixos/tests&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Tested compilation of all pkgs that depend on this change using &lt;code&gt;nix-shell -p nixpkgs-review --run "nixpkgs-review wip"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested execution of all binary files (usually in &lt;code&gt;./result/bin/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Determined the impact on package closure size (by running &lt;code&gt;nix path-info -S&lt;/code&gt; before and after)&lt;/li&gt;
&lt;li&gt;[ ] Ensured that relevant documentation is up to date&lt;/li&gt;
&lt;li&gt;[X] Fits &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/NixOS/nixpkgs/pull/101182"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/NixOS/nixpkgs/pull/101402"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        perlPackages.FutureAsyncAwait: 0.44 -&amp;gt; 0.45
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#101402&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/NixOS/nixpkgs/pull/101402"&gt;&lt;time&gt;Oct 22, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation for this change&lt;/h6&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/release/PEVANS/Future-AsyncAwait-0.45" rel="nofollow"&gt;https://metacpan.org/release/PEVANS/Future-AsyncAwait-0.45&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Things done&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Tested using sandboxing (&lt;a href="https://nixos.org/nixos/manual/options.html#opt-nix.useSandbox" rel="nofollow"&gt;nix.useSandbox&lt;/a&gt; on NixOS, or option &lt;code&gt;sandbox&lt;/code&gt; in &lt;a href="https://nixos.org/nix/manual/#sec-conf-file" rel="nofollow"&gt;&lt;code&gt;nix.conf&lt;/code&gt;&lt;/a&gt; on non-NixOS linux)&lt;/li&gt;
&lt;li&gt;Built on platform(s)
&lt;ul&gt;
&lt;li&gt;[ ] NixOS&lt;/li&gt;
&lt;li&gt;[ ] macOS&lt;/li&gt;
&lt;li&gt;[X] other Linux distributions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests"&gt;nixos/tests&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Tested compilation of all pkgs that depend on this change using &lt;code&gt;nix-shell -p nixpkgs-review --run "nixpkgs-review wip"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Tested execution of all binary files (usually in &lt;code&gt;./result/bin/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Determined the impact on package closure size (by running &lt;code&gt;nix path-info -S&lt;/code&gt; before and after)&lt;/li&gt;
&lt;li&gt;[ ] Ensured that relevant documentation is up to date&lt;/li&gt;
&lt;li&gt;[X] Fits &lt;a href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/NixOS/nixpkgs/pull/101402"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;There's also a few other PRs that didn't make the count, like the one for Mojo above, and these:&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/mojolicious/mojolicious.org/pull/22"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        Replace prettify.js with highlight.js
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#22&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/mojolicious/mojolicious.org/pull/22"&gt;&lt;time&gt;Oct 24, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Summary&lt;/h3&gt;
&lt;p&gt;This replaces the old prettify.js highlighter with highlight.js.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Motivation&lt;/h3&gt;
&lt;p&gt;prettify.js has long been abandoned by Google so we need to replace it.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;References&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/mojolicious/mojo/issues/1544"&gt;https://github.com/mojolicious/mojo/issues/1544&lt;/a&gt;
&lt;a href="https://github.com/mojolicious/mojo/pull/1578"&gt;https://github.com/mojolicious/mojo/pull/1578&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mojolicious/mojolicious.org/pull/22"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This change is now live at both &lt;a href="https://mojolicious.org"&gt;https://mojolicious.org&lt;/a&gt; and &lt;a href="https://docs.mojolicious.org"&gt;https://docs.mojolicious.org&lt;/a&gt; (though still keeping an eye on the highlightjs stuff, should they need more updating.)&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/guibou/nixGL/pull/64"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        nixGL.nix: Add libGLX_indirect.so.0 symlink for nixGLIntel
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#64&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/guibou/nixGL/pull/64"&gt;&lt;time&gt;Oct 28, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;This aids discovery of GLX capabilities on Intel-based setups for
e.g. glxinfo, alacritty, kitty.&lt;/p&gt;
&lt;p&gt;Not sure if using &lt;code&gt;runCommand&lt;/code&gt; here is the right way, let me know if this needs revising, but it seems to work well enough for me...&lt;/p&gt;
&lt;p&gt;Ref #24&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/guibou/nixGL/pull/64"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This one came about as I was looking to replace KDE4 Konsole on my Slackware 14.2 with a more modern terminal, and tried both &lt;a href="https://github.com/alacritty/alacritty"&gt;Alacritty&lt;/a&gt; and &lt;a href="https://sw.kovidgoyal.net/kitty"&gt;Kitty&lt;/a&gt;.  I eventually went with Kitty, but since this requires GPU acceleration I needed nixGL and Nixpkgs' own mesa_drivers as well.&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/docker-library/docs/pull/1822"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        perl: Add note about coexisting with Debian's /usr/bin/perl
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#1822&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/zakame"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJfvHSHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars3.githubusercontent.com/u/110625%3Fv%3D4" alt="zakame avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/zakame"&gt;zakame&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/docker-library/docs/pull/1822"&gt;&lt;time&gt;Oct 28, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;A few users of docker-perl have stumbled upon (and getting confused
with) the default /usr/bin/perl shipped by Debian, so put a short note
here explaining why it remains and also better describe how docker-perl
and its tooling is installed/configured.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Perl/docker-perl/issues/26"&gt;https://github.com/Perl/docker-perl/issues/26&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Perl/docker-perl/issues/93"&gt;https://github.com/Perl/docker-perl/issues/93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Perl/docker-perl/issues/94"&gt;https://github.com/Perl/docker-perl/issues/94&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/docker-library/docs/pull/1822"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This was a somewhat longstanding documentation issue on docker-perl (which I maintain for sometime now,) and since it was flaring up on and off again, might as well make the time to document this issue so people using the docker-perl image know what to expect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Progress
&lt;/h3&gt;

&lt;p&gt;I was able to do a good many more PRs this year than in previous years, but at the same time many of them weren't eligible for this time due to the changes in the Hacktoberfest game that supposedly ruined it for everyone.  OTOH, I never really actively sought for the reward(s), but rather the experience of this yearly adventure to do a bit more for Free and Open Source Software than what I usually do regularly.&lt;/p&gt;

&lt;p&gt;Another thing that tempers my expectation for rewards is that I'd have to go waiting a few more months to receive it, &lt;em&gt;and&lt;/em&gt; go through post office procedures which take a good hour or two to complete, which in this pandemic clown world would be a risk I'd rather not take...&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflections
&lt;/h3&gt;

&lt;p&gt;Learning Nix and Nixpkgs through porting Perl modules to it was a great experience, and I hope to continue doing so beyond Hacktoberfest.  I'm particularly interested in making a reproducible Perl development environment more easier to do in Nix, maybe with some insight with sister languages like Ruby &lt;a href="https://github.com/nix-community/bundix"&gt;Bundix&lt;/a&gt; or Python &lt;a href="https://github.com/cript0nauta/pynixify"&gt;pynixify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'll also be continuing some &lt;a href="https://github.com/Perl/docker-perl"&gt;docker-perl&lt;/a&gt; work, especially as frameworks like Mojolicious are keen to get onto the &lt;em&gt;cloud-native&lt;/em&gt; bandwagon (if not so already) in order to do easy, reproducible app deployments to Docker or Kubernetes; Nix may help yet again with that too, as it already has the tooling for exporting to Docker or OCI image formats.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>perl</category>
      <category>nix</category>
      <category>mojolicious</category>
    </item>
  </channel>
</rss>
