Re: [Ur] Multitenancy

2018-05-13 Thread Artyom Shalkhakov
Hi Simon,

As others have said, it's better not to touch the application code for
multi-tenancy.

2018-05-14 0:02 GMT+06:00 Simon Van Casteren :

> Thanks everybody for the help. I was running my exe in standalone mode, so
> I didn't realise when you're running in fastCGI mode that Nginx will start
> processes for you. As I said, I don't have any frame of reference so I ask
> silly questions :).
>
> As I see it now, I'll probably have an API endpoint "new_tenant" that will
> run the following:
>
> * Run a shell script to set up a new DB and load default data.
> * Write the necessary config for a new fastCGI server with the new
> connection string into my nginx config and reload nginx, as I've read this
> should not impact the other servers. I'll probably add some notification to
> myself whenever I do this so I don't silently start thousands of servers
> when something goes wrong.
>
> It would be nice if I could have urweb do this. Is there a way to run
> shell scripts for urweb? And what about interacting stuff with file system?
> Both I have not seen happen in urweb, since it's mostly not necessary. Am I
> better off using the FFI for these things? I saw the BazQux reader uses the
> FFI to call into Haskell, that seems very nice even though it's probably
> overkill for this use case.
>
>
It's best to utilize an off-the-shelf CI & CD tools for this. I'd advise
you to containerize your app (dockerize); next, automate the build & test &
containerize parts (use say GitLab-CI or Travis-CI, or the like). And
finally use some ready-made continous deployment tools to handle the
configuration parts. Then adding a new tenant would be some script that
will simply spin up a new container based off an existing image.

By the way, just last week I posted a PR to Ur/Web repo where I do
functional tests for an Ur/Web app using Selenium. You might want to take a
look.


> Simon
>
> 2018-05-13 16:13 GMT+02:00 Rob Manhatton :
>
>> After a light google, it seems that terraform's linode support isn't
>> super mature yet, so if you're comfortable doing all the apps on the same
>> VM and database end point then hold off on terraform a few more months
>> (although you will really like having nearly 100% of your systems backed by
>> code when you have bandwidth to look into it).
>>
>> On May 13, 2018 9:03:28 AM CDT, Adam Chlipala 
>> wrote:
>>
>>> I'm not sure which aspect of deployment you're worried about.  With
>>> Apache, you can configure as many FastCGI applications as you'd like, and
>>> they will all be started automatically on each reboot.  It only takes a few
>>> lines of configuration per application.  Similarly, creating a new database
>>> is a few lines of shell script, using the .sql file that the Ur/Web
>>> compiler produces for an application.  All of the details are independent
>>> of application specifics.
>>>
>>> I am not aware of any existing tools for doing these simple steps
>>> automatically, but it should be easy to roll an all-inclusive shell script.
>>>
>>> On 05/13/2018 09:48 AM, Simon Van Casteren wrote:
>>>
>>> I considered it briefly as I was doing some research on the topic. It's
>>> the first time I'll be running and deploying a SaaS app myself (I've so far
>>> always been on the programming side only) so it felt more natural to me to
>>> keep everything inside a single application. Running the application right
>>> now consists of me ssh'ing into a Linode and running the exe by hand. If I
>>> want to split this into one application per database (which does guarantee
>>> data security better, that's really nice) then deployment seems to become
>>> much more complicated.
>>>
>>> But let's say I do go that route. Is using one of the new deployment
>>> tools a good idea for a just-started scenario? I appreciate how ur/web uses
>>> very basic and simple tools, eg: Using curl in the Worldffi project to do
>>> HTTP requests, not having editor tooling but having the compiler use
>>> standard error formatting so emacs picks it up automatically. This is in
>>> strong contrast to the javascript community where I normally reside, which
>>> likes to re-implement things a lot. So I'd like to know what advice the
>>> community has on the right tools for setting up a new application and
>>> database automatically (probably via the C FFI?) and then running and
>>> updating them together. I would like to note that adding and running new
>>> clients without any manual work is strongly preferred.
>>>
>>> Because I don't have any idea of how I would handle this adding and
>>> deploying of clients, I can't weigh the two alternatives: Complicating the
>>> app with tenantIds, or complicating the deployment with seperate apps.
>>>
>>> 2018-05-13 15:31 GMT+02:00 Adam Chlipala :
>>>
 Can you explain why you don't want to run separate applications with
 separate databases?


 On 05/13/2018 05:50 AM, Simon 

Re: [Ur] Multitenancy

2018-05-13 Thread Adam Chlipala
Right, that all makes sense.  It should be easy to set up a shell script 
from first principles, with no particular support from Ur/Web.  Then 
calling that shell script from an Ur/Web app with the C FFI should also 
be straightforward -- just be sure to register the execution of the 
script as a transactional with no rollback handler.


On 05/13/2018 02:19 PM, Simon Van Casteren wrote:
In general, not really. And at the moment I don't have time to 
implement the automation so I for sure will do it manually. But I plan 
to add a "Demo" button where people can check out the whole 
application with some demo data and can do whatever they want. I 
wanted to implement that also as a seperate tenant, and after a few 
days of inactivity delete those "demo tenants".


Secondly, as a client I would appreciate it if I could buy this 
product and immediately get my environment up and running, so not 
having to wait minutes-hours until I can start using what I bought. 
This is not that important right now, but I would like to have the 
possibility.


2018-05-13 20:11 GMT+02:00 Adam Chlipala >:


I'm confused about something: do you really expect to add new
tenants frequently enough that it would be a problem for you to
have to log into the server and run a shell script each time? 
Would it even be a problem if you had to edit configuration files
manually on the server each time?

On 05/13/2018 02:02 PM, Simon Van Casteren wrote:

As I see it now, I'll probably have an API endpoint
"new_tenant" that will run the following:

* Run a shell script to set up a new DB and load default data.
* Write the necessary config for a new fastCGI server with the
new connection string into my nginx config and reload nginx,
as I've read this should not impact the other servers. I'll
probably add some notification to myself whenever I do this so
I don't silently start thousands of servers when something
goes wrong.



___
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur


Re: [Ur] Multitenancy

2018-05-13 Thread Simon Van Casteren
Thanks everybody for the help. I was running my exe in standalone mode, so
I didn't realise when you're running in fastCGI mode that Nginx will start
processes for you. As I said, I don't have any frame of reference so I ask
silly questions :).

As I see it now, I'll probably have an API endpoint "new_tenant" that will
run the following:

* Run a shell script to set up a new DB and load default data.
* Write the necessary config for a new fastCGI server with the new
connection string into my nginx config and reload nginx, as I've read this
should not impact the other servers. I'll probably add some notification to
myself whenever I do this so I don't silently start thousands of servers
when something goes wrong.

It would be nice if I could have urweb do this. Is there a way to run shell
scripts for urweb? And what about interacting stuff with file system? Both
I have not seen happen in urweb, since it's mostly not necessary. Am I
better off using the FFI for these things? I saw the BazQux reader uses the
FFI to call into Haskell, that seems very nice even though it's probably
overkill for this use case.

Simon

2018-05-13 16:13 GMT+02:00 Rob Manhatton :

> After a light google, it seems that terraform's linode support isn't super
> mature yet, so if you're comfortable doing all the apps on the same VM and
> database end point then hold off on terraform a few more months (although
> you will really like having nearly 100% of your systems backed by code when
> you have bandwidth to look into it).
>
> On May 13, 2018 9:03:28 AM CDT, Adam Chlipala  wrote:
>
>> I'm not sure which aspect of deployment you're worried about.  With
>> Apache, you can configure as many FastCGI applications as you'd like, and
>> they will all be started automatically on each reboot.  It only takes a few
>> lines of configuration per application.  Similarly, creating a new database
>> is a few lines of shell script, using the .sql file that the Ur/Web
>> compiler produces for an application.  All of the details are independent
>> of application specifics.
>>
>> I am not aware of any existing tools for doing these simple steps
>> automatically, but it should be easy to roll an all-inclusive shell script.
>>
>> On 05/13/2018 09:48 AM, Simon Van Casteren wrote:
>>
>> I considered it briefly as I was doing some research on the topic. It's
>> the first time I'll be running and deploying a SaaS app myself (I've so far
>> always been on the programming side only) so it felt more natural to me to
>> keep everything inside a single application. Running the application right
>> now consists of me ssh'ing into a Linode and running the exe by hand. If I
>> want to split this into one application per database (which does guarantee
>> data security better, that's really nice) then deployment seems to become
>> much more complicated.
>>
>> But let's say I do go that route. Is using one of the new deployment
>> tools a good idea for a just-started scenario? I appreciate how ur/web uses
>> very basic and simple tools, eg: Using curl in the Worldffi project to do
>> HTTP requests, not having editor tooling but having the compiler use
>> standard error formatting so emacs picks it up automatically. This is in
>> strong contrast to the javascript community where I normally reside, which
>> likes to re-implement things a lot. So I'd like to know what advice the
>> community has on the right tools for setting up a new application and
>> database automatically (probably via the C FFI?) and then running and
>> updating them together. I would like to note that adding and running new
>> clients without any manual work is strongly preferred.
>>
>> Because I don't have any idea of how I would handle this adding and
>> deploying of clients, I can't weigh the two alternatives: Complicating the
>> app with tenantIds, or complicating the deployment with seperate apps.
>>
>> 2018-05-13 15:31 GMT+02:00 Adam Chlipala :
>>
>>> Can you explain why you don't want to run separate applications with
>>> separate databases?
>>>
>>>
>>> On 05/13/2018 05:50 AM, Simon Van Casteren wrote:
>>>
>>> Hi,
>>>
>>> I'm in the process of making a new application for music schools, using
>>> ur/web for front and backend. I'm at the point where I have two customers
>>> and am starting to implement support for multiple clients/tenants in one DB
>>> (postgres). I've been planning to implement multitenancy from the start,
>>> but haven't had the time yet.
>>>
>>> Has anyone implemented a form of multitenancy in ur/web before?
>>>
>>> I see two areas that need consideration.
>>>
>>> 1. Deciding which user belongs to which tenant. Ideally I'd have a
>>> seperate url for each tenant that I can give out to my clients (=the
>>> schools), do some dns magic to send them all to the same exe, extract the
>>> tenantname from the url and save the tenantId in a cookie. Also ideally,
>>> the user's url would not change, ie. All urls 

Re: [Ur] Multitenancy

2018-05-13 Thread Adam Chlipala
I'm not sure which aspect of deployment you're worried about.  With 
Apache, you can configure as many FastCGI applications as you'd like, 
and they will all be started automatically on each reboot.  It only 
takes a few lines of configuration per application.  Similarly, creating 
a new database is a few lines of shell script, using the .sql file that 
the Ur/Web compiler produces for an application.  All of the details are 
independent of application specifics.


I am not aware of any existing tools for doing these simple steps 
automatically, but it should be easy to roll an all-inclusive shell script.


On 05/13/2018 09:48 AM, Simon Van Casteren wrote:
I considered it briefly as I was doing some research on the topic. 
It's the first time I'll be running and deploying a SaaS app myself 
(I've so far always been on the programming side only) so it felt more 
natural to me to keep everything inside a single application. Running 
the application right now consists of me ssh'ing into a Linode and 
running the exe by hand. If I want to split this into one application 
per database (which does guarantee data security better, that's really 
nice) then deployment seems to become much more complicated.


But let's say I do go that route. Is using one of the new deployment 
tools a good idea for a just-started scenario? I appreciate how ur/web 
uses very basic and simple tools, eg: Using curl in the Worldffi 
project to do HTTP requests, not having editor tooling but having the 
compiler use standard error formatting so emacs picks it up 
automatically. This is in strong contrast to the javascript community 
where I normally reside, which likes to re-implement things a lot. So 
I'd like to know what advice the community has on the right tools for 
setting up a new application and database automatically (probably via 
the C FFI?) and then running and updating them together. I would like 
to note that adding and running new clients without any manual work is 
strongly preferred.


Because I don't have any idea of how I would handle this adding and 
deploying of clients, I can't weigh the two alternatives: Complicating 
the app with tenantIds, or complicating the deployment with seperate 
apps.


2018-05-13 15:31 GMT+02:00 Adam Chlipala >:


Can you explain why you don't want to run separate applications
with separate databases?


On 05/13/2018 05:50 AM, Simon Van Casteren wrote:

Hi,

I'm in the process of making a new application for music schools,
using ur/web for front and backend. I'm at the point where I have
two customers and am starting to implement support for multiple
clients/tenants in one DB (postgres). I've been planning to
implement multitenancy from the start, but haven't had the time yet.

Has anyone implemented a form of multitenancy in ur/web before?

I see two areas that need consideration.

1. Deciding which user belongs to which tenant. Ideally I'd have
a seperate url for each tenant that I can give out to my clients
(=the schools), do some dns magic to send them all to the same
exe, extract the tenantname from the url and save the tenantId in
a cookie. Also ideally, the user's url would not change, ie. All
urls should go to myschool.coolschools.be
 during a session, not getting
redirected at all. This is all in an ideal situation of course.

2. Database access: I'll have tenantId columns in all tables +
foreign keys and indexes on these columns. I'm a bit afraid I'll
forget adding tenantId = cookie.tenantid somewhere, so I was
thinking I could make a function that takes a sql_exp and a
tenantId and adds these clauses to all tables involved. Not 100%
sure that will work but I think it's possible, I haven't had to
dive into the internals of sql_exp yet. Secondly, I wonder if I
can somehow declare my endpoints to be tenantdepandent (all but
the most general will be) maybe via newtyping the transaction
datatype and then allowing the execute only sql queries that have
the above function applied. Just dreaming out loud here.

I'd be very interested in any ideas or examples!

Simon




___
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur


Re: [Ur] Multitenancy

2018-05-13 Thread steenuil
I think that might be better handled in the server configuration, you could use 
the same binary but spin up different processes using a different URWEB_PQ_CON 
for each subdomain. Adding a new school would just be a matter of creating a 
new DB on postgresql and updating the server's configuration file, I think.

On May 13, 2018 3:48:27 PM GMT+02:00, Simon Van Casteren 
 wrote:
>I considered it briefly as I was doing some research on the topic. It's
>the
>first time I'll be running and deploying a SaaS app myself (I've so far
>always been on the programming side only) so it felt more natural to me
>to
>keep everything inside a single application. Running the application
>right
>now consists of me ssh'ing into a Linode and running the exe by hand.
>If I
>want to split this into one application per database (which does
>guarantee
>data security better, that's really nice) then deployment seems to
>become
>much more complicated.
>
>But let's say I do go that route. Is using one of the new deployment
>tools
>a good idea for a just-started scenario? I appreciate how ur/web uses
>very
>basic and simple tools, eg: Using curl in the Worldffi project to do
>HTTP
>requests, not having editor tooling but having the compiler use
>standard
>error formatting so emacs picks it up automatically. This is in strong
>contrast to the javascript community where I normally reside, which
>likes
>to re-implement things a lot. So I'd like to know what advice the
>community
>has on the right tools for setting up a new application and database
>automatically (probably via the C FFI?) and then running and updating
>them
>together. I would like to note that adding and running new clients
>without
>any manual work is strongly preferred.
>
>Because I don't have any idea of how I would handle this adding and
>deploying of clients, I can't weigh the two alternatives: Complicating
>the
>app with tenantIds, or complicating the deployment with seperate apps.
>
>2018-05-13 15:31 GMT+02:00 Adam Chlipala :
>
>> Can you explain why you don't want to run separate applications with
>> separate databases?
>>
>>
>> On 05/13/2018 05:50 AM, Simon Van Casteren wrote:
>>
>> Hi,
>>
>> I'm in the process of making a new application for music schools,
>using
>> ur/web for front and backend. I'm at the point where I have two
>customers
>> and am starting to implement support for multiple clients/tenants in
>one DB
>> (postgres). I've been planning to implement multitenancy from the
>start,
>> but haven't had the time yet.
>>
>> Has anyone implemented a form of multitenancy in ur/web before?
>>
>> I see two areas that need consideration.
>>
>> 1. Deciding which user belongs to which tenant. Ideally I'd have a
>> seperate url for each tenant that I can give out to my clients (=the
>> schools), do some dns magic to send them all to the same exe, extract
>the
>> tenantname from the url and save the tenantId in a cookie. Also
>ideally,
>> the user's url would not change, ie. All urls should go to
>> myschool.coolschools.be during a session, not getting redirected at
>all.
>> This is all in an ideal situation of course.
>>
>> 2. Database access: I'll have tenantId columns in all tables +
>foreign
>> keys and indexes on these columns. I'm a bit afraid I'll forget
>adding
>> tenantId = cookie.tenantid somewhere, so I was thinking I could make
>a
>> function that takes a sql_exp and a tenantId and adds these clauses
>to all
>> tables involved. Not 100% sure that will work but I think it's
>possible, I
>> haven't had to dive into the internals of sql_exp yet. Secondly, I
>wonder
>> if I can somehow declare my endpoints to be tenantdepandent (all but
>the
>> most general will be) maybe via newtyping the transaction datatype
>and then
>> allowing the execute only sql queries that have the above function
>applied.
>> Just dreaming out loud here.
>>
>> I'd be very interested in any ideas or examples!
>>
>> Simon
>>
>>
>>
>> ___
>> Ur mailing list
>> Ur@impredicative.com
>> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>>
>>

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.___
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur


Re: [Ur] Multitenancy

2018-05-13 Thread Simon Van Casteren
I considered it briefly as I was doing some research on the topic. It's the
first time I'll be running and deploying a SaaS app myself (I've so far
always been on the programming side only) so it felt more natural to me to
keep everything inside a single application. Running the application right
now consists of me ssh'ing into a Linode and running the exe by hand. If I
want to split this into one application per database (which does guarantee
data security better, that's really nice) then deployment seems to become
much more complicated.

But let's say I do go that route. Is using one of the new deployment tools
a good idea for a just-started scenario? I appreciate how ur/web uses very
basic and simple tools, eg: Using curl in the Worldffi project to do HTTP
requests, not having editor tooling but having the compiler use standard
error formatting so emacs picks it up automatically. This is in strong
contrast to the javascript community where I normally reside, which likes
to re-implement things a lot. So I'd like to know what advice the community
has on the right tools for setting up a new application and database
automatically (probably via the C FFI?) and then running and updating them
together. I would like to note that adding and running new clients without
any manual work is strongly preferred.

Because I don't have any idea of how I would handle this adding and
deploying of clients, I can't weigh the two alternatives: Complicating the
app with tenantIds, or complicating the deployment with seperate apps.

2018-05-13 15:31 GMT+02:00 Adam Chlipala :

> Can you explain why you don't want to run separate applications with
> separate databases?
>
>
> On 05/13/2018 05:50 AM, Simon Van Casteren wrote:
>
> Hi,
>
> I'm in the process of making a new application for music schools, using
> ur/web for front and backend. I'm at the point where I have two customers
> and am starting to implement support for multiple clients/tenants in one DB
> (postgres). I've been planning to implement multitenancy from the start,
> but haven't had the time yet.
>
> Has anyone implemented a form of multitenancy in ur/web before?
>
> I see two areas that need consideration.
>
> 1. Deciding which user belongs to which tenant. Ideally I'd have a
> seperate url for each tenant that I can give out to my clients (=the
> schools), do some dns magic to send them all to the same exe, extract the
> tenantname from the url and save the tenantId in a cookie. Also ideally,
> the user's url would not change, ie. All urls should go to
> myschool.coolschools.be during a session, not getting redirected at all.
> This is all in an ideal situation of course.
>
> 2. Database access: I'll have tenantId columns in all tables + foreign
> keys and indexes on these columns. I'm a bit afraid I'll forget adding
> tenantId = cookie.tenantid somewhere, so I was thinking I could make a
> function that takes a sql_exp and a tenantId and adds these clauses to all
> tables involved. Not 100% sure that will work but I think it's possible, I
> haven't had to dive into the internals of sql_exp yet. Secondly, I wonder
> if I can somehow declare my endpoints to be tenantdepandent (all but the
> most general will be) maybe via newtyping the transaction datatype and then
> allowing the execute only sql queries that have the above function applied.
> Just dreaming out loud here.
>
> I'd be very interested in any ideas or examples!
>
> Simon
>
>
>
> ___
> Ur mailing list
> Ur@impredicative.com
> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>
>
___
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur


Re: [Ur] Multitenancy

2018-05-13 Thread Adam Chlipala
Can you explain why you don't want to run separate applications with 
separate databases?


On 05/13/2018 05:50 AM, Simon Van Casteren wrote:

Hi,

I'm in the process of making a new application for music schools, 
using ur/web for front and backend. I'm at the point where I have two 
customers and am starting to implement support for multiple 
clients/tenants in one DB (postgres). I've been planning to implement 
multitenancy from the start, but haven't had the time yet.


Has anyone implemented a form of multitenancy in ur/web before?

I see two areas that need consideration.

1. Deciding which user belongs to which tenant. Ideally I'd have a 
seperate url for each tenant that I can give out to my clients (=the 
schools), do some dns magic to send them all to the same exe, extract 
the tenantname from the url and save the tenantId in a cookie. Also 
ideally, the user's url would not change, ie. All urls should go to 
myschool.coolschools.be  during a 
session, not getting redirected at all. This is all in an ideal 
situation of course.


2. Database access: I'll have tenantId columns in all tables + foreign 
keys and indexes on these columns. I'm a bit afraid I'll forget adding 
tenantId = cookie.tenantid somewhere, so I was thinking I could make a 
function that takes a sql_exp and a tenantId and adds these clauses to 
all tables involved. Not 100% sure that will work but I think it's 
possible, I haven't had to dive into the internals of sql_exp yet. 
Secondly, I wonder if I can somehow declare my endpoints to be 
tenantdepandent (all but the most general will be) maybe via newtyping 
the transaction datatype and then allowing the execute only sql 
queries that have the above function applied. Just dreaming out loud here.


I'd be very interested in any ideas or examples!

Simon


___
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur


Re: [Ur] Multitenancy

2018-05-13 Thread Rob Manhatton
I don't have any recommendation per say, but when github sells its public gh 
service, many users can buy accts at the same URL.  When that level of 
security/ privacy doesn't meet it's customer's needs, they are able to launch a 
seperate instance of their web app and even store their app server in their 
customer's data center.  

My philosophy is that because coding is confusing enough as ot is, when you can 
leverage multiple deployments rather tha multitenancy code, you wind up in a 
better place.  If you aren't able to codify your deployments (terraform, 
ansible, docker, etc.) then this approach may be more daunting.

On May 13, 2018 4:50:47 AM CDT, Simon Van Casteren 
 wrote:
>Hi,
>
>I'm in the process of making a new application for music schools, using
>ur/web for front and backend. I'm at the point where I have two
>customers
>and am starting to implement support for multiple clients/tenants in
>one DB
>(postgres). I've been planning to implement multitenancy from the
>start,
>but haven't had the time yet.
>
>Has anyone implemented a form of multitenancy in ur/web before?
>
>I see two areas that need consideration.
>
>1. Deciding which user belongs to which tenant. Ideally I'd have a
>seperate
>url for each tenant that I can give out to my clients (=the schools),
>do
>some dns magic to send them all to the same exe, extract the tenantname
>from the url and save the tenantId in a cookie. Also ideally, the
>user's
>url would not change, ie. All urls should go to myschool.coolschools.be
>during a session, not getting redirected at all. This is all in an
>ideal
>situation of course.
>
>2. Database access: I'll have tenantId columns in all tables + foreign
>keys
>and indexes on these columns. I'm a bit afraid I'll forget adding
>tenantId
>= cookie.tenantid somewhere, so I was thinking I could make a function
>that
>takes a sql_exp and a tenantId and adds these clauses to all tables
>involved. Not 100% sure that will work but I think it's possible, I
>haven't
>had to dive into the internals of sql_exp yet. Secondly, I wonder if I
>can
>somehow declare my endpoints to be tenantdepandent (all but the most
>general will be) maybe via newtyping the transaction datatype and then
>allowing the execute only sql queries that have the above function
>applied.
>Just dreaming out loud here.
>
>I'd be very interested in any ideas or examples!
>
>Simon
>
>
>
>
>___
>Ur mailing list
>Ur@impredicative.com
>http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.___
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur