[]RSS

About Archives Artwork Comic Contact Philosophy Projects Tags

Error messages are for losers

[Comment]

November 3rd, 2007 in Micro Blog

Here’s a pointless Facebook error message:

error text

There are a few things wrong with the text, not to mention an uninspired layout. The prose is redundant and fails to present a clear alternative. Worse, though, I see this type of message regularly while putzing around with Facebook. Can you imagine a Google page returning: search unavailable, maybe you can try again later?

My 0×02 bits? The best error message is the one that you never need to show.

Rails stickies widget

[Comment]

May 25th, 2007 in Links

A stickies widget plugin for Rails. Lets you display notes/errors/etc. in a consistent way.

STL error filtering

[Comment]

August 16th, 2006 in Links

An STL error-message filtering tool, for those of you who complain about the line noise producd by STL compilation errors.

Non-errors

[Comment]

July 13th, 2006 in Links

Non-Errors, things that many consider incorrect that are not.

Rails debugging

[Comment]

April 22nd, 2006 in Links

Some of the fun of running rails web apps, rails 500 errors, which suggests a few solutions to common hosting problems and Ruby on rails.

Common syntax errors in C++

[Comment]

April 2nd, 2006 in Links

A list of the common syntax errors in C++ that are now caught by g++.

Calling Perl from Php

[Comment]

May 20th, 2004 in Howto. Perl

I’m working on extending Textpattern with some scripts I developed for Blosxom. Textpattern is a Php-based weblogging tool, and my scripts are all Perl-based plugins and command-line utilities. I don’t really want to port the scripts to Php, so I decided to find a way to call Perl from Php.

In a few minutes of searching, I only found one Perl binding for Php. It isn’t considered stable, and it isn’t available from my web host (Dreamhost). I did find an answer in the Php manual, but a googling on the specific topic of calling Perl from Php came up dry. So I decided to make it a bit more obvious.

Pipe dreams

All of my scrips are simple text processors, so the inputs and outputs can be passed using the stdin/stdout pipes. Using both the input and output pipes of a process is a bit more than the standard Php exec functions can handle, so we’ll be using the proc function family. Nearly every language has a set of these functions (and that’s a good thing).

You can download the demo script here. The script will need to be executable, it needs the correct path to the Perl interpreter, and the log file folder needs to be writable by the web-server process.

The Perl script reads text from stdin, and replaces spaces with underscores. From Php, we can call the Perl script and manage the standard in, out, and error pipes. The example is slightly modified from the Php manual.

The basic process:

  1. Define what to do with the process’s pipes. Notice that the error pipe is mapped to a log file (which is appended on each call).
  2. Define some text to test with the Perl script.
  3. Open the process, which is our Perl script. This will fail if the script can’t be found, or if it isn’t executable.
  4. Write the test text to the input pipe of the Perl script.
  5. Read the output of the Perl script.
  6. Close the process. This is best done after all of the pipes are closed (otherwise it causes deadlock).

The PHP script:

< ?php
$handles = array(                             // 
   0 => array("pipe", "r"),                   // stdin 
   1 => array("pipe", "w"),                   // stdout 
   2 => array("file", "test-errors.txt", "a") // stderr 
);  
$test_text = "This is a test";
    
$process = proc_open("./test.pl", $handles, $pipes);
if (is_resource($process)) {
    fwrite($pipes[0], "$test_text");
    fclose($pipes[0]);    
    while (!feof($pipes[1])) {
        $output .= fgets($pipes[1], 1024);
    }
    fclose($pipes[1]);    
    $r = proc_close($process);    
    echo "Before: $test_text<br />";
    echo "After : $outputn<br />";
}
?>

And the perl script:

#!/usr/local/bin/perl

# replace spaces with _s in stdin
while(<>) {
    s/ /_/g;
    print;
}