From: Juan M. Reyero
Subject: please help installing clocc on Debian
Date: 
Message-ID: <lj2znjnn0g5.fsf@npdl173.bpo.hp.com>
I am a newcomer to Lisp.  I have had a fascinating first
experience building a simple web service (a page, updated
hourly, that lists news appeared in several sources:
http://www.sa-tuna.net/news).  Now I plan to make it
dynamic, using perl to deal with CGI arguments and state and
Lisp to generate the pages.  The Perl process will open a
socket to a long-running lisp server, will write a request
in Lisp to it, and will get back the page.

I would like to build the lisp server on top of PORT, but
after a full day banging my head on it I haven't been able
to install it.  I am running Debian Linux 3.0.  The only
CLOCC distribution I've found is the cvs snapshot at
sourceforge.  Using clisp (export LISPTYPE=clisp) when I do

make clocc-top

I get an error:

Compiling file /home/joanmg/src/lisp/clocc/clocc.lisp ...
ERROR in function #:TOP-LEVEL-FORM-2 in lines 16..79 :
Not the name of a function: "CLOS"

Compilation of file /home/joanmg/src/lisp/clocc/clocc.lisp is finished.
There were errors in the following functions:
 #:TOP-LEVEL-FORM-2
The following functions were used but not defined:
 WITHOUT-PACKAGE-LOCK
1 error, 0 warnings
/home/joanmg/src/lisp/clocc/bin/run-lisp -i clocc.fas -i src/defsystem-3.x/defsy
stem.fas -d clocc-top

*** - A file with name clocc.fas does not exist

I get the same error if trying to compile clocc.lisp from
within clisp.  I suspect it has something to do with clisp
on Debian lacking CLOS support, but I haven't been able to
find any additional packages.

Trying it with CMUCL (which would be my second choice; from
what I can gather about the two implementations, I would
prefer to start with clisp) I can get further.  I can make
clock-top successfully, but when I try "make system" in
src/port I get a daunting:

/home/joanmg/src/lisp/clocc/bin/run-lisp -i /home/joanmg/src/lisp/clocc/clocc-to
p -i port.system \
        -x '(funcall (intern "COMPILE-SYSTEM" :mk) "port")'
; Loading #p"/home/joanmg/src/lisp/clocc/clocc-top.x86f".
Warning:  MAKE also exports the following symbols:
  (HARDCOPY-SYSTEM COMPILE-SYSTEM
                   *COMPILE-DURING-LOAD*
                   *FILES-MISSING-IS-AN-ERROR*
                   AFS-SOURCE-DIRECTORY
                   COMPILER-TYPE-TRANSLATION
                   DEFSYSTEM
                   LOAD-SYSTEM
                   DEFINE-LANGUAGE
                   FILES-IN-SYSTEM
                   OOS
                   UNDEFSYSTEM
                   *MULTIPLE-LISP-SUPPORT*
                   *DONT-REDEFINE-REQUIRE*
                   *BIN-SUBDIR*
                   DESCRIBE-SYSTEM
                   *RELOAD-SYSTEMS-FROM-DISK*
                   *DEFSYSTEM-VERSION*
                   *MINIMAL-LOAD*
                   DEFINED-SYSTEMS
                   SYSTEM-SOURCE-SIZE
                   FIND-SYSTEM
                   AFS-BINARY-DIRECTORY
                   *CENTRAL-REGISTRY*
                   EDIT-SYSTEM
                   FILES-WHICH-NEED-COMPILATION
                   CLEAN-SYSTEM
                   SOFTWARE-TYPE-TRANSLATION
                   MACHINE-TYPE-TRANSLATION
                   OPERATE-ON-SYSTEM
                   *BINARY-PATHNAME-DEFAULT*
                   MAKE-SYSTEM-TAG-TABLE
                   ALLEGRO-MAKE-SYSTEM-FASL
                   *SOURCE-PATHNAME-DEFAULT*)
; Loading #p"/home/joanmg/src/lisp/clocc/src/port/port.system".
; Loading #p"/usr/share/common-lisp/repositories/clocc/port/port.system".

Compilation unit aborted.


What is it that I am missing?  Any help will be greatly
appreciated. 

Greetings,

jm

From: Friedrich Dominicus
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <87u19v6ig6.fsf@fbigm.here>
··@sa-tuna.net (Juan M. Reyero) writes:

> I am a newcomer to Lisp.  I have had a fascinating first
> experience building a simple web service (a page, updated
> hourly, that lists news appeared in several sources:
> http://www.sa-tuna.net/news).  Now I plan to make it
> dynamic, using perl to deal with CGI arguments and state and
> Lisp to generate the pages. 
Why would you fall back to Perl for that?


> The Perl process will open a
> socket to a long-running lisp server, will write a request
> in Lisp to it, and will get back the page.
And why won't you write it all in Lisp? 
> 
> I would like to build the lisp server on top of PORT, but
> after a full day banging my head on it I haven't been able
> to install it.  I am running Debian Linux 3.0.  The only
> CLOCC distribution I've found is the cvs snapshot at
> sourceforge.  Using clisp (export LISPTYPE=clisp) when I do
> 
> make clocc-top
> 
> I get an error:
> 
> Compiling file /home/joanmg/src/lisp/clocc/clocc.lisp ...
> ERROR in function #:TOP-LEVEL-FORM-2 in lines 16..79 :
> Not the name of a function: "CLOS"
> 
> Compilation of file /home/joanmg/src/lisp/clocc/clocc.lisp is finished.
> There were errors in the following functions:
>  #:TOP-LEVEL-FORM-2
> The following functions were used but not defined:
>  WITHOUT-PACKAGE-LOCK
> 1 error, 0 warnings
> /home/joanmg/src/lisp/clocc/bin/run-lisp -i clocc.fas -i src/defsystem-3.x/defsy
> stem.fas -d clocc-top
> 
> *** - A file with name clocc.fas does not exist
> 
> I get the same error if trying to compile clocc.lisp from
> within clisp.  I suspect it has something to do with clisp
> on Debian lacking CLOS support, but I haven't been able to
> find any additional packages.
No the error message tells you that without-package-lock was not found
This is your problem.

Regards
Friedrich
From: Juan M. Reyero
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <lj2r84yn6rh.fsf@npdl173.bpo.hp.com>
Friedrich Dominicus <·····@q-software-solutions.com> writes:
> ··@sa-tuna.net (Juan M. Reyero) writes:
> > I am a newcomer to Lisp.  I have had a fascinating first
> > experience building a simple web service (a page, updated
> > hourly, that lists news appeared in several sources:
> > http://www.sa-tuna.net/news).  Now I plan to make it
> > dynamic, using perl to deal with CGI arguments and state and
> > Lisp to generate the pages. 
>
> Why would you fall back to Perl for that?

I've already got it figured out in Perl.  I've been
programming in Perl for the last six or seven years, and
I've developed several libraries for online application
building and CGI-database direct interface.  With these
libraries the task of building the user interaction is
trivial, so I don't feel it's worth my time rebuilding it in
Lisp.  I much rather focus on doing something in Lisp which
is new (for me).  I want to explore summarization
algorithms, so that I can offer a short summary with the
article links, and it will be done in Lisp.

Plus, with my limited exposure to Lisp, I suspect that the
interfaces with the outer world are simpler in Perl.  For
example, my application required a scraper script that
monitors the nytimes and the economist's webs.  That was
new, and I would have preferred to do it in Lisp.  But I
could not find a Lisp package for fetching web pages that
supported cookies and proxies, both of which I need.  I have
neither the time nor the expertise to add them to what I
found, so there I am back in Perl.  Oh well.  At least there
is (I hope) the possibility of a smooth transition: keep
doing in Perl the things it does well --- i.e., I already
know how to do --- and start moving to Lisp for new things.

The roadblocks for a newcomer like me to adopt Lisp, by the
way, are not in the language.  They are in how you
configure, install, and use a Lisp development environment.
First you figure out well, these guys don't seem to be very
worried about making stand-alone programs.  You can do it as
a script with clisp, or building Linux programs with cmucl
after a scary process that involves some kernel
manipulations or something: stand-alone programs was
obviously not their main worry.  So what am I supposed to do
with this thing?  Then you realize you'd better use emacs (I
do anyway) and program there, C-c e, modify, etc.  Try it
and it's great---the fastest and most efficient and relaxing
programming I've ever done.  But at the end of the day I
still have to do something with my program, and that's gonna
be outside emacs.  Well, I'll just stick to clisp for the
moment and run it as a script, and I'll figure something out
later.  Or maybe not, maybe I make it listen to a socket and
use it as a server, and I can also interact with it from the
top level.  Or maybe not, because clisp does not seem to
support forks.  OK, once I want to do that I'll move to
cmucl, so I can inspect what the forked processes are doing.
That means, though, that I'll have compatibility problems;
find PORT, this is great!  A pity it does not install.  And
there I am.  Well, they say there are mailing lists for
CLOCC, let's try there.  But the page in sourceforge where
they are supposed to be they are not.  Oh well (again).

Please don't take my words as a rant.  I'm just describing
my personal discovery process, which so far has been more
stimulating than frustrating, and greatly helped by reading
this newsgroup and resources like the cookbook.  After
having scratched its surface I'm totally convinced that Lisp
is the way to go.  But I still haven't managed to install
CLOCC :-)

> > Using clisp (export LISPTYPE=clisp) when I do
> > 
> > make clocc-top
> > 
> > I get an error:
> > 
> > Compiling file /home/joanmg/src/lisp/clocc/clocc.lisp ...
> > ERROR in function #:TOP-LEVEL-FORM-2 in lines 16..79 :
> > Not the name of a function: "CLOS"
> > 
> > Compilation of file /home/joanmg/src/lisp/clocc/clocc.lisp is finished.
> > There were errors in the following functions:
> >  #:TOP-LEVEL-FORM-2
> > The following functions were used but not defined:
> >  WITHOUT-PACKAGE-LOCK
> > 1 error, 0 warnings
> > /home/joanmg/src/lisp/clocc/bin/run-lisp -i clocc.fas -i src/defsystem-3.x/defsy
> > stem.fas -d clocc-top

> No the error message tells you that without-package-lock was not found
> This is your problem.

Thanks, I was looking at the wrong place.  Any hint on why
without-package-lock is not found?  It does not seem to come
defined in the CLOCC distribution (at least, a grep -r only
returns some without-package-locks, note the final s).  But
cmucl compiles it, so it's gotta be somewhere.

Greetings,

jm
From: Daniel Barlow
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <871xwy3duw.fsf@noetbook.telent.net>
··@sa-tuna.net (Juan M. Reyero) writes:

> The roadblocks for a newcomer like me to adopt Lisp, by the
> way, are not in the language.  They are in how you
> configure, install, and use a Lisp development environment.
[snipped]

I found that interesting - perhaps because it's basically the same
process as I went through when I started messing around with Lisp.

> later.  Or maybe not, maybe I make it listen to a socket and
> use it as a server, and I can also interact with it from the
> top level.  Or maybe not, because clisp does not seem to
> support forks.  OK, once I want to do that I'll move to
> cmucl, so I can inspect what the forked processes are doing.

(Aside: you don't really want forked processes, you want threads or
some reasonable analogue of them)

If you plan to move to CMUCL eventually anyway, what are the reasons
you don't start with it?  The only real advantages I've heard claimed
for CLISP are smaller size and command-line editing, but if you're
going to end up running CMUCL sooner or later, size is apparently not
the problem, and you're running inside emacs which gives you command
line editing anyway, so ...

As well as threads (which are currently x86-only), CMUCL also supports
a thing called SERVE-EVENT, which lets you hook into the select loop
it runs at the top-level.  


-dan

-- 

   http://www.cliki.net/ - Link farm for free CL-on-Unix resources 
From: Paolo Amoroso
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <LWgNP7WcU+FbXo1Hi7CSLpmt6QE+@4ax.com>
On 10 Jul 2003 10:08:34 +0200, ··@sa-tuna.net (Juan M. Reyero) wrote:

> top level.  Or maybe not, because clisp does not seem to
> support forks.  OK, once I want to do that I'll move to
> cmucl, so I can inspect what the forked processes are doing.

If you mean Unix fork(), CLISP does provide access to that. You should
check for glibc and Unix/POSIX bindings in the documentation.


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: Peter Van Eynde
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <86adbmimbc.fsf@slartibartfast.debian.net>
··@sa-tuna.net (Juan M. Reyero) writes:

> I would like to build the lisp server on top of PORT, but
> after a full day banging my head on it I haven't been able
> to install it.  I am running Debian Linux 3.0.  The only
> CLOCC distribution I've found is the cvs snapshot at
> sourceforge.  Using clisp (export LISPTYPE=clisp) when I do

Why don't you use the debian package?

········@slartibartfast:~/Mail :( $ apt-cache show cl-port
Package: cl-port
Priority: optional
Section: devel
Installed-Size: 172
Maintainer: Kevin M. Rosenberg <···@debian.org>
Architecture: all
Version: 1.0.1.1-1
Depends: common-lisp-controller
Filename: pool/main/c/cl-port/cl-port_1.0.1.1-1_all.deb
Size: 23610
MD5sum: 04f90e91de41d26e1bb06badefd97144
Description: Common Lisp Object Collections Port Package
 This package provides cross-implementation portability functions taken
 from the Common Lisp Object Code Collection. This includes codes for
 sockets, shell functions, and paths.

··········@slartibartfast:~/Mail :) $ lisp -nosite
CMU Common Lisp CVS release-18e-branch + minimal debian patches, running on slartibartfast
With core: /usr/lib/cmucl/lisp.core
Dumped on: Fri, 2003-06-27 22:58:17+02:00 on mustyr-host
For support see http://www.cons.org/cmucl/support.html Send bug reports to the debian BTS.
or to ········@debian.org
type (help) for help, (quit) to exit, and (demo) to see the demos

Loaded subsystems:
    Python 1.1, target Intel x86
    CLOS 18e (based on PCL September 16 92 PCL (f))
* (require :port)

; loading system definition from /usr/share/common-lisp/systems/port.asd into
; #<The ASDF1038 package, 0/9 internal, 0/9 external>
; Loading #p"/usr/share/common-lisp/source/port/port.asd".
; registering #<SYSTEM PORT {4802CE4D}> as PORT
; Loading #p"/usr/lib/common-lisp/cmucl/port/ext.x86f".
; Loading #p"/usr/lib/common-lisp/cmucl/port/gray.x86f".
; loading system definition from
; /usr/share/common-lisp/systems/cmucl-graystream.asd into
; #<The ASDF1041 package, 0/9 internal, 0/9 external>
;; Loading #p"/usr/share/common-lisp/source/cmucl-graystream/cmucl-graystream.asd".
; registering #<SYSTEM CMUCL-GRAYSTREAM {4809F625}> as CMUCL-GRAYSTREAM
;; Loading #p"/usr/lib/common-lisp/cmucl/cmucl-graystream/gray-streams-class.x86f".
;; Loading #p"/usr/lib/common-lisp/cmucl/cmucl-graystream/gray-streams.x86f".
; Loading #p"/usr/lib/common-lisp/cmucl/port/path.x86f".
; Loading #p"/usr/lib/common-lisp/cmucl/port/sys.x86f".
; Loading #p"/usr/lib/common-lisp/cmucl/port/net.x86f".
; Loading #p"/usr/lib/common-lisp/cmucl/port/proc.x86f".
; Loading #p"/usr/lib/common-lisp/cmucl/port/shell.x86f".
T
*

Or with clisp:

··········@slartibartfast:~/Mail :) $ clisp
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2002


[1]> (require :port)
; loading system definition from /usr/share/common-lisp/systems/port.asd into #<PACKAGE ASDF8752>
;; Loading file /usr/share/common-lisp/systems/port.asd ...
; registering #<SYSTEM PORT #x20386CE9> as PORT
;; Loaded file /usr/share/common-lisp/systems/port.asd
;;; Please wait, recompiling library...
Cannot remove: not yet compiled library for implementation

;; Loading file /usr/lib/common-lisp/clisp/port/ext.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/ext.fas
;; Loading file /usr/lib/common-lisp/clisp/port/gray.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/gray.fas
;; Loading file /usr/lib/common-lisp/clisp/port/path.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/path.fas
;; Loading file /usr/lib/common-lisp/clisp/port/sys.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/sys.fas
;; Loading file /usr/lib/common-lisp/clisp/port/net.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/net.fas
;; Loading file /usr/lib/common-lisp/clisp/port/proc.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/proc.fas
;; Loading file /usr/lib/common-lisp/clisp/port/shell.fas ...
;; Loaded file /usr/lib/common-lisp/clisp/port/shell.fas
0 errors, 0 warnings
T
[2]>

Please note that most lisp packages are most-current in the unstable
distribution, but it should be possible to selectively upgrade your
system to only use some packages from unstable.

Groetjes, Peter

-- 
It's logic Jim, but not as we know it. | ········@debian.org
"God, root, what is difference?" - Pitr| http://people.debian.org/~pvaneynd/
"God is more forgiving." - Dave Aronson| http://users.belgacom.net/pvaneynd/
From: Juan M. Reyero
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <lj2isqamqt0.fsf@npdl173.bpo.hp.com>
Peter Van Eynde <········@debian.org> writes:
> ··@sa-tuna.net (Juan M. Reyero) writes:
> 
> > I would like to build the lisp server on top of PORT, but
> > after a full day banging my head on it I haven't been able
> > to install it.  I am running Debian Linux 3.0.  The only
> > CLOCC distribution I've found is the cvs snapshot at
> > sourceforge.  Using clisp (export LISPTYPE=clisp) when I do
> 
> Why don't you use the debian package?

That was close!  I had tried to install a package clocc-port
I had found somewhere, but it didn't work (would not
compile).  Now seeing your example I've tried installing
cl-port (unstable in sources.list, etc).  Now it's almost
there: it installs, and compiles with clisp, but fails to
compile with cmucl.  Of course the fact that it only works
with one implementation sort of defeats the purpose of the
whole thing, but at least feels like progress.  I've tried
all sorts of apt-get gimmicks (uninstall clisp, cmucl and
common-lisp-controller, update with unstable and install
them again, install cl-port before and after cmucl, etc) but
all seem to fail in a consistent manner (at least is
consistent :-).  I guess I should file a bug report to the
Debian package maintainer.  What's strange, though, is that
my system now looks exactly like yours (as far as I can
see).  For the record, this is the error message I get when
try to require port from cmucl:

CMU Common Lisp CVS release-18e-branch + minimal debian patches, running on alta
ir
With core: /usr/lib/cmucl/lisp.core
Dumped on: Thu, 2003-07-10 15:13:39+02:00 on altair
For support see http://www.cons.org/cmucl/support.html Send bug reports to the d
ebian BTS.
or to ········@debian.org
type (help) for help, (quit) to exit, and (demo) to see the demos

Loaded subsystems:
    Python 1.1, target Intel x86
    CLOS 18e (based on PCL September 16 92 PCL (f))
* (require :port)

; loading system definition from /usr/share/common-lisp/systems/port.asd into
; #<The ASDF1034 package, 0/9 internal, 0/9 external>
; Loading #p"/usr/share/common-lisp/source/port/port.asd".
; registering #<SYSTEM PORT {4802599D}> as PORT


Error in function COMMON-LISP-CONTROLLER:SEND-CLC-COMMAND:
   An error happend during recompilation of port for cmucl
Please see /usr/share/doc/common-lisp-controller/REPORTING-BUGS.gz

Restarts:
  0: [ABORT] Return to Top-Level.

Debug  (type H for help)

(COMMON-LISP-CONTROLLER:SEND-CLC-COMMAND :RECOMPILE "port")
Source: (ERROR
         "An error happend during ~A of ~A for ~A~%Please see /usr/share/doc/com
mon-lisp-controller/REPORTING-BUGS.gz"
         (ECASE COMMAND (:RECOMPILE "recompilation") (:REMOVE "removal"))
         PACKAGE
         "cmucl")

Greetings,

jm
From: Juan M. Reyero
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <lj21xwxmazi.fsf@npdl173.bpo.hp.com>
··@sa-tuna.net (Juan M. Reyero) writes:
> I would like to build the lisp server on top of PORT, but
> after a full day banging my head on it I haven't been able
> to install it. 

Thanks everybody for the suggestions.  After upgrading to a
newer version of clisp I was able to make PORT run there,
but there's been no way to make the installation process
work with cmucl.  The debian packages don't work either
(stable, testing, unstable, all have different
problems). I've finally decided to set for cmucl, and forget
about PORT.  For what it's worth, here is the small piece of
code I've ended up with.  It listens to a socket and
executes whatever command it gets.  I've massaged it out of
http://lisp.t2100cdt.kippona.net/lispy/thiscode.  (Of course
it would be nice to add some security to it before actually
deploying it somewhere.  Also, I am still not convinced that
it's correct.  From time to time seems to leave the port
occupied after exiting lisp.  Anyway.)

(in-package :cl-user)

(defconstant +port+ 2100)

(defun listen (fd)
  (unwind-protect
      (ignore-errors
        (format fd "~A~%" (eval (read fd))))
    (close fd)))

(defun make-listener (port mprocess)
  (let ((socket (ext:create-inet-listener port)))
    (format t "> Started server on port ~d~%" port)
    (unwind-protect
        (loop
         (mp:process-wait-until-fd-usable socket :input)
         (let* ((new-fd (ext:accept-tcp-connection socket))
                (stream (sys:make-fd-stream new-fd :input t :output t)))
           (if mprocess
               (mp:make-process #'(lambda () (listen stream))
                                :name "stream")
               (listen stream))))
      (unix:unix-close socket))))

(defun start-listener (port &key (mprocess nil))
  (mp:make-process #'(lambda () (make-listener port mprocess))
                   :name "listener"))

(start-listener +port+ :mprocess t)

The perl that talks to it looks something like:

#!/usr/bin/perl -w

use IO::Socket;
use strict;

my $host = 'localhost';
my $port = 2100;
my $sk   = IO::Socket::INET->new(Proto     => 'tcp',
                                 PeerAddr  => $host,
                                 PeerPort  => $port)
    or die "can't connect to port $port on $host: $!";
$sk->autoflush(1);

print $sk "(+ 1 2)\n";
print <$sk>;
From: Kevin Rosenberg
Subject: Re: please help installing clocc on Debian
Date: 
Message-ID: <slrnbgtnj3.ves.kevin@tiger.med-info.com>
In article <···············@npdl173.bpo.hp.com>, Juan M. Reyero wrote:
> http://lisp.t2100cdt.kippona.net/lispy/thiscode.  (Of course
> it would be nice to add some security to it before actually
> deploying it somewhere.  Also, I am still not convinced that
> it's correct.  From time to time seems to leave the port
> occupied after exiting lisp.  Anyway.)

You might want to look at cl-modlisp (http://cl-modlisp.b9.com). It
uses the generic listener of kmrcl (http://files.b9.com/kmrcl/) to
provide a Lisp server for the mod_lisp apache module. Also, kmrcl
contains a REPL server with hooks for user and remote-host
authentication which uses the same generic listener. These servers are
supported for CMUCL, SBCL-MT, AllergoCL, and Lispworks.

kmrcl is already in Debian as cl-kmrcl. cl-modlisp has been uploaded
and should be in Debian very soon.

-- 
Kevin Rosenberg
·····@rosenberg.net