Dotfiles, utilities, and other apparatus.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.3 KiB

  1. #!/usr/bin/env perl
  2. use warnings;
  3. use strict;
  4. use 5.10.0;
  5. use utf8;
  6. use open ':encoding(UTF-8)';
  7. use open qw(:std :utf8);
  8. use Time::Piece;
  9. use Time::Seconds;
  10. # We're simulating Unix timestamps here:
  11. my $end = localtime->epoch;
  12. my $start = $end - (3600);
  13. say "Starting at: $start";
  14. my @bars = qw(_ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █);
  15. my $bin_count = 12;
  16. my $range = $end - $start;
  17. my $bin_width = $range / $bin_count;
  18. my %bins;
  19. for (0..($bin_count - 1)) {
  20. my $bin_start = $start + ($_ * $bin_width);
  21. $bins{$bin_start} = 0;
  22. }
  23. # Fake some events:
  24. for (1..200) {
  25. my $event = $start + int(rand($range));
  26. for my $bin (keys %bins) {
  27. if (($event > $bin) && ($event < ($bin + $bin_width))) {
  28. $bins{$bin}++;
  29. }
  30. }
  31. }
  32. # Figure out what the tallest bin is, and map to a unit size.
  33. my $biggest_bin = 0;
  34. foreach my $bin_height (values %bins) {
  35. if ($bin_height > $biggest_bin) {
  36. $biggest_bin = $bin_height;
  37. }
  38. }
  39. # Just some debugging - print bin starts and counts:
  40. foreach my $bin (sort keys %bins) {
  41. say $bin . " " . $bins{$bin};
  42. }
  43. # Display a bar for each bin:
  44. foreach my $bin (sort keys %bins) {
  45. my $bar_level = int(($bins{$bin} / $biggest_bin) * (scalar @bars));
  46. my $bar = ' ';
  47. if ($bar_level) {
  48. $bar = $bars[$bar_level - 1];
  49. }
  50. print $bar;
  51. }
  52. print "\n";
  53. say "Ending at: $end";