earth tech

[software and hardware technology originating from or otherwise pertinent to planet earth]

use these buttons to share this blog on portal sites:

Add to Google

Monday, September 21, 2009

 

Zim Desktop Wiki on WinXP (pt 2)

http://zim-wiki.org/Install/Windows.html

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>

Labels: , , , , , ,

Friday, September 18, 2009

 

Zim Desktop Wiki on WinXP (pt1)

http://zim-wiki.org/Install/Windows.html

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]

Labels: , , , , ,

Sunday, May 24, 2009

 

PHP Modules: Finding Syntax Errors and Module Dependencies

http://php.net/

In constructing a web application with more than 2 PHP source modules, I found that it is useful to have a quick and easy way of finding a syntax error that may exist in one (or more) of a list of included modules.

Getting a List of PHP Includes

There is a function in PHP for this, which we will get back to in a moment. For right now I wanted to address some things we can do at a Bash prompt to troubleshoot why a script may not be sending any output to the browser on STDOUT.

That's a very common situation when you're working on a large application with many modules. It becomes important in those situations to be meticulous about syntax checking each change in any code before making additional changes.

I've been using the 'Lint' mechanism provided by PHP to syntax check PHP source code. It works like this: 

  $php -l <fileName>

Now, some of you might already be seeing the implications of this. Hows about: 

$for fn in \
      `grep require frmPlayerInformation_body.09.inc\
      | perl -ne '/\"([a-zA-Z0-9.]+)\"\;/ && print "$1\n";'` ;;
 do 
      echo $fn ;;
      php -l $fn ;;
      echo "########" ;;
 done

The implications for scripting this operation from the command line are clear.

get_included_files()

PHP provides a function to get a list of module dependencies for a running script. It's called

get_included_files()

… and here's the URL for the docs: http://us2.php.net/manual/en/function.get-included-files.php

Problems with this Approach

There is at least one serious deficiency inherent in using the require, require_once, include, and include_once directives as the sole indicators of module dependency;  that is that, simply, the modules which are required or "included" due to HTML element attribute values.

Examples include the ACTION attrubute value(s) of HTML FORM element(s), the SRC attribute values for SCRIPT elements. and so on. IFRAME and LINK elements are also among those that can cause a module dependency within the HTML, CSS, or Javascript layer(s) generated by PHP code of a site.

Labels: , , , , , , , , , , ,

Saturday, May 16, 2009

 

Transparent SSH Login

Labels: , , , , , , , , , , , ,

Thursday, May 14, 2009

 

Standard I/O Redirection in Perl

http://perldoc.perl.org/perlop.html#Quote-Like-Operators

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.

Labels: , , , , ,

Wednesday, May 13, 2009

 

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.

";
}

Labels: , , , , , , , , ,

Wednesday, May 6, 2009

 

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");

Labels: , , , , , , , ,

Thursday, February 12, 2009

 

Adding to the Perl Include Path

[this is from the Perl Module Installer documentation supplied with cPanel and CenOS]

Suppose you need to add a path - say /home/earthsid/perl - to the Perl include path. You will need to modify the Perl code to set the INC path in the BEGIN block of the program.

You can do this by adding the following code to your script:

BEGIN {
    my $homedir = ( getpwuid($>) )[7];
    my @user_include;
    foreach my $path (@INC) {
        if ( -d $homedir . '/perl' . $path ) {
            push @user_include, $homedir . '/perl' . $path;
        }
    }
    unshift @INC, @user_include;
}

Note that - no matter where the BEGIN block resides in a program, it is always excuted first, before ay other part of hte script lib.

Labels: , ,

Archives

2006/12   2007/01   2007/05   2007/06   2007/07   2007/08   2007/10   2008/01   2008/02   2008/03   2008/05   2008/11   2008/12   2009/01   2009/02   2009/03   2009/04   2009/05   2009/07   2009/09   2009/10   2009/11   2009/12   2010/01  

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]