Re: [racket-dev] snapshot builds

2013-07-20 Thread Robby Findler
FWIW, there is now a similar page running at Northwestern:

  http://plt.eecs.northwestern.edu/snapshots/

Robby


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

 Here's a rough cut at a snapshot build with the new package
 organization:

   http://www.cs.utah.edu/plt/snapshots/20130702-c90365e/

 While there are plenty of rough edges, enough is in place to show how I
 see distributions and packages working with the new organization.

 The snapshot page has

  * Racket installers with the usual stuff: DrRacket, HtDP support,
etc.

  * Minimal Racket installers for just the core build.

 Each Minimal installer is configured to refer back to the snapshot site
 for package installations; each package that is included in the
 distribution is available from the snapshot site in pre-built form. (If
 a package is not available from the snapshot site, then a package
 search will continue with pkg.racket-lang.org, etc.)

 For example, starting with with a Minimal installation and running
 `raco pkg install -i --deps search-auto gui' gets you `racket/gui' in
 compiled form (in about 1 minute on my machine), along with the
 necessary native libraries, the `gracket' launcher, documentation, and
 so on.

  [Using `-u' or `-s' doesn't yet work, because the installation-wide
   catalog configuration is not used as the default for `-u' or `-s'.
   I'll fix that.]

 After installing `gui', then `raco pkg install -i --deps search-auto
 drracket' gets you DrRacket (in about 30 seconds).

  [Unfortunately, the `drraccket' step also deletes some documentation
   that was installed by the `gui' step, so I have more work to do
   there, too.]


 I image that releases will ultimately work the same way: installers
 will be configured to start with a catalog server that provides
 pre-built packages compatible with the release --- and those packages
 will be the responsibility of the distribution server, not
 pkg.racket-lang.org.

 The set of packages available in pre-built form need not be just the
 ones in a distribution. The choice of available pre-built packages is
 separate from the choice of packages into include in a distribution, so
 pre-built packages can be available and useful for a Racket installer
 as well as a Minimal Racket installer. I expect that our release and
 snapshot sites will provide pre-built versions of all ring-0 packages.

  [A piece that's missing: online documentation as a fall-back for
   installed documentation. For example, suppose you install gui,
   search installed documentation for WXME, go to the WXME Decoding
   section, find htdp on that page, and click `htdp/image'. Then, you
   get a link that goes back to the snapshot site (because you don't
   have the relevant package installed), which is as intended. But the
   link doesn't yet give you documentation.]


 I expect to make

   http://www.cs.utah.edu/plt/snapshots/

 updated daily or so with a new snapshot (and a front page that points
 to the latest snapshot). Each snapshot will be available for some
 amount of time (a week?) to serve packages before it is removed.

 That's not to say that www.cs.utah.edu will be home to the main
 PLT-provided snapshots, but I imagine that it will be around as an
 option. The process is designed to make it as easy as possible set up
 extra snapshot sites.

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

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


Re: [racket-dev] snapshot builds

2013-07-11 Thread Robby Findler
On Fri, Jul 5, 2013 at 7:55 PM, Matthew Flatt mfl...@cs.utah.edu wrote:

 From now on, the current snapshot build on www.cs.utah.edu will be at

   http://www.cs.utah.edu/plt/snapshots/

 (The latest snapshot does not yet fix the aces.png error that Sam
 reported.)


 If anyone else is interested in creating snapshots, I think the
 makefile and instructions are ready to try out.

 The INSTALL.txt file now has detailed information on site
 configurations, including some example configuration files as the end.
 As one more example, below is the configuration file for the snapshots
 at www.cs.utah.edu.

 

 #lang distro-build/config
 (require racket/format)

 (define server-base-url (~a http://www.cs.utah.edu/plt/snapshots;
 / (current-stamp) /))
 (define build-plt (path-string (current-directory)))

 (define (make-machs make-name base pkgs)
   (sequential
#:server 192.168.56.1
#:j 2
#:dist-base base
#:pkgs pkgs
;; 
;; Mac OS X variants:
(sequential
 #:server localhost
 #:repo build-plt
 ;; 
 (machine
  #:name (make-name Mac OS X Intel 64-bit)
  #:dir (string-append build-plt /build/mac64)
  #:configure '(--enable-sdk6=/Developer/SDKs/MacOSX10.6.sdk))
 ;; 
 (machine
  #:name (make-name Mac OS X Intel 32-bit)
  #:dir (string-append build-plt /build/mac32)
  #:configure '(--enable-sdk=/Developer/SDKs/MacOSX10.4u.sdk
--disable-mac64)))
;; 
;; Linux variants:
(sequential
 ;; 
 (machine
  #:name (make-name Linux x86_64 32-bit, Precise Pangolin)


Should the line above say 64-bit?


  #:vbox ubuntu64
  #:host 192.168.56.101
  #:dist-suffix precise)
 ;; 
 (machine
  #:name (make-name Linux i386 32-bit, Precise Pangolin)
  #:vbox ubuntu32
  #:host 192.168.56.102
  #:dist-suffix precise))
;; 
;; Windows variants:
(sequential
 #:vbox win7
 #:host 192.168.56.103
 #:port 2022
 #:platform 'windows
 #:bits 64
 ;; 
 (machine
  #:name (make-name Windows x64 64-bit)
  #:dir c:\\Users\\Dr Racket\\build64)
 ;; 
 (machine
  #:name (make-name Windows x86 32-bit)
  #:dir c:\\Users\\Dr Racket\\build32
  #:vc x86

 (define ((make-make-name s) platform detail)
   (string-append s  |  platform  |  detail))

 (sequential
  #:dist-base-url server-base-url
  #:site-dest (build-path /Users/racket/snapshots (current-stamp))
  (make-machs
   (make-make-name Minimal Racket)
   min-racket
   '())
  (sequential
   #:clean? #f
   (make-machs
(make-make-name Racket)
racket
'(main-distribution

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

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


Re: [racket-dev] snapshot builds

2013-07-11 Thread Matthew Flatt
At Thu, 11 Jul 2013 19:10:20 -0500, Robby Findler wrote:
 On Fri, Jul 5, 2013 at 7:55 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
   #:name (make-name Linux x86_64 32-bit, Precise Pangolin)
 
 
 Should the line above say 64-bit?

Yes.

I also changed the platform descriptions a little (before the most
recent snapshot), so here's my latest configuration file, in case it's
useful.



#lang distro-build/config
(require racket/format)

(define server-base-url (~a http://www.cs.utah.edu/plt/snapshots;
/ (current-stamp) /))
(define build-plt (path-string (current-directory)))

(define (make-machs make-name base pkgs)
  (sequential
   #:server 192.168.56.1
   #:dist-base base
   #:pkgs pkgs
   ;; 
   ;; Mac OS X variants:
   (sequential
#:server localhost
#:repo build-plt
#:j 2
;; 
(machine
 #:name (make-name Mac OS X 64-bit Intel)
 #:dir (string-append build-plt /build/mac64)
 #:configure '(--enable-sdk6=/Developer/SDKs/MacOSX10.6.sdk))
;; 
(machine
 #:name (make-name Mac OS X 32-bit Intel)
 #:dir (string-append build-plt /build/mac32)
 #:configure '(--enable-sdk=/Developer/SDKs/MacOSX10.4u.sdk
   --disable-mac64)))
   ;; 
   ;; Linux variants:
   (sequential
;; 
(machine
 #:name (make-name Linux 64-bit x86_64, Precise Pangolin)
 #:vbox ubuntu64
 #:host 192.168.56.101
 #:dist-suffix precise)
;; 
(machine
 #:name (make-name Linux 32-bit i386, Precise Pangolin)
 #:vbox ubuntu32
 #:host 192.168.56.102
 #:dist-suffix precise))
   ;; 
   ;; Windows variants:
   (sequential
#:vbox win7
#:host 192.168.56.103
#:port 2022
#:platform 'windows
#:bits 64
;; 
(machine
 #:name (make-name Windows 64-bit x64)
 #:dir c:\\Users\\Dr Racket\\build64)
;; 
(machine
 #:name (make-name Windows 32-bit x86)
 #:dir c:\\Users\\Dr Racket\\build32
 #:vc x86

(define ((make-make-name s) platform detail)
  (string-append s  |  platform  |  detail))

(sequential
 #:dist-base-url server-base-url
 #:site-dest (build-path /Users/racket/snapshots (current-stamp))
 (make-machs
  (make-make-name Minimal Racket)
  min-racket
  '())
 (sequential
  #:clean? #f
  (make-machs
   (make-make-name Racket)
   racket
   '(main-distribution


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


Re: [racket-dev] snapshot builds

2013-07-10 Thread Matthew Flatt
At Thu, 4 Jul 2013 12:24:42 -0400, Sam Tobin-Hochstadt wrote:
 On Tue, Jul 2, 2013 at 3:40 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
  Here's a rough cut at a snapshot build with the new package
  organization:
 
http://www.cs.utah.edu/plt/snapshots/20130702-c90365e/
 
 The latest snapshots (32 and 64 bit) seem to work for me on multiple
 Linux machines.
 
 However, when I run 'raco setup' in the full snapshot, I get errors like:
 
 copy-file: cannot open source file
   source path: 
 /Users/racket/build/plt/build/user/5.3.900.3/pkgs/games/aces/aces.png

This problem is fixed in the latest snapshot (finally).

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


Re: [racket-dev] snapshot builds

2013-07-06 Thread Matthew Flatt
At Fri, 5 Jul 2013 21:02:40 -0400, Sam Tobin-Hochstadt wrote:
 On Fri, Jul 5, 2013 at 8:55 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
  From now on, the current snapshot build on www.cs.utah.edu will be at
 
http://www.cs.utah.edu/plt/snapshots/
 
  (The latest snapshot does not yet fix the aces.png error that Sam
  reported.)
 
 Would it be possible to have the most recent snapshot at a link that
 doesn't depend on the date/commit hash, for more permanently linking?

The page

  http://www.cs.utah.edu/plt/snapshots/

now links to installers through a current link (which is a symlink to
the current snapshot directory on the server side). Is that what you
had in mind?

  If anyone else is interested in creating snapshots, I think the
  makefile and instructions are ready to try out.
 
  The INSTALL.txt file now has detailed information on site
  configurations, including some example configuration files as the end.
  As one more example, below is the configuration file for the snapshots
  at www.cs.utah.edu.
 
 Might it be useful to split this into a separate text file?
 INSTALL.txt is quite long now.

Ok, I moved that information to pkgs/distro-build/doc.txt.

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


Re: [racket-dev] snapshot builds

2013-07-06 Thread Sam Tobin-Hochstadt
On Sat, Jul 6, 2013 at 3:06 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
 At Fri, 5 Jul 2013 21:02:40 -0400, Sam Tobin-Hochstadt wrote:
 On Fri, Jul 5, 2013 at 8:55 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
  From now on, the current snapshot build on www.cs.utah.edu will be at
 
http://www.cs.utah.edu/plt/snapshots/
 
  (The latest snapshot does not yet fix the aces.png error that Sam
  reported.)

 Would it be possible to have the most recent snapshot at a link that
 doesn't depend on the date/commit hash, for more permanently linking?

 The page

   http://www.cs.utah.edu/plt/snapshots/

 now links to installers through a current link (which is a symlink to
 the current snapshot directory on the server side). Is that what you
 had in mind?

Yes, exactly. Thanks!

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


Re: [racket-dev] snapshot builds

2013-07-05 Thread Matthew Flatt
From now on, the current snapshot build on www.cs.utah.edu will be at

  http://www.cs.utah.edu/plt/snapshots/

(The latest snapshot does not yet fix the aces.png error that Sam
reported.)


If anyone else is interested in creating snapshots, I think the
makefile and instructions are ready to try out.

The INSTALL.txt file now has detailed information on site
configurations, including some example configuration files as the end.
As one more example, below is the configuration file for the snapshots
at www.cs.utah.edu.



#lang distro-build/config
(require racket/format)

(define server-base-url (~a http://www.cs.utah.edu/plt/snapshots;
/ (current-stamp) /))
(define build-plt (path-string (current-directory)))

(define (make-machs make-name base pkgs)
  (sequential
   #:server 192.168.56.1
   #:j 2
   #:dist-base base
   #:pkgs pkgs
   ;; 
   ;; Mac OS X variants:
   (sequential
#:server localhost
#:repo build-plt
;; 
(machine
 #:name (make-name Mac OS X Intel 64-bit)
 #:dir (string-append build-plt /build/mac64)
 #:configure '(--enable-sdk6=/Developer/SDKs/MacOSX10.6.sdk))
;; 
(machine
 #:name (make-name Mac OS X Intel 32-bit)
 #:dir (string-append build-plt /build/mac32)
 #:configure '(--enable-sdk=/Developer/SDKs/MacOSX10.4u.sdk
   --disable-mac64)))
   ;; 
   ;; Linux variants:
   (sequential
;; 
(machine
 #:name (make-name Linux x86_64 32-bit, Precise Pangolin)
 #:vbox ubuntu64
 #:host 192.168.56.101
 #:dist-suffix precise)
;; 
(machine
 #:name (make-name Linux i386 32-bit, Precise Pangolin)
 #:vbox ubuntu32
 #:host 192.168.56.102
 #:dist-suffix precise))
   ;; 
   ;; Windows variants:
   (sequential
#:vbox win7
#:host 192.168.56.103
#:port 2022
#:platform 'windows
#:bits 64
;; 
(machine
 #:name (make-name Windows x64 64-bit)
 #:dir c:\\Users\\Dr Racket\\build64)
;; 
(machine
 #:name (make-name Windows x86 32-bit)
 #:dir c:\\Users\\Dr Racket\\build32
 #:vc x86

(define ((make-make-name s) platform detail)
  (string-append s  |  platform  |  detail))

(sequential
 #:dist-base-url server-base-url
 #:site-dest (build-path /Users/racket/snapshots (current-stamp))
 (make-machs
  (make-make-name Minimal Racket)
  min-racket
  '())
 (sequential
  #:clean? #f
  (make-machs
   (make-make-name Racket)
   racket
   '(main-distribution

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


Re: [racket-dev] snapshot builds

2013-07-05 Thread Sam Tobin-Hochstadt
On Fri, Jul 5, 2013 at 8:55 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
 From now on, the current snapshot build on www.cs.utah.edu will be at

   http://www.cs.utah.edu/plt/snapshots/

 (The latest snapshot does not yet fix the aces.png error that Sam
 reported.)

Would it be possible to have the most recent snapshot at a link that
doesn't depend on the date/commit hash, for more permanently linking?

 If anyone else is interested in creating snapshots, I think the
 makefile and instructions are ready to try out.

 The INSTALL.txt file now has detailed information on site
 configurations, including some example configuration files as the end.
 As one more example, below is the configuration file for the snapshots
 at www.cs.utah.edu.

Might it be useful to split this into a separate text file?
INSTALL.txt is quite long now.

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


Re: [racket-dev] snapshot builds

2013-07-04 Thread Matthew Flatt
At Thu, 4 Jul 2013 01:24:01 -0400, Asumu Takikawa wrote:
 On 2013-07-03 22:56:16 -0600, Matthew Flatt wrote:
  The 32-bit Windows Racket installer works for me, this time --- but the
  Mac OX X builds seem completely broken.
 
 Thanks, this time I was able to get DrRacket from the installer.
 
 BTW, one thing that seems broken is if I go to the package manager and click
 on Installl from List, I get the following internal error:
 
   get-all-pkg-details-from-catalogs: bad response from server

This is fixed in the latest snapshot, along with the Mac OS X builds:

  http://www.cs.utah.edu/plt/snapshots/20130704-22aeed5/


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


Re: [racket-dev] snapshot builds

2013-07-04 Thread Sam Tobin-Hochstadt
On Tue, Jul 2, 2013 at 3:40 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
 Here's a rough cut at a snapshot build with the new package
 organization:

   http://www.cs.utah.edu/plt/snapshots/20130702-c90365e/

The latest snapshots (32 and 64 bit) seem to work for me on multiple
Linux machines.

However, when I run 'raco setup' in the full snapshot, I get errors like:

copy-file: cannot open source file
  source path: 
/Users/racket/build/plt/build/user/5.3.900.3/pkgs/games/aces/aces.png
  destination path:
/home/samth/tmp/rt/racket-5.3.900.3/add-on/5.3.900.3/doc/search/aces.png
 system error: No such file or directory; errno=2
  context...:
   
/home/samth/tmp/rt/racket-5.3.900.3/lib/pkgs/scribble-lib/scribble/base-render.rkt:881:4:
core669
   
/home/samth/tmp/rt/racket-5.3.900.3/lib/pkgs/scribble-lib/scribble/html-render.rkt:1085:4:
render-content method in ...bble/html-render.rkt:217:2
   
/home/samth/tmp/rt/racket-5.3.900.3/lib/pkgs/scribble-lib/scribble/html-render.rkt:1248:4:
render-plain-content method in ...bble/html-render.rkt:217:2
   
/home/samth/tmp/rt/racket-5.3.900.3/lib/pkgs/scribble-lib/scribble/base-render.rkt:847:4:
render-content method in render%

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


Re: [racket-dev] snapshot builds

2013-07-04 Thread Matthew Flatt
At Thu, 4 Jul 2013 12:24:42 -0400, Sam Tobin-Hochstadt wrote:
 On Tue, Jul 2, 2013 at 3:40 PM, Matthew Flatt mfl...@cs.utah.edu wrote:
  Here's a rough cut at a snapshot build with the new package
  organization:
 
http://www.cs.utah.edu/plt/snapshots/20130702-c90365e/
 
 The latest snapshots (32 and 64 bit) seem to work for me on multiple
 Linux machines.
 
 However, when I run 'raco setup' in the full snapshot, I get errors like:
 
 copy-file: cannot open source file
   source path: 
 /Users/racket/build/plt/build/user/5.3.900.3/pkgs/games/aces/aces.png
   destination path:
 /home/samth/tmp/rt/racket-5.3.900.3/add-on/5.3.900.3/doc/search/aces.png
  system error: No such file or directory; errno=2
   context...:

Ok, I see that, too --- yet another place that needs to be generalized
for paths that used to be relative to collects.

Thanks!

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


Re: [racket-dev] snapshot builds

2013-07-03 Thread Asumu Takikawa
On 2013-07-02 13:40:18 -0600, Matthew Flatt wrote:
 The snapshot page has

  * Racket installers with the usual stuff: DrRacket, HtDP support,
etc.

I tried the Racket Windows installer, but AFAICT it's missing DrRacket
and other libraries.

  $ sha1sum.exe /home/asumu/racket-5.3.900.3-i386-win32.exe
  5ba5331efbc0d8d0443dce795f1da045a24a4c21i/

  $ ls
  doc  etc  include  lib  man  Racket.exe  raco.exe  Uninstall.exe

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


Re: [racket-dev] snapshot builds

2013-07-03 Thread Matthew Flatt
At Wed, 3 Jul 2013 16:49:01 -0400, Asumu Takikawa wrote:
 On 2013-07-02 13:40:18 -0600, Matthew Flatt wrote:
  The snapshot page has
 
   * Racket installers with the usual stuff: DrRacket, HtDP support,
 etc.
 
 I tried the Racket Windows installer, but AFAICT it's missing DrRacket
 and other libraries.

Thanks for trying the installer!

My configuration file was wrong, so that the Racket installers had
the same content as the Minimal Racket ones.

A new snapshot is here:

  http://www.cs.utah.edu/plt/snapshots/20130703-d2ddfc0/

The 32-bit Windows Racket installer works for me, this time --- but the
Mac OX X builds seem completely broken.

I'll try again tomorrow.

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


Re: [racket-dev] snapshot builds

2013-07-03 Thread Asumu Takikawa
On 2013-07-03 22:56:16 -0600, Matthew Flatt wrote:
 The 32-bit Windows Racket installer works for me, this time --- but the
 Mac OX X builds seem completely broken.

Thanks, this time I was able to get DrRacket from the installer.

BTW, one thing that seems broken is if I go to the package manager and click
on Installl from List, I get the following internal error:

  get-all-pkg-details-from-catalogs: bad response from server
url: 
http://www.cs.utah.edu/plt/snapshots/20130703-d2ddfc0/catalog/pkgs-all?version=5.3.900.3
response: #f
context...:
 C:\Program Files\Racket-5.3.900.3\lib\collects\pkg\lib.rkt:2008:2: for-loop
 C:\Program 
Files\Racket-5.3.900.3\lib\pkgs\drracket\pkg\gui\by-list.rkt:321:9: for-loop

I can't seem to reproduce it the same way anymore, but it also happens if I
click Update Package List.

Also, thanks for setting this up!

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


[racket-dev] snapshot builds

2013-07-02 Thread Matthew Flatt
Here's a rough cut at a snapshot build with the new package
organization:

  http://www.cs.utah.edu/plt/snapshots/20130702-c90365e/

While there are plenty of rough edges, enough is in place to show how I
see distributions and packages working with the new organization.

The snapshot page has

 * Racket installers with the usual stuff: DrRacket, HtDP support,
   etc.

 * Minimal Racket installers for just the core build.

Each Minimal installer is configured to refer back to the snapshot site
for package installations; each package that is included in the
distribution is available from the snapshot site in pre-built form. (If
a package is not available from the snapshot site, then a package
search will continue with pkg.racket-lang.org, etc.)

For example, starting with with a Minimal installation and running
`raco pkg install -i --deps search-auto gui' gets you `racket/gui' in
compiled form (in about 1 minute on my machine), along with the
necessary native libraries, the `gracket' launcher, documentation, and
so on.

 [Using `-u' or `-s' doesn't yet work, because the installation-wide
  catalog configuration is not used as the default for `-u' or `-s'.
  I'll fix that.]

After installing `gui', then `raco pkg install -i --deps search-auto
drracket' gets you DrRacket (in about 30 seconds).

 [Unfortunately, the `drraccket' step also deletes some documentation
  that was installed by the `gui' step, so I have more work to do
  there, too.]


I image that releases will ultimately work the same way: installers
will be configured to start with a catalog server that provides
pre-built packages compatible with the release --- and those packages
will be the responsibility of the distribution server, not
pkg.racket-lang.org.

The set of packages available in pre-built form need not be just the
ones in a distribution. The choice of available pre-built packages is
separate from the choice of packages into include in a distribution, so
pre-built packages can be available and useful for a Racket installer
as well as a Minimal Racket installer. I expect that our release and
snapshot sites will provide pre-built versions of all ring-0 packages.

 [A piece that's missing: online documentation as a fall-back for
  installed documentation. For example, suppose you install gui,
  search installed documentation for WXME, go to the WXME Decoding
  section, find htdp on that page, and click `htdp/image'. Then, you
  get a link that goes back to the snapshot site (because you don't
  have the relevant package installed), which is as intended. But the
  link doesn't yet give you documentation.]


I expect to make

  http://www.cs.utah.edu/plt/snapshots/

updated daily or so with a new snapshot (and a front page that points
to the latest snapshot). Each snapshot will be available for some
amount of time (a week?) to serve packages before it is removed.

That's not to say that www.cs.utah.edu will be home to the main
PLT-provided snapshots, but I imagine that it will be around as an
option. The process is designed to make it as easy as possible set up
extra snapshot sites.

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