Skip to content

Instantly share code, notes, and snippets.

@s1037989
s1037989 / 3cx.pl
Last active April 6, 2019 04:33
Expand 3cx Call Report into all timestamps
use Mojo::Base -strict;
use Mojo::ByteStream 'b';
use Mojo::Collection;
use Mojo::CSV;
use Mojo::Util qw(dumper sha1_sum);
use Time::Piece;
my ($SEED, $COUNTER) = ($$ . time . rand, int rand 0xffffff);
@s1037989
s1037989 / Mojo-UserAgent-Role-AWSSignature4.pm
Last active September 28, 2025 19:09
Use Mojo::UserAgent::Role::AWSSignature4 to interface with AWS REST API, such as controlling EC2 or working uploading and downloading S3 content. Works with S3-compatible APIs, of course, such as Digital Ocean Spaces and Wasabi.
package Mojo::UserAgent::Role::AWSSignature4;
use Mojo::Base -role, -signatures;
use Digest::SHA;
use Mojo::Collection;
use Time::Piece;
has access_key => sub { $ENV{AWS_ACCESS_KEY} or die 'missing "access_key"' };
has aws_algorithm => 'AWS4-HMAC-SHA256';
has content => undef;
@s1037989
s1037989 / mycookie
Created February 4, 2019 20:07
Mojolicious::Sessions-like Cookies
package Mojolicious::MyCookie;
use Mojo::Base -base;
use Mojo::JSON;
use Mojo::Util qw(b64_decode b64_encode);
has [qw(cookie_domain secure)];
has cookie_name => 'mycookie';
has cookie_path => '/';
has default_expiration => 3600;
use Mojo::Base -strict;
use Mojo::Util 'dumper';
use Mojo::File 'path';
use Mojo::ByteStream 'b';
my ($at, $qb) = map { b(path($_)->slurp)->split("\n") } @ARGV[0,1];
my %recon;
$at->grep(qr/^\d+\t/)->each(sub {
package Mojolicious::Command::router;
use Mojo::Base 'Mojolicious::Command';
use Mojo::Log;
use Mojo::UserAgent;
use Mojo::Server::Prefork;
use Mojo::File 'path';
use Mojo::Util qw'dumper getopt';
use Mojo::Collection 'c';
use Mojo::ByteStream 'b';
@s1037989
s1037989 / json2tsv
Last active December 16, 2018 05:27
use ojo;
no warnings;
my $j = j(<>);
my %c = ();
$c{$_}++ foreach map { keys %$_ } @$j;
my @c = sort keys %c;
say join "\t", @c;
say join "\t", @$_{@c} foreach @$j;
@s1037989
s1037989 / export
Created September 28, 2018 05:09
hubspot api export
use Mojo::Base -strict;
use Mojo::File 'path';
use Mojo::JSON 'j';
use Mojo::UserAgent;
use Mojo::URL;
# Usage:
# HUBSPOT_HAPIKEY=8....d HUBSPOT_USERID=3....0 perl export 3 2 1
our $base = 'https://api.hubapi.com';
my $dry = 1;
# Remove query string from files on disk
$home->list_tree->slice(0)->each(sub{
/^(.*?)\?|\@/ or return;
say "$_ => $1";
return if $dry;
$_->move_to($1);
});
use Mojo::Base -strict;
use Mojo::Util 'dumper';
use Algorithm::Diff 'sdiff';
my @a = split //, 'acaagaaaagagacgaaagacacaggggcgccgagggcagaagaaagagcaacgacggcccacaaaagcgggaacgccag';
my @b = split //, 'acaagaaaagatatgaaagacacaggggcgccgagggcagaagaagcaacgacggcccacaaaagcgggaggctgaaacgccag';
my @sdiff = sdiff(\@a, \@b);
say join '', map { $_->[1] || ' ' } @sdiff;
#!/usr/bin/env perl
use lib 'lib';
use lib 'Mojocron/lib';
use Mojo::Log;
use Mojo::HelloWorld;
use Mojo::IOLoop;
use Mojo::Server::Daemon;
use Mojo::Server::Morbo;