Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

A new CB reader

by choroba (Cardinal)
on Jul 05, 2017 at 20:09 UTC ( [id://1194297] : monkdiscuss . print w/replies, xml ) Need Help??

I was a happy user of the #cbstream IRC ↔ PM client that makes the ChatterBox feel and behave like the IRC. But then sometimes broke (as it happened time to time), but ambrus hasn't been around for the last three weeks to fix it. So I wrote a simple ChatterBox reader myself. At the moment, it only reads, and I'm still not sure I want to add the ability to write to it. It uses the new CB XML ticker (as I skimmed over the other CB clients, they all seem to use the old one). If you want to use it, or just check the code, you can find it on GitHub.

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Replies are listed 'Best First'.
Re: A new CB reader
by choroba (Cardinal) on Jul 07, 2017 at 00:09 UTC
    You can now find another program in the repository, pm-cb-g, which is a GUI client. It's read/write and the basics should work, but I might add some bells and whistles later. It uses Thread::Queue and Tk.

    What I don't understand is why the POST to the send chatter returns The Monastery Gates instead of the announced text "Chatter accepted".

    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
      > What I don't understand is why the POST to the send chatter returns The Monastery Gates instead of the announced text "Chatter accepted".

      Prayer to the gods: Please promote the choroba to pmdev, so he can at least drink - ehm read - from the sources of the monastery. ;-)

      Cheers Rolf
      (addicted to the Perl Programming Language and ☆☆☆☆ :)
      Je suis Charlie!

        If he asks for it, sure.

        I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.
      Thanks choroba!

      I just forked it and proposed a modification ( just added some color / size options ).

      Have you considered the possibility to use MCE for threading part? Will be an opportunity to show another example of usage of such module.

      Unfortunately I'm not able to modify your program in this direction: possibly some other monks will accept the challenge..

      Anyway thanks!


      There are no rules, there are no thumbs..
      Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

        Hi Discipulus. Just few line changes ( 3 places ). Here's the diff output.

        $ diff pm-cb-g pm-cb-g-hobo 27,28c27,28 < use threads (stack_size => 2 ** $stack_size); < use Thread::Queue; --- > use MCE::Hobo; > use MCE::Shared; 41c41 < my ($readQ, $writeQ) = map 'Thread::Queue'->new, 1, 2; --- > my ($readQ, $writeQ) = map { MCE::Shared->queue() } 1, 2; 43c43 < my $communicate_t = threads->create(\&communicate); --- > my $communicate_t = MCE::Hobo->create(\&communicate);

        Update. The stack_size option isn't needed when using MCE::Hobo. Below is the diff -u output.

        $ diff -u pm-cb-g pm-cb-g-hobo --- pm-cb-g 2017-07-07 16:05:39.000000000 -0500 +++ pm-cb-g-hobo 2017-07-07 16:32:36.782646208 -0500 @@ -6,12 +6,11 @@ use Getopt::Long qw( :config no_ignore_case ); -my ($bg_color, $fg_color, $author_color, $font_name, $char_size, - $stack_size); +my ($bg_color, $fg_color, $author_color, $font_name, $char_size); BEGIN { ($bg_color, $fg_color, $author_color, $font_name, $char_size, - $stack_size) = qw( white black blue Helvetica 12 15 ); + ) = qw( white black blue Helvetica 12 ); die "Invalid arguments!\n" unless GetOptions( 'a|author_color=s' => \$author_color, @@ -19,13 +18,12 @@ 'c|char_size=i' => \$char_size, 'f|fg_color=s' => \$fg_color, 'F|font_name=s' => \$font_name, - 's|stack_size=i' => \$stack_size, ); } -use threads (stack_size => 2 ** $stack_size); -use Thread::Queue; +use MCE::Hobo; +use MCE::Shared; use constant { @@ -38,9 +36,9 @@ }; -my ($readQ, $writeQ) = map 'Thread::Queue'->new, 1, 2; +my ($readQ, $writeQ) = map { MCE::Shared->queue() } 1, 2; -my $communicate_t = threads->create(\&communicate); +my $communicate_t = MCE::Hobo->create(\&communicate); gui();

        Regards, Mario

      $ perl pm-cb-g Segmentation fault (core dumped) This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-li +nux-thread-multi-ld $ gdb ... (gdb) where No stack. (gdb) run pm-cb-g Starting program: /pro/bin/perl pm-cb-g Missing separate debuginfos, use: zypper install glibc-debuginfo-2.22- +4.9.1.x86_64 [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/". [New Thread 0x7ffff7e69700 (LWP 23651)] Thread 2 "perl" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7ffff7e69700 (LWP 23651)] 0x00007ffff6d3e22c in _int_malloc () from /lib64/ Missing separate debuginfos, use: zypper install fontconfig-debuginfo- +2.11.1-2.2.x86_64 libX11-6-debuginfo-1.6.3-7.1.x86_64 libXau6-debugin +fo-1.0.8-7.4.x86_64 libXft2-debuginfo-2.3.2-4.22.x86_64 libXrender1-d +ebuginfo-0.9.9-4.1.x86_64 libbz2-1-debuginfo-1.0.6-101.6.x86_64 libex +pat1-debuginfo-2.1.0-19.1.x86_64 libfreetype6-debuginfo-2.6.3-2.3.1.x +86_64 liblzma5-debuginfo-5.2.3-112.15.x86_64 libpng16-16-debuginfo-1. +6.8-9.3.1.x86_64 libxcb1-debuginfo-1.11.1-2.25.x86_64 libxml2-2-debug +info-2.9.4-5.6.1.x86_64 libz1-debuginfo-1.2.8-10.1.x86_64 $ perl -d:Trace pm-cb-g : : >> /pro/lib/perl5/5.26.0/ *{"$callpkg\::$_"} = \&{"$p +kg\::$_"} foreach @_; >> /pro/lib/perl5/5.26.0/ *{"$callpkg\::$_"} = \&{"$p +kg\::$_"} foreach @_; >> /pro/lib/perl5/5.26.0/x86_64-linux-thread-multi-ld/IO/ +use SelectSaver; >> /pro/lib/perl5/5.26.0/x86_64-linux-thread-multi-ld/IO/ +use SelectSaver; >> /pro/lib/perl5/5.26.0/x86_64-linux-thread-multi-ld/IO/ +use SelectSaver; >> /pro/lib/perl5/5.26.0/x86_64-linux-thread-multi-ld/IO/ +use IO::Seekable; Segmentation fault (core dumped)

      I'll dig when time permits

      Enjoy, Have FUN! H.Merijn
        Try increasing the stack_size parameter to threads.
        ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: A new CB reader
by choroba (Cardinal) on Jul 08, 2017 at 07:48 UTC
    The new version on GitHub supports personal messages.

    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: A new CB reader
by Tux (Canon) on Sep 15, 2018 at 13:57 UTC

    I have forked it and started a new branch, that supports:

    • Config files
    • Auto-login
    • Custom date-format
    • Custom time-stamp format
    • Startup geometry
    • Custum author-format
    • Configurable copy-url button
    • History/logging with re-load on startup

    Feel free to copy every/any aspect and/or change any of it.

    Asking for features without suggestions is cowardish :)

    High on my wishlist is logging conversations and reloading the log on startup.

    There is currently a possible bug in my code that causes links to show up rather weird. I think it has to do with hard-coded offsets, as the code does not check the size of now changed parts (time-stamp, author).

    Anyway, thank you choroba for a useful interface now that #cbstream is dead.

    Enjoy, Have FUN! H.Merijn