CLI programs and scripts I use daily 1: net{on,off}, bt{on,off}, {,un}pause-browsers

Hey, another mini-article series! Since I use the CLI a lot and also publish a bunch of CLI scripts on CPAN, this series will serve mainly as a list of mentions for my scripts, as well as for other CLI programs and scripts I use daily.

Let's start with browsing and power-saving.

Browsing is one of everybody's main activities nowadays. Unless you browse using text-based browsers like lynx and links, you'll invariably run into the web obesity crisis (a.k.a. web bloat problem) affecting your battery life. Even if you only open a news article, your laptop may still issue thousands of requests to hundreds of domains to the various analytic tracking beacons, repeatedly every second or so for as long as the tab exists. Multiply that with 5, 10, or 50 tabs. (I seem to have a problem, er, work best, when I keep lots of tabs for various purposes open. You might also correctly guess that my desk is messy.) The result, your browser processes are eating between 20% to 50% or more CPU even when you are not focused on any of browser windows. I often find myself just typing on a terminal emulator and seeing that my system load is 0.75 or even greater thatn 1.00, only because I have Firefox open. Linux desktop often not being the most power-efficient environment, this certainly does not help.

I try to actively conserve power whenever I am not close to an available power outlet. So whenever I am coding or writing and not needing the Internet, I issue this:

% netoff; pause-browsers

netoff (and its counterpart neton) will use NetworkMonitor to turn off (or on) networking. pause-browsers will kill -STOP browser processes, which I find, though relatively blunt, is convenient to save power. There doesn't seem an addon or menu setting to let you freeze one or more tabs or globally disable and re-enable JavaScript instantly. The various ways to disable Javascript (including javascript.enabled Firefox config, or uMatrix or uBlock addon) usually require you to refresh the page, and/or only work for a single site or tab. Other ways to freeze tabs will simply clear the tab content and require you to reload, which for me defeat the purpose of having many tabs open.

When you want to browse again, you can issue:

% neton; btoff; unpause-browsers

btoff is for turning Bluetooth back off, because NetworkMonitor always wants to turn my bluetooth on when I turn my networking on, regardless of the previous bluetotoh state. Aside from {pause,unpause}-browsers, I also made scripts for specific browsers: pause-firefox, pause-chrome, pause-vivaldi, pause-opera. You can also only pause/unpause (as well as kill) processes of certain Unix users, if you happen to run several in a single system (which I often do, before using Multi-Account Containers addon).

Multi-Account Containers Firefox addon

I made a separate blog post for this. Basically I use this addon and have lots of containers created. I write scripts to sort, list, or modify/delete them from the CLI.

Suspending

As any Linux laptop user experience, automatic suspending by closing the lid is randomly screwy, some brands more so than the others. I find this invocation more reliable (oh it still randomly fails too from time to time, but much less often):

# sleep 3; pm-suspend

The sleep part is to give me time to lock the screen (e.g. press Ctrl-Alt-L), because otherwise your laptop will wake up unlocked.

Checking the battery

I find:

% acpi

often faster than moving my graphical pointer to the battery widget on the desktop tray. As a bonus, there's acpi -V which will give you lots more information.

List of new CPAN distributions – Aug 2020

dist author version abstract
Acme-AutoLoad BBB 0.04 Automatically load uninstalled CPAN modules on the fly.
Acme-CPANModules-DiffWrappers PERLANCAR 0.001 Wrappers for the diff Unix command
Acme-CPANModules-GrepVariants PERLANCAR 0.001 Grep-like CLI utilities available on CPAN
Acme-CPANModules-Roles PERLANCAR 0.001 Doing roles with Perl
Acme-CPANModules-RsyncWrappers PERLANCAR 0.001 Wrappers for the rsync command
App-ArgUtils PERLANCAR 0.001 CLI utilities related to command-line arguments
App-DiffDocText PERLANCAR 0.001 Diff the text of two Office word-processor documents (.doc, .docx, .odt, etc)
App-DumpVivaldiHistory PERLANCAR 0.001 Dump Vivaldi history
App-LibreOfficeUtils PERLANCAR 0.000 Utilities related to LibreOffice
App-MSOfficeUtils PERLANCAR 0.000 Utilities related to Microsoft Office
App-OfficeUtils PERLANCAR 0.001 Utilities related to Office suite files (.doc, .docx, .odt, .xls, .xlsx, .ods, etc)
App-SubtitleUtils PERLANCAR 0.001 Utilities related to video subtitles
App-TimeTracker-Command-GitHub DOMM 1.000 App::TimeTracker GitHub plugin
App-YoutubeDlUtils PERLANCAR 0.001 Utilities (mostly wrappers) related to youtube-dl
App-ZFSCurses MONSIEURP 1.00 curses UI to query and modify a ZFS dataset properties.
App-gqmt ZEUS 0.2 a stub module for gqmt
App-mkpkgconfig DJERIUS v2.0.0 create pkg-config metadata files
App-perlmv-scriptlet-add_prefix PERLANCAR 0.001 Add prefix to filenames
App-perlmv-scriptlet-add_suffix PERLANCAR 0.001 Add suffix to filenames
App-perlmv-scriptlet-number_tracks PERLANCAR 0.001 Add track number to filenames
App-perlmv-scriptlet-prefix_with_number PERLANCAR 0.001 Prefix filenames with number (usually to make them easily sortable)
App-size-dir-diff KASREYN v0.3.7 find differences between two directories
App-size_dir_diff KASREYN v0.3.4 find differences between two directories
Attribute-Handlers-Clean ZARABOZO 1.00 Simpler definition of attribute handlers, without messing with UNIVERSAL.
B-Hooks-OP-Check-LeaveEval SNEZ v0.0.1 call a subroutine when new code finishes compiling
Bencher-Scenario-FormattingISO8601DateTime PERLANCAR 0.001 Modules that format DateTime as ISO8601
Bencher-Scenarios-TextTableTiny PERLANCAR 0.001 Scenarios for benchmarking Text::Table::Tiny
Bosch-RCPPlus NICKCIS 1.2 Perl 5 implementation of the Bosch RCP+ remote procedure call.
CGI-Application-Plugin-OpenTracing-DataDog VANHOESEL v0.1.0 Simple CGI with DataDog tracing
CSS-Object JDEGUEST v0.1.1 CSS Object Oriented
CSS-Struct SKIM 0.01 Struct oriented CSS manipulation.
CSS-Struct-Output-Indent SKIM 0.01 Indent printing 'CSS::Struct' structure to CSS code.
Class-Measure-Scientific-FX_992vb IPENBURG v0.0.1 units of measurement like the CASIO fx-992vb
Config-INI-Tiny ARISTOTLE 0.100 Parse INI configuration in extremely little code
Die-To-Stdout JAHERO 0.01 Make die() print the error to both STDOUT and SDERR, then die.
Dist-Zilla-Plugin-Code SKIRMESS 0.001 dynamically create plugins from a bundle
Dist-Zilla-Plugin-Git-Checkout SKIRMESS 0.001 clone and checkout a Git repository
Dist-Zilla-Plugin-PERLANCAR-Authority PERLANCAR 0.001 Add the $AUTHORITY variable and metadata to your distribution
Dist-Zilla-Plugin-PERLANCAR-CheckPendingRelease PERLANCAR 0.001 Check for pending release before releasing
Dist-Zilla-Plugin-perlmv PERLANCAR 0.001 Plugin to use when building App::perlmv and App::perlmv::scriptlet::* distribution
Dist-Zilla-Role-PluginBundle-Zilla SKIRMESS 0.001 adds the zilla object and the logger to your bundles
Docker-Client MARGHI v0.1.0 Docker client
Docker-Construct CAMTAUXE 1.0 Construct the filesystem of an exported docker image.
File-Temp-Patch-NoCleanup PERLANCAR 0.001 Disable File::Temp::tempdir's automatic cleanup (CLEANUP => 1)
Filename-Ebook PERLANCAR 0.001 Check whether filename indicates being an e-book
GDB-bt DMOL 0.01 Get perl backtraces from coredump files
Geo-METAR-Deduced IPENBURG v0.0.1 deduce aviation information from parsed METAR data
Hades LNATION 0.01 The great new Hades!
Hades-Realm-Compiled-Params LNATION 0.01 The great new Hades::Realm::Compiled::Params!
Hades-Realm-Exporter LNATION 0.01 Hades realm for Exporter
Hades-Realm-Import-Export LNATION 0.01 Hades realm for Import::Export
Hades-Realm-Moo LNATION 0.01 Hades realm for Moo!
Hades-Realm-Moose LNATION 0.01 Hades realm for Moose
Hades-Realm-Mouse LNATION 0.01 Hades realm for Mouse
Hades-Realm-OO LNATION 0.01 Hades realm for object orientation
ISBN-SearchByTitle PERLANCAR 0.001 Search ISBN from book title
Jig JRHUNT v0.22.0 Tools for Crafting Code in Perl
LWP-UserAgent-Plugin-Retry PERLANCAR 0.001 Retry failed requests
List-GroupBy JLCOOPER 0.01 Group a list of hashref's to a multilevel hash of hashrefs of arrayrefs
Log-Dispatch-UnixSyslog RJBS 0.001 log events to syslog with Unix::Syslog
Log-Log4perl-OpenTracing VANHOESEL v0.1.0 inject logs with OpenTracing SpanContext
Lox DFARRELL 0.01 A Perl implementation of the Lox programming language
Math-Revhash ZHMYLOVE 0.01 Reversible hashes library
Mojo-DOM-Role-Analyzer STEVIED 0.007 miscellaneous methods for analyzing a DOM
Mojo-UserAgent-Role-Resume KARJALA v0.0.1 Role for Mojo::UserAgent that provides resuming capability during downloads
Mojolicious-Plugin-CoverDb LDIDRY 0.01 Mojolicious::Plugin::CoverDb – Mojolicious Plugin which exposes a directory (designed for a cover_db dir, created by Devel::Cover).
Mojolicious-Plugin-InlineJSON MSTROUT 0.009_001 Bootstrap your app with inline JSON
Mojolicious-Plugin-MultiLanguage MONSTAR 0.01 Find available native language in your Mojolicious app
Mojolicious-Plugin-StrictCORS MONSTAR 0.01 Strict CORS routes in your Mojolicious app
MooX-Private-Attribute LNATION 0.01 private attributes
MooX-Role-RunAlone BOFTX v0.0.0_01 prevent multiple instances of a script from running
Net-EtcDv2 GREENEG v0.0.2 A object oriented Perl module to interact with the EtcD version 2 API
Net-Kalk FACILA 2.00 Perl extension for calculate addresses and networks IP
Number-Stars SKIM 0.01 Class for conversion between percent number to star visualization
OPUS-Tools TIEDEMANN 0.2.2 a collection of tools for processing OPUS corpora
P2-Scheduler GRUBERT 0.04 This module helps organizing monthly tests at component level.
PDF-API2-XS SSIMMS 1.000 Optional PDF::API2 add-on using XS to speed up expensive operations
PINE64-MCP9808 CREDO 0.01 The great new PINE64::MCP9808!
POE-Component-TLSify BINGOS 0.02 Makes using SSL/TLS in the world of POE easy!
Plack-App-Env SKIM 0.01 Plack env dump application.
Pod-Weaver-Plugin-perlmv PERLANCAR 0.001 Plugin to use when building App::perlmv and App::perlmv::scriptlet::* distribution
Preprocess-Ops PRBRENAN 20200811 Preprocess ▷ and ▶ as method dispatch operators in ANSI-C.
Quantum-Superpositions-Lazy BRTASTIC 1.00 Weighted QM-like superpositions with lazy evaluation
Regexp-Common-Markdown JDEGUEST v0.1.1 Markdown Common Regular Expressions
RestAPI GRUBERT 0.09 a base module to interact with a REST API interface
SQL-Engine AWNCORP 0.01 SQL Generation for Perl 5
Search-Elasticsearch-Client-7_0 EZIMUEL 7.30_1 Thin client with full support for Elasticsearch 7.x APIs
Search-Elasticsearch-Client-7_0-Async EZIMUEL 7.30_1 Thin async client with full support for Elasticsearch 7.x APIs
String-Locale LNATION 0.01 display text locally.
String-Numeric-Whatever WORTHMINE 0.03 It's a test implement to ignore the difference between E<lt=gt> and cmp
Sub-Daemon ITRUNAEV 0.01 base class for a deamons
Tags-HTML-Messages SKIM 0.01 Tags helpers for HTML messages.
Tags-HTML-Page-Begin SKIM 0.01 Tags helpers for HTML page begin.
Tags-HTML-Page-End SKIM 0.01 Tags helper for HTML page end.
Tags-HTML-Stars SKIM 0.01 Tags helper for stars evaluation.
Term-Scroller CAMTAUXE 1.0 Display text in a scrolling viewport in your terminal
Text-Table-Sprintf PERLANCAR 0.001 Generate simple text tables from 2D arrays using sprintf()
WWW-Amazon-Book-Extract PERLANCAR 0.001 Extract information from an Amazon book page
WordList-EN-Common-EF-Top1000 PERLANCAR 0.001 1000 most common English words, from EF
WordList-Test-Dynamic-RandomWord-1000 PERLANCAR 0.001 1000 random words
XLog SYBER v1.0.0 Unified logging API, without performance penalties.
XLog-File SYBER v1.0.0 XLog backend for logging to file
Zodiac-Angle SKIM 0.01 Class for zodiac angle manipulation
gqmt ZEUS 0.2 Graphql Query Mutation Tool
perl-Bosch-RCPPlus NICKCIS 1.0 Perl 5 implementation of the Bosch RCP+ remote procedure call.
regather ZEUS 0.80 LDAP syncrepl consumer script to perform actions desired on syncrepl event.

Stats

Number of new CPAN distributions this period: 106

Number of authors releasing new CPAN distributions this period: 46

Authors by number of new CPAN distributions this period:

No Author Distributions
1 PERLANCAR 30
2 LNATION 10
3 SKIM 9
4 SKIRMESS 3
5 ZEUS 3
6 EZIMUEL 2
7 VANHOESEL 2
8 KASREYN 2
9 NICKCIS 2
10 SYBER 2
11 MONSTAR 2
12 IPENBURG 2
13 GRUBERT 2
14 CAMTAUXE 2
15 JDEGUEST 2
16 TIEDEMANN 1
17 ITRUNAEV 1
18 RJBS 1
19 PRBRENAN 1
20 JRHUNT 1
21 ZHMYLOVE 1
22 BOFTX 1
23 MONSIEURP 1
24 FACILA 1
25 LDIDRY 1
26 ZARABOZO 1
27 DJERIUS 1
28 KARJALA 1
29 ARISTOTLE 1
30 AWNCORP 1
31 MSTROUT 1
32 SNEZ 1
33 STEVIED 1
34 DMOL 1
35 GREENEG 1
36 DFARRELL 1
37 DOMM 1
38 BBB 1
39 JAHERO 1
40 CREDO 1
41 JLCOOPER 1
42 WORTHMINE 1
43 SSIMMS 1
44 BINGOS 1
45 BRTASTIC 1
46 MARGHI 1

List of new CPAN distributions – Jul 2020

dist author version abstract
AWS_SES_Signature PARTHA 4 Perl extension for blah blah blah
Acme-CPANModules-ConvertingRadix PERLANCAR 0.001 Convert the radix (base) of a number from one to another
Acme-CPANModules-SExpression PERLANCAR 0.001 Working with S-expression in Perl
Alien-Boost CONTRA 1.0 Find or build libboost
AntDen LIJINFENG v0.0.1 A is a general computing platform
App-UpdateCPANfile HITODE 0.01 cpanfile updater
App-turbocopy ART 0.001 CLI utility to copying files in more effective way
Catalyst-Plugin-DetachIfNotModified RRWO v0.1.0 Short-circuit requests with If-Modified-Since headers
CommonMark-Massage JV 0.01 Manipulate CommonMark AST
Complete-Vivaldi PERLANCAR 0.001 Completion routines related to Vivaldi browser
Compress-Stream-Zstd PMQS 0.201 Perl interface to the Zstd (Zstandard) (de)compressor
Config-Reader QORG 0 Very simple config reader
Const-Introspect-C PLICEASE 0.01 Find and evaluate C/C++ constants for use in Perl
Crypt-PBE GDT 0.100 Perl extension for PKCS #5 Password-Based Encryption Algorithms
DBD-SQLite-BundledExtensions SIMCOP 0.002 Provide a series of C extensions for DBD::SQLite and some helper functions to load them
DBIx-OpenTracing SNEZ v0.0.1 automatically create OpenTracing spans around DBI queries
DNS-Hetzner RENEEB 0.01 Perl library to work with the API for the Hetzner DNS
DNS-nsdiff FANF 1.82 create an 'nsupdate' script from DNS zone file differences
DTOne-Crypt ATANCASIS 0.01 Cryptographic Toolkit
Devel-TraceRun ETJ 0.001 Shows all the function calls and returns in a Perl program
ExtUtils-MakeMaker-PPPort ATOOMIC 0.01 ExtUtils::MakeMaker when using Devel-PPPort
File-FormatIdentification-Pronom ART 0.002 Perl extension for parsing PRONOM-Signatures using DROID-Signature file
File-Sticker RUBYKAT 0.9301 Read, Write file meta-data
IO-Compress-Zstd PMQS 2.095 Write zstd files/buffers
JSON-API-v1 WATERKIP 0.001 A JSON API object according to jsonapi.org v1 specification
JSON-SchemaValidator VTI 1.01 JSON Schema Validator
Linux-Realtimed ACANFORA 0.1 a drop-in daemon replacement for Incrond (see https://linux.die.net/man/8/incrond).
Linux-realtimed ACANFORA 0.9 a drop-in daemon replacement for Incrond (see https://linux.die.net/man/8/incrond).
Media-MediaInfoLib JIRO 0.01 Perl interface to the MediaInfoLib
Metrics-Any-Adapter-Routable PEVANS 0.01 configurable routing of reported metrics
Module-Format-AsHTML SHLOMIF 0.0.1 generate HTML links to metacpan module/dists pages.
Mojolicious-Plugin-Rex PINGAN 0.01 The great new Mojolicious::Plugin::Rex!
Mojolicious-Plugin-SNMP PINGAN 0.01 The great new Mojolicious::Plugin::SNMP!
Mojolicious-Plugin-ServiceWorker ETJ 0.01 plugin to aid real-time web push
Mojolicious-Plugin-Vue PINGAN 0.01 The great new Mojolicious::Plugin::Vue!
Mojolicious-Plugin-WebPush ETJ 0.01 plugin to aid real-time web push
Mom TOBYINK 0.001 Moo objects minimally
NIP-Generator STRZELEC 1.0 generator of polish fiscal identifiers.
Net-AWS-SES-Signature4 PARTHA 0.01 Perl extension that implements Amazon Simple Email Service (Amazon SES) API requests that are signed using Signature Version 4 processes
Netconf PINGAN 0.01 The great new Netconf!
OOP-Private ANONYMOUS 1.0 Private and protected methods
OpenTracing-Integration-DBI TEAM 0.001 OpenTracing APM support for DBI-based database interaction
OpenTracing-Integration-Email-Sender TEAM 0.001 OpenTracing APM support for email sent via Email::Sender
OpenTracing-Integration-RedisDB TEAM 0.001 OpenTracing APM support for RedisDB-based database interaction
Plack-Middleware-Acme-AAHTTPHeader BAYASHI 0.01 Add ASCII Art into HTTP Header
RT-Extension-AuditLog LENDL 0.02 RT-Extension-AuditLog Extension
Regexp-Pattern-Filename-Compressed PERLANCAR 0.001 Compressed data filename
Regexp-Pattern-Filename-Image PERLANCAR 0.001 Image filename
SQL-Validator AWNCORP 0.01 Validate JSON-SQL Schemas
Sah-Schemas-Vivaldi PERLANCAR 0.001 Various Sah schemas related to Vivaldi browser
SignalR JWRIGHT 0.001 Perl SignalR Implementations
Soo GEOJS 0.0.1 Simple object oriented system for Perl
Superluminal MLEHMANN 0.01 provisioning, deployment and generic task execution toolkit
Termbox SANKO 0.10 Create Text-based User Interfaces Without ncurses
Text-ANSI-Fold-Util UTASHIRO 0.01 Text::ANSI::Fold utilities
Text-Levenshtein-BV WOLLMERS 0.01 Bit Vector (BV) implementation of the Levenshtein Algorithm
Types-Algebraic SEBBE 0.01 Algebraic data types in perl
Vivaldi-Util-Profile PERLANCAR 0.001 List available Vivaldi profiles
Wireless-Radar BASEBAND 0
Wireless-Scanner BASEBAND 0.01 Wireless-Scanner is a small script which scan both bluetooth and wifi devices near you ( BETA 0.01 )
WordLists-EN-CommonException PERLANCAR 0.001 Collection of English common exception words
YANG PINGAN 0.02 The great new YANG!
Yang PINGAN 0.01 The great new Yang!
cPanel-APIClient CPANEL 0.01 cPanel APIs, à la TIMTOWTDI!
mb INA 0.01 run Perl script written in MBCS
realtimed ACANFORA 0.9 a drop-in daemon replacement for Incrond (see https://linux.die.net/man/8/incrond).

Stats

Number of new CPAN distributions this period: 66

Number of authors releasing new CPAN distributions this period: 44

Authors by number of new CPAN distributions this period:

No Author Distributions
1 PERLANCAR 8
2 PINGAN 6
3 ACANFORA 3
4 TEAM 3
5 ETJ 3
6 PMQS 2
7 PARTHA 2
8 BASEBAND 2
9 ART 2
10 CPANEL 1
11 RUBYKAT 1
12 PEVANS 1
13 RRWO 1
14 UTASHIRO 1
15 SNEZ 1
16 STRZELEC 1
17 LIJINFENG 1
18 ATANCASIS 1
19 SIMCOP 1
20 TOBYINK 1
21 SANKO 1
22 MLEHMANN 1
23 SEBBE 1
24 GEOJS 1
25 LENDL 1
26 JIRO 1
27 QORG 1
28 PLICEASE 1
29 JWRIGHT 1
30 FANF 1
31 INA 1
32 SHLOMIF 1
33 ANONYMOUS 1
34 WOLLMERS 1
35 ATOOMIC 1
36 RENEEB 1
37 VTI 1
38 GDT 1
39 BAYASHI 1
40 WATERKIP 1
41 AWNCORP 1
42 JV 1
43 CONTRA 1
44 HITODE 1

List of new CPAN distributions – Jun 2020

dist author version abstract
Acme-CPANModules-BrowserUtilities PERLANCAR 0.001 Utilities for web browsers
Acme-CPANModules-ColorThemedModules PERLANCAR 0.001 Modules that has color theme support
Acme-ful RWILLIS 0.01 A nifty "find upper lib" pragma
Alien-castxml PLICEASE 0.01 Find or build castxml
App-BorderStyleUtils PERLANCAR 0.001 CLI utilities related to border styles
App-FfmpegUtils PERLANCAR 0.001 Utilities related to ffmpeg
App-PP-Autolink SLAFFAN 2.00 Pack PAR executables, finding dynamic libs automatically
App-Timestamper-WithElapsed SHLOMIF 0.0.1 display the timestamp STDIN lines were received and the elapsed seconds since the last received line.
App-UnixUIDUtils PERLANCAR 0.001 Utilities related to Unix UID/GID
App-YoutubeDlIf PERLANCAR 0.001 Download videos using youtube-dl with extra selection/filtering
App-YoutubeDlIfNotYet PERLANCAR 0.001 Download videos using youtube-dl only if videos have not been donwnloaded yet
App-column-run PERLANCAR 0.001 Run several commands and show their output in multiple columns
App-cpanel ETJ 0.001 CLI for cPanel UAPI and API 2
App-tables PERLANCAR 0.001 Manipulate Tables::* modules
App-trash-all-empty-files-u PERLANCAR 0.001 Trash all empty files in the current directory tree, with undo/redo capability
Aspose3DCloud-ThreeDCloudApi ASPOSE v20.5.0 Aspose.3D Cloud SDK
Authen-TOTP TCHATZI 0.0.1 Interface to RFC6238 2FA
Avro IEMEJIA 1.10.0 official Perl API for the Avro serialization and RPC framework
Azure-SAS-Timestamp WHOSGONNA 0.0.2 Creating timestamps for Azure Shared Access Signatures.
Bio-MUST-Apps-OmpaPa DBAURAIN 0.201810 Main class for ompa-pa tool
BorderStyle PERLANCAR 2.0.1 Border styles
BorderStyleBase PERLANCAR 0.001 A suitable base class for most BorderStyle::* modules
BorderStyles-Standard PERLANCAR 0.001 A standard collection of border styles
BorderStyles-Test PERLANCAR 0.001 A collection of border styles, mainly for testing
Clang-CastXML PLICEASE 0.01 C-family abstract syntax tree output tool
Code-ART DCONWAY 0.000002 Analyze/Rename/Track Perl source code
Color-HSL-Util PERLANCAR 0.001 Utilities related to HSL color space
Color-HSV-Util PERLANCAR 0.001 Utilities related to HSV color space
ColorTheme PERLANCAR 2.0.0 Color theme class and color theme structure
ColorTheme-GraphicsColorNames PERLANCAR 0.001 Display Graphics::ColorNames::* color scheme as color theme
ColorTheme-Harmony-Analogous PERLANCAR 0.001 Create color theme using analogous color harmony rule
ColorTheme-Harmony-Monochromatic PERLANCAR 0.001 Create a monochromatic color theme
ColorTheme-Lens-Darken PERLANCAR 0.001 Darken other theme
ColorTheme-Lens-Lighten PERLANCAR 0.001 Lighten other theme
ColorTheme-Lens-Tint PERLANCAR 0.001 Tint other theme
ColorThemeBase-Static PERLANCAR 0.001 Base class for color theme modules with static list of colors
ColorThemeRole-ANSI PERLANCAR 0.001 Roles for using ColorTheme::* with ANSI codes
ColorThemeUtil-ANSI PERLANCAR 0.001 Utility routines related to color themes and ANSI code
ColorThemes-Standard PERLANCAR 0.001 A standard collection of generic color themes
ColorThemes-Test PERLANCAR 0.001 A collection of color themes, mainly for testing
ColorTransforms-Standard PERLANCAR 0.001 Standard collection of color transforms
Crypt-RFC8188 ETJ 0.01 Implement RFC 8188 HTTP Encrypted Content Encoding
Data-Dump-ObjectAsString PERLANCAR 0.001 Like Data::Dump but objects are stringified instead of dumped
Data-Dump-Options PERLANCAR 0.001 Like Data::Dump but with some more options
Data-Validate-WithYAML-Plugin-EmailMX RENEEB 0.01 Plugin to check if a mx exists for the given mail address
Date-Holidays-AW WATERKIP 0.001 Aruba's official holidays
Date-Holidays-NL WATERKIP 0.003 The Netherlands official holidays
Devel-Confess-Patch-UseDataDumpObjectAsString PERLANCAR 0.001 Use Data::Dump::ObjectAsString to stringify reference
Device-Chip-NoritakeGU_D PEVANS 0.01 chip driver for Noritake GU-D display modules
Dist-Zilla-Plugin-ColorTheme PERLANCAR 0.001 Plugin to use when building distribution that has ColorTheme modules
Dist-Zilla-PluginBundle-Author-DERIV DERIV 0.001 Defines common dist.ini config for distributions by DERIV
Dist-Zilla-Role-GetSharedFileURL PERLANCAR 0.001 Get URL to a shared file
Excel-ValueReader-XLSX DAMI 1.0 extracting values from Excel workbooks in XLSX format, fast
File-Trash-EmptyFiles-Undoable PERLANCAR 0.001 Trash all empty files in the current directory tree, with undo/redo capability
File-lockf PHENSON 0.26 Perl module interface to the lockf system call
Finance-Tax-Aruba WATERKIP 0.001 A package that deal with tax calculations for Aruba
Future-Buffer PEVANS 0.01 a string buffer that uses Futures
Getopt-EX-i18n UTASHIRO 0.01 General i18n module
Graphics-ColorNames-HTML_ID PERLANCAR 3.3.1.000 HTML color names and equivalent RGB values (Indonesian translation)
Graphics-ColorNamesLite-All PERLANCAR 0.001 Lots of color names and equivalent RGB values (lite version)
Graphics-ColorNamesLite-HTML_ID PERLANCAR 3.3.1.001.000 HTML color names and equivalent RGB values (Indonesian translation) (lite version)
Graphics-ColorNamesLite-WWW PERLANCAR 1.14.000 WWW color names and equivalent RGB values (lite version)
Guacamole XSAWYERX 0.001 A parser toolkit for Standard Perl
ISO-15924 TIEDEMANN 0.01 Language scripts
ISO-639-3 TIEDEMANN 0.01 Language codes and names from ISO::639
ISO-639-5 TIEDEMANN 0.01 Language groups
Log-Any-Adapter-OpenTracing TEAM 0.001 provides Log::Any support for OpenTracing spans
Log-ger-UseDataDumpObjectAsString PERLANCAR 0.001 Use Data::Dump::ObjectAsString to dump data structures
Log-ger-UseDataDumpOptions PERLANCAR 0.001 Use Data::Dump::Options to dump data structures
Module-Load-Util PERLANCAR 0.001 Some utility routines related to module loading
Mojolicious-Command-Author-generate-cpanfile GRAF 0.01 cpanfile generator command
Mojolicious-Command-proxy ETJ 0.001 Proxy web requests elsewhere
Neo4j-Client MAJENSEN 0.1 Build and use the libneo4j-client library
OpenSMTPD-Password NAVALNED 0.03 Perl extension for creating password hashes
OpenSMTPD-Password-XS NAVALNED 0.01 OpenBSD XS backend for OpenSMTPD::Password
OpenTelemetry TEAM 0.001 supporting for application process monitoring, as defined by opentelemetry.io
PINE64-MCP300x CREDO 0.9 Perl interface to the MCP300x family of 10-bit analog to digital converters.
PINE64-MCP3208 CREDO 0.9 Perl interface to the MCP3208 12-bit SPI analog to digital converters.
Pass-OTP JBAIER 1.2 Perl implementation of HOTP / TOTP algorithms
Pluto AWNCORP 0.01 Functional Scripting for Perl 5
Pod-Weaver-Plugin-BorderStyle PERLANCAR 0.001 Plugin to use when building distribution which has BorderStyle::* modules
Pod-Weaver-Plugin-ColorTheme PERLANCAR 0.001 Plugin to use when building distribution which has ColorTheme::* modules
Progress-Any-Examples PERLANCAR 0.001 Examples for Progress::Any
Regexp-Pattern-Filename-Archive PERLANCAR 0.001 Archive filename
Regexp-Pattern-Filename-Backup PERLANCAR 0.001 Backup filename
Regexp-Pattern-Filename-Media PERLANCAR 0.001 Media (image/audio/video) filename
Regexp-Pattern-Perl PERLANCAR 0.001 Regexp patterns related to Perl
Role-TinyCommons-TermAttr-Color PERLANCAR 0.001 Determine color depth and whether to use color or not
Role-TinyCommons-TermAttr-Interactive PERLANCAR 0.001 Determine whether terminal application is running interactively
Role-TinyCommons-TermAttr-Size PERLANCAR 0.001 Determine the sane terminal size
Role-TinyCommons-TermAttr-Software PERLANCAR 0.001 Find out information about terminal (emulator) software we run on
SMS-Send-UK-GovUkNotify ANDREWISH v0.0.1
SMS-Send-VoIP-MS MRDVT 0.02 SMS::Send driver for VoIP.ms
Sah-PSchema PERLANCAR 0.001 Retrieve and resolve parameterized Sah schema
Sah-PSchemas PERLANCAR 0.1.0 Convention for Sah-PSchemas-* distribution
Sah-PSchemas-Perl PERLANCAR 0.001 Parameterized schemas related to Perl
Sah-Schemas-GraphicsColorNames PERLANCAR 0.001 Sah schemas related to Graphics::ColorNames
SkewHeap-PP JEFFOBER 0.01 a fast and flexible heap structure
Stance-GitHub JRHUNT v1.0.0 A Perl Interface to GitHub
Stance-Vault JRHUNT v1.0.0 A Perl Interface to Hashicorp Vault
Sub-Attribute-Prototype PEVANS 0.01 polyfill for :prototype attribute on older perls
Sys-Pipe FELIPE 0.01 pipe2() in Perl
Term-App-Util-Color PERLANCAR 0.001 Determine color depth and whether to use color or not
Term-App-Util-Interactive PERLANCAR 0.001 Determine whether terminal application is running interactively
Term-App-Util-Size PERLANCAR 0.001 Determine the sane terminal size (width, height)
Test-OpenTracing-Integration VANHOESEL v0.100.1 Easy Testing of OpenTracing Integrations
Test-OpenTracing VANHOESEL v0.100.0 In-Memory OpenTracing Test Implementation
Test2-Plugin-Cover EXODIST 0.000001 Fast and Minimal file coverage info.
Test2-Plugin-GitHub-Actions-AnnotateWarnings UTGWKK 0.01 Annotate warnings with GitHub Actions workflow command
Text-Column-Util PERLANCAR 0.001 Utilities for displaying text in multiple columns
Text-Mrkdwn-Escape DLAMBLEY 0.01 Escape text for inclusion in mrkdwn
Text-Table-TinyBorderStyle PERLANCAR 0.001 Text::Table::Tiny + support for colored text
Translate-Fluent NEVES v0.6.2 A perl implementation of Project Fluent Translations.
Tree-Ops PRBRENAN 20200626 Tree operations.
URI-Escape-Any PERLANCAR 0.001 Use XS-based URI escape module, fallback to URI::Escape
URI-Escape-Path PERLANCAR 0.001 Like URI::Escape, but does not escape '/'
Whim JMAC 1.2020.06.22.0 A webmention multitool
Win32-WindowGeometry PHATWARES 1.00 Simple module to search for open windows by title and move/resize them
WordList-Color-Any PERLANCAR 0.001 Wordlist from any Graphics::ColorNames::* module
WordList-EN-Color-CSS PERLANCAR 0.001 Color names from Graphics::ColorNames::CSS
WordList-EN-Color-WWW PERLANCAR 0.002 Color names from Graphics::ColorNames::WWW
WordList-EN-Color-X PERLANCAR 0.001 Color names from Graphics::ColorNames::X
WordList-ID-Color-HTML_ID PERLANCAR 0.001 List of color names from Graphics::ColorNames::HTML_ID
WordList-ID-Color-PERLANCAR PERLANCAR 0.001 List of color names in Indonesian
WordList-Tables PERLANCAR 0.001 Wordlist from a column of table from Tables::* module
Zing AWNCORP 0.01 Multi-Process Management System
class-with-roles PERLANCAR 0.001 Shortcut for using a class and applying it some Role::Tiny roles, from the command line
ful RWILLIS 0.01 A fülish "find upper lib" pragma
perl-Mail-Exim-MainLogParser RGLAUE 0.2 Parse log lines from the Exim Main Log

Stats

Number of new CPAN distributions this period: 129

Number of authors releasing new CPAN distributions this period: 42

Authors by number of new CPAN distributions this period:

No Author Distributions
1 PERLANCAR 72
2 WATERKIP 3
3 TIEDEMANN 3
4 PEVANS 3
5 ETJ 3
6 JRHUNT 2
7 TEAM 2
8 VANHOESEL 2
9 RWILLIS 2
10 PLICEASE 2
11 AWNCORP 2
12 NAVALNED 2
13 CREDO 2
14 RENEEB 1
15 IEMEJIA 1
16 JBAIER 1
17 PHENSON 1
18 PHATWARES 1
19 DCONWAY 1
20 WHOSGONNA 1
21 DLAMBLEY 1
22 SHLOMIF 1
23 PRBRENAN 1
24 JEFFOBER 1
25 MAJENSEN 1
26 SLAFFAN 1
27 ANDREWISH 1
28 RGLAUE 1
29 MRDVT 1
30 JMAC 1
31 DAMI 1
32 DERIV 1
33 UTGWKK 1
34 DBAURAIN 1
35 ASPOSE 1
36 EXODIST 1
37 XSAWYERX 1
38 TCHATZI 1
39 GRAF 1
40 UTASHIRO 1
41 FELIPE 1
42 NEVES 1

The joy of piping tables on the command line

Staying home a lot lately has given me the chance, among other things, to organize my personal media files (photos, videos, audios) and update my remote backups on Google Photos and other cloud services.

To work with these files, I've updated some of my CLI scripts like media-info and td, as well as created a few others like delete-all-empty-dirs, show-duplicate-files, and reencode-videos.

I just want to show again (I've blogged about this once before) that it's absolutely wonderful piping tables on the command-line. While piping bytes on Unix remains as one of the simplest yet most powerful and flexible interprocess communications, to increase the convenience, one can put a layer of encoding/decoding on top of this to pass around higher-level entities. PowerShell, for example, goes full-blown objects. Which can be very convenient sometimes. I choose to output and pipe plain data structures in most of my CLI scripts, particularly table data. With this, I can do things like:

Show a table of data for my videos:

% media-info *
+---------------+--------------+------------+---------+----------+-------------------------+--------+----------------+---------------+-----------+--------------+-----------+--------------+--------------------+-------------------+-----------+---------------------+-------------+
| audio_bitrate | audio_format | audio_rate | backend | duration | media                   | rotate | type_from_name | video_bitrate | video_dar | video_format | video_fps | video_height | video_longest_side | video_orientation | video_sar | video_shortest_side | video_width |
+---------------+--------------+------------+---------+----------+-------------------------+--------+----------------+---------------+-----------+--------------+-----------+--------------+--------------------+-------------------+-----------+---------------------+-------------+
| 59392         | AAC          | 44100      | Ffmpeg  | 59.81    | 2019-08-27 14.40.38.mp4 |        | video          | 1245184       |           | H264         | 59.67     | 848          | 848                | portrait          |           | 400                 | 400         |
| 262144        | AAC          | 48000      | Ffmpeg  | 97.56    | 2019-08-27 19.06.06.mp4 | 180    | video          | 964608        |           | H264         | 30.03     | 352          | 640                | landscape         |           | 352                 | 640         |
| 262144        | AAC          | 48000      | Ffmpeg  | 91.16    | 2019-08-27 19.08.59.mp4 | 180    | video          | 1012736       |           | H264         | 30.04     | 352          | 640                | landscape         |           | 352                 | 640         |
| 262144        | AAC          | 48000      | Ffmpeg  | 91.93    | 2019-08-27 19.10.07.mp4 | 180    | video          | 1006592       |           | H264         | 30.04     | 352          | 640                | landscape         |           | 352                 | 640         |
| 262144        | AAC          | 48000      | Ffmpeg  | 89.58    | 2019-08-27 19.11.24.mp4 | 90     | video          | 1025024       |           | H264         | 30.04     | 352          | 640                | landscape         |           | 352                 | 640         |
| 262144        | AAC          | 48000      | Ffmpeg  | 318.36   | 2019-08-27 19.22.55.mp4 | 180    | video          | 705536        |           | H264         | 29.96     | 352          | 640                | landscape         |           | 352                 | 640         |
| 261120        | AAC          | 48000      | Ffmpeg  | 46.88    | 2019-08-27 19.23.28.mp4 | 180    | video          | 1451008       |           | H264         | 30.06     | 352          | 640                | landscape         |           | 352                 | 640         |
|               |              |            | Ffmpeg  | 5.67     | 2019-08-29 11.01.11.mp4 |        | video          | 3174400       | 9:16      | H264         | 19.94     | 1280         | 1280               | portrait          | 1:1       | 720                 | 720         |
| 131072        | AAC          | 48000      | Ffmpeg  | 18.07    | 2019-08-29 13.56.10.mp4 | 90     | video          | 1851392       |           | H264         | 29.95     | 352          | 640                | landscape         |           | 352                 | 640         |
| 63488         | AAC          | 44100      | Ffmpeg  | 28.89    | 2019-08-29 17.04.49.mp4 | 90     | video          | 1520640       |           | H264         | 29.97     | 480          | 848                | landscape         |           | 480                 | 848         |
| 63488         | AAC          | 44100      | Ffmpeg  | 14.97    | 2019-08-29 17.04.56.mp4 |        | video          | 3277824       | 9:16      | H264         | 29.93     | 1280         | 1280               | portrait          | 1:1       | 720                 | 720         |
| 63488         | AAC          | 44100      | Ffmpeg  | 73.87    | 2019-08-29 17.05.10.mp4 | 90     | video          | 1303552       |           | H264         | 29.97     | 480          | 848                | landscape         |           | 480                 | 848         |
| 64512         | AAC          | 44100      | Ffmpeg  | 51.24    | 2019-08-29 17.05.30.mp4 | 90     | video          | 1374208       |           | H264         | 29.98     | 480          | 848                | landscape         |           | 480                 | 848         |
| 262144        | AAC          | 48000      | Ffmpeg  | 9.11     | 2019-08-30 07.16.24.mp4 |        | video          | 1959936       |           | H264         | 30.22     | 352          | 640                | landscape         |           | 352                 | 640         |
+---------------+--------------+------------+---------+----------+-------------------------+--------+----------------+---------------+-----------+--------------+-----------+--------------+--------------------+-------------------+-----------+---------------------+-------------+

Show the total duration:

% media-info * | td sum
+---------------------+----------+
| key                 | value    |
+---------------------+----------+
| audio_bitrate       | 2279424  |
| audio_format        | 0        |
| audio_rate          | 604500   |
| backend             | 0        |
| duration            | 997.1    |
| media               | 0        |
| rotate              | 1350     |
| type_from_name      | 0        |
| video_bitrate       | 21872640 |
| video_dar           | 0        |
| video_format        | 0        |
| video_fps           | 439.8    |
| video_height        | 7664     |
| video_longest_side  | 11072    |
| video_orientation   | 0        |
| video_sar           | 0        |
| video_shortest_side | 6096     |
| video_width         | 9504     |
+---------------------+----------+

Only select videos that have bitrates higher than 3MiB/s:

% media-info * | td grep '$_->{video_bitrate} > 3_000_000'
+---------------+--------------+------------+---------+----------+-------------------------+----------------+---------------+-----------+--------------+-----------+--------------+--------------------+-------------------+-----------+---------------------+-------------+
| audio_bitrate | audio_format | audio_rate | backend | duration | media                   | type_from_name | video_bitrate | video_dar | video_format | video_fps | video_height | video_longest_side | video_orientation | video_sar | video_shortest_side | video_width |
+---------------+--------------+------------+---------+----------+-------------------------+----------------+---------------+-----------+--------------+-----------+--------------+--------------------+-------------------+-----------+---------------------+-------------+
|               |              |            | Ffmpeg  | 5.67     | 2019-08-29 11.01.11.mp4 | video          | 3174400       | 9:16      | H264         | 19.94     | 1280         | 1280               | portrait          | 1:1       | 720                 | 720         |
| 63488         | AAC          | 44100      | Ffmpeg  | 14.97    | 2019-08-29 17.04.56.mp4 | video          | 3277824       | 9:16      | H264         | 29.93     | 1280         | 1280               | portrait          | 1:1       | 720                 | 720         |
+---------------+--------------+------------+---------+----------+-------------------------+----------------+---------------+-----------+--------------+-----------+--------------+--------------------+-------------------+-----------+---------------------+-------------+

Re-encode those high-bitrate videos:

% media-info * | td grep '$_->{video_bitrate} > 3_000_000' | while read f; do reencode-videos "$f"; done

Show portrait videos:

% media-info * | td grep '$_->{video_height} > $_->{video_width}'

—————————–+————+———+———-+————————-+—————-+—————+———–+————–+———–+————–+——————–+——————-+———–+———————+————-+

audio_bitrate audio_format audio_rate backend duration media type_from_name video_bitrate video_dar video_format video_fps video_height video_longest_side video_orientation video_sar video_shortest_side video_width

—————————–+————+———+———-+————————-+—————-+—————+———–+————–+———–+————–+——————–+——————-+———–+———————+————-+

59392 AAC 44100 Ffmpeg 59.81 2019-08-27 14.40.38.mp4 video 1245184 H264 59.67 848 848 portrait 400 400
Ffmpeg 5.67 2019-08-29 11.01.11.mp4 video 3174400 9:16 H264 19.94 1280 1280 portrait 1:1 720 720
63488 AAC 44100 Ffmpeg 14.97 2019-08-29 17.04.56.mp4 video 3277824 9:16 H264 29.93 1280 1280 portrait 1:1 720 720

—————————–+————+———+———-+————————-+—————-+—————+———–+————–+———–+————–+——————–+——————-+———–+———————+————-+

If I want to meticulously edit the filenames, I can convert the table as CSV:

% media-info * --format csv > media.csv

or:

% media-info * | td2csv > media.csv

Edit the CSV in a spreadsheet, add the column name new_filename, and rename the files again on the CLI:

% csv2td media.csv | td as-aohos | td map 'qq(mv -i "$_->{media}" "$_->{new_filename}")'

mv -i "2019-08-27 14.40.38.mp4" "2019-08-27 14.40.38 – blah blah.mp4" mv -i "2019-08-27 19.06.06.mp4" "2019-08-27 19.06.06 – some description.mp4" mv -i "2019-08-27 19.08.59.mp4" "2019-08-27 19.08.59 – some other description.mp4" …

And pipe it to bash if you have verified the output:

% csv2td media.csv | td as-aohos | td map 'qq(mv -i "$_->{media}" "$_->{new_filename}")' | bash

lcpan tips 023: What’s new (including whatsnew)

About this series: A collection of short blog posts about lcpan tips/recipes. Some posts will also end up in the upcoming App::lcpan::Manual::Cookbook POD to be included in the App::lcpan distribution. First article is here. See the whole series.

About lcpan: an application to download and index a mini CPAN mirror on your local filesystem, so in effect you will have something like your own CPAN with a command-line tool (or perl API) to query and extract information from your mirror.

The previous tip was posted in January 2019. I thought I'd post a status update of what has been added to lcpan since then.

New subcommands

As usual, a bunch of subcommands have been added, most of them for convenience, can be composed from existing subcommands, and not that groundbreaking. For example, the extract-dist subcommands extracts a distro tarball. lcpan already has extract-mod, but sometimes we want to specify a distro name instead of a module. This could almost as easily be expressed using lcpan extract-mod and lcpan dist-mods:

% lcpan extract-dist libwww-perl

can also be written as:

% lcpan extract-mod `lcpan dist-mods libwww-perl | head -n1`

Or, the author, dist, module, release, script subcommands accompany the existing plural versions authors et al to retrieve only a single entity with an exact name search.

The following subcommands have also added: rdeps-scripts, dist-rdeps, heaviest-dists, most-depended-authors, most-mentioned-mods, most-mentioned-scripts, and whatsnew (more on this one below).

Recording of creation and last modification times

One of the most important new features is that lcpan now stores creation time and last modification time of most entities, like authors, modules, dependencies, as well as mentions. Everytime you update the index using lcpan update, when a database record is added or updated, the rec_ctime and rec_mtime columns are set respectively. This means you can query whether a distribution, or author, or dependency is new or recently added. Along with this, many subcommands now sport the filtering options like –added-since, –updated-since, –added-or-updated-since, or the more convenient options like –added-since-last-index-update or –update-since-last-n-index-updates.

For example, to see what modules are added in the last index update:

% lcpan mods -l --added-since-last-index-update

Or, to see what authors are added or updated after Jun 1, 2020 (assuming this year is 2020):

% lcpan authors -l --added-or-updated-since 'jun 1'

Of course, the creation and update times are based on the time you perform lcpan update, since PAUSE itself does not record creation/modification times on the CPAN index files. So if your local CPAN index is only created from scratch today, everything will be new.

Whatsnew

One new subcommand is particularly convenient: whatsnew. It will display modules, distributions, and authors that are recently added/updated, by default since the last index update. And if you specify the –my-author option, or put it in your lcpan.conf:

[subcommand=whatsnew]
my_author=PERLANCAR

then whatsnew will also display new reverse dependencies and new mentions to one of your modules. The output is in the form of Org document, which you can view as-is using a pager, or view using Emacs, directly from the command-line:

% lcpan whatsnew --pager
% lcpan whatsnew --view

There's a demo video for this.

List of new CPAN distributions – May 2020

dist author version abstract
Acme-CPANModules-ListsOfWordsAndNames PERLANCAR 0.001 Modules that contain lists of words and names
Acme-MetaSyntactic-gavan PERLANCAR 0.001 The Space Sheriff Gavan theme
Acme-MetaSyntactic-id_beverages PERLANCAR 0.001 The Indonesian beverages theme
Acme-MetaSyntactic-id_dishes PERLANCAR 0.001 The Indonesian dishes theme
Acme-MetaSyntactic-metal_heroes PERLANCAR 0.001 The Metal Heroes series theme
Acme-MetaSyntactic-unyil PERLANCAR 0.001 The Unyil theme
Acme-PERLANCAR-Test-Dependency-One PERLANCAR 0.001 Test dependencies
Acme-PERLANCAR-Test-Dependency-Three PERLANCAR 0.001 Test dependencies
Acme-PERLANCAR-Test-Dependency-Two PERLANCAR 0.001 Test dependencies
Alien-libnewrelic PLICEASE 0.02 Alien to download and install libnewrelic
Alien-libpcre PLICEASE 0.01 Find or download and install libpcre (The "Perl Compatible" Regular Expressions library)
Alien-libtiff SLAFFAN 1.00 Alien package for libtiff
App-DuplicateFilesUtils PERLANCAR 0.001 CLI utilities related to duplicate files
App-FileRemoveUtils PERLANCAR 0.001 Utilities related to removing/deleting files
App-FileRenameUtils PERLANCAR 0.003 Utilities related to renaming/moving files
App-FirefoxMultiAccountContainersUtils PERLANCAR 0.001 Utilities related to Firefox Multi-Account Containers add-on
App-MediaInfoUtils PERLANCAR 0.127 Utilities related to getting (metadata) information from media files
App-PYX-Optimization SKIM 0.01 PYX optimization tool.
App-Prove-Plugin-MultipleConfig TAKAHITO 0.01 set multiple configs for parallel prove tests
App-Utils VLADO 0.01 an app that contain some useful command-line utilities
App-plasm PLICEASE 0.01 Perl WebAssembly command line tool
App-plx MSTROUT 0.000001 Perl Layout Executor
App-pmhiderename PERLANCAR 0.001 Hide modules by renaming them
Aspose3DCloud-3DApi ASPOSE v20.5.0 Aspose.3D Cloud SDK
Aspose3DCloud-ThreeDApi ASPOSE v20.5.0 Aspose.3D Cloud SDK
AsposeDiagramCloud-DiagramApi ASPOSE v20.3.0 Aspose.Diagram Cloud SDK
AsposeThreeDCloud-ThreeDApi ASPOSE v20.5.0 Aspose.3D Cloud SDK
AsposeThreeDCloud-ThreeDCloudApi ASPOSEAPI v20.5.0 Aspose.3D Cloud SDK
Beam-Make PREACTION 0.001 Recipes to declare and resolve dependencies between things
Bencher-Scenario-PerlPhase PERLANCAR 0.001 Benchmark Perl::Phase
Bencher-Scenarios-ParamsSah PERLANCAR 0.001 Benchmark Params::Sah
CSV-Reader CMANLEY 1.07 CSV reader class
Catalyst-View-MojoTemplate JJNAPIORK 0.001 Use Mojolicious Templates for your Catalyst View
Ceph-Rados-Striper KILINRAX 0.01 Perl extension to wrap libradosstriper-dev and provide striping for Ceph::Rados.
Chemistry-OpenSMILES MERKYS 0.1.0 OpenSMILES format reader
Crypt-OpenSSL-Verify TIMLEGGE 0.10 OpenSSL Verify certificate verification in XS.
Crypto-ECC MICVU 0.001 Elliptic Curve Cryptography Library
DBIx-UpdateTable-FromHoH PERLANCAR 0.001 Update database table from hash-of-hash
DBIx-Util-Schema PERLANCAR 0.001 Utility routines related to database schema
Data-AnyXfer ALUCAS 0.1 data transfer base class
Data-DeepAccess DBOOK 0.001 Access or set data in deep structures
Data-Object-Cli AWNCORP 2.00 Command-line Interface Abstraction for Perl 5
Data-Sah-Tiny PERLANCAR 0.000 Validate Sah schemas with as little code as possible
Date-Holidays-TW GUGOD v0.1.0 Determine whether it is Taiwan Holidays or not.
Device-Chip-BNO055 PEVANS 0.01 chip driver for BNO055
DigiByte-DigiID MICVU 0.001 Digi-ID implementation
Dist-Zilla-PluginBundle-MMCCLIMON MMCCLIMON 5.012 BeLike::MMCCLIMON when you build your dists
FFI-C PLICEASE 0.01 C data types for FFI
FFI-Platypus-Lang-Go PLICEASE 0.01 Documentation and tools for using Platypus with Go
FFI-Platypus-Type-Enum PLICEASE 0.01 Custom platypus type for dealing with C enumerated types
FIDO-Raw JACQUESG 0.01 Perl bindings to the libfido2 library
File-Groups SHAW 0.1000 File extensions and media types, grouped by application and type
Finance-Currency-Convert-Esunbank GUGOD v0.1.0 Query currency exchange rates from Esunbank
Finance-Currency-Convert-SCSB GUGOD v0.1.0 Query currency exchange rates from SCSB (Shanghai Commercial and Savings Bank)
Future-IO-Impl-Glib PEVANS 0.01 implement Future::IO using Glib
Game-RockPaperScissor SPAJAI 0.01 object oriented Game::RockPaperScissor!
Geo-Elevation-HGT ULIBUCK 0.01 Elevation service with terrain data provided by Mapzen and Amazon AWS S3
Geo-LibProj-cs2cs AJNN 1.00 Perl IPC interface to PROJ cs2cs
Graph-Nauty MERKYS 0.1.0 Perl bindings for nauty
GraphQL-Plugin-Convert-MojoPubSub ETJ 0.01 convert a Mojo PubSub server to GraphQL schema
HTML-Selector-Element BARTL 0.95 Search for elements in a HTML::Element DOM tree using CSS selectors
HealthCheck-Diagnostic-Redis GSG v0.0.4 Check for Redis connectivity and operations in HealthCheck
HealthCheck-Diagnostic-SMTP GSG v0.0.3 Verify connectivity to an SMTP mail server
JSON-Karabiner STEVIED 0.003 easy JSON code generaation for Karabiner-Elements
JSON-Schema-Draft201909 ETHER 0.001 Validate data against a schema
Locale-AU NHORNE 0.01 abbreviations for territory and state identification in Australia and vice versa
Locale-Fluent NEVES v0.5.1 A perl implementation of Project Fluent Translations.
Markdown-Contents MIRK 1.2 generate a table of contents from a Markdown file
Math-Giac VVELOX v0.0.1 A perl interface to giac, a CAS(Computer Algebra System)
Module-Generate-YAML LNATION 0.01 Assisting with module generation via YAML.
Module-HideRename PERLANCAR 0.001 Hide modules by renaming them
Mojo-Promise-Limiter SKAJI 0.100 limit outstanding calls to Mojo::Promise
Mojo-Promise-Limitter SKAJI 0.001 limit outstanding calls to Mojo::Promise
MojoX-Date-Local BWISTI 0.02 Mojo::Date, but in my timezone
Mojolicious-Plugin-ContextAuth RENEEB 0.01 Role-based access with context
Mu-Tiny MSTROUT 0.000001 NAE KING! NAE QUIN! NAE CAPTAIN! WE WILLNAE BE FOOLED AGAIN!
Net-API-Stripe-WebHook-Apache JDEGUEST v0.100.1 A Stripe WebHook Implementation using Apache
Net-API-Stripe-WebHook JDEGUEST v0.1.1 A Stripe WebHook Implementation
Net-OAuth2Server ARISTOTLE 0.001 A light, simple, flexible OAuth2 server framework
Net-OAuth2Server-OIDC ARISTOTLE 0.001 An OpenID Connect server on top of Net::OAuth2Server
Net-SNMP-Mixin-CiscoDot1qVlanStatic GAISSMAI 0.01 mixin class for static Cisco vlan info
NewFangle PLICEASE 0.01 Unofficial Perl NewRelic SDK
Nice-Try JDEGUEST v0.1.1 A real Try Catch Block Implementation Using Perl Filter
Number-Textify VAL 20200511 turn number into some string.
OCR-OcrSpace SPAJAI 0.01 Perl Interface to access https://ocr.space/OCRAPI
Object-GMP MICVU 0.001 Moo Role for any object has GMP field
PINE64-GPIO CREDO 0.91 Perl interface to PineA64 and PineA64+ GPIO pins
PINE64-MAX7219 CREDO 0.91
POE-Component-MetaCPAN-Recent BINGOS 1.00 Obtain uploaded CPAN dists via MetaCPAN.
POE-Component-SmokeBox-Recent-HTTP BINGOS 1.54 an extremely minimal HTTP client
PYX-Optimization SKIM 0.01 PYX optimization Perl class.
PerlIO-via-YAML LNATION 0.01 PerlIO layer for YAML
Plack-App-File-PYX SKIM 0.01 Plack PYX file application.
Plack-Handler-Feersum-SS EGOR 0.01 Server::Starter adapter for Feersum Plack handler
RT-Extension-AssetAutoName PUCK 0.02 RT-Extension-AssetAutoName Extension
Regexp-Pattern-Filename-Audio PERLANCAR 0.001 Audio filename
Regexp-Pattern-Filename-Video PERLANCAR 0.001 Video filename
Rewire AWNCORP 0.01 Dependency Injection Container for Perl 5
Rex-Dondley-ProcessTaskArgs STEVIED 0.005 easier Rex task argument handling
Rex-Hook-File-Diff FERKI v0.0.0.1 show diff of changes for files managed by Rex
Role-Declare SNEZ 0.01 declarative parameter and return type checking
RxPerl KARJALA v0.0.1 It's new $module
SU-API-Icinga2-perl THESEAL v2.0.3 REST integration with icinga2
Service-Engine RBUSH 0 a framework for getting things done!
Sort-Sub-by_example PERLANCAR 0.001 Sort by example
Stencil AWNCORP 0.01 Code Generation Tool for Perl 5
Stencil-Source-Awncorp AWNCORP 0.01 Personal Perl 5 Stencil Generators
String-Secret KARUPA 0.01 secret string wrapper to mask secret from logger
Tables PERLANCAR 0.1.0 Module that contains table data
Tables-Locale-US-States PERLANCAR 20200531.0.0 US states
TablesRoles-Standard PERLANCAR 0.001 Standard set of roles for Tables
Test-Metrics-Any PEVANS 0.01 assert that code produces metrics via Metrics::Any
Test2-Plugin-GitHub-Actions-AnnotateFailedTest UTGWKK 0.01 Annotate failed tests with GitHub Actions workflow command
Test2-Roo DJERIUS 1.005 Composable, reusable tests with roles and Moo
Test2-Tools-PerlCritic PLICEASE 0.02 Testing tools to enforce Perl::Critic policies
Util-H2O HAUKEX 0.01 Hash to Object: turns hashrefs into objects with accessors for keys
WG-Status JOEYKELLY 0.04 Perl module to parse WireGuard VPN instances
WordList-CPAN-PAUSEID PERLANCAR 20200504.0.1 CPAN PAUSE ID's
WordList-DBI PERLANCAR 0.001 Wordlist that get its list from a DBI query
WordList-EN-CountryName PERLANCAR 0.050 English country names
WordList-EN-PersonName-Bible PERLANCAR 0.003 All men mentioned in the bible
WordList-HTTP-UserAgentString-Browser-Chrome PERLANCAR 20200501.0.0 Collection of Chrome browser User-Agent strings
WordList-HTTP-UserAgentString-Browser-Firefox PERLANCAR 20200501.0.1 Collection of Firefox browser User-Agent strings
WordList-HTTP-UserAgentString-Browser-Safari PERLANCAR 20200501.0.0 Collection of Safari browser User-Agent strings
WordList-HTTP-UserAgentString-Firefox PERLANCAR 20200501.0.0 Firefox User-Agent strings
WordList-MetaSyntactic-Any PERLANCAR 0.001 Wordlist from any Acme::MetaSyntactic::* module
WordList-PersonName-Bible-EN PERLANCAR 0.001 All men mentioned in the bible
WordListBase-MetaSyntactic PERLANCAR 0.003 Base class for WordList::MetaSyntactic::*
WordListMod PERLANCAR 0.002 Modified wordlist
WordListMod-BinarySearch PERLANCAR 0.002 Provide word_exists() that uses binary search
WordListMod-Bloom PERLANCAR 0.003 Provide word_exists() that uses bloom filter
WordListMod-RandomSeekPick PERLANCAR 0.001 Provide a pick() implementation that random-seeks DATA
WordListMod-ScanPick PERLANCAR 0.001 Provide the default scan pick()
WordListRole-BinarySearch PERLANCAR 0.003 Provide word_exists() that uses binary search
WordListRole-Bloom PERLANCAR 0.004 Provide word_exists() that uses bloom filter
WordListRole-RandomSeekPick PERLANCAR 0.001 Provide a pick() implementation that random-seeks DATA
WordListUtil-CLI PERLANCAR 0.001 Some utility routines related to WordList::* and the CLI
WordLists-EN-PersonName-PopularBabyName-GB_EAW-ONS PERLANCAR 0.002 Popular baby names in England and Wales (from ONS)
WordLists-EN-PersonName-PopularBabyName-US-SSA PERLANCAR 0.003 Popular baby names in the USA (from Social Security Administration)
WordLists-EN-PersonName-PopularBabyNames-GB_EAW-ONS PERLANCAR 0.001 Popular baby names in England and Wales (from ONS)
WordLists-EN-PersonName-PopularBabyNames-US-SSA PERLANCAR 0.002 Popular baby names in the USA (from Social Security Administration)
WordLists-PersonName-PopularBabyNames-GB_EAW-ONS PERLANCAR 0.001 Popular baby names in England and Wales (from ONS)
WordLists-PersonName-PopularBabyNames-US-SSA PERLANCAR 0.001 Popular baby names in the USA (from Social Security Administration)
Youri-Package-RPM-Updater-release PTERJAN v0.6.3 Update RPM packages
lib-hiderename PERLANCAR 0.001 Hide modules by renaming them
md2toc MIRK 1.0 generate a table of contents from a Markdown file
modproxyperlhtml DAROLD 4.0 rewrite HTTP headers and HTML links for reverse proxy usage
service.engine RBUSH 0.42 a framework for getting things done!
standard XSAWYERX 0.000 Standard

Stats

Number of new CPAN distributions this period: 149

Number of authors releasing new CPAN distributions this period: 61

Authors by number of new CPAN distributions this period:

No Author Distributions
1 PERLANCAR 54
2 PLICEASE 8
3 AWNCORP 4
4 ASPOSE 4
5 SKIM 3
6 JDEGUEST 3
7 MICVU 3
8 PEVANS 3
9 GUGOD 3
10 SPAJAI 2
11 LNATION 2
12 ARISTOTLE 2
13 MSTROUT 2
14 STEVIED 2
15 BINGOS 2
16 MERKYS 2
17 GSG 2
18 CREDO 2
19 RBUSH 2
20 SKAJI 2
21 MIRK 2
22 GAISSMAI 1
23 KILINRAX 1
24 ETJ 1
25 NEVES 1
26 BARTL 1
27 JJNAPIORK 1
28 TAKAHITO 1
29 ETHER 1
30 DJERIUS 1
31 AJNN 1
32 VAL 1
33 ASPOSEAPI 1
34 VVELOX 1
35 UTGWKK 1
36 XSAWYERX 1
37 THESEAL 1
38 PREACTION 1
39 JACQUESG 1
40 MMCCLIMON 1
41 SLAFFAN 1
42 ALUCAS 1
43 RENEEB 1
44 DBOOK 1
45 CMANLEY 1
46 SNEZ 1
47 JOEYKELLY 1
48 FERKI 1
49 KARJALA 1
50 NHORNE 1
51 TIMLEGGE 1
52 SHAW 1
53 HAUKEX 1
54 VLADO 1
55 PUCK 1
56 PTERJAN 1
57 KARUPA 1
58 ULIBUCK 1
59 EGOR 1
60 DAROLD 1
61 BWISTI 1

Sorting Containers of Firefox Multi-Account Containers Add-on, using Perl

Do you use Firefox Multi-Account Containers add-on? If you do, do you create lots of containers and wish you could reorder the list of containers? Then this short post might be of interest to you.

As of this writing, the add-on does not provide a UI to do so (GitHub issue #1208). Google search landed me on the issue page and I saw a rather interesting PowerShell snippet to accomplish what I want. Basically to sort the containers you just need to sort the identity records in the containers.json file. Since I already wrote a couple of Firefox modules like Firefox::Util::Profile and App::FirefoxUtils, I thought I'd write the equivalent of the script in Perl.

The result: firefox-mua-sort-containers (source code). I believe the core logic of the code is as straightforward as the PowerShell version, with a few additional niceties:

It does not close Firefox automatically but just politely tells you that Firefox needs to stop running.

It backs up containers.json first.

It sports a --dry-run (-n) option to show you how the containers will be sorted, without actually modifying the file.

It allows easy sort specification using Sort::Sub.

Tab completion (activate using complete -C firefox-mua-sort-containers firefox-mua-sort-containers first; or see the documentation for more details).

Installation

To install the script:

% cpanm -n App::FirefoxMultiAccountContainersUtils

Please wait a few moment while the installer downloads and installs all the requirements.

Some examples

Sort by name:

% firefox-mua-sort-containers myprofile -n  ;# just show the sorted list, don't actually sort yet
% firefox-mua-sort-containers myprofile     ;# now sort it for real

Sort by length then name (yeah, just a useless example):

% firefox-mua-sort-containers myprofile --sort-sub by_several --first by_length --second by_name

Sort by name, but keep some containers I often use at the top:

% firefox-mua-sort-containers myprofile
% firefox-mua-sort-containers myprofile --sort-sub by_example --sort-arg example='container1,container2,container3'

Enjoy.

List of new CPAN distributions – Apr 2020

dist author version abstract
Acme-CPANModules-GetoptModules PERLANCAR 0.001 Modules that parse command-line options
Acme-CPANModules-HashUtilities PERLANCAR 0.002 Modules that manipulate hashes
Acme-CPANModules-MockModules PERLANCAR 0.001 Modules that mock other modules
Acme-CPANModules-PodConverters PERLANCAR 0.001 Modules to convert POD to/from other formats
Alien-MUSCLE KIWIROY 0.01 Discover or easy install of MUSCLE
Alien-wasmtime PLICEASE 0.04 Find or download wasmtime for use by other Perl modules
App-ManagePoolStyleRepo PERLANCAR 0.001 Manage pool-style repo directory
App-Mxpress-PDF LNATION 0.1 YOUR APPLICATION ABSTRACT
App-PathNaiveUtils PERLANCAR 0.001 Utilities related to Path::Naive
App-PhysicsUnitUtils PERLANCAR 0.001 Utilities related to Physics::Unit
App-ProveAuthor PERLANCAR 0.001 Prove distributions of a CPAN author
App-Tailor JEFFOBER 0.01 easily tailor terminal output to meet your needs
App-VitaminUtils PERLANCAR 0.001 Utilities related to vitamins
App-diffdb PERLANCAR 0.001 Compare two databases, line by line
App-eachperl PEVANS 0.01 a wrapper script for iterating multiple perl binaries
App-lcpan-Manual PERLANCAR 1.047.000 Manual for App::lcpan
App-pl PFEIFFER v0.49.2 Swiss Army Knife of Perl One-Liners
Astro-DSS-JPEG DKECHAG 0.01_0 Download color JPEG images from the Digitized Sky Survey
Async-Methods MSTROUT 0.000001 Helpers for async method work
Bencher-Scenario-SortingByKey PERLANCAR 0.001 Benchmark various techniques to sort array by some computed key
Bio-Phylo-CIPRES RVOSA v0.0.1 Client for the CIPRES analysis portal
CAD-AutoCAD-Detect SKIM 0.01 Detect AutoCAD files through magic string.
CAD-AutoCAD-Version SKIM 0.01 Class which work with AutoCAD versions.
CPAN-MirrorMerger KARUPA 0.01 CPAN Mirror index merger for many legacy company internal CPAN mirrors.
CPAN-MirrorMerger-Storage-S3 KARUPA 0.01 CPAN::MirrorMerger storage plugin for Amazon S3
Caller-First LNATION 0.01 first|last caller from the stack.
Caller-Reverse LNATION 0.01 reverse the caller stack.
Chrome-Util-Profile PERLANCAR 0.001 List available Google Chrome profiles
Compiled-Params-OO LNATION 0.01 compiled params object oriented.
Complete-Chrome PERLANCAR 0.001 Completion routines related to Google Chrome
Complete-Firefox PERLANCAR 0.001 Completion routines related to Firefox
DBIx-Class-Moo-ResultClass JJNAPIORK 0.001001 Moo-ify DBIx::Class Result (row) Classes
Dancer2-Plugin-Argon2 BOR 0.01 Handling Argon2 passwords in Dancer2
Dancer2-Plugin-Minion CROMEDOME 0.1.0 Use the Minion job queue in your Dancer2 apps.
Dancer2-Template-Handlebars GEEKRUTH 0.1 Dancer2 wrapper for Handlebars templating engine
Data-Dataset-Classic-Titanic GENE 0.0100 Provide the classic titanic survivor dataset
Data-Dump-SExpression PERLANCAR 0.001 Dump Perl data structures as S-expression
Data-Dumper-AutoEncode-AsDumper TONKIN 1.00 Dump encoded data with Dumper()
Data-LnArray LNATION 0.01 The great new Data::LnArray!
Data-Object-Cast AWNCORP 0.01 Data Type Casting for Perl 5
Data-Object-Kind AWNCORP 0.01 Abstract Base Class for Data::Object
Data-Object-Role-Arguable AWNCORP 0.01 Arguable Role for Perl 5 Plugin Classes
Data-Object-Role-Errable AWNCORP 0.01 Errable Role for Perl 5
Data-Object-Role-Formulatable AWNCORP 0.01 Formulatable Role for Perl 5
Data-Object-Struct AWNCORP 2.00 Struct Class for Perl 5
Data-Random-Structure-UTF8 BLIAKO 0.01 The great new Data::Random::Structure::UTF8!
Data-Roundtrip BLIAKO 0.01 convert between Perl data structures, YAML and JSON with unicode support (I believe …)
Data-Walk-More PERLANCAR 0.001 Traverse Perl data structures, with more information during traversing
Data-WeakMap KARJALA v0.0.1 WeakMap that doesn't leak memory, and which you can operate on like a hash
Date-Extract-DE CED v0.0.1 extract dates from german texts
Date-Holidays-UA DBOYS 0.01 Holidays module for Ukraine
Dist-Zilla-PluginBundle-Author-JACQUESG JACQUESG 0.01 Plugin bundle used by JACQUESG
Docker-CLI-Wrapper SHLOMIF 0.0.1 a wrapper for the CLI of docker and compatible tools.
Docker-Names-Random MIKKOI 0.0.1 Create random strings like Docker does for container names.
FFI-Platypus-Type-PtrObject PLICEASE 0.01 Platypus custom type for an object wrapped around an opaque pointer
Feed-Data LNATION 0.01 dynamic data feeds
File-Find-Rule-DWG SKIM 0.01 Common rules for searching DWG files.
Firefox-Util-Profile PERLANCAR 0.001 List available Firefox profiles
Getopt-Class JDEGUEST 0.002000 A class based approach for options of Getopt::Long
Getopt-EX-autocolor UTASHIRO 0.01 Getopt::EX autocolor module
Getopt-EX-termcolor UTASHIRO 1.01 Getopt::EX termcolor module
HealthCheck-Diagnostic-DBHCheck GSG v0.500.1 Check a database handle to make sure you have read/write access
HealthCheck-Diagnostic-RabbitMQ GSG v1.1.4 Check connectivity and queues on a RabbitMQ server
HealthCheck-Diagnostic-SFTP GSG v1.2.2 Check for SFTP access and operations in a HealthCheck
HealthCheck-Diagnostic-WebRequest GSG v1.3.5 Make HTTP/HTTPS requests to web servers to check connectivity
IMDB-TitleID-SearchByTitle PERLANCAR 0.001 Extract information from an IMDB title page
IPC-Simple JEFFOBER 0.01 simple, non-blocking IPC
InfluxDB-Client-Simple AASSAD 0.01 The lightweight InfluxDB client
JSON-Schema-Generate LNATION 0.01 Generate JSON Schemas from data!
Java-Release SKIM 0.01 Process Java releases.
KelpX-Hooks BRTASTIC 1.00 Override any method in your Kelp application
Log-ger-UseDataPrinter PERLANCAR 0.001 Use Data::Printer to dump data structures
Math-FractionManip GENE 0.5400 Manipulate fractions
MetaCPAN-Client-Pod-PDF LNATION 0.01 The great new MetaCPAN::Client::Pod::PDF!
Metrics-Any PEVANS 0.01 abstract collection of monitoring metrics
Metrics-Any-Adapter-Prometheus PEVANS 0.01 a metrics reporting adapter for Prometheus
Metrics-Any-Adapter-Statsd PEVANS 0.01 a metrics reporting adapter for statsd
Module-Generate LNATION 0.01 Assisting with module generation.
Module-Generate-Hash LNATION 0.01 The great new Module::Generate::Hash!
Mojo-Log-Role-Color JHTHORSEN 0.01 Add colors to your mojo logs
Mojo-Rx KARJALA 0.01 It's new $module
Mojo-UserAgent-Role-Signature SADAMS 0.01 Automatically sign request transactions
Mojolicious-Plugin-ExceptionSentry LTM 0.01 Sentry Plugin for Mojolicious – Mojolicious::Plugin::ExceptionSentry
Multipart-Encoder DART v0.0.4 encoder for mime-type multipart/form-data.
Net-IPAM-Block GAISSMAI 1.00 A library for reading, formatting, sorting and converting IP-blocks.
Net-IPAM-IP GAISSMAI 1.00 A library for reading, formatting, sorting and converting IP-addresses.
Net-IPAM-Tree GAISSMAI 1.00 A CIDR/Block tree library for fast IP lookup with longest-prefix-match.
Net-Matrix-Webhook DOMM 0.900 A http->matrix webhook
Net-Saml2 TIMLEGGE 0.20 SAML bindings and protocol implementation
Org-FRDCSA-AIE ANDREWD 0.001 Automatic Information Extraction
Parallel-Map MSTROUT 0.000001 Multi processing parallel map code
PeekPoke-FFI PLICEASE 0.01 Perl extension for reading and writing to arbitrary memory locations
Plack-App-Directory-PYX SKIM 0.01 Plack PYX directory application.
Pod-Cookbook PERLANCAR 0.001 Recipes for working with POD
Protocol-WebSocket-Fast SYBER v1.0.3 very fast WebSocket protocol implementation
Protocol-WebSocket-XS SYBER v1.0.0 very fast WebSocket protocol implementation
RedisScript FRAZAO 0 Perl extension to help load and run Lua script in Redis server.
Return-Deep CINDY 1.000 deeply returns through multiple layers at once
SExpression-Decode-Marpa PERLANCAR 0.001 S-expression parser using Marpa
SQL-Bind VTI 1.00 SQL flexible placeholders
Sah-Schemas-Chrome PERLANCAR 0.001 Various Sah schemas related to Google Chrome
Sah-Schemas-Firefox PERLANCAR 0.001 Various Sah schemas related to Firefox
Sort-SubBundle-PERLANCAR PERLANCAR 0.081 PERLANCAR's Sort::Sub subroutines
Stewbeef-TestModule STEWBEEF 0.01 Stewbeef's test module
StorageDisplay VDANJEAN 1.0.0 Collect and display storages on linux machines
Termux-API LNATION 0.01 Termux::API wrapper
Test-Ability AWNCORP 0.01 Property-Based Testing for Perl 5
Test-Class-Simple OKYSIL 0.01 simplify your unit tests writing based on Test::Class
Test-DB AWNCORP 0.01 Temporary Databases for Testing
Test-OpenTracing-Interface VANHOESEL 0.01 Test OpenTracing::Interface compliance
Tree-To-Text PERLANCAR 0.060 Show a tree object structure as text
WWW-Trello-Lite RBWOHLFAR 1.00 Simple wrapper around the Trello web service.
Wasm PLICEASE 0.01 Write Perl extensions using Wasm
Wasm-Hook PLICEASE 0.01 Automatically load WebAssembly modules without a Perl wrapper
Yahoo-Finance SPAJAI 0.01 2020 Yahoo::Finance
YouTube-Util PERLANCAR 0.001 YouTube-related utilities
fs-Promises HUGMEIR 0.01 Promises interface to nonblocking file system operations
getopt PERLANCAR 0.001 Shortcut for using Getopt::Std's getopt() from the command line

Stats

Number of new CPAN distributions this period: 118

Number of authors releasing new CPAN distributions this period: 50

Authors by number of new CPAN distributions this period:

No Author Distributions
1 PERLANCAR 28
2 LNATION 11
3 AWNCORP 8
4 PLICEASE 5
5 SKIM 5
6 PEVANS 4
7 GSG 4
8 GAISSMAI 3
9 JEFFOBER 2
10 SYBER 2
11 KARJALA 2
12 KARUPA 2
13 BLIAKO 2
14 GENE 2
15 MSTROUT 2
16 UTASHIRO 2
17 RVOSA 1
18 DART 1
19 GEEKRUTH 1
20 JDEGUEST 1
21 HUGMEIR 1
22 VTI 1
23 DKECHAG 1
24 PFEIFFER 1
25 TIMLEGGE 1
26 DBOYS 1
27 JJNAPIORK 1
28 KIWIROY 1
29 SADAMS 1
30 LTM 1
31 STEWBEEF 1
32 OKYSIL 1
33 JACQUESG 1
34 BRTASTIC 1
35 CED 1
36 TONKIN 1
37 SPAJAI 1
38 SHLOMIF 1
39 RBWOHLFAR 1
40 AASSAD 1
41 MIKKOI 1
42 ANDREWD 1
43 DOMM 1
44 VDANJEAN 1
45 JHTHORSEN 1
46 CROMEDOME 1
47 VANHOESEL 1
48 BOR 1
49 FRAZAO 1
50 CINDY 1

List of new CPAN distributions – Mar 2020

dist author version abstract
Acme-CPANAuthors-Slovak SKIM 0.01 We are Slovak CPAN authors.
Acme-CPANModules-ReadingFilesBackward PERLANCAR 0.001 Reading files backward (in reverse)
Acme-CPANModulesUtil-Misc PERLANCAR 0.001 Various utility functions related to Acme::CPANModules
Acme-Hospital-Bed LNATION 0.01 The great new Acme::Hospital::Bed!
Alt-Tickit-Widgets-ObjectPad PEVANS 0.29 a collection of Tickit::Widget implementations (using Object::Pad)
App-BrowserUtils PERLANCAR 0.001 Utilities related to browsers, particularly modern GUI ones
App-ChromeUtils PERLANCAR 0.001 Utilities related to Google Chrome browser
App-OperaUtils PERLANCAR 0.001 Utilities related to the Opera browser
App-ProveDirs PERLANCAR 0.001 Prove one or more directories
App-ProveDists PERLANCAR 0.001 Prove Perl distributions
App-ProveMods PERLANCAR 0.001 Prove Perl modules' distributions
App-Rakubrew PATRICKB 6 Raku environment manager
App-TouchscreenUtils PERLANCAR 0.001 CLI utilities related to touchscreen
App-VivaldiUtils PERLANCAR 0.001 Utilities related to the Vivaldi browser
App-prefixintsumcol SHLOMIF 0.0.1 prefix the running sum of decimal big integers from stdin or files
App-supertouch PLICEASE 0.01 Touch with directories
App-week UTASHIRO 0.01 colorful calender command
Bio-DB-Taxonomy-sqlite CJFIELDS 1.7.3 SQLite-based implementation of Bio::DB::Taxonomy::flatfile
Block-NJH EXODIST 0.001 Prevent your tests from running on NJH's broken smokers.
BoardStreams KARJALA v0.0.1 It's new $module
BrandMeister-API RUNE 0.1 Use the BM API from Perl
Catalyst-Plugin-Session-Store-RedisFast VRAG 0.01 Redis Session store for Catalyst framework
Config-Structured MTYRRELL 2.000 Provides generalized and structured configuration value access
DB-Object JDEGUEST v0.4.14 A SQL Database object abstraction class
Data-Object-Args AWNCORP 2.00 Args Class for Perl 5
Data-Object-ClassHas AWNCORP 2.00 Attribute Builder for Data-Object Class
Data-Object-Opts AWNCORP 2.00 Opts Class for Perl 5
Data-Object-Plugin AWNCORP 0.01 Plugin Class for Perl 5
Data-Object-Role-Pluggable AWNCORP 0.01 Pluggable Role for Perl 5
Data-Object-Role-Throwable AWNCORP 2.00 Throwable Role for Perl 5
Data-Object-Role-Tryable AWNCORP 2.00 Tryable Role for Perl 5
Data-Object-RoleHas AWNCORP 2.00 Attribute Builder for Data-Object Role
Data-Object-Space AWNCORP 2.00 Namespace Class for Perl 5
Data-Object-State AWNCORP 2.00 Singleton Builder for Perl 5
Data-Object-Types AWNCORP 0.01 Data-Object Type Constraints
Data-Object-Vars AWNCORP 2.00 Env Vars Class for Perl 5
Data-Tersify-Plugin-DBIx-Class SKINGTON 1.000 tersify DBIx::Class objects
Devel-Wherefore MSTROUT 0.000001 Where the heck did these subroutines come from?
EAV-XS TVV v0.3.0 Email Address Validation Library
Encode-Base2N SYBER v1.0.0 fast base64, base32, base16 encode/decode functions
Exception-Backtrace DMOL v1.0.0 Get C and Perl backtraces
File-Find-Rule-ConflictMarker BAYASHI 0.01 Conflict markers finder
File-Symlink-Relative WYANT 0.000_901 Create relative symbolic links
FlightRecorder AWNCORP 0.01 Logging for Distributed Systems
Game-Xomb JMATES 0.20 a game featuring @ versus the Xarci Bedo
Google-reCAPTCHA-v3 JJSIMONI 0.1.0 A simple Perl API for Google reCAPTCHA v3
GraphQL-Client CCM 0.600 A GraphQL client
HealthCheck-Diagnostic-DBHPing GSG v1.2.3 Ping a database handle to check its health
HealthCheck-Diagnostic-FilePermissions GSG v1.4.2 Check the paths for expected permissions in a HealthCheck
Log-Dispatch-TAP RRWO v0.1.0 Log to TAP output
Log-ger-For-Builtins PERLANCAR 0.001 Add logging to Perl builtins
Log-ger-Plugin-Debug-DumpRoutines PERLANCAR 0.001 Dump routines before Log::ger instals them
Log-ger-Plugin-HashArgs PERLANCAR 0.001 Log using hash arguments
Log-ger-Plugin-Multisets PERLANCAR 0.001 Create multiple sets of logger routines, each set with its own init arguments
Log-ger-Plugin-Perl PERLANCAR 0.002 Replace log statements with Perl's standard facility (warn, die, etc)
Log-ger-Screen PERLANCAR 0.001 Convenient packaging of Log::ger + Log::ger::Output::Screen + Log::ger::Level::FromEnv for one-liner
MIME-Base32-XS LTM 0.01 MIME::Base32::XS – Encoding and decoding Base32
Mail-TLSRPT MBRADSHAW 1.20200303 TLSRPT object
Masscan-Scanner AVERNA 20200321.213343 Masscan::Scanner – A Perl module which helps in using the masscan port scanner.
Math-Polynomial-Chebyshev PJACKLAM 0.01 Chebyshev polynomials of the second kind
Module-Generic JDEGUEST v0.11.3 Generic Module to inherit from
Mojo-File-Role-Extension KIWIROY 0.01 Access Mojo::File filename extensions
Mojo-Server-AWSLambda PRAJITH 0.01 Mojolicious server for AWS Lambda
Mojo-WebService-LastFM TESMITH 0.01 Non-blocking recent tracks information from Last.FM
Mojolicious-Plugin-Config-Structured MTYRRELL 1.001 Mojolicious Plugin for Config::Structured: locates and reads config and definition files and loads them into a Config::Structured instance, made available globally as 'conf'
Mojolicious-Plugin-DataTables GDT 1.00 DataTables Plugin for Mojolicious
Mojolicious-Plugin-Sticker BLABOS v0.0.1 turns baubles into trinkets
MySQL-Util-CLI GRAVATTJ 0.001 A handy cli interface for MySQL::Util
Net-API-REST JDEGUEST v0.5.3 Implementation of RESTful API
Net-API-Stripe JDEGUEST 0.5 An interface to the Stripe API
Net-API-Telegram JDEGUEST 0.4 Implementation of Telegram API
Net-OpenVAS GDT 0.100 Perl extension for OpenVAS Scanner
OPTIMADE-Filter MERKYS 0.8.0 OPTIMADE filter language parser/composer
OpenTracing-Manual VANHOESEL 0.01 A quick overview about Perl5 and OpenTracing
Plack-Middleware-Security-Simple RRWO v0.2.0 A simple security filter for Plack
Primesieve OESI 0.01 Perl extension for primesieve
Protocol-HTTP SYBER v1.0.0 very fast HTTP protocol incremental parser and serializer
Protocol-HTTP-Compression-Brotli SYBER v1.0.0 Broli compression plugin for Protocol::HTTP
QQ-weixin-work YOURSELF 0
Return-Type-Lexical CCM 0.001 Same thing as Return::Type, but lexical
Rtmgr-Gen-Db CLEM 0.01 Connect to rTorrent/ruTorrent installation and get a list of torrents, storing them to a database.!
Sah-Schemas-Git PERLANCAR 0.001 Sah schemas related to git
Sah-Schemas-PhysicalQuantity PERLANCAR 0.001 Various Sah schemas to represent physical quantities (length/distance, mass, etc)
Search-Elasticsearch-Client-6_0 EZIMUEL 6.80 Thin client with full support for Elasticsearch 6.x APIs
Search-Elasticsearch-Client-6_0-Async EZIMUEL 6.80 Thin async client with full support for Elasticsearch 6.x APIs
Serge-Sync-Plugin-TranslationService-weblate DRAGOSV 0.900.1 Weblate (https://weblate.org/) synchronization plugin for Serge
Shell-Cap PERLANCAR 0.001 Probe shell's capabilities
ShellQuote-Any-PERLANCAR PERLANCAR 0.003 Escape strings for the shell on Unix or MSWin32
Statistics-Covid BLIAKO 0.13 Fetch, store in DB, retrieve and analyse Covid-19 statistics from data providers
TSQL-FlatFile DEDMEDVED 1.00 secret module by Ded MedVed
Term-ANSIColor-WithWin32 PERLANCAR 0.001 Use Term::ANSIColor and load Win32::Console::ANSI on Windows
Test-PostgreSQL-Docker YTURTLE 0.01 A Postgresql mock server for testing perl programs
Test-Sah-Schema PERLANCAR 0.001 Test Sah::Schema::* modules in distribution
Touchscreen-Any PERLANCAR 0.001 Common interface to touchscreen
UniEvent SYBER v1.0.0 Object-oriented, fast and extendable event loop abstraction framework with Perl and C++ interface.
Web-Solid-Test KJETILK 0.011_01 Solid Test Scripts
Win32-Vcpkg PLICEASE 0.01 Interface to Microsoft Vcpkg
XML-BindData SARGIE 0.3.2 Bind Perl data structures into XML
XML-Minifier CONTRA 1.02 A configurable XML minifier.
XML-Minify CONTRA 1.00 It's a configurable XML minifier.
XS-Parse-Sublike PEVANS 0.01 XS functions to assist in parsing sub-like syntax
XS-librangeV3 SYBER v1.0.0 C++ range v3 library for XS
kateb KIAVASH v00.98.12 indtsll and update Farsi free fonts
ore AWNCORP 0.01 Sugar for Perl 5 one-liners

Stats

Number of new CPAN distributions this period: 104

Number of authors releasing new CPAN distributions this period: 52

Authors by number of new CPAN distributions this period:

No Author Distributions
1 PERLANCAR 23
2 AWNCORP 14
3 JDEGUEST 5
4 SYBER 5
5 GDT 2
6 RRWO 2
7 CCM 2
8 MTYRRELL 2
9 GSG 2
10 CONTRA 2
11 PLICEASE 2
12 EZIMUEL 2
13 PEVANS 2
14 MBRADSHAW 1
15 VANHOESEL 1
16 LNATION 1
17 PJACKLAM 1
18 MSTROUT 1
19 PRAJITH 1
20 TVV 1
21 EXODIST 1
22 BLIAKO 1
23 WYANT 1
24 UTASHIRO 1
25 KIWIROY 1
26 PATRICKB 1
27 BLABOS 1
28 SARGIE 1
29 YOURSELF 1
30 JMATES 1
31 AVERNA 1
32 CJFIELDS 1
33 TESMITH 1
34 SKIM 1
35 DMOL 1
36 RUNE 1
37 JJSIMONI 1
38 KARJALA 1
39 KIAVASH 1
40 GRAVATTJ 1
41 OESI 1
42 VRAG 1
43 CLEM 1
44 SHLOMIF 1
45 DEDMEDVED 1
46 MERKYS 1
47 SKINGTON 1
48 KJETILK 1
49 DRAGOSV 1
50 BAYASHI 1
51 LTM 1
52 YTURTLE 1