Re: [racket-dev] dependencies for `racket-test` package

2013-07-02 Thread Matthew Flatt
I'm pretty sure that racket-test needs to be split up. (For the
initial cut, I just put the whole tests collection there.)

I'm not sure about compiling tests for the purposes of dependency
checking. It sounds ok, but I have a feeling that I'm forgetting some
reason that we disabled compilation for tests.

At Tue, 2 Jul 2013 12:20:57 -0400, Sam Tobin-Hochstadt wrote:
 Currently, the `racket-test` package has very few declared
 dependencies, but this is wrong. The checking in 'raco setup' doesn't
 catch this because the files aren't compiled, but at a minimum it
 depends on `unstable/debug` (currently a hidden part of
 `typed-racket-lib`) and some portions of htdp that aren't declared.
 
 This brings up (at least) 3 questions
 
 - What is it ok for `racket-test` to depend on?  I'd like this set to
 be small, so we can test the core without needing to build everything.
 - Should we compile the contents of `racket-test` so that we get
 dependency checking?
 - Should parts of `racket-test` be split up?
 
 I'd like to figure this out, but I don't have answers yet.
 
 Sam
 _
   Racket Developers list:
   http://lists.racket-lang.org/dev
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies for `racket-test` package

2013-07-02 Thread Carl Eastlund
I believe the reason we disabled compilation was that tests weren't
constrained to depend only on the core.  Some tests may use planet
packages, etc.  Originally, this was mostly for rackunit, which was a
planet package.  This suggests to me that we should (a) remove the test
packages from the default distribution, and (b) re-enable compilation for
them.  That way the dependencies will be computed properly.  It also
suggests that if they aren't already included, perhaps we should add planet
packages to the list of things we consider among dependencies?

Carl Eastlund


On Tue, Jul 2, 2013 at 12:42 PM, Matthew Flatt mfl...@cs.utah.edu wrote:

 I'm pretty sure that racket-test needs to be split up. (For the
 initial cut, I just put the whole tests collection there.)

 I'm not sure about compiling tests for the purposes of dependency
 checking. It sounds ok, but I have a feeling that I'm forgetting some
 reason that we disabled compilation for tests.

 At Tue, 2 Jul 2013 12:20:57 -0400, Sam Tobin-Hochstadt wrote:
  Currently, the `racket-test` package has very few declared
  dependencies, but this is wrong. The checking in 'raco setup' doesn't
  catch this because the files aren't compiled, but at a minimum it
  depends on `unstable/debug` (currently a hidden part of
  `typed-racket-lib`) and some portions of htdp that aren't declared.
 
  This brings up (at least) 3 questions
 
  - What is it ok for `racket-test` to depend on?  I'd like this set to
  be small, so we can test the core without needing to build everything.
  - Should we compile the contents of `racket-test` so that we get
  dependency checking?
  - Should parts of `racket-test` be split up?
 
  I'd like to figure this out, but I don't have answers yet.
 
  Sam
  _
Racket Developers list:
http://lists.racket-lang.org/dev
 _
   Racket Developers list:
   http://lists.racket-lang.org/dev


_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies for `racket-test` package

2013-07-02 Thread Sam Tobin-Hochstadt
On Jul 2, 2013 12:42 PM, Matthew Flatt mfl...@cs.utah.edu wrote:

 I'm pretty sure that racket-test needs to be split up. (For the
 initial cut, I just put the whole tests collection there.)

Sorry, I should have been more specific; 'tests/racket/stx.rktl' depends on
htdp.  I expect that the tests in that directory depend on other packages
as well, such as sandbox and compiler.

 I'm not sure about compiling tests for the purposes of dependency
 checking. It sounds ok, but I have a feeling that I'm forgetting some
 reason that we disabled compilation for tests.

 At Tue, 2 Jul 2013 12:20:57 -0400, Sam Tobin-Hochstadt wrote:
  Currently, the `racket-test` package has very few declared
  dependencies, but this is wrong. The checking in 'raco setup' doesn't
  catch this because the files aren't compiled, but at a minimum it
  depends on `unstable/debug` (currently a hidden part of
  `typed-racket-lib`) and some portions of htdp that aren't declared.
 
  This brings up (at least) 3 questions
 
  - What is it ok for `racket-test` to depend on?  I'd like this set to
  be small, so we can test the core without needing to build everything.
  - Should we compile the contents of `racket-test` so that we get
  dependency checking?
  - Should parts of `racket-test` be split up?
 
  I'd like to figure this out, but I don't have answers yet.
 
  Sam
  _
Racket Developers list:
http://lists.racket-lang.org/dev
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies for `racket-test` package

2013-07-02 Thread Matthew Flatt
At Tue, 2 Jul 2013 12:53:02 -0400, Sam Tobin-Hochstadt wrote:
 On Jul 2, 2013 12:42 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
 
  I'm pretty sure that racket-test needs to be split up. (For the
  initial cut, I just put the whole tests collection there.)
 
 Sorry, I should have been more specific; 'tests/racket/stx.rktl' depends on
 htdp.  I expect that the tests in that directory depend on other packages
 as well, such as sandbox and compiler.

Depending on sandbox and compiler seems ok, while the tests that
depend on htdp can be changed to use different modules.

_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies for `racket-test` package

2013-07-02 Thread Robby Findler
On Tue, Jul 2, 2013 at 12:01 PM, Matthew Flatt mfl...@cs.utah.edu wrote:

 At Tue, 2 Jul 2013 12:53:02 -0400, Sam Tobin-Hochstadt wrote:
  On Jul 2, 2013 12:42 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
  
   I'm pretty sure that racket-test needs to be split up. (For the
   initial cut, I just put the whole tests collection there.)
 
  Sorry, I should have been more specific; 'tests/racket/stx.rktl' depends
 on
  htdp.  I expect that the tests in that directory depend on other packages
  as well, such as sandbox and compiler.

 Depending on sandbox and compiler seems ok, while the tests that
 depend on htdp can be changed to use different modules.


Or maybe, if they are actually testing htdp, move into the htdp pkg.

But another issue we're forgetting here is that many of the tests are not
in #lang but are load-based.

Robby
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies for `racket-test` package

2013-07-02 Thread Sam Tobin-Hochstadt
On Tue, Jul 2, 2013 at 6:15 PM, Robby Findler
ro...@eecs.northwestern.edu wrote:



 On Tue, Jul 2, 2013 at 12:01 PM, Matthew Flatt mfl...@cs.utah.edu wrote:

 At Tue, 2 Jul 2013 12:53:02 -0400, Sam Tobin-Hochstadt wrote:
  On Jul 2, 2013 12:42 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
  
   I'm pretty sure that racket-test needs to be split up. (For the
   initial cut, I just put the whole tests collection there.)
 
  Sorry, I should have been more specific; 'tests/racket/stx.rktl' depends
  on
  htdp.  I expect that the tests in that directory depend on other
  packages
  as well, such as sandbox and compiler.

 Depending on sandbox and compiler seems ok, while the tests that
 depend on htdp can be changed to use different modules.


 Or maybe, if they are actually testing htdp, move into the htdp pkg.

The tests I was looking were testing the syntax system, so I've modified them.

 But another issue we're forgetting here is that many of the tests are not in
 #lang but are load-based.

Right, those tests can't be compiled. There are lots of tests in
`racket-test` (for, eg, json and pkg and xml) that are thankfully not
load-based, so we should decide what to do with them.

Sam
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies and racket

2011-12-30 Thread Neil Van Dyke
Another variation, if you're thinking about cloud infrastructure today: 
you could pretty easily make your own faux PLaneT server that either is 
for a single app or takes the identity/profile of the app as part of the 
URL the app uses to access the PLaneT server.


The faux server can be a tiny HTTP server process, as it only has to 
perform a single, simple REST operation.


This faux PLaneT server would *enforce* the same profile of PLaneT 
package versions for the app, and also serve the packages from a trusted 
cache at app compile time.


Or you can use the careful-crafted ~/.racket/ directory approach.  I 
suppose the choice depends on which is easier to do well in your 
existing infrastructure.


It's good to see interest in Racket from cloud people.  Feel free to ask 
lots of questions on the Racket users and dev email lists as you 
work through your solution.


--
http://www.neilvandyke.org/

_
 Racket Developers list:
 http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies and racket

2011-12-30 Thread Daniel Farina
On Fri, Dec 30, 2011 at 9:45 AM, Neil Van Dyke n...@neilvandyke.org wrote:
 It's good to see interest in Racket from cloud people.  Feel free to ask
 lots of questions on the Racket users and dev email lists as you work
 through your solution.

Well, this a side-interest for personally, but *anyone* can make a
'build pack' for Heroku, and they can be simple.  Take the Python
build pack for instance, which is little more than three bash files in
the 'bin' directory:

https://github.com/heroku/heroku-buildpack-python

And one for Go:

https://github.com/kr/heroku-buildpack-go

The Go one, in particular, is not baked into the platform (one must
set BUILDPACK_URL to use it, and it downloads its own preferred
version of the compiler) and yet does what it needs to do in about 50
lines of not-very-dense bash -- downloads and installs the compiler
and dependencies , and that's it.  There is nothing particularly
'cloudy' about these, and the most simple Racket buildpack would do
little more than download Racket, or maybe run raco distribute.  I
came to this list because it appears to me that such a distributed
binary would download dependencies on the fly per invocation of the
Racket program, and that would be a lousy property for the software
being written, and could also have a negative impact on PlaneT as an
infrastructure (it also might just not work, depending if writes were
attempted to a read-only part of the file system).  I also wanted to
seek out idioms already in the wild for handling this problem.

I do not see this as a cloud problem, but rather a tooling or
communication gap in packaging and distributing Racket applications
that make use of anything except libraries included in the Racket
distribution.

-- 
fdr

_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies and racket

2011-12-30 Thread Daniel Farina
On Thu, Dec 29, 2011 at 8:07 PM, Robby Findler
ro...@eecs.northwestern.edu wrote:
 I think that a minor variation on Neil's strategy should not be too
 difficult to do (but I'll certainly agree that it is not an ideal
 situation). What you'd do is first just download (via the Bam method
 below :) the planet packages you want. Then, if you look inside this
 directory:

   (build-path (find-system-path 'addon-dir)
               planet
               300)

 you should find some files with extensions .plt. Re-build that same
 portion of the directory structure to contain those files in the
 deployment environment, and then set the PLTPLANETURL environment
 variable to something bogus.


That looks like a pretty reasonable way to get started. Thanks for
telling me about the build-path and find-system-path operators, and
the bogusifying of the PLT URL to prevent accidental hammering.

 Also, FWIW, I maintain, in the weakest sense of the word, the current
 planet service. (All I really do is react to emergencies that break
 things.) Jay and Eli are looking into a whole new thing and have been
 talking about it for more than a year, I believe, so hopefully plans
 are firming up. Their system should be able to support this kind of
 use-case much more effectively. I think that kind of thing is designed
 in for them.

I'd be interested in reading their current thoughts.  Having used now
a small stable of dependency management systems, my favorite, by far,
is bundler for Ruby.  It can handle upgrades, version pinning,
allowing for auditing in upgrades of packages, preventing an executed
program from using libraries that are not in its manifest (to prevent
'accidental' dependency), bin-directory generation for packages that
install command line programs, and it will transitively consider all
version requirements of all libraries to try and select the latest
version -- should any one version exist -- that can satisfy all the
constraints.  Above all, it does that without being burdensome to use
or understand.

One could do worse than implementing the same thing, but for Racket.

-- 
fdr

_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] dependencies and racket

2011-12-29 Thread Neil Van Dyke

Daniel Farina wrote at 12/29/2011 07:59 PM:

The goal is that a program written, say, three
years ago should be able to run the same way it did when it was
written, so it's really useful to freeze all the dependencies into the
file system somehow and preserve it.
   


Someone else can comment on any automated ways of ``compiling in'' 
PLaneT packages, and solutions like that.


A so-so solution I *don't* recommend... If you preserved the exact 
PLaneT linkage table, and were very careful, then I think you could 
preserve the exact versions of PLaneT modules used (required directly, 
and indirectly).  This assumes either: (1) integrity of the PLaneT 
server, and trust in your connection to it; or (2) preservation of the 
pertinent parts of ~/.racket.  Then you'd want to disable attempts to 
access the PLaneT server.  Perhaps, if you were to automate this, it 
could be done safely and reliably.


Something that has been done for a large Racket-based Web app on 
production servers is to manually determine all the PLaneT packages that 
are used, downloaded and extract these packages (in a directory scheme 
that preserves naming and version info), check it all into their 
configuration management system, change all the PLaneT module references 
to filesystem ones, check it into CM again, and audit.  PLaneT server 
access is always blocked, except for the manual download.  You can make 
simple tools to help automate the more mechanical parts of this (I don't 
know of any such tools publicly available at this time), but the audit 
is mostly human expertise-intensive.  This  cloning of PLaneT packages 
is not something that most people need to do, and it totally spoils the 
buzz of ``I'll just add a (require (planet ...)) and bam!,'' but it's 
not too hard to do if you choose to.


PLaneT isn't my baby (I think Jay and Eli are leading it right now), but 
I'm looking into funding so that I can put solid chunks of time into 
helping with ways to improve PLaneT security.  Security is usually a 
constant consideration in my Internet consulting work.  Part of this 
tentative work will address your concerns about stability, and (in my 
current thinking) about having the option of removing PLaneT server 
dependencies for an app.  Much of this work has implications for some 
other network software distribution methods, so PLaneT is both a 
research testbed and an early practical beneficiary (much like Racket in 
general).  Stay tuned (I have a lot more experience in solving problems 
than in writing research grant proposals).


--
http://www.neilvandyke.org/

_
 Racket Developers list:
 http://lists.racket-lang.org/dev