Skip to content

Instantly share code, notes, and snippets.

@nicomen
nicomen / gist:0349133154be43cf0e656eeee84ef838
Created September 25, 2023 10:38
Mojolicious backwards compatibility
Mojo::Loader->new->load => Mojo::Loader->load_class
Mojo::Home->rel_dir => Mojo::Home->rel_file
@nicomen
nicomen / gist:fa5b5ba637da574cc6473e55663c52bf
Last active November 14, 2022 02:15
Hacking perl the intepreter
# Configure with debugging allows using PerlIO_printf(Perl_debug_log, "", …);
./Configure -des -Dusedevel -Dprefix=$HOME/localperl -DDEBUGGING
# But -DDEBUGGING does not seem to work so I use this:
./Configure -des -Dusedevel -Dprefix=$HOME/localperl -A ccflags=-DDEBUGGING
# Just build a bare bones executable
make miniperl
# Run code
@nicomen
nicomen / countdown.pl
Last active April 20, 2021 00:59
1 out of 10 cats
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
use Algorithm::Combinatorics qw(variations_with_repetition permutations);
use List::SomeUtils qw/zip natatime/;
my $nums = [qw{75 25 5 8 10 9}];
@nicomen
nicomen / gist:fa04fee2a676599f42a1e3813661609b
Last active July 16, 2021 06:46
o.a.s.s.HttpSolrCall java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 120000/120000 ms
Surprisingly this error was triggered by the solr client libraries not posting correctly and letting the connection time out.
Nothing to do with garbage collection (GC) or memory which all other search results suggested.
Hope someone finds this helpful
2021-03-25 23:34:17.196 ERROR (qtp1463355115-1924) [c:charter_se s:shard2 r:core_node5 x:charter_se_shard2_replica_n2] o.a.s.s.HttpSolrCall java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 120000/120000 ms
at org.eclipse.jetty.server.HttpInput$ErrorState.noContent(HttpInput.java:1091)
at org.eclipse.jetty.server.HttpInput.read(HttpInput.java:321)
at org.apache.solr.servlet.ServletInputStreamWrapper.read(ServletInputStreamWrapper.java:74)
@nicomen
nicomen / gist:044d58f7444762412d91e98aae8f84e6
Last active September 10, 2018 16:07
' allowed as package delimiter vs. syntax error, passing a string into foo and correct interpolation
✔ 18:00 /projects/perl-git [ blead | ✚ 14 …2 ] $ perl -wle "package foo'bar; sub lol { print 'lol'; }; foo'bar::lol()"
lol
✔ 18:00 /projects/perl-git [ blead | ✚ 14 …2 ] $ ./perl -wle "package foo'bar; sub lol { print 'lol'; }; foo'bar::lol()"
Bareword found where operator expected at -e line 1, near "'bar; sub lol { print 'lol"
(Missing operator before lol?)
Unquoted string "lol" may clash with future reserved word at -e line 1.
String found where operator expected at -e line 1, near "lol'; }; foo'"
Bareword found where operator expected at -e line 1, near "'; }; foo'bar::lol"
(Missing operator before bar::lol?)
@nicomen
nicomen / gist:402a091149bfc81cb8df1a9d9f3d0ba3
Created September 5, 2018 16:21
getting correct versions of possible valid dependencies
sub _get_deb_candidates {
my ( $self, $wanted_pkgs) = @_;
$self->log('._deb_deb_candidates')->logdie("Please provide packages to search for") unless $wanted_pkgs;
my $candidates;
for my $wanted_pkg (keys %{$wanted_pkgs}) {
my $pkg_pattern = $self->_get_pkg_alternatives_pattern($wanted_pkg);
@nicomen
nicomen / gist:09c98a8b413d1160a902d205ae72c671
Created September 5, 2018 16:19
jerry builder tests for version comparison
is(Build::Debian::Dpkg->cmp_fileversion('test_1.10_amd64.deb','1.2'), 1,'cmp_fileversion: test_1.10_amd64.deb > 1.2');
is(Build::Debian::Dpkg->cmp_fileversion('cpan-libfiltered-perl_0.0.7-1355404556_all.deb','v0.0.4'), 1,'cmp_fileversion: cpan-libfiltered-perl_0.0.7-1355404556_all.deb > v0.0.4');
is(Build::Debian::Dpkg->cmp_fileversion('libdatetime-timezone-perl_1.58-1+2013b_all.deb', '1.09'), 1, 'cmp_fileversion: libdatetime-timezone-perl_1.58-1+2013b_all.deb > 1.09');
is(Build::Debian::Dpkg->cmp_fileversion('libtest-perl_1.10_amd64.deb','1.2'), -1, 'cmp_fileversion: libtest-perl_1.10_amd64.deb < 1.2');
is(Build::Debian::Dpkg->cmp_fileversion('libc6_2.13-38_amd64.deb','2.13'), 1, 'cmp_fileversion: libc6_2.13-38_amd64.deb > 2.13');
is(Build::Debian::Dpkg->cmp_fileversion('libc6_2.13_amd64.deb','2.13'), 0, 'cmp_fileversion: libc6_2.13_amd64.deb == 2.13');
is(Build::Debian::Dpkg::version_compare('0.0.7','v0.0.4' ), 1, 'Comparing versio
package MojoCarpAlways;
use Mojo::Base -strict;
use Mojo::Exception;
*Mojo::Exception::to_string = sub {
my $self = shift;
my $str = $self->message;
$str .= join "\n", map { " $_->[1]: " . $_->[2] } @{ $self->frames };
# Failed test 'query that remove defaults'
# at t/Solr.pm line 20.
# Comparing $data->{"allowed_supplier_ids"} as a SubBag
# Extra: '66'
# {
# 'adults' => 2,
# 'allowed_supplier_ids' => '***masked***',
# 'children' => 0,
# 'collapse_field' => 'hotel_id',
# 'facet_min_count' => 0,
$ perl -Ilib -wle 'use Mojo::Promise; for my $die (qw/0 1/) { warn "$die\n"; my $p = Mojo::Promise->new; $p->then(sub { die if $die; })->then(sub { return "survived"; }, sub { return "died"; })->then(sub { print shift . " but recovered" }); $p->resolve; $p->wait; }'
0
survived but recovered
1
died but recovered
vs
$ perl -Ilib -wle 'use Mojo::Promise; for my $die (qw/0 1/) { warn "$die\n"; my $p = Mojo::Promise->new; $p->then(sub { die if $die; })->then(sub { return "survived"; }, sub { die "died"; })->then(sub { print shift . " but recovered" }, sub { print "died but not recovered" }); $p->resolve; $p->wait; }'
0