|
Boost : |
From: Rene Rivera (grafikrobot_at_[hidden])
Date: 2007-03-04 12:08:42
Boost Inspection Report
Run Date: 17:08:33 UTC, Sunday 04 March 2007
An inspection program <http://www.boost.org/tools/inspect/index.html>
checks each file in the current Boost CVS for various problems,
generating this as output. Problems detected include tabs in files,
missing copyrights, broken URL's, and similar misdemeanors.
Totals:
13432 files scanned
1159 directories scanned (including root)
290 problems reported
Problem counts:
1 files with invalid line endings
0 bookmarks with invalid characters
3 invalid urls
117 broken links
24 unlinked files
44 file/directory names issues
32 files with tabs
33 violations of the Boost min/max guidelines
36 usages of unnamed namespaces in headers (including .ipp files)
Summary:
algorithm (1)
archive (5)
asio (2)
bind (1)
build (1)
conversion (10)
date_time (5)
doc (2)
dynamic_bitset (1)
filesystem (40)
function_types (1)
graph (6)
integer (1)
interprocess (36)
iostreams (3)
iterator (1)
lambda (3)
math (8)
more (5)
mpi (8)
mpl (1)
multi_array (2)
numeric (3)
program_options (1)
python (11)
quickbook (15)
random (2)
rational (8)
regex (1)
regression (14)
serialization (4)
system (4)
test (80)
thread (2)
tr1 (1)
type_traits (1)
Details:
*R* invalid (cr only) line-ending
*A* invalid bookmarks, invalid urls, broken links, unlinked files
*N* file/directory names issues
*T* tabs in file
*M* uses of min or max that have not been protected from the min/max macros, or unallowed #undef-s
*U* unnamed namespace in header
|algorithm|
libs/algorithm/string/doc/external_concepts.html:
*A* unlinked file
|archive|
boost/archive/basic_streambuf_locale_saver.hpp:
*N* name exceeds 31 characters
boost/archive/detail/polymorphic_iarchive_dispatch.hpp:
*N* name exceeds 31 characters
boost/archive/detail/polymorphic_oarchive_dispatch.hpp:
*N* name exceeds 31 characters
boost/archive/impl/xml_wiarchive_impl.ipp:
*U* unnamed namespace at line 53
boost/archive/iterators/remove_whitespace.hpp:
*U* unnamed namespace at line 57
|asio|
boost/asio/placeholders.hpp:
*U* unnamed namespace at line 89
libs/asio/index.html:
*A* broken link: doc/html/index.html
|bind|
boost/bind/placeholders.hpp:
*U* unnamed namespace at line 25
|build|
tools/build/v2/test/test_system.html:
*A* unlinked file
|conversion|
libs/conversion/lexical_cast_test.cpp:
*M* violation of Boost min/max guidelines on line 410
*M* violation of Boost min/max guidelines on line 430
*M* violation of Boost min/max guidelines on line 433
*M* violation of Boost min/max guidelines on line 445
*M* violation of Boost min/max guidelines on line 448
*M* violation of Boost min/max guidelines on line 452
*M* violation of Boost min/max guidelines on line 456
*M* violation of Boost min/max guidelines on line 457
libs/conversion/test/lexical_cast_noncopyable_test.cpp:
*N* name exceeds 31 characters
|date_time|
boost/date_time/date_parsing.hpp:
*M* violation of Boost min/max guidelines on line 80
*M* violation of Boost min/max guidelines on line 81
boost/date_time/period.hpp:
*M* violation of Boost min/max guidelines on line 353
*M* violation of Boost min/max guidelines on line 354
libs/date_time/xmldoc/date_time_docs_howto.html:
*A* unlinked file
|doc|
doc/html/boost_math/inverse_complex.html:
*A* unlinked file
doc/html/threads.html:
*A* unlinked file
|dynamic_bitset|
boost/dynamic_bitset/dynamic_bitset.hpp:
*T*
|filesystem|
libs/filesystem/doc/do-list.htm:
*A* invalid URL (hardwired file): file://?/
*A* invalid URL (hardwired file): file://?/UNC/
libs/filesystem/doc/faq.htm:
*A* broken link: path.htm#Canonical
*A* broken link: path.htm#Normalized
libs/filesystem/doc/i18n.html:
*A* broken link: ../../../../site/LICENSE_1_0.txt
*A* broken link: convenience.htm#basic_recursive_directory_iterator
*A* broken link: exception.htm
*A* broken link: operations.htm
*A* broken link: operations.htm#Do-the-right-thing
*A* broken link: operations.htm#is_directory
*A* broken link: operations.htm#is_file
*A* broken link: operations.htm#status
libs/filesystem/doc/index.htm:
*A* broken link: convenience.htm
*A* broken link: fstream.htm
*A* broken link: operations.htm#create_directory
*A* broken link: operations.htm#create_hard_link
*A* broken link: operations.htm#current_path
*A* broken link: operations.htm#directory_iterator
*A* broken link: operations.htm#equivalent
*A* broken link: operations.htm#file_size
*A* broken link: operations.htm#initial_path
*A* broken link: operations.htm#is_file
*A* broken link: operations.htm#is_symlink
*A* broken link: operations.htm#status
*A* broken link: operations.htm#symlink_status
*A* broken link: path.htm#Canonical
*A* broken link: path.htm#Grammar
*A* broken link: path.htm#Normalized
*A* broken link: path.htm#default_name_check
*A* broken link: path.htm#name_check_mechanism
*A* broken link: path.htm#normalize
*A* broken link: path.htm#operator_eq
*A* broken link: path.htm#synopsis
libs/filesystem/doc/portability_guide.htm:
*A* broken link: path.htm#name_check_typedef
libs/filesystem/doc/tr2_proposal.html:
*A* invalid URL (hardwired file): file:///C|/boost/site/libs/filesystem/doc/operations.htm#complete_note
libs/filesystem/src/operations.cpp:
*T*
|function_types|
boost/function_types/is_nonmember_callable_builtin.hpp:
*N* name exceeds 31 characters
|graph|
boost/graph/kolmogorov_max_flow.hpp:
*T*
libs/graph/doc/table_of_contents.html:
*A* broken link: write_dimacs_max_flow.html
libs/graph/example/read_write_dimacs-eg.cpp:
*T*
libs/graph/test/csr_graph_test.cpp:
*T*
libs/graph/test/graphml_test.cpp:
*T*
libs/graph/test/serialize.cpp:
*T*
|integer|
libs/integer/integer.htm:
*A* broken link: ../../../LICENSE_1_0.txt
|interprocess|
boost/interprocess/containers/deque.hpp:
*T*
boost/interprocess/containers/detail/flat_tree.hpp:
*T*
boost/interprocess/containers/detail/tree_func.hpp:
*T*
boost/interprocess/containers/list.hpp:
*T*
boost/interprocess/containers/slist.hpp:
*T*
boost/interprocess/containers/string.hpp:
*T*
boost/interprocess/containers/tree.hpp:
*T*
boost/interprocess/containers/vector.hpp:
*T*
boost/interprocess/detail/move_iterator.hpp:
*T*
boost/interprocess/detail/utilities.hpp:
*T*
boost/interprocess/ipc/message_queue.hpp:
*T*
boost/interprocess/streams/vectorstream.hpp:
*T*
boost/interprocess/sync/emulation/interprocess_recursive_mutex.hpp:
*N* name exceeds 31 characters
boost/interprocess/sync/interprocess_recursive_mutex.hpp:
*N* name exceeds 31 characters
boost/interprocess/sync/interprocess_upgradable_mutex.hpp:
*N* name exceeds 31 characters
*T*
boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_anonymous_condition_shared_data.hpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_anonymous_mutex_shared_data.hpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_anonymous_semaphore_shared_data.hpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_anonymous_upgradable_mutexA.cpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_anonymous_upgradable_mutexB.cpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_named_condition_shared_data.hpp:
*N* name exceeds 31 characters
libs/interprocess/doc/code/doc_upgradable_mutex_shared_data.hpp:
*N* name exceeds 31 characters
libs/interprocess/index.html:
*A* broken link: doc/html/index.html
libs/interprocess/proj/vc7ide/cached_node_allocator_test.vcproj:
*N* name exceeds 31 characters
libs/interprocess/proj/vc7ide/doc_anonymous_upgradable_mutexA.vcproj:
*N* name exceeds 31 characters
libs/interprocess/proj/vc7ide/doc_anonymous_upgradable_mutexB.vcproj:
*N* name exceeds 31 characters
libs/interprocess/proj/vc7ide/named_recursive_mutex_test.vcproj:
*N* name exceeds 31 characters
libs/interprocess/proj/vc7ide/private_node_allocator_test.vcproj:
*N* name exceeds 31 characters
libs/interprocess/proj/vc7ide/shared_memory_mappable_test.vcproj:
*N* name exceeds 31 characters
libs/interprocess/proj/vc7ide/shared_memory_mapping_test.vcproj:
*N* name exceeds 31 characters
libs/interprocess/test/file_mapping_test.cpp:
*T*
libs/interprocess/test/message_queue_test.cpp:
*M* violation of Boost min/max guidelines on line 26
*M* violation of Boost min/max guidelines on line 61
libs/interprocess/test/sharable_mutex_test_template.hpp:
*N* name exceeds 31 characters
|iostreams|
libs/iostreams/doc/acknowledgments.html:
*A* unlinked file
libs/iostreams/doc/concepts/multi-character.html:
*A* unlinked file
libs/iostreams/doc/installation.html:
*A* broken link: ../../../tools/build/v1/build_system.htm
|iterator|
libs/iterator/doc/issues.html:
*A* unlinked file
|lambda|
boost/lambda/core.hpp:
*U* unnamed namespace at line 62
boost/lambda/detail/lambda_functors.hpp:
*U* unnamed namespace at line 25
boost/lambda/exceptions.hpp:
*U* unnamed namespace at line 24
|math|
libs/math/test/common_factor_test.cpp:
*M* violation of Boost min/max guidelines on line 146
*M* violation of Boost min/max guidelines on line 147
*M* violation of Boost min/max guidelines on line 193
*M* violation of Boost min/max guidelines on line 194
|more|
more/BoostCon07_session_call.html:
*A* unlinked file
more/version_history.html:
*A* broken link: ../tools/build/v1/intel-linux-tools.html
*A* broken link: ../tools/build/v1/intel-win32-tools.html
*A* broken link: ../tools/build/v1/msvc-stlport-tools.html
|mpi|
boost/mpi/communicator.hpp:
*T*
boost/mpi/detail/forward_iprimitive.hpp:
*T*
boost/mpi/detail/forward_oprimitive.hpp:
*T*
boost/mpi/detail/forward_skeleton_iarchive.hpp:
*T*
boost/mpi/detail/forward_skeleton_oarchive.hpp:
*T*
boost/mpi/detail/ignore_skeleton_oarchive.hpp:
*T*
boost/mpi/detail/text_skeleton_oarchive.hpp:
*T*
libs/mpi/src/point_to_point.cpp:
*T*
|mpl|
boost/mpl/alias.hpp:
*U* unnamed namespace at line 17
|multi_array|
boost/multi_array/base.hpp:
*U* unnamed namespace at line 69
libs/multi_array/test/generative_tests.hpp:
*U* unnamed namespace at line 57
|numeric|
libs/numeric/conversion/doc/converter_policies.html:
*R*
libs/numeric/conversion/index.html:
*A* broken link: ../../LICENSE_1_0.txt
libs/numeric/ublas/test/manual/sp_resize.cpp:
*T*
|program_options|
boost/program_options/positional_options.hpp:
*M* violation of Boost min/max guidelines on line 44
|python|
libs/python/doc/building.html:
*A* broken link: ../../../tools/build/v1/build_system.htm
*A* broken link: ../../../tools/build/v1/build_system.htm#user_globals
*A* broken link: ../../../tools/build/v1/build_system.htm#variants
*A* broken link: ../example/Jamrules
libs/python/doc/tutorial/doc/html/python/hello.html:
*A* broken link: ../../../../../example/tutorial/Jamrules
libs/python/doc/tutorial/index.html:
*A* broken link: ../../../LICENSE_1_0.txt
libs/python/doc/v2/May2002.html:
*A* broken link: ../../../../tools/build/v1/build_system.htm
*A* broken link: ../../../../tools/build/v1/gen_aix_import_file.py
libs/python/doc/v2/faq.html:
*A* broken link: ../../../../tools/build/v1/build_system.htm
|quickbook|
tools/quickbook/doc/html/images/callouts/1.png:
*N* leading character of "1.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/10.png:
*N* leading character of "10.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/11.png:
*N* leading character of "11.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/12.png:
*N* leading character of "12.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/13.png:
*N* leading character of "13.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/14.png:
*N* leading character of "14.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/15.png:
*N* leading character of "15.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/2.png:
*N* leading character of "2.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/3.png:
*N* leading character of "3.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/4.png:
*N* leading character of "4.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/5.png:
*N* leading character of "5.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/6.png:
*N* leading character of "6.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/7.png:
*N* leading character of "7.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/8.png:
*N* leading character of "8.png" is not alphabetic
tools/quickbook/doc/html/images/callouts/9.png:
*N* leading character of "9.png" is not alphabetic
|random|
boost/random/uniform_01.hpp:
*T*
boost/random/uniform_int.hpp:
*T*
|rational|
libs/rational/rational_test.cpp:
*M* violation of Boost min/max guidelines on line 230
*M* violation of Boost min/max guidelines on line 231
*M* violation of Boost min/max guidelines on line 276
*M* violation of Boost min/max guidelines on line 277
|regex|
libs/regex/performance/input.html:
*A* unlinked file
|regression|
regression/.htaccess:
*N* leading character of ".htaccess" is not alphabetic
tools/regression/test/test-cases/incremental/bjam.log.1:
*N* name contains more than one dot character ('.')
tools/regression/xsl_reports/xsl/html/issues_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/html/library_developer_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/html/library_user_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/html/make_tinyurl.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/html/summary_developer_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/html/summary_user_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/v2/html/issues_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/v2/html/library_developer_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/v2/html/library_user_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/v2/html/summary_developer_legend.html:
*A* unlinked file
tools/regression/xsl_reports/xsl/v2/html/summary_user_legend.html:
*A* unlinked file
|serialization|
libs/serialization/doc/archive_reference.html:
*A* broken link: ../../../boost/archive/detail/polymorphic_iarchive_impl.hpp
*A* broken link: ../../../boost/archive/detail/polymorphic_oarchive_impl.hpp
libs/serialization/doc/wrappers.html:
*A* broken link: ../example/demo_xml.hpp
libs/serialization/test/polymorphic_array_binary_archive.hpp:
*N* name exceeds 31 characters
|system|
libs/system/doc/error_code.html:
*A* broken link: ../../utility/doc/identifier.html
libs/system/doc/system_error.html:
*A* unlinked file
libs/system/index.html:
*A* broken link: doc/index.html
|test|
boost/test/floating_point_comparison.hpp:
*U* unnamed namespace at line 223
*U* unnamed namespace at line 245
boost/test/impl/cpp_main.ipp:
*U* unnamed namespace at line 42
boost/test/impl/exception_safety.ipp:
*M* violation of Boost min/max guidelines on line 129
*U* unnamed namespace at line 400
boost/test/impl/framework.ipp:
*U* unnamed namespace at line 199
boost/test/impl/plain_report_formatter.ipp:
*U* unnamed namespace at line 45
boost/test/impl/progress_monitor.ipp:
*U* unnamed namespace at line 38
boost/test/impl/results_collector.ipp:
*U* unnamed namespace at line 106
boost/test/impl/results_reporter.ipp:
*U* unnamed namespace at line 48
boost/test/impl/unit_test_log.ipp:
*U* unnamed namespace at line 79
boost/test/impl/unit_test_monitor.ipp:
*U* unnamed namespace at line 35
boost/test/impl/unit_test_parameters.ipp:
*U* unnamed namespace at line 50
boost/test/results_collector.hpp:
*U* unnamed namespace at line 40
boost/test/test_tools.hpp:
*U* unnamed namespace at line 254
boost/test/utils/iterator/token_iterator.hpp:
*U* unnamed namespace at line 166
boost/test/utils/named_params.hpp:
*U* unnamed namespace at line 216
boost/test/utils/runtime/cla/dual_name_parameter.ipp:
*U* unnamed namespace at line 43
boost/test/utils/runtime/cla/modifier.hpp:
*U* unnamed namespace at line 34
boost/test/utils/runtime/env/modifier.hpp:
*U* unnamed namespace at line 34
boost/test/utils/runtime/file/config_file.hpp:
*U* unnamed namespace at line 169
*U* unnamed namespace at line 64
*U* unnamed namespace at line 74
boost/test/utils/runtime/file/config_file_iterator.hpp:
*U* unnamed namespace at line 68
boost/test/utils/trivial_singleton.hpp:
*U* unnamed namespace at line 55
*U* unnamed namespace at line 64
libs/test/build/msvc71_proj/config_file_iterator_test.vcproj:
*N* name exceeds 31 characters
libs/test/doc/components/prg_exec_monitor/index.html:
*A* broken link: ../../../../../boost/test/cpp_main.hpp
libs/test/doc/components/test_tools/index.html:
*A* broken link: ../../tests/boost_check_equal_str.html
libs/test/doc/components/test_tools/reference/BOOST_CHECK_CLOSE.html:
*A* broken link: BOOST_CHECK_CLOSE_FRACTION.html
libs/test/doc/components/test_tools/reference/BOOST_CHECK_MESSAGE.html:
*A* broken link: BOOST_MESSAGE.html
libs/test/doc/components/test_tools/reference/BOOST_CHECK_SMALL.html:
*A* broken link: BOOST_CHECK_CLOSE_FRACTION.html
libs/test/doc/components/test_tools/reference/tools_list.html:
*A* broken link: ../../btl1.gif
*A* broken link: BOOST_CHECK_CLOSE_FRACTION.html
libs/test/doc/components/utf/components/index.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/components/test_case/abstract_interface.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/auto_register_facility.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/boost_function_tc.html:
*A* broken link: ../../../../../../../boost/test/unit_test_suite_ex.hpp
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/class_tc.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/function_tc.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/index.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/param_boost_function_tc.html:
*A* broken link: ../../../../../../../boost/test/unit_test_suite_ex.hpp
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/param_class_tc.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/param_function_tc.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_case/tc_template.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_log/custom_log_formatter.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_log/index.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_result/index.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/components/test_suite/index.html:
*A* broken link: ../../../btl1.gif
libs/test/doc/components/utf/index.html:
*A* broken link: getting_started/index.html
libs/test/doc/components/utf/parameters/build_info.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/catch_system_errors.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/detect_memory_leaks.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/index.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/log_format.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/log_level.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/no_result_code.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/output_format.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/random.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/report_format.html:
*A* broken link: ../../../../../LICENSE_1_0.txt
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/report_level.html:
*A* broken link: ../../btl1.gif
libs/test/doc/components/utf/parameters/show_progress.html:
*A* broken link: ../../btl1.gif
libs/test/doc/examples/unit_test_example1.html:
*A* broken link: ../../example/unit_test_example1.cpp
libs/test/doc/examples/unit_test_example2.html:
*A* broken link: ../../example/unit_test_example2.cpp
libs/test/doc/examples/unit_test_example3.html:
*A* broken link: ../../example/unit_test_example3.cpp
libs/test/doc/examples/unit_test_example4.html:
*A* broken link: ../../example/unit_test_example4.cpp
libs/test/doc/examples/unit_test_example5.html:
*A* broken link: ../../example/unit_test_example5.cpp
*A* broken link: ../../example/unit_test_example5.input
libs/test/doc/tests/auto_unit_test_test.html:
*A* broken link: ../../test/auto_unit_test_test.cpp
libs/test/doc/tests/auto_unit_test_test_mult.html:
*A* broken link: ../../test/auto_unit_test_test_mult1.cpp
*A* broken link: ../../test/auto_unit_test_test_mult2.cpp
libs/test/doc/tests/unit_test_suite_ex_test.html:
*A* broken link: ../../test/unit_test_suite_ex_test.cpp
libs/test/doc/tutorials/hello_the_testing_world.html:
*A* broken link: ../../../../../LICENSE_1_0.txt
*A* broken link: ../execution_monitor/index.html
libs/test/doc/tutorials/new_year_resolution.html:
*A* broken link: ../../../../../../LICENSE_1_0.txt
|thread|
libs/thread/doc/index.html:
*A* broken link: ../../../doc/html/thread.html
libs/thread/test/util.inl:
*U* unnamed namespace at line 19
|tr1|
libs/tr1/test/test_shared_from_this_header.cpp:
*N* name exceeds 31 characters
|type_traits|
libs/type_traits/cxx_type_traits.htm:
*A* unlinked file
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk