| Jump to DART Documentation Main Index |
This is a self-contained program to explore the interaction between
the compiler options to 'autopromote' variables from one precision
to another and the intrinsic F90 mechanism for getting consistent
behavior without relying on autopromotion - namely, the
SELECT_INT_KIND() and
SELECT_REAL_KIND() functions.
The most portable code explicity types the variables to avoid relying
on compiler flags. The core DART code abides by these rules; some pieces
that are derived from dynamical models may have original code fragments.
All that is required is to compile the single file and run the resulting
executable. There are no required libraries - any F90 compiler should
have no trouble with this program. There is no input of any kind.
You are encouraged to view the source code. It's pretty obvious
what is being tested.
The following examples have differences from the default configuration highlighted in boldface. You are strongly encouraged to test your compiler and its autopromotion options. The Absoft compiler actually does what I consider to be reasonable and logical (as long as you know that "-dp" means demote precision). Many other compilers are surprising.
[~/DART/utilities] % f90 PrecisionCheck.f90 [~/DART/utilities] % ./a.out This explores the use of the intrinisc SELECTED_[REAL,INT]_KIND() functions and the interplay with the compiler options. You are encouraged to use the "autopromotion" flags on your compiler and compare the results. ---------------------------------------------- "integer" DIGITS = 31 HUGE =<PHONE_NUMBER> KIND = 4 ---------------------------------------------- "integer(i4)" i4 = SELECTED_INT_KIND(8) DIGITS = 31 HUGE =<PHONE_NUMBER> KIND = 4 ---------------------------------------------- "integer(i8)" i8 = SELECTED_INT_KIND(13) DIGITS = 63 HUGE =<PHONE_NUMBER>854775807 KIND = 8 ---------------------------------------------- "real" DIGITS = 24 EPSILON = 1.192093E-07 HUGE = 3.402823E+38 KIND = 4 PRECISION = 6 ---------------------------------------------- "real(r4)" r4 = SELECTED_REAL_KIND(6,30) DIGITS = 24 EPSILON = 1.192093E-07 HUGE = 3.402823E+38 KIND = 4 PRECISION = 6 ---------------------------------------------- "real(r8)" r8 = SELECTED_REAL_KIND(13) DIGITS = 53 EPSILON = 2.220446049250313E-016 HUGE = 1.797693134862315E+308 KIND = 8 PRECISION = 15 ---------------------------------------------- "double precision" DIGITS = 53 EPSILON = 2.220446049250313E-016 HUGE = 1.797693134862315E+308 KIND = 8 PRECISION = 15
[~/DART/utilities] % f90 -dp PrecisionCheck.f90 [~/DART/utilities] % ./a.out This explores the use of the intrinisc SELECTED_[REAL,INT]_KIND() functions and the interplay with the compiler options. You are encouraged to use the "autopromotion" flags on your compiler and compare the results. ---------------------------------------------- "integer" DIGITS = 31 HUGE =<PHONE_NUMBER> KIND = 4 ---------------------------------------------- "integer(i4)" i4 = SELECTED_INT_KIND(8) DIGITS = 31 HUGE =<PHONE_NUMBER> KIND = 4 ---------------------------------------------- "integer(i8)" i8 = SELECTED_INT_KIND(13) DIGITS = 63 HUGE =<PHONE_NUMBER>854775807 KIND = 8 ---------------------------------------------- "real" DIGITS = 24 EPSILON = 1.192093E-07 HUGE = 3.402823E+38 KIND = 4 PRECISION = 6 ---------------------------------------------- "real(r4)" r4 = SELECTED_REAL_KIND(6,30) DIGITS = 24 EPSILON = 1.192093E-07 HUGE = 3.402823E+38 KIND = 4 PRECISION = 6 ---------------------------------------------- "real(r8)" r8 = SELECTED_REAL_KIND(13) DIGITS = 53 EPSILON = 2.220446049250313E-016 HUGE = 1.797693134862315E+308 KIND = 8 PRECISION = 15 ---------------------------------------------- "double precision" DIGITS = 24 EPSILON = 1.192093E-07 HUGE = 3.402823E+38 KIND = 4 PRECISION = 6
[~/DART/utilities] % f90 -N113 PrecisionCheck.f90 [~/DART/utilities] % ./a.out This explores the use of the intrinisc SELECTED_[REAL,INT]_KIND() functions and the interplay with the compiler options. You are encouraged to use the "autopromotion" flags on your compiler and compare the results. ---------------------------------------------- "integer" DIGITS = 31 HUGE =<PHONE_NUMBER> KIND = 4 ---------------------------------------------- "integer(i4)" i4 = SELECTED_INT_KIND(8) DIGITS = 31 HUGE =<PHONE_NUMBER> KIND = 4 ---------------------------------------------- "integer(i8)" i8 = SELECTED_INT_KIND(13) DIGITS = 63 HUGE =<PHONE_NUMBER>854775807 KIND = 8 ---------------------------------------------- "real" DIGITS = 53 EPSILON = 2.220446049250313E-016 HUGE = 1.797693134862315E+308 KIND = 8 PRECISION = 15 ---------------------------------------------- "real(r4)" r4 = SELECTED_REAL_KIND(6,30) DIGITS = 24 EPSILON = 1.192093E-07 HUGE = 3.402823E+38 KIND = 4 PRECISION = 6 ---------------------------------------------- "real(r8)" r8 = SELECTED_REAL_KIND(13) DIGITS = 53 EPSILON = 2.220446049250313E-016 HUGE = 1.797693134862315E+308 KIND = 8 PRECISION = 15 ---------------------------------------------- "double precision" DIGITS = 53 EPSILON = 2.220446049250313E-016 HUGE = 1.797693134862315E+308 KIND = 8 PRECISION = 15
DART software - Copyright UCAR. This open source software is provided by UCAR, "as is", without charge, subject to all terms of use at http://www.image.ucar.edu/DAReS/DART/DART_download


CARDS
BOOK
POSTER
Custom Templates
Click on one of the links below to begin. Customize, print, and save your content all for free.
CARDS
BOOK
POSTER


Ahh yes, speed. Speed and I go way back, and have and twisted history. Two years ago I began a year and a half long speed binge. When I first started doing speed (crystal methamphetamine) it did give me the ill euphoric feeling and the ability to get along with anyone, making me seem to be a sick dude with everyone. I started staying up for 4-6 days smoking dope from a light bulb and doing one inch lines. It began to become a way of life. No else I knew really did speed, so it seemed pretty fuckin cool, and it made everything I did seem sicker than it should have been.
Once I got my own apartment in Albuquerque, I became the fastest motherfucker in the world. I could get speed easier than I could food, and it was all free. I began keeping my my brain awake and heart running indy 500's for weeks. My whole body/brain had a total system shutdown, after my 13th day of staying awake and I thought had discovered one of the many secrets of life, I was one tweaked out motherfucker.
Eventually I was doing 1-2 foot lines for no fucken reason.     It was pretty fucked.

Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Includes multiple views
Requires
Dojo1.8+
Submit
Forgot password
Create account
E-mail address:
First name:
Last name:
Password:
Repeat password:
Cancel
Submit


| S.No | Employee | Risk Score | Department |
|---|---|---|---|
| 1 | Mark | Otto | @mdo |
| 2 | Jacob | Thornton | @fat |
| 3 | Jacob | Thornton | @fat |
| S.No | Employee | Risk Score | Department | Risk Score | Department |
|---|---|---|---|---|---|
| 1 | Mark | Otto | @mdo | Otto | Start |
| 2 | Jacob | Thornton | @fat | Otto | View Details |
| 3 | Jacob | Thornton | @fat | Otto | Start |


{block:Description} {/block:Description}
Stay updated on latest news and updates from CareMessage and our partner organizations.
{ShortMonth} {DayOfMonth}{DayOfMonthSuffix}, {Year}. Posted by {PostAuthorName}


| Pizza Chicked BBQ | $9.82 | |
| Beef Burger | $9.82 | |
| Extra Burger | $0.00 | |
| Weekend 20% OFF | -$8.22 |
Order total:
$21.02
Devliery:
$3.99
Total:
$24.21


Is it Really AI? Five Questions to ask before starting your first (next) AI initiative
Is it really AI?
AI is often widely understood as a system that comes to conclusions in a way that resembles a human’s approach. Still, AI is defined differently by different communities and its definition will continue to change with future advances in technology. For instance, some define AI loosely as a computerized system that exhibits behaviour that is commonly thought of as requiring intelligence. Others define AI as a system capable of rationally solving complex problems or taking appropriate actions to achieve its goals in whatever real-world circumstances it encounters. Still others define AI as a great marketing term to connect to an otherwise non-intelligent system as a means of capitalizing on the recent resurgence of the term from its varying iterations through the years.
To help cut through the clutter, we offer a few questions to ask anytime AI is brought into the conversation:
Is it based on data?
Without data, there is no AI. In fact, rather than starting with assumptions, AI techniques start with data and “learn” certain assumptions based on that data. Many emerging AI technologies and platforms are bringing their own data set … which begs the question, on whose data are the assumptions based?
Additionally, while it’s tempting to think that we could conceive a perfectly rational system, the data used to train AI is often inherently flawed, due to human or other bias, which makes “perfect rationality” nearly impossible to evaluate.
While smaller organizations are not likely to have enough quality data to develop their own AI, larger organizations would be better off developing and training their own AI or machine learning systems with their own data to better reflect their own unique needs and circumstances. This is especially true regarding utilization within the human or organizational elements of the company. Unlike uniform systems, chemical or biological processes, human behavior varies widely based on environment, conditions, situations, etc. If you are interested in solving human problems unique to your organization, and you have a large enough set of reference data, you are often best served to develop your own models to achieve optimal results.
Is it unconcerned with the outcome of its calculations?
Unlike the inherent messiness of human decision-making, an AI’s capacity to make decisions isn’t influenced by ulterior motives or how much sleep it got last night, but is solely focused on the task at hand. Since it doesn’t know good from bad, however, any biases that exist in the data are perpetuated. This is where the need for solid design is paramount. You may not be first at launching your AI-based services, but if your design and your data are superior, you will have the superior product in the end.
It is important, however, not to ascribe human likeness to what is essentially just complex math. Like any technology system, bad data in equals bad data out … the difference is that an AI system is often tied to automation more so than human controlled systems. And an AI system cannot be reverse-engineered to discover where the calculations went wrong … which means poor data and poor planning can yield potentially massive re-work and costs. But never fear, the AI won’t worry about it.
Are its abilities learned rather than programmed?
AI can improve iteratively on its own — without being programmed every step of the way, it can learn from its experiences and improve at making future predictions and decisions, resulting in increasingly sophisticated abilities.
Recent advances in machine learning have largely been due to the growth of deep learning — a subfield of machine learning. Deep learning borrows from the structure of the brain, by linking lots of simple “neuron” like structures together to do interesting things in a neural network. By stacking many layers of these artificial neurons together (hence “deep”), the network as a whole can learn to do complex tasks. Interestingly, “neurons” in these layers often end up performing specific roles, such as recognizing edges, or the outline of a specific object. The unique strength of deep learning is that these sub-tasks — often known as “features” — are learned directly from the data, rather than being specified by programmers.
Managers that want blunt control over their models are best to avoid AI and ML altogether as the internal calculations (generally derived through back propagation) are generally unknowable. A deep-learning system doesn’t have any explanatory power. A black box cannot investigate cause. Indeed, the more powerful the deep-learning system becomes, the more opaque it can become.
Is it constantly evolving?
AI models continually gain in value over time. For this reason, even initiating a clean data collection initiative sooner than later is preferable to waiting or utilizing an external data set.
Let’s take a real-life example for HR: recognizing ideal fit in applicant selection. A classic AI approach would rely upon a human expert trying to distill their own decision-making process and then codify it in the algorithm. For instance, in our applicant tracking system, we might flag specific words that are relevant to the job, or connected to a specific certification. With deep learning, however, we can directly feed profiles of existing employees labeled to indicate whether they’re high-performing or not, and our neural network will learn to pick out the most useful features of the profile for this particular task. This is a classic example of “supervised learning”: we provide some inputs and some desired outputs, and the algorithm learns to map from one to the other.
From this perspective, the more data, the more learning the model can handle, though it is also important to understand that current iterations should be narrow in scope: ie. one job type at a time.
We can also do away with the labels entirely, and ask the algorithm to group the traits or “competencies” that have something in common.This process is known as clustering, and it’s a type of unsupervised learning. Here we’re not providing supervision in the form of labels, we’re simply using deep learning to find structure in the data. In our example, perhaps our profile includes many different competency types — academic, hands-on experiences, and software — and it’d be useful to cluster these before trying to figure out which competencies in each cluster are most important for selection.
In either case, business needs change dynamically, but not swiftly, and as data is continually fed into the model, the model gains capabilities, potentially being able to predict future occupational skill groupings, or ideal skill groupings.


sleeps a second, and begins again. On the final iteration, it ends the
multipart section with multipart_final() rather than with
multipart_end().
- multipart_init()
-
multipart_init(-boundary=>$boundary);
Initialize the multipart system. The -boundary argument specifies
what MIME boundary string to use to separate parts of the document.
If not provided, CGI.pm chooses a reasonable boundary for you.
- multipart_start()
multipart_start(-type=>$type)
Start a new part of the multipart document using the specified MIME
type. If not specified, text/html is assumed.
- multipart_end()
multipart_end()
End a part. You must remember to call multipart_end() once for each
multipart_start(), except at the end of the last part of the multipart
document when multipart_final() should be called instead of
multipart_end().
- multipart_final()
multipart_final()
End all parts.
You should call multipart_final() rather than multipart_end() at the
end of the last part of the multipart document.
Users interested in server push applications should also have a look
at the CGI::Push module.
Only Netscape Navigator supports server push. Internet Explorer browsers
do not.
Table of contents
A potential problem with CGI.pm is that, by default, it attempts to
process form POSTings no matter how large they are. A wily hacker
could attack your site by sending a CGI script a huge POST of many
megabytes. CGI.pm will attempt to read the entire POST into a
variable, growing hugely in size until it runs out of memory. While
the script attempts to allocate the memory the system may slow down
dramatically. This is a form of denial of service attack.
Another possible attack is for the remote user to force CGI.pm to
accept a huge file upload. CGI.pm will accept the upload and store it
in a temporary directory even if your script doesn't expect to receive
an uploaded file. CGI.pm will delete the file automatically when it
terminates, but in the meantime the remote user may have filled up the
server's disk space, causing problems for other programs.
The best way to avoid denial of service attacks is to limit the amount
of memory, CPU time and disk space that CGI scripts can use. Some Web
servers come with built-in facilities to accomplish this. In other
cases, you can use the shell limit or ulimit
commands to put ceilings on CGI resource usage.
CGI.pm also has some simple built-in protections against denial of
service attacks, but you must activate them before you can use them.
These take the form of two global variables in the CGI name space:
- $CGI::POST_MAX
- If set to a non-negative integer, this variable puts a ceiling
on the size of POSTings, in bytes. If CGI.pm detects a POST
that is greater than the ceiling, it will immediately exit with an error
message. This value will affect both ordinary POSTs and
multipart POSTs, meaning that it limits the maximum size of file
uploads as well. You should set this to a reasonably high
value, such as 1 megabyte.
- $CGI::DISABLE_UPLOADS
- If set to a non-zero value, this will disable file uploads
completely. Other fill-out form values will work as usual.
You can use these variables in either of two ways.
- On a script-by-script basis. Set the variable at the top of the
script, right after the "use" statement:
use CGI qw/:standard/;
use CGI::Carp 'fatalsToBrowser';
$CGI::POST_MAX=1024 * 100; # max 100K posts
$CGI::DISABLE_UPLOADS = 1; # no uploads
- Globally for all scripts. Open up CGI.pm, find the definitions
for $POST_MAX and $DISABLE_UPLOADS, and set
them to the desired values. You'll find them towards the top of
the file in a subroutine named initialize_globals.
Since an attempt to send a POST larger than $POST_MAX bytes
will cause a fatal error, you might want to use CGI::Carp to echo the
fatal error message to the browser window as shown in the example
above. Otherwise the remote user will see only a generic "Internal
Server" error message. See the manual page for CGI::Carp for more
details.
An attempt to send a POST larger than $POST_MAX bytes will cause
param() to return an empty CGI parameter list. You can test for
this event by checking cgi_error(), either after you create the CGI
object or, if you are using the function-oriented interface, call
param() for the first time. If the POST was intercepted, then
cgi_error() will return the message "413 POST too large".
This error message is actually defined by the HTTP protocol, and is
designed to be returned to the browser as the CGI script's status
code. For example:
$uploaded_file = param('upload');
if (!$uploaded_file && cgi_error()) {
print header(-status=>cgi_error());
exit 0;
}
Some browsers may not know what to do with this status code. It may
be better just to create an HTML page that warns the user of the
problem.
Table of contents
I don't have access to all the combinations of hardware and software
that I really need to make sure that CGI.pm works consistently for all
Web servers, so I rely heavily on helpful reports from users like
yourself.
There are a number of differences in file name and text processing
conventions on different platforms. By default, CGI.pm is set up to
work properly on a Unix (or Linux) system. During load, it will
attempt to guess the correct operating system using the Config module.
Currently it guesses correctly; however if the operating system names
change it may not work right. The main symptom will be that file
upload does not work correctly. If this happens, find the place at
the top of the script where the OS is defined, and uncomment the
correct definition:
# CHANGE THIS VARIABLE FOR YOUR OPERATING SYSTEM
# $OS = 'UNIX';
# $OS = 'MACINTOSH';
# $OS = 'WINDOWS';
# $OS = 'VMS';
Other notes follow:
CGI.pm works well with WebSite, the EMWACS server, Purveyor and the
Microsoft IIS server. CGI.pm must be put in the perl5 library
directory, and all CGI scripts that use it should be placed in cgi-bin
directory. You also need to associate the .pl
suffix
with perl5 using the NT file manager (Website, Purveyor), or install
the correct script mapping registry keys for IIS. Perl for Windows is
available from the ActiveState company, which can be found at:
http://www.activestate.com/
WebSite uses a slightly different cgi-bin directory structure than
the standard. For this server, place the scripts in the
cgi-shl
directory. CGI.pm appears to work correctly
in both the Windows95 and WindowsNT versions of WebSite.
Old Netscape Communications Server technical notes recommended
placing perl.exe
in cgi-bin. This a very bad idea because
it opens up a gaping security hole. Put a C .exe
wrapper
around the perl script until such time as Netscape recognizes NT file
manager associations, or provides a Perl-compatible DLL library for its
servers.
If you find that binary files get slightly larger when uploaded but
that text files remain the same, then binary made is not correctly
activated. Be sure to set the $OS variable to 'NT' or 'WINDOWS'. If
you continue to have problems, make sure you're calling
binmode() on the filehandle that you use to write
the uploaded file to disk.
VMS
I don't have access to a VMS machine, and I'm not sure whether file upload
works correctly. Other features are known to work.
Macintosh
Most CGI.pm features work with MacPerl version 5.0.6r1 or higher under
the WebStar and MacHTTP servers. In order to install a Perl program
to use with the Web, you'll need Matthias Nuuracher's PCGI extension,
available at:
ftp://err.ethz.ch/pub/neeri/MacPerl/
Known incompatibilities between CGI.pm and MacPerl include:
- The perl compiler will object to the use of -values in named
parameters. Put single quotes around this parameter ('-values')
or use the singular form ('-value') instead.
- File upload isn't working in my hands (Perl goes into an endless
loop). Other people have gotten it to work.
This library is maintained in parallel with the full featured CGI,
URL, and HTML modules. I use this library to test out new ideas
before incorporating them into the CGI hierarchy. I am continuing to
maintain and improve this library in order to satisfy people who are
looking for an easy-to-use introduction to the world of CGI scripting.
The CGI::* modules are being reworked to be interoperable with the
excellent LWP modules. Stay tuned.
The current version of CGI.pm can be found at:
http://www.genome.wi.mit.edu/ftp/pub/software/WWW/
You are encouraged to look at these other Web-related modules:
-
CGI::Base,CGI::Form,CGI::MiniSrv,CGI::Request and CGI::URI::URL
- Modules for parsing script input, manipulating URLs, creating
forms and even launching a miniature Web server.
-
libwww-perl
- Modules for fetching Web resources from within Perl, writing
Web robots, and much more.
You might also be interested in two packages for creating graphics
on the fly:
- GD.html
- A module for creating GIF images on the fly, using Tom Boutell's
gd graphics library.
- qd.pl
- A library for creating Macintosh PICT files on the fly (which
can be converted to GIF or JPEG using NetPBM).
For a collection of CGI scripts of various levels of complexity,
see the companion pages for my book
How to Set Up and
Maintain a World Wide Web Site
This code is copyright 1995-1998 by Lincoln Stein. It may be used and
modified freely, but I do request that this copyright notice remain
attached to the file. You may modify this module as you wish, but if
you redistribute a modified version, please attach a note listing the
modifications you have made.
The Official Guide to CGI.pm, by Lincoln Stein, is packed
with tips and techniques for using the module, along with information
about the module's internals that can't be found anywhere else. It is
available on bookshelves now, or can be ordered from amazon.com. Also check the book's
companion Web site at:
http://www.wiley.com/compbooks/stein/
Versions of CGI.pm prior to 2.36 suffered a year 2000 problem in the
handling of cookies. Cookie expiration dates were expressed using two
digits as dictated by the then-current Netscape cookie protocol. The
cookie protocol has since been cleaned up. My belief is that versions
of CGI.pm 2.36 and higher are year 2000 compliant.
The CGI Perl mailing list is defunct and is unlikely to be
resurrected. Please address your questions to comp.infosystems.www.authoring.cgi
if they relate to the CGI protocol or the usage of CGI.pm per
gse, or to comp.lang.perl.misc
for Perl language issues. Please read this
documentation thoroughly, read the FAQs for these newsgroups and scan
through previous messages before you make a posting. Respondents are
not always friendly to people who neglect to do so!
Address bug reports and comments to:
<EMAIL_ADDRESS>When sending bug
reports, please provide the following information:
- the version of CGI.pm (
perl -MCGI -e 'print $CGI::VERSION'
)
- the version of Perl (
perl -v
)
- the name and version of your Web server
- the name and version of the operating system you are using
- if applicable, the name and version of the browser you are using
- a short test script that reproduces the problem (30 lines or less)
It is very important that I receive this information in order to help
you.
Up to table of contents
Version 3.06
- Fixed bare call to script() in start_html
- Moved Fh::DESTROY out of autoloaded functions so as to avoid clobbering
$@ when CGI functions are executed in an eval{} context.
- mod_perl 2.0 version detection patch in CGI::Cookie provided by
Allen Day.
- autoEscape() flag is now respected when generating extra attributes.
- Tests for *tag start/end generation from Shlomi Fish.
- Support for can() method provided by Ron Savage.
- Fix for lang='' when outputting XHTML.
Version 3.05
- Fixed uninitialized variable warning on start_form() when running from command line.
- Fixed CGI::_set_attributes so that attributes with a - are handled correctly.
- Fixed CGI::Carp::die() so as to avoid problems from _longmess() clobbering @_.
- If HTTP_X_FORWARDED_HOST is defined (i.e. running under a proxy), the
various functions that return HOST will use that instead.
- Fix for undefined utf8() call in CGI::Util.
- Changed the call to warningsToBrowser() in CGI::Carp::fatalsToBrowser to call only
after HTTP header is sent (thanks to Didier Lebrun for noticing).
- Patches from Dan Harkless to make CGI.pm validatable against HTML 3.2.
- Fixed an extraneous "foo=bar" appearing when extra style parameters passed to
start_html;
- Fixed cross-site scripting bug in startform() pointed out by Dan Harkless.
- Fixed documentation to discuss list context behavior of form-element generators
explicitly.
- Fixed incorrect results from end_form() when called in OO manner.
- Fixed query string stripping in order to handle URLs containing escaped newlines.
- During server push, set NPH to 0 rather than 1. This is supposed to fix problems
with Apache.
- Fixed incorrect processing of multipart form fields that contain embedded quotes.
There's still the issue of how to handle ones that contain embedded semicolons,
but no one has complained (yet).
- Fixed documentation bug in -style argument to start_html()
- Added -status argument to redirect().
Version 3.04
- Fixed the problem with mod_perl crashing when "defaults" button pressed.
Version 3.03
- Fix upload hook functionality
- Workaround for CGI->unescape_html()
- Bumped version numbers in CGI::Fast and CGI::Util for 5.8.3-tobe
Version 3.02
- Bring in Apache::Response just in case.
- File upload on EBCDIC systems now works.
Version 3.01
- No fix yet for upload failures when running on EBCDIC server.
- Fixed uninitialized glob warnings that appeared when file uploading under perl 5.8.2.
- Added patch from Schlomi Fish to allow debugging of PATH_INFO from command line.
- Added patch from Steve Hay to correctly unlink tmp files under mod_perl/windows
- Added upload_hook functionality from Jamie LeTaul
- Workarounds for mod_perl 2 IO issues. Check that file upload and state saving still working.
- Added code for underreads.
- Fixed misleading description of redirect() and relative URLs in the POD docs.
- Workaround for weird interaction of CGI::Carp with Safe module reported by William McKee.
- Added patches from Ilmari Karonen to improve behavior of CGI::Carp.
- Fixed documentation error in -style argument.
- Added virtual_port() method for finding out what port server is listening on
in a virtual-host aware fashion.
Version 3.00
- Patch from Randal Schwartz to fix bug introduced by cross-site
scripting vulnerability "fix."
- Patch from JFreeman to replace UTF-8 escape constant of 0xfe with 0xfc.
Hope this is right!
Version 2.99
- Patch from Steve Hay to fix extra Content-type: appearing on browser
screen when FatalsToBrowser invoked.
- Patch from Ewann Corvellec to fix cross-site scripting vulnerability.
- Fixed tmpdir routine for file uploading to solve problem that occurs
under mod_perl when tmpdir is writable at startup time, but not at
session time.
Version 2.98
- Fixed crash in Dump() function.
Version 2.97
- Sigh. Uploaded wrong 2.96 to CPAN.
Version 2.96
- More bugfixes to the -style argument.
Version 2.95
- Fixed bugs in start_html(-style=>...) support introduced
in 2.94.
Version 2.94
- Removed warning from reset() method.
- Moved and
Version 2.93
- Fixed embarassing bug in mp1 support.
Version 2.92
- Fix to be P3P compliant submitted from MPREWITT.
- Added CGI->r() API for mod_perl1/mod_perl2.
- Fixed bug in redirect() that was corrupting cookies.
- Minor fix to behavior of reset() button to make it consistent with submit() button
(first time this has been changed in 9 years).
- Patch from Dan Kogai to handle UTF-8 correctly in 5.8 and higher.
- Patch from Steve Hay to make CGI::Carp's error messages appear on MSIE browsers.
- Added Yair Lenga's patch for non-urlencoded postings.
- Added Stas Bekman's patches for mod_perl 2 compatibility.
- Fixed uninitialized escape behavior submitted by William Campbell.
- Fixed tied behavior so that you can pass arguments to tie()
- Fixed incorrect generation of URLs when the path_info contains + and other odd characters.
- Fixed redirect(-cookies=>$cookie) problem.
- Fixed tag generation bug that affects -javascript passed to start_html().
Version 2.91
- Attribute generation now correctly respects the value of autoEscape().
- Fixed endofrm() syntax error introduced by Ben Edgington's patch.
Version 2.90
- Fixed bug in redirect header handling.
- Added P3P option to header().
- Patches from Alexey Mahotkin to make CGI::Carp work correctly with object-oriented exceptions.
- Removed inaccurate description of how to set multiple cookies from CGI::Cookie pod file.
- Patch from Kevin Mahony to prevent running out of filehandles when uploading lots of files.
- Documentation enhancement from Mark Fisher to note that the import_names() method transforms the
parameter names into valid Perl names.
- Patch from Dan Harkless to suppress lang attribute in <html> tag if specified as a null string.
- Patch from Ben Edgington to fix broken XHTML-transitional 1.0 validation on endform().
- Custom html header fix from Steffen Beyer (first letter correctly upcased now)
- Added a -verbatim option to stylesheet generation from Michael Dickson
- Faster delete() method from Neelam Gupta
- Fixed broken Cygwin support.
- Added empty charset support from Bradley Baetz
- Patches from Doug Perham and Kevin Mahoney to fix file upload failures
when uploaded file is a multiple of 4096.
Version 2.89
- Fixed behavior of ACTION tag when POSTING to a URL that has a query string.
- Added Patch from Michael Rommel to handle multipart/mixed uploads from Opera
Version 2.88
- Fixed problem with uploads being refused under Perl 5.8 when
under Taint mode.
- Fixed uninitialized variable warnings under Perl 5.8.
- Fixed CGI::Pretty regression test failures.
Version 2.87
- Security hole patched: when processing multipart/form-data postings,
most arguments were being untainted silently. Returned arguments are
now tainted correctly. This may cause some scripts to fail that used
to work (thanks to Nick Cleaton for pointing this out and persisting
until it was fixed).
- Update for mod_perl 2.0.
- Pragmas such as -no_xhtml are now respected in mod_perl environment.
Version 2.86
- Fixes for broken CGI::Cookie expiration dates introduced in
2.84.
Version 2.85
- Fix for broken autoEscape function introduced in 2.84.
Version 2.84
- Fix for failed file uploads on Cygwin platforms.
- HTML escaping code now replaced 0x8b and 0x9b with unicode
references ‹ and *#8250;
Version 2.83
- Fixed autoEscape() documentation inconsistencies.
- Patch from Ville Skyttä to fix a number of XHTML inconsistencies.
- Added Max-Age to list of CGI::Cookie headers.
Version 2.82
- Patch from Rudolf Troller to add attribute setting and option groups to form fields.
- Patch from Simon Perreault for silent crashes when using CGI::Carp under mod_perl.
- Patch from Scott Gifford allows you to set the program name for CGI::Carp.
Version 2.81
- Removed extraneous slash from end of stylesheet tags generated by start_html in non-XHTML mode.
- Changed behavior of CGI::Carp with respect to eval{} contexts so that output behaves properly
in mod_perl environments.
- Fixed default DTD so that it validates with W3C validator.
Version 2.80
- Fixed broken messages in CGI::Carp.
- Changed checked="1" to checked="checked" for real XHTML compatibility.
- Resurrected REQUEST_URI code so that url() works correctly with multiviews.
Version 2.79
- Changes to CGI::Carp to avoid "subroutine redefined" error messages.
- Default DTD is now XHTML 1.0 Transitional
- Patches to support all HTML4 tags.
Version 2.78
- Added ability to change encoding in <?xml> assertion.
- Fixed the old escapeHTML('CGI') ne "CGI" bug
- In accordance with XHTML requirements, there are no longer any
minimized attributes, such as "checked".
- Patched bug which caused file uploads of exactly 4096 bytes to
be truncated to 4094 (thanks to Kevin Mahony)
- New tests and fixes to CGI::Pretty (thanks to Michael Schwern).
Version 2.77
- No new features, but released in order to fix an apparent CPAN bug.
Version 2.76
- New esc.t regression test for EBCDIC translations courtesy Peter Prymmer.
- Patches from James Jurach to make compatible with FCGI-ProcManager
- Additional fields passed to header() (like -Content_disposition)
now honor initial capitalization.
- Patch from Andrew McNaughton to handle utf-8 escapes (%uXXXX
codes) in URLs.
Version 2.752
- Syntax error in the autoloaded Fh::new() subroutine.
- Better error reporting in autoloaded functions.
Version 2.751
- Tiny tweak to filename regular expression function on line 3355.
Version 2.75
- Fixed bug in server push boundary strings (CGI.pm and CGI::Push).
- Fixed bug that occurs when uploading files with funny characters in the name
- Fixed non-XHTML-compliant attributes produced by textfield()
- Added EPOC support, courtesy Olaf Flebbe
- Fixed minor XHTML bugs.
- Made escape() and unescape() symmetric with respect to EBCDIC, courtesy
Roca, Ignasi<EMAIL_ADDRESS>- Removed uninitialized variable warning from CGI::Cookie,
provided by Atipat Rojnuckarin<EMAIL_ADDRESS>- Fixed bug in CGI::Pretty that causes it to print partial end tags when
the $INDENT global is changed.
- Single quotes are changed to character entity ' for
compatibility with URLs.
Version 2.74
September
13, 2000
- Quashed one-character bug that caused CGI.pm to fail on file uploads.
Version 2.73
September 12, 2000
- Added -base to the list of arguments accepted by url().
- Fixes to XHTML support.
- POST parameters no longer show up in the Location box.
Version 2.72
August 19, 2000
- Fixed the defaults button so that it works again
- Charset is now correctly saved and restored when saving to files
- url() now works correctly when given scripts with %20 and other
escapes in the additional path info. This undoes a patch introduced
in version 2.47 that I no longer understand the rationale for.
Version 2.71
August 13, 2000
- Newlines in the value attributes of hidden fields and other form elements are
now escaped when using ISO-Latin.
- Inline script and style sections are now protected as CDATA sections when
XHTML mode is on (the default).
Version 2.70
August 4, 2000
- Fixed bug in scrolling_list() which omitted a space in front of the "multiple" attribute.
- Squashed the "useless use of string in void context" message from redirects.
Version 2.69
- startform() now creates default ACTION for POSTs as well as GETs.
This may break some browsers, but it no longer violates the HTML spec.
- CGI.pm now emits XHTML by default. Disable with -no_xhtml.
- We no longer interpret ddd sequences in non-latin character
sets.
Version 2.68
- No longer attempts to escape characters when dealing with non
ISO-8861 character sets.
- checkbox() function now defaults to using -value as its label,
rather than -name. The current behavior is what has been documented
from the beginning.
- -style accepts array reference to incorporate multiple
stylesheets into document.
- Fixed two bugs that caused the -compile pragma to fail with a
syntax error.
Version 2.67
- Added XHTML support (incomplete; tags need to be lowercased).
- Fixed CGI/Carp when running under mod_perl. Probably broke in other contexts.
- Fixed problems when passing multiple cookies.
- Suppress warnings from _tableize() that were appearing when using -w switch with
radio_group() and checkbox_group().
- Support for the header() -attachment argument, which can give
pages a default file name when saving to disk.
Version 2.66
- 2.65 changes in make_attributes() broke HTTP header functions
(including redirect), so made it context sensitive.
Version 2.65
- Fixed regression tests to skip tests that require implicit fork
on machines without fork().
- Changed make_attributes() to automatically escape any HTML reserved
characters.
- Minor documentation fix in javascript example.
Version 2.64
- Changes introduced in 2.63 broke param() when retrieving parameter lists
containing only a single argument. This is now fixed.
- self_url() now defaults to returning parameters delimited with
semicolon. Use the pragma -oldstyle_urls to get the old "&" delimiter.
Version 2.63
- Fixed CGI::Push to pull out parameters correctly.
- Fixed redirect() so that it works with default character set
- Changed param() so as to returned empty string '' when referring
to variables passed in query strings like 'name1=&name2'
Version 2.62
- Fixed broken ReadParse() function, and added regression tests
- Fixed broken CGI::Pretty, and added regression tests
Version 2.61
- Moved more functions from CGI.pm proper into CGI/Util.pm. CGI/Cookie should now be
standalone.
- Disabled per-user temporary directories, which were causing grief.
Version 2.60
- Fixed junk appearing in autogenerated HTML functions when using object-oriented mode.
Version 2.59
- autoescape functionality breaks too much existing code, removed it.
- use escapeHTML() manually
Version 2.58
This is the release version of 2.57.
Version 2.57
- Added -debug pragma and turned off auto reading of STDIN.
- Default DTD updated to HTML 4.01 transitional.
- Added charset() method and the -charset argument to header().
- Fixed behavior of escapeHTML() to respect charset() and to escape nasty
Windows characters (thanks to Tom Christiansen).
- Handle REDIRECT_QUERY_STRING correctly.
- Removed use_named_parameters() because of dependency problems
and general lameness.
- Fixed problems with bad HREF links generated by url(-relative=>1)
when the url is like /people/.
- Silenced a warning on upload (patch provided by Jonas Liljegren)
- Fixed race condition in CGI::Carp when errors occur during parsing
(patch provided by Maurice Aubrey).
- Fixed failure of url(-path_info=>1) when path contains % signs.
- Fixed warning from CGI::Cookie when receiving foreign cookies
that don't use name=value format.
- Fixed incompatibilities with file uploading on VMS systems.
Version 2.56
- Fixed bugs in file upload introduced in version 2.55
- Fixed long-standing bug that prevented two files with identical
names from being uploaded.
Version 2.55
- Fixed cookie regression test so as not to produce an error.
- Fixed path_info() and self_url() to work correctly together when
path_info() modified.
- Removed manify warnings from CGI::{Switch,Apache}.
Version 2.54
- This will be the last release of the monolithic CGI.pm module. Later versions will be
modularized and optimized.
- DOMAIN tag no longer added to cookies by default. This will break some versions of
Internet Explorer, but will avoid breaking networks which use host tables without fully
qualified domain names. For compatibility, please always add the -domain tag when creating
cookies.
- Fixed escape() method so that +'s are treated correctly.
- Updated CGI::Pretty module.
Version 2.53
- Forgot to upgrade regression tests before releasing 2.52. NOTHING ELSE HAS CHANGED IN LIBRARY
Version 2.52
- Spurious newline in checkbox() routine removed. (courtesy John Essen)
- TEXTAREA linebreaks now respected in dump() routine. (courtesy John Essen)
- Patches for DOS ports (courtesy Robert Davies)
- Patches for VMS
- More fixes for cookie problems
- Fix CGI::Carp so that it doesn't affect eval{} blocks (courtesy Byron Brummer)
Version 2.51
- Fixed problems with cookies not being remembered when sent to IE 5.0 (and Netscape 5.0 too?)
- Numerous HTML compliance problems in cgi_docs.html; fixed
thanks to Michael Leahy
Version 2.50
- Added a new Vars() method to retrieve all parameters as a tied hash.
- Untainted tainted tempfile name so that script doesn't fail on terminal unlink.
- Made picking of upload tempfile name more intelligent so that doesn't fail in case of name collision.
- Fixed handling of expire times when passed an absolute timestamp.
- Changed dump() to Dump() to avoid name clashes.
Version 2.49
- Fixes for FastCGI (globals not getting reset)
- Fixed url() to correctly handle query string and path under MOD_PERL
Version 2.48
- Reverted detection of MOD_PERL to avoid breaking PerlEX.
Version 2.47
- Patch to fix file upload bug appearing in IE 3.01 for Macintosh/PowerPC.
- Replaced use of $ENV{SCRIPT_NAME} with $ENV{REQUEST_URI} when running
under Apache, to fix self-referencing URIs.
- Fixed bug in escapeHTML() which caused certain constructs, such as
CGI->image_button(), to fail.
- Fixed bug which caused strong('CGI') to fail. Be careful to use
CGI::strong('CGI') and not CGI->strong('CGI'). The latter will
produce confusing results.
- Added upload() function, as a preferred replacement for
the "filehandle as string" feature.
- Added cgi_error() function.
- Rewrote file upload handling to return undef rather than dieing
when an error is encountered. Be sure to call
cgi_error() to find out what went wrong.
Version 2.46
- Fix for failure of the "include" tests under mod_perl
- Added end_multipart_form to prevent failures during qw(-compile :all)
Version 2.45
- Multiple small documentation fixes
- CGI::Pretty didn't get into 2.44. Fixed now.
Version 2.44
- Fixed file descriptor leak in upload function.
- Fixed bug in header() that prevented fields from containing double quotes.
- Added Brian Paulsen's CGI::Pretty package for
pretty-printing output HTML.
- Removed CGI::Apache and CGI::Switch from the distribution.
- Generated start_* shortcuts so that start_table(), end_table(),
start_ol(), end_ol(), and so forth now work (see the docs on how to
enable this feature).
- Changed accept() to Accept(), sub() to Sub(). There's still a conflict with
reset(), but this will break too many existing scripts!
Version 2.43
- Fixed problem with "use strict" and file uploads (thanks to Peter Haworth)
- Fixed problem with not MSIE 3.01 for the power_mac not doing
file uploads right.
- Fixed problem with file upload on IIS 4.0 when authorization in
use.
- -content_type and '-content-type' can now be provided to
header() as synonyms for -type.
- CGI::Carp now escapes the ampersand BEFORE escaping the > and
< signs.
- Fixed "not an array reference" error when passing a hash
reference to radio_group().
- Fixed non-removal of uploaded TMP files on NT platforms which
occurs when server runs on non-C drive (thanks to Steve Kilbane
for finding this one).
Version 2.42
- Too many screams of anguish at changed behavior of url(). Is now back
to its old behavior by default, with options to generate all the variants.
- Added regression tests. "make test" now works.
- Documentation fixes.
- Fixes for Macintosh uploads, but uploads STILL do not work pending changes
to MacPerl.
Version 2.41
- url() method now includes the path info. Use script_name() to get
it without path info().
- Changed handling of empty attributes in HTML tag generation. Be
warned! Use table({-border=>undef}) rather than
table({-border=>''}).
- Changes to allow uploaded filenames to be compared to other
strings with "eq", "cmp" and "ne".
- Changes to allow CGI.pm to coexist more peacefully with ActiveState PerlEX.
- Changes to prevent exported variables from clashing when
importing ":all" set in combination with cookies.
Version 2.40
- CGI::Carp patched to work better with mod_perl (thanks to Chris
Dean).
- Uploads of files whose names begin with numbers or the Windows
\\UNC\shared\file nomenclature should no longer fail.
- The <STYLE> tag (for cascading style sheets) now generates the required TYPE attribute.
- Server push primitives added, thanks to Ed Jordan.
- Table and other HTML3 functions are now part of the :standard set.
- Small documentation fixes.
TO DO:
- Do something about the DTD mess. The module should generate correct DTDs, or at
least offer the programmer a way to specify the correct one.
- Split CGI.pm into CGI processing and HTML-generating modules.
- More robust file upload (?still not working on the Macintosh?).
- Bring in all the HTML4 functionality, particular the
accessibility features.
Version 2.39
- file uploads failing because of VMS patch; fixed.
- -dtd parameter was not being properly processed.
Version 2.38
I finally got tired of all the 2.37 betas and released 2.38. The main
difference between this version and the last 2.37 beta (2.37b30) are
some fixes for VMS. This should allow file upload to work properly on
all VMS Web servers.
Version 2.37, various beta versions
- Added a CGI::Cookie::parse() method for lucky mod_perl users.
- No longer need separate -values and -labels arguments for
multi-valued form elements.
- Added better interface to raw cookies (fix courtesy Ken Fox<EMAIL_ADDRESS>- Added param_fetch() function for direct access to parameter list.
- Fix to checkbox() to allow for multi-valued single checkboxes (weird problem).
- Added a compile() method for those who want to compile without importing.
- Documented the import pragmas a little better.
- Added a -compile switch to the use clause for the long-suffering
mod_perl and Perl compiler users.
- Fixed initialization routines so that FileHandle and type globs
work correctly (and hash initialization doesn't fail!).
- Better deletion of temporary files on NT systems.
- Added documentation on escape(), unescape(), unescapeHTML() and
unescapeHTML() subroutines.
- Added documentation on creating subclasses.
- Fixed problem when calling $self->SUPER::foo() from inheriting
subclasses.
- Fixed problem using filehandles from within subroutines.
- Fixed inability to use the string "CGI" as a parameter.
- Fixed exponentially growing $FILLUNIT bug
- Check for undef filehandle in read_from_client()
- Now requires the UNIVERSAL.pm module, present in Perl 5.003_7 or
higher.
- Fixed problem with uppercase-only parameters being ignored.
- Fixed vanishing cookie problem.
- Fixed warning in initialize_globals() under mod_perl.
- File uploads from Macintosh versions of MSIE should now work.
- Pragmas now preceded by dashes (-nph) rather than colons (:nph).
Old style is supported for backward compatibility.
- Can now pass arguments to all functions using {} brackets,
resolving historical inconsistencies.
- Removed autoloader warnings about absent MultipartBuffer::DESTROY.
- Fixed non-sticky checkbox() when -name used without -value.
- Hack to fix path_info() in IIS 2.0. Doesn't help with IIS 3.0.
- Parameter syntax for debugging from command line now more straightforward.
- Added $DISABLE_UPLOAD to disable file uploads.
- Added $POST_MAX to error out if POSTings exceed some ceiling.
- Fixed url_param(), which wasn't working at all.
- Fixed variable suicide problem in s///e expressions, where the autoloader
was needed during evaluation.
- Removed excess spaces between elements of checkbox and radio groups
- Can now create "valueless" submit buttons
- Can now set path_info as well as read it.
- ReadParse() now returns a useful function result.
- import_names() now allows you to optionally clear out the
namespace before importing (for mod_perl users)
- Made it possible to have a popup menu or radio button with a value of "0".
- link() changed to Link() to avoid overriding native link function.
- Takes advantage of mod_perl's register_cleanup() function to
clear globals.
- <LAYER> and <ILAYER> added to :html3 functions.
- Fixed problems with private tempfiles and NT/IIS systems.
- No longer prints the DTD by default (I bet no one will
complain).
- Allow underscores to replace internal hyphens in parameter
names.
- CGI::Push supports heterogeneous MIME types and
adjustable delays between pages.
- url_param() method added for retrieving URL parameters even
when a fill-out form is POSTed.
- Got rid of warnings when radio_group() is called.
- Cookies now moved to their very own module.
- Fixed documentation bug in CGI::Fast.
- Added a :no_debug pragma to the import list.
Version 2.36
- Expanded JavaScript functionality
- Preliminary support for cascading stylesheets
- Security fixes for file uploads:
- Module will bail out if its temporary file already exists
- Temporary files can now be made completely private to
avoid peeking by other users or CGI scripts.
- use CGI qw/:nph/ wasn't working correctly. Now it
is.
- Cookie and HTTP date formats didn't meet spec. Thanks to Mark
Fisher<EMAIL_ADDRESS>for catching and fixing this.
p
Version 2.35
- Robustified multipart file upload against incorrect syntax in POST.
- Fixed more problems with mod_perl.
- Added -noScript parameter to start_html().
- Documentation fixes.
Version 2.34
- Stupid typo fix
Version 2.33
- Fixed a warning about an undefined environment variable.
- Doug's patch for redirect() under mod_perl
- Partial fix for busted inheritence from CGI::Apache
- Documentation fixes.
Version 2.32
- Improved support for Apache's mod_perl.
- Changes to better support inheritance.
- Support for OS/2.
Version 2.31
- New uploadInfo() method to obtain header
information from uploaded files.
- cookie() without any arguments returns all the
cookies passed to a script.
- Removed annoying warnings about $ENV{NPH} when running with the
-w switch.
- Removed operator overloading throughout to make compatible with
new versions of perl.
- -expires now implies the -date
header, to avoid clock skew.
- WebSite passes cookies in $ENV{COOKIE} rather than $ENV{HTTP_COOKIE}.
We now handle this, even though it's O'Reilly's fault.
- Tested successfully against new sfio I/O layer.
- Documentation fixes.
Version 2.30
- Automatic detection of operating system at load time.
- Changed select() function to Select() in order to avoid
conflict with Perl built-in.
- Added Tr() as an alternative to TR(); some people think it
looks better that way.
- Fixed problem with autoloading of MultipartBuffer::DESTROY code.
- Added the following methods:
- virtual_host()
- server_software()
- Automatic NPH mode when running under Microsoft IIS server.
Version 2.29
- Fixed cookie bugs
- Fixed problems that cropped up when useNamedParameters was set to 1.
- Prevent CGI::Carp::fatalsToBrowser() from crapping out when
encountering a die() within an eval().
- Fixed problems with filehandle initializers.
Version 2.28
- Added support for NPH scripts; also fixes problems with
Microsoft IIS.
- Fixed a problem with checkbox() values not being correctly saved
and restored.
- Fixed a bug in which CGI objects created with empty string
initializers took on default values from earlier CGI objects.
- Documentation fixes.
Version 2.27
- Small but important bug fix: the automatic capitalization of
tag attributes was accidentally capitalizing the VALUES as
well as the ATTRIBUTE names (oops).
Version 2.26
- Changed behavior of scrolling_list(), checkbox() and checkbox_group()
methods so that defaults are honored correctly. The "fix" causes
endform() to generate additional <INPUT TYPE="HIDDEN"> tags --
don't be surpised.
- Fixed bug involving the detection of the SSL protocol.
- Fixed documentation error in position of the -meta argument in start_html().
- HTML shortcuts now generate tags in ALL UPPERCASE.
- start_html() now generates correct SGML header:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
- CGI::Carp no longer fails "use strict refs" pragma.
Version 2.25
- Fixed bug that caused bad redirection on destination URLs with arguments.
- Fixed bug involving use_named_parameters() followed by start_multipart_form()
- Fixed bug that caused incorrect determination of binmode for Macintosh.
- Spelling fixes on documentation.
Version 2.24
- Fixed bug that caused generation of lousy HTML for some form elements
- Fixed uploading bug in Windows NT
- Some code cleanup (not enough)
Version 2.23
- Fixed an obscure bug that caused scripts to fail mysteriously.
- Fixed auto-caching bug.
- Fixed bug that prevented HTML shortcuts from passing taint checks.
- Fixed some -w warning problems.
Version 2.22
- New CGI::Fast module for use with FastCGI protocol. See pod
documentation for details.
- Fixed problems with inheritance and autoloading.
- Added TR() (<tr>) and PARAM() (<param>) methods to
list of exported HTML tag-generating functions.
- Moved all CGI-related I/O to a bottleneck method so that this can
be overridden more easily in mod_perl (thanks to Doug MacEachern).
- put() method as substitute for print() for use in mod_perl.
- Fixed crash in tmpFileName() method.
- Added tmpFileName(), startform() and endform() to export list.
- Fixed problems with attributes in HTML shortcuts.
- Functions that don't actually need access to the CGI object now
no longer generate a default one. May speed things up slightly.
- Aesthetic improvements in generated HTML.
- New examples.
Version 2.21
- Added the -meta argument to start_html().
- Fixed hidden fields (again).
- Radio_group() and checkbox_group() now return an appropriate scalar
value when called in a scalar context, rather than returning a numeric
value!
- Cleaned up the formatting of form elements to avoid unesthetic
extra spaces within the attributes.
- HTML elements now correctly include the closing tag when parameters
are present but null: em('')
- Added password_field() to the export list.
Version 2.20
- Dumped the SelfLoader because of problems with running with
taint checks and rolled my own. Performance is now
significantly improved.
- Added HTML shortcuts.
- import() now adheres to the Perl module
conventions, allowing CGI.pm to import any or all method names
into the user's name space.
- Added the ability to initialize CGI objects from strings and
associative arrays.
- Made it possible to initialize CGI objects with filehandle
references rather than filehandle strings.
- Added the delete_all() and append() methods.
- CGI objects correctly initialize from filehandles on NT/95
systems now.
- Fixed the problem with binary file uploads on NT/95 systems.
- Fixed bug in redirect().
- Added '-Window-target' parameter to redirect().
- Fixed import_names() so that parameter names containing funny
characters work.
- Broke the unfortunate connection between cookie and CGI parameter name space.
- Fixed problems with hidden fields whose values are 0.
- Cleaned up the documentation somewhat.
Version 2.19
- Added cookie() support routines.
- Added -expires parameter to header().
- Added cgi-lib.pl compatibility mode.
- Made the module more configurable for different
operating systems.

Version 2.18
- Fixed a bug that corrects a hang that
occurs on some platforms when processing file uploads.
Unfortunately this disables the check for bad Netscape
uploads.
- Fixed bizarre problem involving the inability to process
uploaded files that begin with a non alphabetic character
in the file name.
- Fixed a bug in the hidden fields involving the -override
directive being ignored when scalar defaults were passed.
- Added documentation on how to disable the SelfLoader features.
Version 2.17
- Added support for the SelfLoader module.
- Added oodles of JavaScript support routines.
- Fixed bad bug in query_string() method that caused some parameters
to be silently dropped.
- Robustified file upload code to handle premature termination by the
client.
- Exported temporary file names on file upload.
- Removed spurious "uninitialized variable" warnings that
appeared when running under 5.002.
- Added the Carp.pm library to the standard distribution.
- Fixed a number of errors in this documentation, and probably
added a few more.
- Checkbox_group() and radio_group() now return the buttons as arrays,
so that you can incorporate the individual buttons into specialized
tables.
- Added the '-nolabels' option to checkbox_group() and radio_group().
Probably should be added to all the other HTML-generating routines.
- Added the url() method to recover the URL without the entire
query string appended.
- Added request_method() to list of environment variables available.
- Would you believe it? Fixed hidden fields again!
Version 2.16
- Fixed hidden fields yet again.
- Fixed subtle problems in the file upload method that caused
intermittent failures (thanks to Keven Hendrick for this one).
- Made file upload more robust in the face of bizarre behavior
by the Macintosh and Windows Netscape clients.
- Moved the POD documentation to the bottom of the module
at the request of Stephen Dahmen.
- Added the -xbase parameter to the start_html() method, also
at the request of Stephen Dahmen.
- Added JavaScript form buttons at Stephen's request. I'm not sure how to
use this Netscape extension correctly, however, so for now the form()
method is in the module as an undocumented feature.
Use at your own risk!
Version 2.15
- Added the -override parameter to all field-generating
methods.
- Documented the
user_name()
and remote_user()
methods.
- Fixed bugs that prevented empty strings from being recognized
as valid textfield contents.
- Documented the use of framesets and added a frameset example.
Version 2.14
This was an internal experimental version that was never released.
Version 2.13
- Fixed a bug that interfered with the value "0" being entered into
text fields.
Version 2.01
- Added -rows and -columns to the radio and checkbox groups.
No doubt this will cause much grief because it seems to
promise a level of meta-organization that it doesn't
actually provide.
- Fixed a bug in the redirect() method -- it was not truly
HTTP/1.0 compliant.
Version 2.0
The changes seemed to touch every line of code, so I decided
to bump up the major version number.
- Support for named parameter
style method calls. This turns out to be a
big win for extending CGI.pm when Netscape adds
new HTML "features".
- Changed behavior of hidden fields back to the correct
"sticky" behavior.
This is going to
break some programs, but it is for the best in
the long run.
- Netscape 2.0b2 broke the file upload feature. CGI.pm now
handles both 2.0b1 and 2.0b2-style uploading. It will
probably break again in 2.0b3.
- There were still problems with library being unable to
distinguish between a form being loaded for the first time,
and a subsequent loading with all fields blank. We now
forcibly create a default name for the Submit button (if not
provided) so that there's always at least one parameter.
- More workarounds to prevent annoying spurious warning messages
when run under the -w switch. -w is seriously broken in
perl 5.001!
Version 1.57
- Support for the Netscape 2.0 "File upload" field.
- The handling of defaults for selected items in scrolling lists
and multiple checkboxes is now consistent.
Version 1.56
- Created true "pod" documentation for the module.
- Cleaned up the code to avoid many of the spurious
"use of uninitialized variable" warnings when running
with the -w switch.
- Added the
autoEscape()
method.
v - Added string interpolation of the CGI object.
- Added the ability to pass additional parameters to
the <BODY> tag.
- Added the ability to specify the status code in the
HTTP header.
Bug fixes in version 1.55
- Every time self_url() was called, the parameter list
would grow. This was a bad "feature".
- Documented the fact that you can pass "-" to
radio_group() in order to prevent any button from
being highlighted by default.
Bug fixes in version 1.54
- The user_agent() method is now documented;
- A potential security hole in import() is now plugged.
- Changed name of import() to import_names() for compatibility
with CGI:: modules.
Bug fixes in version 1.53
- Fixed several typos in the code that were causing the following
subroutines to fail in some circumstances
- checkbox()
- hidden()
- No features added
New features added in version 1.52
- Added backslashing, quotation marks, and other shell-style
escape sequences to the parameters passed in during debugging
off-line.
- Changed the way that the hidden() method works so that the
default value always overrides the current one.
- Improved the handling of sticky values in forms. It's now less
likely that sticky values will get stuck.
- If you call server_name(), script_name() and several other
methods when running offline, the methods now create "dummy"
values to work with.
Bugs fixed in version 1.51
- param() when called without arguments was returning an array of
length 1 even when there were no parameters to be had. Bad bug!
Bad!
- The HTML code generated would break if input fields contained
the forbidden characters ">< or &. You can now use these characters
freely.
New features added in version 1.50
- import() method allows all the parameters to be
imported into a namespace in one fell swoop.
- Parameters are now returned in the same order in which they
were defined.
Bugs fixed in version 1.45
- delete() method didn't work correctly. This is now fixed.
- reset() method didn't allow you to set the name of the button. Fixed.
Bugs fixed in version 1.44
- self_url() didn't include the path information. This is now
fixed.
New features added in version 1.43
- Added the delete() method.
New features added in version 1.42
- The image_button() method to create clickable images.
- A few bug fixes involving forms embedded in <PRE> blocks.
New features added in version 1.4
- New header shortcut methods
- redirect() to create HTTP redirection messages.
- start_html() to create the HTML title, complete with
the recommended <LINK> tag that no one ever remembers
to include.
- end_html() for completeness' sake.
- A new save() method that allows you to write out the state of an
script to a file or pipe.
- An improved version of the new() method that allows you to restore the
state of a script from a file or pipe. With (2) this gives
you dump and restore capabilities! (Wow, you can put a
"121,931 customers served" banner at the bottom of your pages!)
- A self_url() method that allows you to create state-maintaining
hypertext links. In addition to allowing you to maintain the
state of your scripts between invocations, this lets you work
around a problem that some browsers have when jumping to
internal links in a document that contains a form -- the form
information gets lost.
- The user-visible labels in checkboxes, radio buttons, popup menus
and scrolling lists have now been decoupled from the values
sent to your CGI script. Your script can know a checkbox
by the name of "cb1" while the user knows it by a more
descriptive name. I've also added some parameters that were
missing from the text fields, such as MAXLENGTH.
- A whole bunch of methods have been added to get at environment
variables involved in user verification and other obscure
features.
Bug fixes
- The problems with the hidden fields have (I hope at last) been
fixed.
- You can create multiple query objects and they will all be
initialized correctly. This simplifies the creation of
multiple forms on one page.
- The URL unescaping code works correctly now.
Table of Contents
Lincoln D. Stein<EMAIL_ADDRESS>Cold Spring Harbor Laboratory
Last modified: Thu Nov 2 09:20:02 EST 2006


The Lemke Howson algorithm¶
The vertex and support enumeration algorithms are all algorithms that use an exhaustive search. For large games, this can take a long time and/or have a high computational cost. The following algorithm gives an approach to create a path through vertices in both best response polytopes to find a pair that is fully labelled.
The Lemke Howson algorithm¶
For a nondegenerate 2 player game $(A, B)\in{\mathbb{R}^{m\times n}_{>0}}^2$ the following algorithm returns a nash equilibrium:
- Start at the artificial equilibrium: $(0, 0)$
- Choose a label to drop.
- Remove this label from the corresponding vertex by traversing an edge of the corresponding polytope to another vertex.
- The new vertex will now have a duplicate label in the other polytope. Remove this label from the vertex of the other polytope and traverse an edge of that polytope to another vertex.
- Repeat step 4 until the pair of vertices is fully labelled.
As an example let us consider the matching pennies game:
$$ A = \begin{pmatrix} 1 & -1\\ -1& 1 \end{pmatrix}\qquad B = \begin{pmatrix} -1 & 1\\ 1& -1 \end{pmatrix} $$First let us add 2 to all utilities:
$$ A = \begin{pmatrix} 3 & 1\\ 1 & 3 \end{pmatrix}\qquad B = \begin{pmatrix} 1 & 3\\ 3 & 1 \end{pmatrix} $$The vertices for $\mathcal{P}$ are:
- $a=(0, 0)$ has labels $\{0, 1\}$
- $b=(1/3, 0)$ has labels $\{1, 3\}$
- $c=(1/4, 1/4)$ has labels $\{2, 3\}$
- $d=(0, 1/3)$ has labels $\{0, 2\}$
The vertics and labels for $\mathcal{Q}$ are:
- $w=(0, 0)$ has labels $\{2, 3\}$
- $x=(1/3, 0)$ has labels $\{0, 3\}$
- $y=(1/4, 1/4)$ has labels $\{0, 1\}$
- $z=(0, 1/3)$ has labels $\{1, 2\}$
Let us apply the algorithm:
- $(a, w)$ have labels: $\{0, 1\}, \{2, 3\}$. Drop 0 (arbitrary decision) in $\mathcal{P}$.
- $\to (b, w)$ have labels: $\{1, 3\}, \{2, 3\}$. In $\mathcal{Q}$ drop 3.
- $\to (b, z)$ have labels: $\{1, 3\}, \{1, 2\}$. In $\mathcal{P}$ drop 1.
- $\to (c, z)$ have labels: $\{2, 3\}, \{1, 2\}$. In $\mathcal{Q}$ drop 2.
- $\to (c, y)$ have labels: $\{2, 3\}, \{0, 1\}$. Fully labeled vertex pair.
We now return the strategy pair by normalising these vertices:
$$((1/2, 1/2), (1/2, 1/2))$$This is also implemented in Nashpy
:
import numpy as np
import nashpy as nash
A = np.array([[1, -1], [-1, 1]])
matching_pennies = nash.Game(A)
matching_pennies.lemke_howson(initial_dropped_label=0)
You can also iterate over all possible starting labels:
for eq in matching_pennies.lemke_howson_enumeration():
print(eq)
In this case they will always give the same result (this game indeed has a unique equilibria), however that's not always the case and also note that not all equilibria can be obtained from a given starting vertex pair.
Tableaux¶
Carrying out the Lemke Howson algorithm in this way is straightforward when the polytope can be visualised and/or the vertices themselves can all be enumerated to begin with. This is not always the case: using tools from linear programming we can traverse our polytopes using a technique called "pivoting" or a tabular representation of the polytopes called "tableaux" (plural).
A tableau corresponds to the inequalities relating to the payoffs considered but as equalities.The inequalities for the row polytope for the matching pennies game can be rewritten as:
- $x_1+3x_2 + s_1 = 1$
- $3x_1+x_2 + s_2 = 1$
where $s_1, s_2$ are "slack" variables used to convert the inequality to an equality.
This can be represented in tableau form as:
$$ T_r = \begin{pmatrix} 1 & 3 & 1 & 0 & 1\\ 3 & 1 & 0 & 1 & 1 \end{pmatrix} $$Note that this corresponds to:
$$ T_r = \begin{pmatrix} B^T&I &1\\ \end{pmatrix} $$Basic variables and labelled vertices¶
A basic variable of a tableau is a column (ignoring the last column) that is linearly independent from the others. Any given vertex of a polytope corresponds to a tableau where the non basic variables are set to 0 and the basic variables are solved. Non basic variables corresponds to labels of a vertex.
For example setting the non basic variables in $T_r$ to 0 we get:
$$x_1=x_2=0$$which corresponds to the origin of the polytope (which is the starting point for the Lemke Howson algorithm). Thus the labels of vertex corresponds to the non basic variables.
Pivoting and the Lemke Howson Algorithm¶
In the Lemke Howson algorithm we need to drop a label and move along an edge of the Polytope to arrive at another vertex where a new label will replace the dropped label. This is equivalent to making a non basic variable basic (and vice versa). We do this by carrying out row operations on the tableau.
Let us drop the 0 label (corresponding to the first column) on $T_r$. We need to "pivot" the first column, so one of those non zero variables in that column will become 0. We identify this by choosing the row with the minimum positive ratio of $(T_r)_{i5} / (T_r)_{i1}$. This ensures that the resulting vertex is valid (and will have no negative variables). In our case the ratios in the first column are:
- First row: $1/1$
- Second row: $1/3$
Thus we pivot on the second row. We here take multiples of rows and carry out subtractions/additions of row so as to obtain a basic variable in the first column. In our case let us multiple the first row by 3 and subtract the second row from it:
$$ T_r = \begin{pmatrix} 0 & 8 & 3 & -1 & 2\\ 3 & 1 & 0 & 1 & 1 \end{pmatrix} $$We now (as in the example we carried out before) have non basic variables $x_2$ and $s_2$ in other words we have labels: $\{1, 3\}$. We have thus picked up the label $3$ which we need to drop from the other polytope.
In tableau form the column best response polytope is given by:
$$ T_c = \begin{pmatrix} 1 & 0 & 3 & 1 & 1\\ 0 & 1 & 1 & 3 & 1 \end{pmatrix} $$Note that this corresponds to:
$$ T_c = \begin{pmatrix} I & A & 1\\ \end{pmatrix} $$we need to pivot the fourth column corresponding to label $3$ of $T_c$. First the minimum ratios: $1/1>1/3$, so we pivot on the second row. Let us multiply the first row by 3 and subtract the second row from it:
$$ T_c = \begin{pmatrix} 3 & -1 & 8 & 0 & 2\\ 0 & 1 & 1 & 3 & 1 \end{pmatrix} $$This has labels: $\{1, 2\}$ with $1$ being the newly picked up label that we now drop (by pivoting the second column) from $T_r$:
$$ T_r = \begin{pmatrix} 0 & 8 & 3 & -1 & 2\\ 24 & 0 & -3 & 9 & 6 \end{pmatrix} $$which has labels: $\{2, 3\}$ with $2$ being the newly picked up label so we now pivot the third column of $T_c$:
$$ T_c = \begin{pmatrix} 3 & -1 & 8 & 0 & 2\\ -3 & 9 & 0 & 24 & 6 \end{pmatrix} $$which has labels: $\{0, 1\}$ so we have a fully labelled vertex pair. Setting the non basic variables to 0 in each tableau we obtain:
$$ \left((2/8, 8/24), (2/8, 6/24)\right) = \left((1/4, 1/4), (1/4, 1/4)\right) $$which, when normalised to have sum 1 gives:
$$ \left((1/2, 1/2), (1/2, 1/2)\right) $$A summary of integer pivoting:
- Identify the row to pivot on using the minumum ratio test.
- Carry out row operations to ensure that the pivot row is the only row with non zero variables in that column.


By Daniel Strøm / @MrStroem
IRC: Freenode#zftalk|#codeception
Email<EMAIL_ADDRESS>Twitter: @MrStroem
Test a ZF2 application
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.*",
"zf-commons/zfc-user": "1.*"
},
"require-dev": {
"codeception/codeception": "~2.0.0"
}
}
run "composer update"
Run "./vendor/bin/codecept bootstrap"
Generate unittest
Rate talk: https://joind.in/11828


Once you have ArgusWatchers defined, you’re ready to start monitoring for notify events; perhaps you’ll even want to set up alerts on high priority events. There are generic logfiles included in both apps, and we provide out-of-the-box metrics handling with Prometheus so you’ll be able to receive time-series data that you can immediately monitor. Ultimately, it will be up to you to use your logging framework of choice to monitor the way you’re used to doing.
Topics
Logfiles
Using the glog
logging framework that most Kubernetes-related projects also
leverage, you can locate logfiles in both argusd and arguscontroller
containers at /tmp/argusd.INFO
and /tmp/arguscontroller.INFO
. The
argusd logs will show actual inotify
events that were reported as they
happened, where arguscontroller log will only include Kubernetes
controller-related log messages such as receiving new watchers, connecting the
controller to daemons via gRPC, and pods being created, deleted, and updated
that a watcher cares about.
Monitoring with Prometheus
When running a master Prometheus server, in order to add the scraper that
arguscontroller exposes, you will need to add the following definition to
your prometheus.yml
config:
scrape_configs:
...
- job_name: 'argus'
static_configs:
- targets: ['argus-prometheus:2112']
After events are collected you will be able to see metrics streaming in around a couple specifications:
# Argus metrics (labels = arguswatcher, event, nodeName)
argus_events_total{arguswatcher="mywatcher",...}
# gRPC metrics (labels = grpc_method, grpc_service, grpc_type)
grpc_client_handled_total{grpc_service="argus.Argusd"...}
grpc_client_msg_received_total{grpc_service="argus.Argusd"...}
grpc_client_msg_sent_total{grpc_service="argus.Argusd"...}
grpc_client_started_total{grpc_service="argus.Argusd"...}
The metric argus_events_total
is what you’ll be using to build your dashboards
and alerting on priority events as they occur. The gRPC-related metrics are
exposed to measure the performance between daemon and controller.
Alerting
If watching for changes on a critical section of your filesystem that should not
receive any kind of event, one could set up an alert with Prometheus and
Alertmanager. This could be
accomplished using the increase()
function, for example:
alert: PageOnModify
expr: increase(argus_events_total{arguswatcher="mywatcher",event="modify"}[1m]) > 0
labels:
severity: page
...
Grafana Dashboards
With Prometheus as a data source in your Grafana deployment and once
Prometheus starts scraping the argus-prometheus
endpoint as a scrape target,
you will be able to start using these collected metrics to build dashboards in
Grafana.
We will provide some ready-to-go templates for Argus dashboards at a later time…


Built-In Namespace _global_
| Method Attributes | Method Name and Description |
|---|---|
|
afterEach(afterEachFunction)
A function that is called after each spec in a suite.
|
|
|
beforeEach(beforeEachFunction)
A function that is called before each spec in a suite.
|
|
|
describe(description, specDefinitions)
Defines a suite of specifications.
|
|
|
expect(actual)
Starts a chain for a Jasmine expectation.
|
|
|
it(desc, func)
Creates a Jasmine spec that will be added to the current suite.
|
|
|
runs(func)
Defines part of a jasmine spec.
|
|
|
spyOn(obj, methodName)
Function that installs a spy on an existing object's method name.
|
|
|
waits(timeout)
Waits for a timeout before moving to the next runs()-defined block.
|
|
|
waitsFor(timeout, latchFunction, message)
Waits for the latchFunction to return true before proceeding to the next runs()-defined block.
|
|
|
xdescribe(description, specDefinitions)
Disables a suite of specifications.
|
|
|
xit(desc, func)
Creates a disabled Jasmine spec.
|
Method Detail
afterEach(afterEachFunction)
A function that is called after each spec in a suite.
Used for restoring any state that is hijacked during spec execution.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {Function} afterEachFunction
beforeEach(beforeEachFunction)
A function that is called before each spec in a suite.
Used for spec setup, including validating assumptions.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {Function} beforeEachFunction
describe(description, specDefinitions)
Defines a suite of specifications.
Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
of setup in some tests.
Defined in: base.js.
Defined in: base.js.
// TODO: a simple suite // TODO: a simple suite with a nested describe block
- Parameters:
- {String} description
- A string, usually the class under test.
- {Function} specDefinitions
- function that defines several specs.
expect(actual)
Starts a chain for a Jasmine expectation.
It is passed an Object that is the actual value and should chain to one of the many
jasmine.Matchers functions.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {Object} actual
- Actual value to test against and expected value
it(desc, func)
Creates a Jasmine spec that will be added to the current suite.
// TODO: pending tests
Defined in: base.js.
Defined in: base.js.
it('should be true', function() { expect(true).toEqual(true); });
- Parameters:
- {String} desc
- description of this specification
- {Function} func
- defines the preconditions and expectations of the spec
runs(func)
Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {Function} func
- Function that defines part of a jasmine spec.
spyOn(obj, methodName)
Function that installs a spy on an existing object's method name. Used within a Spec to create a spy.
Defined in: base.js.
Defined in: base.js.
// spy example var foo = { not: function(bool) { return !bool; } } spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
- Parameters:
- obj
- methodName
- Returns:
- a Jasmine spy that can be chained with all spy methods
- See:
- jasmine.createSpy
waits(timeout)
Waits for a timeout before moving to the next runs()-defined block.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {Number} timeout
waitsFor(timeout, latchFunction, message)
Waits for the latchFunction to return true before proceeding to the next runs()-defined block.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {Number} timeout
- {Function} latchFunction
- {String} message
xdescribe(description, specDefinitions)
Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {String} description
- A string, usually the class under test.
- {Function} specDefinitions
- function that defines several specs.
xit(desc, func)
Creates a disabled Jasmine spec.
A convenience method that allows existing specs to be disabled temporarily during development.
Defined in: base.js.
Defined in: base.js.
- Parameters:
- {String} desc
- description of this specification
- {Function} func
- defines the preconditions and expectations of the spec


Welcome
Please enter your TPOS Access Code exactly as printed in the letter you received at your legal address. If you do not have your TPOS Access Code, you can enter the exact dollar amount of the Gross Receipts or Distributive Share Income, Tax Liability, and Refund from your previous tax return.
$
$
$


The President's Analyst (1967)
Grade: 64
Perhaps this purportedly hilarious satire was never that funny, even in 1967. But there are positive things to say about "The President's Analyst". James Coburn does well in the lead role, the sets and cinematography are good, and there's plenty of action.
Dr. Sidney Shaefer (Coburn) has been selected to be the President's psychiatrist. At first, Shaefer is pleased with his important position. But he soon tires of being at the President's beck and call. He is constantly tailed by 'FBR' and 'CEA' agents. Worse, the unpleasant 'FBR' chief has separated him from his girlfriend (Joan Delaney) because he 'talks in his sleep'.
Shaefer decides to flee. But having been privy to Presiential secrets, he becomes a kidnapping target for Russian spies, and thus an assassination target for American spies. Much silliness follows, including Shaefer joining a hippie rock band led by Barry Maguire, and an assault on the insidious telephone monopoly.
There is much cartoonish violence in this satire. Many fiendish agents meet their maker. Violence does not bother me in films when it is necessary or when its consequences (i.e. suffering) are shown. But in "The President's Analyst" the shootings, stabbings, stranglings, etc. are solely intended to be humorous, and not ironical or repressive.
The biggest surprise in "The President's Analyst" is that the Russians, represented by their top spy Kropotkin (Severn Darden), are the good guys. The 'FBR' and 'CEA' agents prefer Shaefer dead, except for Don Masters (Godfrey Cambridge), who wants Shaefer to return as his personal analyst. The second surprise is that when Coburn wears a hippie wig he looks a lot like Neil Young. Also, Will Geer looks like Colonel Sanders, but this is not as surprising.
<EMAIL_ADDRESS>http://members.tripod.com/~Brian_Koller/movies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Features
Clocks or.. Clox
Models
About Us
Sign up here
Premium Materials
Our clocks use the shiniest brass which is sourced locally. This will increase the longevity of your purchase.
Fast Shipping
We make sure you recieve your clock as soon as we have finished making it. We also provide free returns if you are not satisfied.
Quality Assurance
For every purchase you make, we will ensure there are no damages or faults and we will check and test the mechanism of your clock.
Clocks or.. Clox
... the choise is in your hand


- Security - Class in edu.ithaca.group1
-
- Security() - Constructor for class edu.ithaca.group1.Security
-
- setCompleted(boolean) - Method in class edu.ithaca.group1.State
-
Setter for completed
- setDay(DaysOfWeek) - Method in class edu.ithaca.group1.Permissions
-
Sets new day of the week
- setDepartment(String) - Method in class edu.ithaca.group1.Door
-
Sets department field for the door.
- setDepartment(String) - Method in class edu.ithaca.group1.User
-
- setDoorDataPath(String) - Method in class edu.ithaca.group1.DataAccessObject
-
Sets the file that will be written to and read from for swipeRecord information
- setDoorId(String) - Method in class edu.ithaca.group1.Record
-
Sets the door ID
- setEnd(double) - Method in class edu.ithaca.group1.Permissions
-
Sets new end time
- setID(String) - Method in class edu.ithaca.group1.Door
-
- setId(String) - Method in class edu.ithaca.group1.User
-
Setter function for ID
- setName(String) - Method in class edu.ithaca.group1.User
-
Setter function for Name
- setNextState(StateStatus) - Method in class edu.ithaca.group1.State
-
Setter for nextState
- setOutcome(Boolean) - Method in class edu.ithaca.group1.Record
-
Sets the outcome
- setPermissionDataPath(String) - Method in class edu.ithaca.group1.DataAccessObject
-
Sets the file that will be written to and read from for swipeRecord information
- setRequestDataPath(String) - Method in class edu.ithaca.group1.DataAccessObject
-
Sets the file that will be written to and read from for swipeRecord information
- setStart(double) - Method in class edu.ithaca.group1.Permissions
-
Sets new start time
- setStatus(RequestStatus) - Method in class edu.ithaca.group1.Request
-
- setSwipeRecordDataPath(String) - Method in class edu.ithaca.group1.DataAccessObject
-
Sets the file that will be written to and read from for swipeRecord information
- setTimestamp(LocalDateTime) - Method in class edu.ithaca.group1.Record
-
Sets a new LocalDateTime timestamp
- setUserDataPath(String) - Method in class edu.ithaca.group1.DataAccessObject
-
Sets the file that will be written to and read from for swipeRecord information
- setUserId(String) - Method in class edu.ithaca.group1.Record
-
Sets the user ID
- start - Variable in class edu.ithaca.group1.Permissions
-
- start(StateStatus) - Method in class edu.ithaca.group1.StateDriver
-
- State - Class in edu.ithaca.group1
-
- State() - Constructor for class edu.ithaca.group1.State
-
Constructor
- StateDriver - Class in edu.ithaca.group1
-
- StateDriver() - Constructor for class edu.ithaca.group1.StateDriver
-
- StateStatus - Enum in edu.ithaca.group1
-
- StateStatus() - Constructor for enum edu.ithaca.group1.StateStatus
-
- status - Variable in class edu.ithaca.group1.Request
-
- Swipe - Class in edu.ithaca.group1
-
- Swipe() - Constructor for class edu.ithaca.group1.Swipe
-
- swipeRecordDataPath - Variable in class edu.ithaca.group1.DataAccessObject
-