GNU bug report logs - #30053
[PATCH 1/3] Improve appearance of tabular output.

Previous Next

Package: guix-patches;

Reported by: Steve Sprang <steve.sprang <at> gmail.com>

Date: Tue, 9 Jan 2018 22:35:02 UTC

Severity: normal

Tags: patch

Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 30053 in the body.
You can then email your comments to 30053 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Tue, 09 Jan 2018 22:35:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Steve Sprang <steve.sprang <at> gmail.com>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Tue, 09 Jan 2018 22:35:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Steve Sprang <steve.sprang <at> gmail.com>
To: guix-patches <at> gnu.org
Subject: [PATCH 1/3] Improve appearance of tabular output.
Date: Tue, 9 Jan 2018 14:34:46 -0800
[Message part 1 (text/plain, inline)]
I noticed when listing installed or available packages that the output
is often pretty jumbled up because columns in each row have an
inconsistent width.

This series of patches adds a new procedure for printing tabular data
(pretty-print-table) and modifies the code for --list-installed,
--list-available, and --list-generations to utilize it.

-Steve
[0001-utils-Add-a-procedure-for-pretty-printing-tabular-da.patch (text/x-patch, attachment)]

Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Tue, 09 Jan 2018 22:38:02 GMT) Full text and rfc822 format available.

Message #8 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Steve Sprang <steve.sprang <at> gmail.com>
To: 30053 <at> debbugs.gnu.org
Subject: [PATCH 2/3] Improve appearance of tabular output.
Date: Tue, 9 Jan 2018 14:37:02 -0800
[Message part 1 (text/plain, inline)]

[0002-package-Improve-output-appearance-when-listing-packa.patch (text/x-patch, attachment)]

Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Tue, 09 Jan 2018 22:38:02 GMT) Full text and rfc822 format available.

Message #11 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Steve Sprang <steve.sprang <at> gmail.com>
To: 30053 <at> debbugs.gnu.org
Subject: [PATCH 3/3] Improve appearance of tabular output.
Date: Tue, 9 Jan 2018 14:37:24 -0800
[Message part 1 (text/plain, inline)]

[0003-ui-Improve-output-appearance-when-listing-generation.patch (text/x-patch, attachment)]

Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Thu, 11 Jan 2018 21:33:01 GMT) Full text and rfc822 format available.

Message #14 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Steve Sprang <steve.sprang <at> gmail.com>
Cc: 30053 <at> debbugs.gnu.org
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Thu, 11 Jan 2018 22:32:29 +0100
Hello Steve,

Long time no see!  ;-)

Steve Sprang <steve.sprang <at> gmail.com> skribis:

> I noticed when listing installed or available packages that the output
> is often pretty jumbled up because columns in each row have an
> inconsistent width.
>
> This series of patches adds a new procedure for printing tabular data
> (pretty-print-table) and modifies the code for --list-installed,
> --list-available, and --list-generations to utilize it.

I have a disappointing explanation I’m afraid: the reason columns look
this way is because they are tab-separated, which in turn makes it easy
to filter with ‘cut’:

--8<---------------cut here---------------start------------->8---
$ guix package -A | cut -f1 | head
0ad
0ad-data
0xffff
4store
4ti2
a2ps
aalib
abbaye
abc
abcde
--8<---------------cut here---------------end--------------->8---

An example from the manual (info "(guix) Invoking guix build"):

     guix build --quiet --keep-going \
       `guix package -A | cut -f1,2 --output-delimiter=@`

The idea was to have this shell-scripting-friendly format, and to
provide fancier output in other commands, such as --search (which is in
fact script-friendly as well thanks to recutils).

Silly? Awesome? Ugly? What do people think?  :-)

Thank you,
Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Thu, 11 Jan 2018 23:33:02 GMT) Full text and rfc822 format available.

Message #17 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Steve Sprang <steve.sprang <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 30053 <at> debbugs.gnu.org
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Thu, 11 Jan 2018 15:32:35 -0800
Hi Ludovic,

On Thu, Jan 11, 2018 at 1:32 PM, Ludovic Courtès <ludo <at> gnu.org> wrote:
> Long time no see!  ;-)

Yeah, it's been a while!

> I have a disappointing explanation I’m afraid: the reason columns look
> this way is because they are tab-separated, which in turn makes it easy
> to filter with ‘cut’:
>
> --8<---------------cut here---------------start------------->8---
> $ guix package -A | cut -f1 | head
> 0ad
> 0ad-data
> 0xffff
> 4store
> 4ti2
> a2ps
> aalib
> abbaye
> abc
> abcde
> --8<---------------cut here---------------end--------------->8---

I'm still inserting a tab between columns, so I believe 'cut' still
works as expected in this case. Initially, I was separating columns
with a few spaces, but that broke some of the tests that were relying
on cut, so I switched back to tab.

> An example from the manual (info "(guix) Invoking guix build"):
>
>      guix build --quiet --keep-going \
>        `guix package -A | cut -f1,2 --output-delimiter=@`

Argh, this use case fails because of the extra inserted whitespace.

> The idea was to have this shell-scripting-friendly format, and to
> provide fancier output in other commands, such as --search (which is in
> fact script-friendly as well thanks to recutils).
>
> Silly? Awesome? Ugly? What do people think?  :-)

Another potential drawback of this patch is that it tends to make
output lines longer than before. This might make line-wrapping less
pleasant when using smaller terminal windows/screens.

-Steve




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Fri, 12 Jan 2018 13:30:02 GMT) Full text and rfc822 format available.

Message #20 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Roel Janssen <roel <at> gnu.org>
To: Steve Sprang <steve.sprang <at> gmail.com>
Cc: 30053 <at> debbugs.gnu.org, Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Fri, 12 Jan 2018 14:28:30 +0100
Steve Sprang writes:

> Hi Ludovic,
>
> On Thu, Jan 11, 2018 at 1:32 PM, Ludovic Courtès <ludo <at> gnu.org> wrote:
>> Long time no see!  ;-)
>
> Yeah, it's been a while!
>
>> I have a disappointing explanation I’m afraid: the reason columns look
>> this way is because they are tab-separated, which in turn makes it easy
>> to filter with ‘cut’:
>>
>> --8<---------------cut here---------------start------------->8---
>> $ guix package -A | cut -f1 | head
>> 0ad
>> 0ad-data
>> 0xffff
>> 4store
>> 4ti2
>> a2ps
>> aalib
>> abbaye
>> abc
>> abcde
>> --8<---------------cut here---------------end--------------->8---
>
> I'm still inserting a tab between columns, so I believe 'cut' still
> works as expected in this case. Initially, I was separating columns
> with a few spaces, but that broke some of the tests that were relying
> on cut, so I switched back to tab.
>
>> An example from the manual (info "(guix) Invoking guix build"):
>>
>>      guix build --quiet --keep-going \
>>        `guix package -A | cut -f1,2 --output-delimiter=@`
>
> Argh, this use case fails because of the extra inserted whitespace.
>
>> The idea was to have this shell-scripting-friendly format, and to
>> provide fancier output in other commands, such as --search (which is in
>> fact script-friendly as well thanks to recutils).
>>
>> Silly? Awesome? Ugly? What do people think?  :-)
>
> Another potential drawback of this patch is that it tends to make
> output lines longer than before. This might make line-wrapping less
> pleasant when using smaller terminal windows/screens.
>
> -Steve

If we use GNU awk instead of cut, I think any whitespace will work:
  $ guix package -A | awk '{ print $1 "@" $2 }'

And then we can optimize the output reading experience for our users
instead of for the 'cut' program.

Kind regards,
Roel Janssen




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Fri, 12 Jan 2018 14:57:02 GMT) Full text and rfc822 format available.

Message #23 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Danny Milosavljevic <dannym <at> scratchpost.org>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: 30053 <at> debbugs.gnu.org, Steve Sprang <steve.sprang <at> gmail.com>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Fri, 12 Jan 2018 15:56:12 +0100
Hi Ludo,
Hi Steve,

terminals support setting tab stops.  The user could (and arguably should) just set them (see tabs(1).  Example invocation: "tabs 1,20,25").

> I have a disappointing explanation I’m afraid: the reason columns look
> this way is because they are tab-separated, which in turn makes it easy
> to filter with ‘cut’:

Also, they are columns in a TABle.

There's also "column -t" which one can pipe the output to, which will take care of autosizing the columns. 

It's typical of UNIX tools that they prefer machine readability to usability.  There are always small tools like the ones above one can use (either before the invocation or after the invocation) to make output more usable.

That said, Steve even retains the tabs, so both use cases would be supported.  The only cost is that with the patch there's a lot of whitespace printed in columns that's actually not in the database at all.  But that's OK I think.

Also, "guix package -A" (even before the patch) eats up all my 8 GB of RAM on guix master and then my computer hangs.  What's up with that? (I tried it 3 times now - it's reproducible) O_o




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Fri, 12 Jan 2018 15:27:02 GMT) Full text and rfc822 format available.

Message #26 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Leo Famulari <leo <at> famulari.name>
To: Danny Milosavljevic <dannym <at> scratchpost.org>
Cc: 30053 <at> debbugs.gnu.org, Ludovic Courtès <ludo <at> gnu.org>,
 Steve Sprang <steve.sprang <at> gmail.com>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Fri, 12 Jan 2018 07:26:31 -0800
[Message part 1 (text/plain, inline)]
On Fri, Jan 12, 2018 at 03:56:12PM +0100, Danny Milosavljevic wrote:
> Also, "guix package -A" (even before the patch) eats up all my 8 GB of
> RAM on guix master and then my computer hangs.  What's up with that?
> (I tried it 3 times now - it's reproducible) O_o

I can't reproduce this with a recent Guix. Are you using any custom
packages or modifications?
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Sat, 13 Jan 2018 13:48:01 GMT) Full text and rfc822 format available.

Message #29 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Leo Famulari <leo <at> famulari.name>
Cc: 30053 <at> debbugs.gnu.org, Danny Milosavljevic <dannym <at> scratchpost.org>,
 Steve Sprang <steve.sprang <at> gmail.com>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Sat, 13 Jan 2018 14:47:21 +0100
Leo Famulari <leo <at> famulari.name> skribis:

> On Fri, Jan 12, 2018 at 03:56:12PM +0100, Danny Milosavljevic wrote:
>> Also, "guix package -A" (even before the patch) eats up all my 8 GB of
>> RAM on guix master and then my computer hangs.  What's up with that?
>> (I tried it 3 times now - it's reproducible) O_o
>
> I can't reproduce this with a recent Guix. Are you using any custom
> packages or modifications?

Yeah you most likely have something fishy in $GUIX_PACKAGE_PATH.

Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Sat, 13 Jan 2018 20:00:02 GMT) Full text and rfc822 format available.

Message #32 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Steve Sprang <steve.sprang <at> gmail.com>
To: Roel Janssen <roel <at> gnu.org>
Cc: 30053 <at> debbugs.gnu.org, Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Sat, 13 Jan 2018 11:59:14 -0800
On Fri, Jan 12, 2018 at 5:28 AM, Roel Janssen <roel <at> gnu.org> wrote:
> If we use GNU awk instead of cut, I think any whitespace will work:
>   $ guix package -A | awk '{ print $1 "@" $2 }'
>
> And then we can optimize the output reading experience for our users
> instead of for the 'cut' program.

I like this proposal, unless there is a strong reason to prefer 'cut'?

We would obviously need to update relevant scripts and documentation.
It might also break any user scripts relying on the current behavior.

Since awk can more flexibly separate fields (versus cut's single
character delimiter) I could modify this patch to separate columns
with one or two spaces instead of tabs. This generally produces a
table with shorter line lengths and a neater presentation.

-Steve




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Tue, 16 Jan 2018 14:17:01 GMT) Full text and rfc822 format available.

Message #35 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Steve Sprang <steve.sprang <at> gmail.com>
Cc: 30053 <at> debbugs.gnu.org, Roel Janssen <roel <at> gnu.org>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Tue, 16 Jan 2018 15:16:48 +0100
Steve Sprang <steve.sprang <at> gmail.com> skribis:

> On Fri, Jan 12, 2018 at 5:28 AM, Roel Janssen <roel <at> gnu.org> wrote:
>> If we use GNU awk instead of cut, I think any whitespace will work:
>>   $ guix package -A | awk '{ print $1 "@" $2 }'
>>
>> And then we can optimize the output reading experience for our users
>> instead of for the 'cut' program.
>
> I like this proposal, unless there is a strong reason to prefer 'cut'?

Again a matter of taste, but ‘cut’ looks to me both easier and simpler
than awk (since it’s a full language).

But anyway, as Danny write, if your patches retain tabs (in addition to
spaces), presumably it’s OK even for those of us who prefer ‘cut’,
right?

Thanks,
Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Tue, 16 Jan 2018 23:57:01 GMT) Full text and rfc822 format available.

Message #38 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Steve Sprang <steve.sprang <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 30053 <at> debbugs.gnu.org, Roel Janssen <roel <at> gnu.org>
Subject: Re: [bug#30053] [PATCH 1/3] Improve appearance of tabular output.
Date: Tue, 16 Jan 2018 15:56:28 -0800
On Tue, Jan 16, 2018 at 6:16 AM, Ludovic Courtès <ludo <at> gnu.org> wrote:

> Again a matter of taste, but ‘cut’ looks to me both easier and simpler
> than awk (since it’s a full language).
>
> But anyway, as Danny write, if your patches retain tabs (in addition to
> spaces), presumably it’s OK even for those of us who prefer ‘cut’,
> right?

If the tab is retained I think most uses of 'cut' keep working. The
only exception I'm aware of is this:

$ guix build --quiet --keep-going \
        `guix package -A | cut -f1,2 --output-delimiter=@`

Since 'cut' splits on the tab you end up retaining the padding spaces
from field 1 resulting in, say, "guile      @2.2.3" instead of the
desired "guile <at> 2.2.3".

-Steve




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Thu, 15 Jul 2021 05:40:02 GMT) Full text and rfc822 format available.

Message #41 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: 30053 <at> debbugs.gnu.org, Steve Sprang <steve.sprang <at> gmail.com>,
 Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3] Improve appearance of tabular output.
Date: Thu, 15 Jul 2021 01:39:36 -0400
[Message part 1 (text/plain, inline)]
Hello!

ludo <at> gnu.org (Ludovic Courtès) writes:

> Steve Sprang <steve.sprang <at> gmail.com> skribis:
>
>> On Fri, Jan 12, 2018 at 5:28 AM, Roel Janssen <roel <at> gnu.org> wrote:
>>> If we use GNU awk instead of cut, I think any whitespace will work:
>>>   $ guix package -A | awk '{ print $1 "@" $2 }'
>>>
>>> And then we can optimize the output reading experience for our users
>>> instead of for the 'cut' program.
>>
>> I like this proposal, unless there is a strong reason to prefer 'cut'?
>
> Again a matter of taste, but ‘cut’ looks to me both easier and simpler
> than awk (since it’s a full language).
>
> But anyway, as Danny write, if your patches retain tabs (in addition to
> spaces), presumably it’s OK even for those of us who prefer ‘cut’,
> right?
>
> Thanks,
> Ludo’.

I rebased this set of patch, and modified them slightly (attached).  One
thing that got my attention is the performance.  For short lists of
packages, it's invisible, but it takes noticeably longer for 'guix
package -A', for example.  I'm not sure where the time gets spent (see:
https://paste.debian.net/1204412/).

This is for guix package -A:

--8<---------------cut here---------------start------------->8---
%     cumulative   self             
time   seconds     seconds  procedure
 17.28     37.22      3.61  guix/memoization.scm:100:0
  9.52      2.25      1.99  set-procedure-property!
  4.23      1.14      0.89  ice-9/vlist.scm:539:0:vhash-assq
  3.70      0.77      0.77  ice-9/popen.scm:183:0:reap-pipes
  3.00      0.63      0.63  ice-9/eval.scm:604:6
  2.82      0.66      0.59  open-output-string
  2.65      1.36      0.55  srfi/srfi-1.scm:1028:0:lset-intersection
  2.29      0.48      0.48  write-char
  2.12      0.44      0.44  display
  1.94      0.44      0.41  ice-9/boot-9.scm:2217:0:%load-announce
  1.59      0.33      0.33  hash-ref
  1.59      0.33      0.33  hashq
  1.41      0.41      0.30  ice-9/vlist.scm:449:0:vhash-cons
  1.23      3.58      0.26  ice-9/format.scm:113:2:format:format-work
  1.23      2.99      0.26  ice-9/format.scm:39:0:format
  1.23      0.33      0.26  srfi/srfi-1.scm:1033:17
  1.06      0.30      0.22  guix/packages.scm:924:6:mproc
  1.06      0.22      0.22  string=?
  1.06      0.22      0.22  hash-set!
  1.06      0.22      0.22  procedure?
  1.06      0.22      0.22  ice-9/boot-9.scm:3569:0:autoload-done-or-in-progress?
  1.06      0.22      0.22  append
  1.06      0.22      0.22  reverse!
  0.88      2.80      0.18  guix/build-system/cargo.scm:246:0:lower
  0.88      0.37      0.18  ice-9/eval.scm:297:11
  0.88      0.18      0.18  list?
  0.71     43.08      0.15  ice-9/eval.scm:292:11
  0.71     24.34      0.15  guix/packages.scm:926:16
  0.71      0.18      0.15  make-string
  0.53    246.72      0.11  ice-9/threads.scm:388:4
  0.53     32.97      0.11  guix/packages.scm:924:6
  0.53      2.07      0.11  ice-9/eval.scm:159:9
  0.53      1.33      0.11  ice-9/format.scm:759:2:format:out-obj-padded
  0.53      0.15      0.11  get-output-string
  0.53      0.11      0.11  ice-9/eval.scm:126:12
  0.53      0.11      0.11  reverse
  [...]
---
Sample count: 567
Total time: 20.913633405 seconds (12.747006885 seconds in GC)
--8<---------------cut here---------------end--------------->8---

Without the change 'guix package -A' runs in about 2 seconds.  With the
change it runs in about 12 seconds here.

Danny's suggestion to use 'guix package -A | columns -t' works too, but
it's not convenient nor discoverable.

Any opinions?  Otherwise I might throw a coin, as I'm 50/50 on this.

[0001-utils-Add-a-procedure-for-pretty-printing-tabular-da.patch (text/x-patch, attachment)]
[0002-package-Improve-output-appearance-when-listing-packa.patch (text/x-patch, attachment)]
[0003-ui-Improve-output-appearance-when-listing-generation.patch (text/x-patch, attachment)]
[Message part 5 (text/plain, inline)]
Thanks,

Maxim

Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Thu, 15 Jul 2021 17:37:02 GMT) Full text and rfc822 format available.

Message #44 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: 30053 <at> debbugs.gnu.org, Steve Sprang <steve.sprang <at> gmail.com>,
 Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3 v2] Improve appearance of tabular output.
Date: Thu, 15 Jul 2021 13:36:16 -0400
[Message part 1 (text/plain, inline)]
Hi,

Here's an improved version of the first patch.  It now uses a hard limit
on the maximum width of a column, which is a poor man's way of getting
rid of the outliers that cause the table to be too wide in some
situations (such as in 'guix package -A').

Otherwise the performance remain unchanged (from ~2 to ~7 seconds with
'guix package -A' on a fast machine).

[0001-utils-Add-a-procedure-for-pretty-printing-tabular-da.patch (text/x-patch, attachment)]
[Message part 3 (text/plain, inline)]
Thanks!

Maxim

Reply sent to Maxim Cournoyer <maxim.cournoyer <at> gmail.com>:
You have taken responsibility. (Thu, 15 Jul 2021 20:16:02 GMT) Full text and rfc822 format available.

Notification sent to Steve Sprang <steve.sprang <at> gmail.com>:
bug acknowledged by developer. (Thu, 15 Jul 2021 20:16:02 GMT) Full text and rfc822 format available.

Message #49 received at 30053-done <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: 30053-done <at> debbugs.gnu.org, Steve Sprang <steve.sprang <at> gmail.com>,
 Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3] Improve appearance of tabular output.
Date: Thu, 15 Jul 2021 16:15:12 -0400
Hi again,

Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes:

> Hi,
>
> Here's an improved version of the first patch.  It now uses a hard limit
> on the maximum width of a column, which is a poor man's way of getting
> rid of the outliers that cause the table to be too wide in some
> situations (such as in 'guix package -A').
>
> Otherwise the performance remain unchanged (from ~2 to ~7 seconds with
> 'guix package -A' on a fast machine).
>
>
>
> Thanks!
>
> Maxim

I've improved it some more and pushed as 01d7e8c278.  The performance is
about 5 s on a fast machines to format the 18000 something packages of
the collection, compared to 2 s before (guix package -A), which I think
is OK (but it'd be nice to see Guile opitimize for faster (ice-9
format)!).

Closing.

Thanks to all involved!

Maxim




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Thu, 15 Jul 2021 22:06:02 GMT) Full text and rfc822 format available.

Message #52 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Sarah Morgensen <iskarian <at> mgsn.dev>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Cc: 30053 <at> debbugs.gnu.org, Ludovic Courtès <ludo <at> gnu.org>,
 Steve Sprang <steve.sprang <at> gmail.com>, Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3] Improve appearance of tabular output.
Date: Thu, 15 Jul 2021 15:05:18 -0700
Hi Maxim,

Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes:

> [...]
> ---
> Sample count: 567
> Total time: 20.913633405 seconds (12.747006885 seconds in GC)
>
> Without the change 'guix package -A' runs in about 2 seconds.  With the
> change it runs in about 12 seconds here.

I cannot replicate this. Without the patch on master (7e0da2f):

--8<---------------cut here---------------start------------->8---
$ time ./pre-inst-env guix package -A > /dev/null

real	0m5.473s
user	0m6.698s
sys	0m0.094s
--8<---------------cut here---------------end--------------->8---

And with the patch:

--8<---------------cut here---------------start------------->8---
$ time ./pre-inst-env guix package -A > /dev/null

real	0m5.778s
user	0m6.862s
sys	0m0.061s
--8<---------------cut here---------------end--------------->8---

Perhaps there's something else going on there? I'm on x86-64, if that's
useful.

> Danny's suggestion to use 'guix package -A | columns -t' works too, but
> it's not convenient nor discoverable.

Definitely agree, though in my opinion neither that nor this *really*
make `guix package --list-installed` pretty. I'm sure I could put
together an alias but it goes a long way toward making Guix look
polished to have it built-in.

>
> Any opinions?  Otherwise I might throw a coin, as I'm 50/50 on this.
>
>
>
>
>
> Thanks,
>
> Maxim

--
Sarah




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Fri, 16 Jul 2021 01:27:01 GMT) Full text and rfc822 format available.

Message #55 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Sarah Morgensen <iskarian <at> mgsn.dev>
Cc: 30053 <at> debbugs.gnu.org, Ludovic Courtès <ludo <at> gnu.org>,
 Steve Sprang <steve.sprang <at> gmail.com>, Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3] Improve appearance of tabular output.
Date: Thu, 15 Jul 2021 21:25:56 -0400
Hello,

Sarah Morgensen <iskarian <at> mgsn.dev> writes:

> Hi Maxim,
>
> Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes:
>
>> [...]
>> ---
>> Sample count: 567
>> Total time: 20.913633405 seconds (12.747006885 seconds in GC)
>>
>> Without the change 'guix package -A' runs in about 2 seconds.  With the
>> change it runs in about 12 seconds here.
>
> I cannot replicate this. Without the patch on master (7e0da2f):
>
> $ time ./pre-inst-env guix package -A > /dev/null
>
> real	0m5.473s
> user	0m6.698s
> sys	0m0.094s
>
>
> And with the patch:
>
> $ time ./pre-inst-env guix package -A > /dev/null
>
> real	0m5.778s
> user	0m6.862s
> sys	0m0.061s

I tested on a different machine after tweakwing the code slightly today,
and the results were not as bad as those I reported earlier.  Buffering
the output helped a lot.

> Perhaps there's something else going on there? I'm on x86-64, if that's
> useful.
>
>> Danny's suggestion to use 'guix package -A | columns -t' works too, but
>> it's not convenient nor discoverable.
>
> Definitely agree, though in my opinion neither that nor this *really*
> make `guix package --list-installed` pretty. I'm sure I could put
> together an alias but it goes a long way toward making Guix look
> polished to have it built-in.

Thanks for sharing your opinion!  I ended up pushing it to the repo a
bit earlier today; after I found it was running acceptably fast and set
an upper limit to the maximum column width so that the output would
remain compact enough.

You should have it available to try on your next 'guix pull', if you
haven't already :-).

Thanks,

Maxim




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Wed, 21 Jul 2021 16:57:02 GMT) Full text and rfc822 format available.

Message #58 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Cc: 30053 <at> debbugs.gnu.org, Steve Sprang <steve.sprang <at> gmail.com>,
 Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3] Improve appearance of tabular output.
Date: Wed, 21 Jul 2021 18:56:30 +0200
Hi Maxim and all,

Thank you for unlocking this old patch series.  :-)

Maxim Cournoyer <maxim.cournoyer <at> gmail.com> skribis:

>>From d8fd6c9a1b8677cd69e50fe4f3e50c60c5fb7e35 Mon Sep 17 00:00:00 2001
> From: Steve Sprang <scs <at> stevesprang.com>
> Date: Tue, 9 Jan 2018 14:00:11 -0800
> Subject: [PATCH] utils: Add a procedure for pretty printing tabular data.
>
> * guix/utils.scm (pretty-print-table): New procedure.
>
> Co-authored-by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
> Signed-off-by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

[...]

> +(define* (pretty-print-table rows #:key (max-column-width 20))
> +  "Print ROWS in neat columns.  All rows should be lists of strings and each
> +row should have the same length.  The columns are separated by a tab
> +character, and aligned using spaces.  The maximum width of each column is
> +bound by MAX-COLUMN-WIDTH."

The version that was pushed has:

  (setvbuf (current-output-port) 'block)

I’m in favor of removing it because it’s “impolite” so to speak :-) to
have such a side effect buried here.  (guix ui) enables line-buffering
on startup anyway.

Ludo’.

PS: Commit 01d7e8c2782f61e741f8beff7888adfbdb61779d shows an
    incompatibility with some previously-fine uses of ‘cut’, but surely
    that was the price to pay.  (An option would be to behave
    differently depending on whether stdout is a tty or not, but that’s
    probably bad style…)




Information forwarded to guix-patches <at> gnu.org:
bug#30053; Package guix-patches. (Wed, 21 Jul 2021 21:44:01 GMT) Full text and rfc822 format available.

Message #61 received at 30053 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 30053 <at> debbugs.gnu.org, Steve Sprang <steve.sprang <at> gmail.com>,
 Roel Janssen <roel <at> gnu.org>
Subject: Re: bug#30053: [PATCH 1/3] Improve appearance of tabular output.
Date: Wed, 21 Jul 2021 17:43:26 -0400
Hello,

Ludovic Courtès <ludo <at> gnu.org> writes:

> Hi Maxim and all,
>
> Thank you for unlocking this old patch series.  :-)
>
> Maxim Cournoyer <maxim.cournoyer <at> gmail.com> skribis:
>
>>>From d8fd6c9a1b8677cd69e50fe4f3e50c60c5fb7e35 Mon Sep 17 00:00:00 2001
>> From: Steve Sprang <scs <at> stevesprang.com>
>> Date: Tue, 9 Jan 2018 14:00:11 -0800
>> Subject: [PATCH] utils: Add a procedure for pretty printing tabular data.
>>
>> * guix/utils.scm (pretty-print-table): New procedure.
>>
>> Co-authored-by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
>> Signed-off-by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
>
> [...]
>
>> +(define* (pretty-print-table rows #:key (max-column-width 20))
>> +  "Print ROWS in neat columns.  All rows should be lists of strings and each
>> +row should have the same length.  The columns are separated by a tab
>> +character, and aligned using spaces.  The maximum width of each column is
>> +bound by MAX-COLUMN-WIDTH."
>
> The version that was pushed has:
>
>   (setvbuf (current-output-port) 'block)
>
> I’m in favor of removing it because it’s “impolite” so to speak :-) to
> have such a side effect buried here.  (guix ui) enables line-buffering
> on startup anyway.

Hehe, apologies.  In my experiments, using 'block buffering seemed to
improve performance a lot.  Testing it again, the difference is
insignificant.  So I'm happy to attribute this to a measurement error on
my part (perhaps I had forgotten to recompile the modified module,
leading to the discrepancy, or perhaps another process was loading the
system).

Pushed with as commit 4f51a4ac27.

> Ludo’.
>
> PS: Commit 01d7e8c2782f61e741f8beff7888adfbdb61779d shows an
>     incompatibility with some previously-fine uses of ‘cut’, but surely
>     that was the price to pay.  (An option would be to behave
>     differently depending on whether stdout is a tty or not, but that’s
>     probably bad style…)

I pondered about that (using isatty), but considering people might pipe
the output to less to interactively view it, that doesn't seem to be a
good idea.

Thanks for the feedback!

Maxim




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 19 Aug 2021 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 242 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.