Showing posts with label #Perl. Show all posts
Showing posts with label #Perl. Show all posts

2009-09-21

Zim Desktop Wiki on WinXP (pt 2)

…

So. Picking up in the instructions, under "Other dependencies" with

Note that we're downloading all these into the same directory we used for all the other stuff downloaded earlier (see pt 1).

I find that the ppm install Module-Build command operates on the tarball in the directory where the command is issued. On the next one, we'll try installing it through the ActiveState Perl Module Installer widget.

Ooops. Got this:

item "nearest 154 36" doesn't exist at C:/Perl/lib/ActivePerl/PPM/GUI.pm line 208.

item "nearest 154 36" doesn't exist
    while executing
".p.p.tree selection add {nearest 154 36}"
    ("uplevel" body line 1)
    invoked from within
"uplevel 1 $command $args"
    invoked from within
".p.p selection add {nearest 154 36}"
    invoked from within
"::perl::CODE(0x27d7688) 154 36 267 266"
    (command bound to event)

while the package list in the graphical widget was refreshing. Going back to the command shell... which doesn't work on the second module, either. Maybe this is not a bug in the graphical widget, but a data file problem which caused it to crash...

Directory of C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl

09/21/09  10:05    <DIR>          .
09/21/09  10:05    <DIR>          ..
09/18/09  10:14        16,030,800 ActivePerl-5.8.8.819-MSWin32-x86-267479.msi
09/18/09  10:15           171,959 Cairo-1.021.zip
09/18/09  11:30             7,678 ExtUtils-Depends-0.205.tar.gz
09/18/09  10:14             8,155 ExtUtils-Depends-0.205.zip
09/18/09  11:30               351 ExtUtils-Depends.ppd
09/18/09  11:30             4,746 ExtUtils-PkgConfig-1.07.tar.gz
09/18/09  10:15             5,232 ExtUtils-PkgConfig-1.07.zip
09/18/09  11:30               355 ExtUtils-PkgConfig.ppd
09/21/09  10:00            13,784 File-DesktopEntry-0.04.tar.gz
09/21/09  10:05            29,269 File-MimeInfo-0.15.tar.gz
09/18/09  10:14         1,613,333 glade-2.12.1.zip
09/18/09  10:14           518,907 glade-3-0-2-win32-1.zip
09/18/09  10:15           306,240 Glib-1.142.zip
09/18/09  10:13         5,597,907 gtk-2.8.20-win32-1.exe
09/18/09  10:41           192,692 gtk-demo.zip
09/18/09  10:15         1,676,227 Gtk2-1.141.zip
09/18/09  10:15            53,946 Gtk2-GladeXML-1.006.zip
09/21/09  09:53           196,525 Module-Build-0.2808.tar.gz
09/18/09  10:41           181,280 msvcr71.zip
              19 File(s)     26,609,386 bytes
               2 Dir(s)  47,385,841,664 bytes free

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>ppm install File
-DesktopEntry-0.04
ppm install failed: Can't find any package that provide File-DesktopEntry-0.04

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>ppm install File
-DesktopEntry-0.04.tar.gz
ppm install failed: Can't find any package that provide File-DesktopEntry-0.04.t
ar.gz

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>

2009-09-18

Zim Desktop Wiki on WinXP (pt1)

##NOTE:  The more recent versions of Zim are in Python; the Perl-source for Zim is deprecated and is no longer supported.

Note that this entry seems to be more about installing and configuring ActiveState Perl and Gtk2 on Windows than about Zim, but there is a method to this madness. Zim depends upon Perl and Gtk2, so any system that's going to run it has to have these. There will be additional information added to and/or around this post in the future...

I've been using the Zim Desktop Wiki editor for some time now (not sure how long, really, since the original installs were on systems that no longer function) as sort of daily work-log, planning, and note-taking tool for several months now on an HP laptop running SuSE 11.1+ with one of KDE3, KDE4, Gnome, WindowMaker, FVWM, and probably some other desktop environments.

Starting with the first install of Zim, I realized that I was going to have to take measures to ensure that this tool would be available to me in the future. I first saw it running on a frankensteinesque box that had started out with no hard disc, running DSL from an optical disc, and by the time Zim popped up on the desktop, was running a system that included components of DSL, KNOPPIX, Debian, and several kernels of both the 2.4.x and 2.6.x varieties. There was no MS Windows partition, and it was not virtualized.

Soon after that I tried to install Zim on an OpenSUSE 11.0 system. That didn't go well, and I didn't have time to sort it all out. I did get it to work, but could not get a global install working reliably - something to do w/ perl module version numbers, or something.

More recently I followed a set of instructions for some package(s) found on the Internet [and grafted into the earlier dysfunctional OpenSuSE install] and got Zim working on the OpenSuSE 11.1 so smoothly that I forgot to write down how I did it - or have forgotten if I wrote it down or not.

So now I'm looking for a way to share the same ‘Zimspace’ between a WinXP Sony Vaio laptop and the HP running OpenSuSE.

Now, of course there are dozens of ways to do that - I can connect to the HP from the Vaio [running Cygwin/X] and pop Zim up on the XP desktop over the office LAN, of course, but that still tethers me to the HP - and not just for the data, but for the executable binary and the processor time slices, as well.

So, to make a long story short:

In an attempt to install Zim Desktop Wiki on the WinXP Vaio Laptop (WVL), I followed the instructions on the page at http://zim-wiki.org/Install/Windows.html

All went as expected up to the point where it said to run the command ppm install Gtk2

The command failed on

Downloading Gtk2-1.141...done
Downloading Glib-1.142...done
Downloading ExtUtils-PkgConfig-1.07...done
Downloading Cairo-1.021...done
Downloading ExtUtils-Depends-0.302...not found
ppm install failed: 404 Not Found

In order to fix this, I had to Download the ExtUtils-Depends package separately, and install it using the command shown in the instructions at http://www.lostmind.de/gtk2-perl/, thus:

PRECONDITION:  Having performed the above listed procedure down to the point of ppm install Gtk2, perform the following steps:

  1. Download ExtUtils-Depends-0.205
  2. Unzip ExtUtils-Depends-0.205.zip – The unzip no longer works at the windows command line, use the 'Extract' functionality from the Windows Explorer Context Menu. Hit "Cancel" or whatever if it starts asking you about a ExtUtils-Depends-0.205.tar.gz file. Whatever it is (probably source code) it has not proven to be necessary to complete the install process - or maybe it's necessary that it just be there alongside the .ppd file. In any case...
  3. At the command prompt. om the directory where the .ppd file resides, issue the command ppm install ExtUtils-Depends.ppd

Once the ExtUtils-Depends is installed, you can restart the original install at ppm install Gtk2 to complete the process.

Here is a [partial] screen dump log showing the steps EXCEPT for unpacking the archive that ExtUtils-Depends.ppd came in.

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>ppm repo add http://www.lostmind.de/gtk2-perl/ppm/
Downloading www.lostmind.de packlist...not found
Downloading www.lostmind.de packlist...done
Updating www.lostmind.de database...done
Repo 3 added.

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>ppm install Gtk2

Downloading Gtk2-1.141...done
Downloading Glib-1.142...done
Downloading ExtUtils-PkgConfig-1.07...done
Downloading Cairo-1.021...done
Downloading ExtUtils-Depends-0.302...not found
ppm install failed: 404 Not Found

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>
C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>ppm install ExtUtils-Depends.ppd
Unpacking ExtUtils-Depends-0.205...done
Generating HTML for ExtUtils-Depends-0.205...done
Installing to site area...done
   2 files installed

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>ppm install Gtk2

Downloading Gtk2-1.141...done
Downloading Glib-1.142...done
Downloading ExtUtils-PkgConfig-1.07...done
Downloading Cairo-1.021...done
Unpacking Gtk2-1.141...done
Unpacking Glib-1.142...done
Unpacking ExtUtils-PkgConfig-1.07...done
Unpacking Cairo-1.021...done
Generating HTML for Gtk2-1.141...done
Generating HTML for Glib-1.142...done
Generating HTML for ExtUtils-PkgConfig-1.07...done
Generating HTML for Cairo-1.021...done
Installing to site area...done
  72 files installed

C:\Documents and Settings\Sony\My Documents\Downloads\gtk2-perl>extract

[end of pt 1 - see pt 2]

2009-05-14

Standard I/O Redirection in Perl

This is an excerpt from the Perl manuals at perlDoc.perl.org concerning redirection of STDOUT and STDERR in Perl:

Because backticks do not affect standard error, use shell file descriptor syntax (assuming the shell supports this) if you care to address this. To capture a command's STDERR and STDOUT together:

$output = `cmd 2>&1`;

To capture a command's STDOUT but discard its STDERR:

$output = `cmd 2>/dev/null`;

To capture a command's STDERR but discard its STDOUT (ordering is important here):

$output = `cmd 2>&1 1>/dev/null`;

To exchange a command's STDOUT and STDERR in order to capture the STDERR but leave its STDOUT to come out the old STDERR:

$output = `cmd 3>&1 1>&2 2>&3 3>&-`;

To read both a command's STDOUT and its STDERR separately, it's easiest to redirect them separately to files, and then read from those files when the program is done:

system("program args 1>program.stdout 2>program.stderr");

The STDIN filehandle used by the command is inherited from Perl's STDIN. For example:

open BLAM, "blam" || die "Can't open: $!";
    open STDIN, "<&BLAM";

    print `sort`;

will print the sorted contents of the file "blam".

The I/O Operators manual also has some interesting information about standard file I/O in Perl.

2009-05-13

Detecting active VNC server instances

I needed something to tell me what VNC server (vncserver()) instances were running, and on which DISPLAY ports, and with what resolution(s) (geometry), so I wrote one. Here is the HTMLized Perl source code:

#!/usr/bin/perl -w
######################################################################
## FILE:  findvncport.pl 

## DESC:  display information about VNC server instances
## VERS:  01
## DATE:  2009-05-13
## AUTH:  pdw@thesoftwaremaster.com
##############################################################################
##  USAGE NOTES:
##
##    This is a script to find out the connection port number and screen
##    geometry of any VNC server instances currently running on a host.  

##
##    This functionality is most useful to a user who needs to know what VNC
##    server instance(s) is(are) running, and on what port(s) - E.G.  at logon
##    (to a shell) time when a vncserver has been left running.
##
##    For convenience, the geometry of the X interface, the PID of Xvnc (the
##    actual X server invoked by vncserver), and such other info as we can
##    glean from the process listing on the host.
##

##    Note that this script only returns information about VNC instances
##    running under the UID of the user who runs the script.  The value of
##    the environment variable $USER is used to filter the process listing.
##    The user's $UID value is displayed, but is not used.
##
##    This program is designed to be run on a remote, ssh-accessible host
##    computer during the login and user account initialization process.
##
##  EXAMPLE:

##
##    I place this script in the .bash_login shell script that runs at user
##    login.
##
##
##  _TODO_: there is no buglist, yet, but there are some things need done to
##          this script right to begin with (i.e. the functionality is
##          marginal, and will almost certainly "break" the first time someone
##          tries to use it on some other platform or environment.  First on

##          the list of things to do must be: Fix the regular expression
##          parsing which finds the data in the process listing.  As the code
##          is now, these regex statements will break e.g. if the Xvnc command
##          line doesn't look like it expects. 2nd on the list has to be the
##          addtion of command line parameters to modify the output of the
##          script. :_TODO_
##
#############################################################################
##  REVISION HISTORY:

##
##     01: 2009-05-13 pdw
##         Initial version
##
#############################################################################
##
## Load up some environmental info...
$curruid = `echo \$UID`;

$curruser = `echo \$USER`;
@processes = `ps x -u \$USER`;
chomp($curruid);

chomp($curruser);

## @displays gets the data about whatever VNC displays are running
@displays = ();

while ($_ = shift(@processes)) {

 my $d = {};
 my $found = 0;
 chomp;

 next unless ($_);
  
 next unless (/^\s*(\d+).+Xvnc\s*(\:\d+)/)

  && ( $display = $2, $vncpid = $1 );

 # get desktop 

 m/-desktop(.+)-httpd/ 
  && ($desktop = $1);

 m/-geometry\s+(\d+x\d+)/
  && ( $geometry = $1 );

 m/-depth\s+(\d+)/
  && ( $depth = $1 );

 $d = {
  'Display'  => $display,
  'VNC PID'  => $vncpid,

  'Desktop'  => $desktop,
  'Geometry' => $geometry,

  'Depth'    => $depth,
 };
 push(@displays, $d);

}

## Display what we found out 
print "VNC server info for USER \'$curruser\':\n";
if (scalar(@displays)) {

 foreach my $disp (@displays) {
  foreach my $k (keys(%$disp))

  {
   print"  $k: \t".$disp->{$k}."\n";

  }
 }
} else {
 print "
  VNC server not found in process listing.

";
}

2009-05-06

ls2csv.pl

#!/usr/bin/perl -w
#
# ls2csv.pl - show a listing of the PHP file
#            (*.inc and *.php) 
#             as a CSV table; no table headings included in 
#             output; no params defined
#
sub create_listing($) 
{
  my $xtn = shift;
  my @files = `ls -ghoG *.$xtn`;
  foreach my $f (@files) {
    chomp($f);
    $f =~ s/^\s*[-rw]+\s+\d\s+(.+)/$1/;
    $f =~ s/ /\",\"/g;
    $f =~ s/^(.)/\"$1/;
    $f =~ s/(.)$/$1\"/;
    print "$f\n";
  }
}

map { create_listing($_) } ("inc","php");