[BACK]Return to dagb-noro.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / Papers

Diff for /OpenXM/doc/Papers/Attic/dagb-noro.tex between version 1.4 and 1.5

version 1.4, 2001/10/04 08:22:20 version 1.5, 2001/10/09 01:44:21
Line 1 
Line 1 
 % $OpenXM: OpenXM/doc/Papers/dagb-noro.tex,v 1.3 2001/10/04 08:16:26 noro Exp $  % $OpenXM: OpenXM/doc/Papers/dagb-noro.tex,v 1.4 2001/10/04 08:22:20 noro Exp $
 \setlength{\parskip}{10pt}  \setlength{\parskip}{10pt}
   
 \begin{slide}{}  \begin{slide}{}
 \begin{center}  \begin{center}
 \fbox{\large Part I : Overview and history of Risa/Asir}  \fbox{\large Part I : OpenXM and Risa/Asir --- overview and history}
 \end{center}  \end{center}
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{A computer algebra system Risa/Asir}  \fbox{OpenXM (Open message eXchange protocol for Mathematics) }
   
 \begin{itemize}  \begin{itemize}
 \item Old style software for polynomial computation  \item An environment for parallel distributed computation
   
 \begin{itemize}  Both for interactive, non-interactive environment
 \item Domain specification is not necessary prior to computation  
 \item automatic conversion of inputs into internal canonical forms  
 \end{itemize}  
   
 \item User language with C-like syntax  \item Client-server architecture
   
 \begin{itemize}  Client $\Leftarrow$ OX (OpenXM) message $\Rightarrow$ Server
 \item No type declaration of variables  
 \item Builtin debugger for user programs  
 \end{itemize}  
   
 \item Open source  OX (OpenXM) message : command and data
   
 \begin{itemize}  \item Data
 \item Whole source tree is available via CVS  
 \end{itemize}  
   
 \item OpenXM ((Open message eXchange protocol for Mathematics) interface  Encoding : CMO (Common Mathematical Object format)
   
 \begin{itemize}  Serialized representation of mathematical object
 \item As a client : can call procedures on other OpenXM servers  
 \item As a server : offers all its functionalities to OpenXM clients  --- Main idea was borrowed from OpenMath [OpenMath]
 \item As a library : OpenXM functionality is available via subroutine calls  \item Command
   
   stack machine command --- server is a stackmachine
   
   + server's own command sequences --- hybrid server
 \end{itemize}  \end{itemize}
 \end{itemize}  
 \end{slide}  \end{slide}
   
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{Major functionalities}  \fbox{OpenXM and OpenMath}
   
 \begin{itemize}  \begin{itemize}
 \item Fundamental polynomial arithmetics  \item OpenMath
   
 \begin{itemize}  \begin{itemize}
 \item Internal form of a polynomial : recursive representaion or distributed  \item A standard for representing mathematical objects
 representation  
 \end{itemize}  
   
 \item Polynomial factorization  \item CD (Content Dictionary) : assigns semantics to symbols
   
 \begin{itemize}  \item Phrasebook : convesion between internal and OpenMath objects.
 \item Univariate factorization over the rationals, algebraic number fields and various finite fields  
   
 \item Multivariate factorization over the rationals  \item Encoding : format for actual data exchange
 \end{itemize}  \end{itemize}
   
 \item Groebner basis computation  \item OpenXM
   
 \begin{itemize}  \begin{itemize}
 \item Buchberger and $F_4$ [Faug\'ere] algorithm  \item Specification for encoding and exchanging messages
   
 \item Change of ordering/RUR [Rouillier] of 0-dimensional ideals  \item It also specifies behavior of servers and session management
   
 \item Primary ideal decomposition  
   
 \item Computation of $b$-function  
 \end{itemize}  \end{itemize}
   
 \item PARI [PARI] library interface  
   
 \item Paralell distributed computation under OpenXM  
 \end{itemize}  \end{itemize}
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{History of development : ---1994}  \fbox{A computer algebra system Risa/Asir}
   
 \begin{itemize}  \begin{itemize}
 \item --1989  \item Old style software for polynomial computation
   
 Several subroutines were developed for a Prolog program.  No domain specification, automatic expansion
   
 \item 1989--1992  \item User language with C-like syntax
   
 \begin{itemize}  C language without type declaration, with list processing
 \item Reconfigured as Risa/Asir with a parser and Boehm's conservative GC [Boehm]  
   
 \item Developed univariate and multivariate factorizers over the rationals.  \item Builtin {\tt gdb}-like debugger for user programs
 \end{itemize}  
   
 \item 1992--1994  \item Open source
   
 \begin{itemize}  Whole source tree is available via CVS
 \item Started implementation of Buchberger algorithm  
   
 Written in user language $\Rightarrow$ rewritten in C (by Murao)  \item OpenXM interface
   
 $\Rightarrow$ trace lifting [Traverso]  \begin{itemize}
   \item Risa/Asir is a main client in OpenXM package.
 \item Univariate factorization over algebraic number fields  \item An OpenXM server {\tt ox\_asir}
   \item An library with OpemXM library inteface {\tt libasir.a}
 Intensive use of successive extension, non-squarefree norms  
 \end{itemize}  \end{itemize}
 \end{itemize}  \end{itemize}
   
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{History of development : 1994-1996}  \fbox{Aim of developing Risa/Asir}
   
 \begin{itemize}  \begin{itemize}
 \item Free distribution of binary versions from Fujitsu  \item Efficient implementation in specific area
   
 \item Primary ideal decomposition  Polynomial factorization, Groebner basis related computation
   
 \begin{itemize}  $\Rightarrow$ serves as an OpenXM server/library
 \item Shimoyama-Yokoyama algorithm [SY]  
 \end{itemize}  
   
 \item Improvement of Buchberger algorithm  \item Front-end of a general purpose math software
   
 \begin{itemize}  Risa/Asir contains PARI library [PARI] from the very beginning
 \item Trace lifting+homogenization  
   
 \item Omitting check by compatible prime  It also acts as a main client of OpenXM package
   
 \item Modular change of ordering, Modular RUR  
   
 These are joint works with Yokoyama [NY]  
 \end{itemize}  \end{itemize}
 \end{itemize}  
   
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{History of development : 1996-1998}  \fbox{Capability for polynomial computation}
   
 \begin{itemize}  \begin{itemize}
 \item Distributed compuatation  \item Fundamental polynomial arithmetics
   
 \begin{itemize}  recursive representaion and distributed representation
 \item A prototype of OpenXM  
 \end{itemize}  
   
 \item Improvement of Buchberger algorithm  \item Polynomial factorization
   
 \begin{itemize}  \begin{itemize}
 \item Content reduction during nomal form computation  \item Univariate : over {\bf Q}, algebraic number fields and finite fields
   
 \item Its parallelization by the above facility  \item Multivariate : over {\bf Q}
   
 \item Computation of odd order replicable functions [Noro]  
   
 Risa/Asir : it took 5days to compute a DRL basis ({\it McKay})  
   
 Faug\`ere FGb : computation of the DRL basis 53sec  
 \end{itemize}  \end{itemize}
   
   \item Groebner basis computation
   
 \item Univariate factorization over large finite fields  
   
 \begin{itemize}  \begin{itemize}
 \item To implement Schoof-Elkies-Atkin algorithm  \item Buchberger and $F_4$ [Faug\'ere] algorithm
   
 Counting rational points on elliptic curves  \item Change of ordering/RUR [Rouillier] of 0-dimensional ideals
   
 --- not free But related functions are freely available  \item Primary ideal decomposition
   
   \item Computation of $b$-function (in Weyl Algebra)
 \end{itemize}  \end{itemize}
 \end{itemize}  \end{itemize}
   
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{History of development : 1998-2000}  \fbox{History of development : Polynomial factorization}
 \begin{itemize}  
 \item OpenXM  
   
 \begin{itemize}  \begin{itemize}
 \item OpenXM specification was written by Noro and Takayama  \item 1989
   
 Borrowed idea on encoding, phrase book from OpenMath [OpenMath]  Start of Risa/Asir with Boehm's conservative GC [Boehm]
   
 \item Functions for distributed computation were rewritten  \item 1989-1992
 \end{itemize}  
   
 \item Risa/Asir on Windows  Univariate and multivariate factorizers over {\bf Q}
   
 \begin{itemize}  \item 1992-1994
 \item Requirement from a company for which Noro worked  
   
 Written in Visual C++  Univariate factorization over algebraic number fields
 \end{itemize}  
   
 \item Test implementation of $F_4$  Intensive use of successive extension, non-squarefree norms
   
 \begin{itemize}  \item 1996-1998
 \item Implemented according to [Faug\`ere]  
   
 \item Over $GF(p)$ : pretty good  Univariate factorization over large finite fields
   
 \item Over the rationals : not so good except for {\it McKay}  \item 2000-current
   
   Multivariate factorization over small finite fields (in progress)
 \end{itemize}  \end{itemize}
 \end{itemize}  
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{History of development : 2000-current}  \fbox{History of development : Groebner basis}
 \begin{itemize}  
 \item The source code is freely available  
   
 \begin{itemize}  \begin{itemize}
 \item Noro moved from Fujitsu to Kobe university  \item 1992-1994
   
 Started Kobe branch [Risa/Asir]  User language $\Rightarrow$ C version; trace lifting [Traverso]
 \end{itemize}  
   
 \item OpenXM [OpenXM]  \item 1994-1996
   
 \begin{itemize}  Trace lifting with homogenization
 \item Revising the specification : OX-RFC100, 101, (102)  
   
 \item OX-RFC102 : communications between servers via MPI  Omitting GB check by compatible prime [NY]
 \end{itemize}  
   
 \item Weyl algebra  Modular change of ordering/RUR [NY]
   
 \begin{itemize}  Primary ideal decompositon [SY]
 \item Buchberger algorithm [Takayama]  
   
 \item $b$-function computation [Oaku]  \item 1996-1998
   
 Minimal polynomial computation by modular method  Effifcient content reduction during NF computation and its parallelization
 \end{itemize}  [Noro] (Solved {\it McKay} system for the first time)
 \end{itemize}  
   
   \item 1998-2000
   
   Test implementation of $F_4$
   
   \item 2000-current
   
   Buchberger algorithm in Weyl algebra [Takayama]
   
   Efficient $b$-function computation by a modular method
   \end{itemize}
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{Status of each component --- Factorizer}  \fbox{Performance --- Factorizer}
   
 \begin{itemize}  \begin{itemize}
 \item 10 years ago  
   
 its performace was fine compared with existing software  
 like REDUCE, Mathematica.  
   
 \item 4 years ago  \item 4 years ago
   
 Univarate factorization over algebraic number fields was  Over {\bf Q} : fine compared with existing software
 still fine because of some tricks on factoring polynomials  like REDUCE, Mathematica, maple
   
   Univarate, over algebraic number fields :
   fine because of some tricks for polynomials
 derived from norms.  derived from norms.
   
 \item Current  \item Current
Line 267  Univariate : completely obsolete by M. van Hoeij's new
Line 227  Univariate : completely obsolete by M. van Hoeij's new
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{Status of each component --- Groebner basis related functions}  \fbox{Performance --- Groebner basis related computation}
   
 \begin{itemize}  \begin{itemize}
 \item 8 years ago  
   
 The performace was poor with only the sugar strategy.  
   
 \item 7 years ago  \item 7 years ago
   
 Rather fine with trace lifting but Faug\`ere's (old)Gb was more  Trace lifting : rather fine but coefficient swells often occur
 efficient.  
   
 Homogenization+trace lifting made it possible to compute  Homogenization+trace lifting : robust and fast in the above cases
 wider range of Groebner bases.  
   
 \item 4 years ago  \item 4 years ago
   
 Modular RUR was comparable with Rouillier's implementation.  Modular RUR was comparable with Rouillier's implementation.
   
   DRL basis of {\it McKay}:
   
   5 days on Risa/Asir, 53 seconds on Faugere FGb
 \item Current  \item Current
   
 FGb seems much more efficient than our $F_4$ implementation.  $F_4$ in FGb : much more efficient than $F_4$ in Risa/Asir
   
 Singular [Singular] is also several times  Buchberger in Singular [Singular] : faster than Risa/Asir
 faster than Risa/Asir, because Singular seems to have efficient  
 monomial and polynomial representation.  
   
 \end{itemize}  $\Leftarrow$ efficient monomial and polynomial representation
 \end{slide}  
   
 \begin{slide}{}  
 \fbox{OpenXM}  
   
 \begin{itemize}  
 \item An environment for parallel distributed computation  
   
 Both for interactive, non-interactive environment  
   
 \item Message passing  
   
 OX (OpenXM) message : command and data  
   
 \item Hybrid command execution  
   
 \begin{itemize}  
 \item Stack machine command  
   
 push, pop, function execution, $\ldots$  
   
 \item accepts its own command sequences  
   
 {\tt execute\_string} --- easy to use  
 \end{itemize}  \end{itemize}
   
 \item Data is represented as CMO  
   
 CMO (Common Mathematical Object format)  
   
 --- Serialized representation of mathematical object  
   
 {\sl Integer32}, {\sl Cstring}, {\sl List}, {\sl ZZ}, $\ldots$  
 \end{itemize}  
 \end{slide}  \end{slide}
   
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{OpenXM and OpenMath}  \fbox{How do we proceed?}
   
 \begin{itemize}  \begin{itemize}
 \item OpenMath  \item Developing new OpenXM servers
   
 \begin{itemize}  {ox\_NTL} for univariate factorization,
 \item A standard for representing mathematical objects  
   
 \item CD (Content Dictionary) : assigns semantics to symbols  {ox\_FGb} for Groebner basis computation (is it possible?) etc.
   
 \item Phrasebook : convesion between internal and OpenMath objects.  $\Rightarrow$ Risa/Asir can be a front-end of efficient servers
   
 \item Encoding : format for actual data exchange  \item Trying to improve our implementation
 \end{itemize}  
   
 \item OpenXM  Computation of $b$-function : still faster than any other system
   (Kan/sm1, Macaulay2) but not satisfactory
   
 \begin{itemize}  $\Rightarrow$ Groebner basis computation in Weyl
 \item Specification for encoding and exchanging messages  algebra should be improved
   
 \item It also specifies behavior of servers and session management  
 \end{itemize}  \end{itemize}
   
 \end{itemize}  \begin{center}
   \underline{In both cases, OpenXM interface is important}
   \end{center}
 \end{slide}  \end{slide}
   
 \begin{slide}{}  \begin{slide}{}
Line 374  The launcher launches a server on the same host.
Line 295  The launcher launches a server on the same host.
   
 \item Server  \item Server
   
 A server reads from the descriptor 3, write to the descriptor 4.  Reads from the descriptor 3
   
   Writes to the descriptor 4
   
 \end{itemize}  \end{itemize}
   
 \item Subroutine call  \item Subroutine call
   
 Risa/Asir subroutine library provides interfaces corresponding to  In Risa/Asir subroutine library {\tt libasir.a}:
 pushing and popping data and executing stack commands.  
   OpenXM functionalities are implemented as functon calls
   
   pushing and popping data, executing stack commands etc.
 \end{itemize}  \end{itemize}
 \end{slide}  \end{slide}
   
Line 395  Pushing and popping data, sending commands etc.
Line 321  Pushing and popping data, sending commands etc.
   
 \item Convenient functions  \item Convenient functions
   
 Launching servers, calling remote functions,  Launching servers,
  interrupting remote executions etc.  
   
 \item Parallel distributed computation is easy  Calling remote functions,
   
   Resetting remote executions etc.
   
   \item Parallel distributed computation
   
 Simple parallelization is practically important  Simple parallelization is practically important
   
 Competitive computation is easily realized  Competitive computation is easily realized ($\Rightarrow$ demo)
 \end{itemize}  \end{itemize}
 \end{slide}  \end{slide}
   
Line 461  Competitive computation is easily realized 
Line 390  Competitive computation is easily realized 
 %\end{slide}  %\end{slide}
   
 \begin{slide}{}  \begin{slide}{}
 \fbox{Executing functions on a server (I) --- {\tt SM\_executeFunction}}  
   
 \begin{enumerate}  
 \item (C $\rightarrow$ S) Arguments are sent in binary encoded form.  
 \item (C $\rightarrow$ S) The number of aruments is sent as {\sl Integer32}.  
 \item (C $\rightarrow$ S) A function name is sent as {\sl Cstring}.  
 \item (C $\rightarrow$ S) A command {\tt SM\_executeFunction} is sent.  
 \item The result is pushed to the stack.  
 \item (C $\rightarrow$ S) A command {\tt SM\_popCMO} is sent.  
 \item (S $\rightarrow$ C) The result is sent in binary encoded form.  
 \end{enumerate}  
   
 $\Rightarrow$ Communication is fast, but functions for binary data  
 conversion are necessary.  
 \end{slide}  
   
 \begin{slide}{}  
 \fbox{Executing functions on a server (II) --- {\tt SM\_executeString}}  
   
 \begin{enumerate}  
 \item (C $\rightarrow$ S) A character string represeting a request in a server's  
 user language is sent as {\sl Cstring}.  
 \item (C $\rightarrow$ S) A command {\tt SM\_executeString} is sent.  
 \item The result is pushed to the stack.  
 \item (C $\rightarrow$ S) A command {\tt SM\_popString} is sent.  
 \item (S $\rightarrow$ C) The result is sent in readable form.  
 \end{enumerate}  
   
 $\Rightarrow$ Communication may be slow, but the client parser may be  
 enough to read the result.  
 \end{slide}  
   
 \begin{slide}{}  
 \fbox{Example of distributed computation --- $F_4$ vs. $Buchberger$ }  \fbox{Example of distributed computation --- $F_4$ vs. $Buchberger$ }
   
 \begin{verbatim}  \begin{verbatim}
Line 792  The knapsack factorization is available via {\tt pari(
Line 688  The knapsack factorization is available via {\tt pari(
 \end{itemize}  \end{itemize}
 \end{slide}  \end{slide}
   
   \begin{slide}{}
   \fbox{Executing functions on a server (I) --- {\tt SM\_executeFunction}}
   
   \begin{enumerate}
   \item (C $\rightarrow$ S) Arguments are sent in binary encoded form.
   \item (C $\rightarrow$ S) The number of aruments is sent as {\sl Integer32}.
   \item (C $\rightarrow$ S) A function name is sent as {\sl Cstring}.
   \item (C $\rightarrow$ S) A command {\tt SM\_executeFunction} is sent.
   \item The result is pushed to the stack.
   \item (C $\rightarrow$ S) A command {\tt SM\_popCMO} is sent.
   \item (S $\rightarrow$ C) The result is sent in binary encoded form.
   \end{enumerate}
   
   $\Rightarrow$ Communication is fast, but functions for binary data
   conversion are necessary.
   \end{slide}
   
   \begin{slide}{}
   \fbox{Executing functions on a server (II) --- {\tt SM\_executeString}}
   
   \begin{enumerate}
   \item (C $\rightarrow$ S) A character string represeting a request in a server's
   user language is sent as {\sl Cstring}.
   \item (C $\rightarrow$ S) A command {\tt SM\_executeString} is sent.
   \item The result is pushed to the stack.
   \item (C $\rightarrow$ S) A command {\tt SM\_popString} is sent.
   \item (S $\rightarrow$ C) The result is sent in readable form.
   \end{enumerate}
   
   $\Rightarrow$ Communication may be slow, but the client parser may be
   enough to read the result.
   \end{slide}
   
   %\begin{slide}{}
   %\fbox{History of development : ---1994}
   %
   %\begin{itemize}
   %\item --1989
   %
   %Several subroutines were developed for a Prolog program.
   %
   %\item 1989--1992
   %
   %\begin{itemize}
   %\item Reconfigured as Risa/Asir with a parser and Boehm's conservative GC [Boehm]
   %
   %\item Developed univariate and multivariate factorizers over the rationals.
   %\end{itemize}
   %
   %\item 1992--1994
   %
   %\begin{itemize}
   %\item Started implementation of Buchberger algorithm
   %
   %Written in user language $\Rightarrow$ rewritten in C (by Murao)
   %
   %$\Rightarrow$ trace lifting [Traverso]
   %
   %\item Univariate factorization over algebraic number fields
   %
   %Intensive use of successive extension, non-squarefree norms
   %\end{itemize}
   %\end{itemize}
   %
   %\end{slide}
   %
   %\begin{slide}{}
   %\fbox{History of development : 1994-1996}
   %
   %\begin{itemize}
   %\item Free distribution of binary versions from Fujitsu
   %
   %\item Primary ideal decomposition
   %
   %\begin{itemize}
   %\item Shimoyama-Yokoyama algorithm [SY]
   %\end{itemize}
   %
   %\item Improvement of Buchberger algorithm
   %
   %\begin{itemize}
   %\item Trace lifting+homogenization
   %
   %\item Omitting check by compatible prime
   %
   %\item Modular change of ordering, Modular RUR
   %
   %These are joint works with Yokoyama [NY]
   %\end{itemize}
   %\end{itemize}
   %
   %\end{slide}
   %
   %\begin{slide}{}
   %\fbox{History of development : 1996-1998}
   %
   %\begin{itemize}
   %\item Distributed compuatation
   %
   %\begin{itemize}
   %\item A prototype of OpenXM
   %\end{itemize}
   %
   %\item Improvement of Buchberger algorithm
   %
   %\begin{itemize}
   %\item Content reduction during nomal form computation
   %
   %\item Its parallelization by the above facility
   %
   %\item Computation of odd order replicable functions [Noro]
   %
   %Risa/Asir : it took 5days to compute a DRL basis ({\it McKay})
   %
   %Faug\`ere FGb : computation of the DRL basis 53sec
   %\end{itemize}
   %
   %
   %\item Univariate factorization over large finite fields
   %
   %\begin{itemize}
   %\item To implement Schoof-Elkies-Atkin algorithm
   %
   %Counting rational points on elliptic curves
   %
   %--- not free But related functions are freely available
   %\end{itemize}
   %\end{itemize}
   %
   %\end{slide}
   %
   %\begin{slide}{}
   %\fbox{History of development : 1998-2000}
   %\begin{itemize}
   %\item OpenXM
   %
   %\begin{itemize}
   %\item OpenXM specification was written by Noro and Takayama
   %
   %Borrowed idea on encoding, phrase book from OpenMath [OpenMath]
   %
   %\item Functions for distributed computation were rewritten
   %\end{itemize}
   %
   %\item Risa/Asir on Windows
   %
   %\begin{itemize}
   %\item Requirement from a company for which Noro worked
   %
   %Written in Visual C++
   %\end{itemize}
   %
   %\item Test implementation of $F_4$
   %
   %\begin{itemize}
   %\item Implemented according to [Faug\`ere]
   %
   %\item Over $GF(p)$ : pretty good
   %
   %\item Over the rationals : not so good except for {\it McKay}
   %\end{itemize}
   %\end{itemize}
   %\end{slide}
   %
   %\begin{slide}{}
   %\fbox{History of development : 2000-current}
   %\begin{itemize}
   %\item The source code is freely available
   %
   %\begin{itemize}
   %\item Noro moved from Fujitsu to Kobe university
   %
   %Started Kobe branch [Risa/Asir]
   %\end{itemize}
   %
   %\item OpenXM [OpenXM]
   %
   %\begin{itemize}
   %\item Revising the specification : OX-RFC100, 101, (102)
   %
   %\item OX-RFC102 : communications between servers via MPI
   %\end{itemize}
   %
   %\item Weyl algebra
   %
   %\begin{itemize}
   %\item Buchberger algorithm [Takayama]
   %
   %\item $b$-function computation [Oaku]
   %
   %Minimal polynomial computation by modular method
   %\end{itemize}
   %\end{itemize}
   %
   %\end{slide}
 \begin{slide}{}  \begin{slide}{}
 \end{slide}  \end{slide}
   

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>