Giter Site home page Giter Site logo

isolate's Introduction

Isolate

home

github.com/jbarnette/isolate

Description

Isolate is a very simple RubyGems sandbox. It provides a way to express and automatically install your project’s Gem dependencies.

Wha?

When Isolate runs, it uses GEM_HOME, GEM_PATH, and a few other tricks to separate your code from the system’s RubyGems configuration, leaving it free to run in blissful solitude.

Isolate is very, very, very stupid simple. For a much more full-featured Gem bundler, check out Yehuda Katz and Carl Lerche’s Bundler: It does a lot of fancy AOT dependency resolution, supports non-gem (including git) resources, and is probably a better fit for you.

Requirements

RubyGems 1.8.2 or better, Ruby 1.8.7 or better.

Getting Started

Rails 2

In config/preinitializer.rb:

require "rubygems"
require "isolate/now"

In Isolate:

gem "rails", "2.3.5"
gem "aasm",  "2.0.0"

env :development, :test do
  gem "sqlite3-ruby", "1.2.5"
end

env :production do
  gem "memcached", "0.19.2"
end

Try running rake environment. Before anything else happens, Isolate will make sure you have copies of every gem you need (extend the example above to cover all your dependencies). If they’re already installed on your system Isolate will use them, otherwise a private copy will be installed under tmp/isolate.

Rails 3

In config/boot.rb:

require "rubygems"
require "isolate/now"

Construct your Isolate file as above. Be sure to remove any references to Bundler.setup and Bundler.require from config/boot.rb and config/application.rb.

Don’t forget to require files from your isolated gems in the appropriate places. Unlike bundler isolate does not automatically require any files.

Sinatra, Rack, and Anything Else

There’s nothing special about Rails, it’s just an easy first example. You can use Isolate with any library or framework by simply putting an Isolate file in the root of your project and requiring isolate/now as early as possible in the startup process.

When you’re starting up, Isolate tries to determine its environment by looking at the ISOLATE_ENV, RACK_ENV, and RAILS_ENV env vars. If none are set, it defaults to development.

Library Development

If you’re using Hoe to manage your library, you can use Isolate’s Hoe plugin to automatically install your lib’s development, runtime, and test dependencies without polluting your system RubyGems, and run your tests/specs in total isolation.

Assuming you have a recent Hoe and Isolate is installed, it’s as simple as putting:

Hoe.plugin :isolate

before the Hoe.spec call in your Rakefile.

If you’re not using Hoe, you can use an Isolate.now! block at the top of your Rakefile. See the RDoc for details.

Rake

Isolate provides a few useful Rake tasks. If you’re requiring isolate/now, you’ll get them automatically when you run Rake. If not, you can include them by requiring isolate/rake.

isolate:env

This task shows you the current Isolate settings and gems.

$ rake isolate:env

     path: tmp/isolate/ruby-1.8
      env: development
    files: Isolate

  cleanup? true
  enabled? true
  install? true
multiruby? true
   system? true
  verbose? true

[all environments]
gem rails, = 2.3.5
gem aasm, = 2.0.0

[development, test]
gem sqlite3-ruby, = 1.2.5

[production]
gem memcached, = 0.19.2

isolate:sh

This task allows you to run a subshell or a command in the isolated environment, making any command-line tools available on your PATH.

# run a single command in an isolated subshell
$ rake isolate:sh['gem list']

# run a new isolated subshell
$ rake isolate:sh

isolate:stale

This task lists gems that have a more recent released version than the one you’re using.

$ rake isolate:stale
aasm (2.0.0 < 2.1.5)

Further Reading

require "isolate/now" is sugar for Isolate.now!, which creates, configures, and activates a singleton version of Isolate’s sandbox. Isolate.now! takes a few useful options, and lets you define an entire environment inline without using an external file.

For detailed information on Isolate.now! and the rest of the public API, please see the RDoc.

Not Gonna Happen

  • Autorequire. Unlike config.gems or other solutions, Isolate expects you to be a good little Rubyist and manually require the libraries you use.

  • Support for Git or other SCMs. You’re welcome to write an extension that supports ‘em, but Isolate itself is focused on packaged, released gems.

Installation

$ gem install isolate

Meta

RDoc

rubydoc.info/gems/isolate/frames

Bugs

github.com/jbarnette/isolate/issues

IRC

#isolate on Freenode

Mailing List

[email protected]

License

Copyright 2009-2010 John Barnette, et al. ([email protected])

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ‘Software’), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

isolate's People

Contributors

drbrain avatar jbarnette avatar jcast avatar jcasts avatar luislavena avatar rhburrows avatar semaperepelitsa avatar zenspider avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

isolate's Issues

Replacing Bundler with Isolate

Hi, first of all, nice job!

This "issue" is just to tell you that may be you could add to the readme, in the Rails 3 section, that you need to require all the gems before the Application block, in the config/application.rb

I am using a separate requires.rb file, and I am calling it like this:

# application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require File.expand_path('../dependencies', __FILE__)
# ...

It took me a while to come up with a solution, but Jose Valim pointed it out to me, so I thought it was important to tell you about it.

Thanks for all the good work.

Lucas Efe

will_paginate gem dependency issue

Has anyone had success getting will_paginate to work with Isolate and Rails 2.3.5?

I have the following listed in my Isolate file:

gem "will_paginate", "2.3.11"

And I get the following error:
NoMethodError (undefined method `paginate' for #Class:0x104a8d068):

I've also tried using the will_paginate version 2.3.15 with no success.

How to with Heroku?

Hi, heroku supports Bundler's Gemfile with rails apps.
Is this supported on heroku as well?

Isolate is no longer able to nuke gems if available in system gems

Scenario: define a Isolate file that contains a gem not available in your system gems.

do not disable system gems either in Isolate or the user-wide setting.

Allow isolate install the gem, see [1/1] Isolating ...

Now install the gem in your system installation, and start the application with isolate again.

There is no Nuking with 3.1.0 version.

failed test (rake version) on fresh checkout

$ ruby --version
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
$ rake --version
rake, version 0.9.2.2
$ rake
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -w -Ilib:bin:test:. -e 'require "rubygems"; gem "minitest"; require "minitest/autorun"; require "test/test_isolate.rb"; require "test/test_isolate_entry.rb"; require "test/test_isolate_events.rb"; require "test/test_isolate_sandbox.rb"' -- 
Run options: --seed 31197

# Running tests:

.............................F....

Finished tests in 0.111886s, 303.8807 tests/s, 983.1436 assertions/s.

  1) Failure:
test_cleanup_redundant(TestIsolateSandbox) [./test/test_isolate_sandbox.rb:156]:
--- expected
+++ actual
@@ -1 +1 @@
-[["hoe", "2.3.3", "test/fixtures/with-hoe"], ["rake", "0.8.7", "test/fixtures/with-hoe"], ["rubyforge", "1.0.4", "test/fixtures/with-hoe"]]
+[["hoe", "2.3.3", "test/fixtures/with-hoe"], ["rubyforge", "1.0.4", "test/fixtures/with-hoe"]]


34 tests, 110 assertions, 1 failures, 0 errors, 0 skips
rake aborted!
Command failed with status (1): [/System/Library/Frameworks/Ruby.framework/...]

Tasks: TOP => default => test
(See full trace by running task with --trace)
$ 

Add isolate:env task

Print the env, options, path, contributing files, and merged set of gems/environments

rake isolate:sh doesn't work as expected

Hi, when I'm running some gem executables using rake isolate:sh I expect them to be in the isolated version. But they are in the latest version:

$ rails -v
Rails 3.2.3
$ rails _3.2.2_ -v
Rails 3.2.2
$ rake isolate:env

     path: tmp/isolate/ruby-1.9.1
      env: development
    files: Isolate

  cleanup? true
  enabled? true
  install? true
multiruby? true
   system? true
  verbose? true

[all environments]
gem rails, = 3.2.2

$ rake isolate:sh['rails -v']
Rails 3.2.3

Isolate 3.0.0 does not function properly with RubyGems 1.6.2

We've got a /Isolate manifest file whose gems and dependency gems get isolated perfectly with Isolate 3.0.0 and RubyGems 1.5.3.

When using Isolate 3.0.0 and RubyGems 1.6.2, we run into "Unable to resolve dependencies" errors. On the first pass we'll hit one of these. On the second pass, the original dependency issue gets sorted out and a new dependency issue is encountered, and so on.

I'm happy to provide additional info or run tests if it will help.

Support multiple Ruby version

Somebody finally needed to run Isolate locally, with a gem with a native component, under two different versions of Ruby. Support it.

RubyGems 1.7.x deprecation warnings

Hello, wanted to bring to attention some warnings from RubyGems 1.7.0 and 1.7.1 as shown when using Isolate:

NOTE: Gem::SourceIndex.from_gems_in is deprecated with no replacement. It will be removed on or after 2011-10-01.
Gem::SourceIndex.from_gems_in called from C:/Users/Luis/.gem/ruby/x86-mingw32/1.8/gems/isolate-3.1.0.pre.3/lib/isolate/sandbox.rb:210

I've tried to update the test but with latest RubyGems all tests blows up, so dunno where to start.

Heroku Gem Manifest is deprecated

Previously, the suggested way of using Isolate on Heroku was by generating Gem Manifest (#27). It is now deprecated and already not available on the most recent Cedar stack. And basically, all new Rails apps utilizing asset pipeline are only going to deploy flawlessly to Cedar.

The good news is that Cedar stack also has open-source buildpacks: https://github.com/heroku/heroku-buildpack-ruby. And you can make your own too.

I am wondering if somebody using Isolate is deploying Rails on Heroku nowadays or I am the only one interested in this.

rubygems 1.8.2

Why is rubygems 1.8.2 required? The latest versions of Rubygems are very loud and complainy. Are there specific methods you need or can we move that dependency to an earlier version without breaking it?

gem cleanup is overzealous w/ multiple environments.

Latest version does seem to have gotten overzealous tho in a multi-environment setting... Prolly best fixed by saying test env shouldn't clean up.

repro:

add a gem to development env, but not to test.
next run of rake will pull it in.
next run of the tests will delete it's dependencies.

I found this via capistrano. sigh

The test env kept deleting net-ssh and friends.

Isolate fails when trying to run it's test suite

I'm trying to run Isolate's test suite and I get the following error. Am I supposed to do something before I can run it?

% rake test --trace
** Invoke test (first_time)
** Invoke isolate (first_time)
** Execute isolate
[1/5] Isolating minitest (~> 2.1).
rake aborted!
Could not find json (~> 1.4) amongst []
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/specification.rb:451:in `block in find_in_unresolved'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/specification.rb:451:in `map'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/specification.rb:451:in `find_in_unresolved'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/custom_require.rb:43:in `require'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/remote_fetcher.rb:56:in `initialize'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/remote_fetcher.rb:41:in `new'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/remote_fetcher.rb:41:in `fetcher'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/spec_fetcher.rb:66:in `initialize'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/spec_fetcher.rb:43:in `new'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/spec_fetcher.rb:43:in `fetcher'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/dependency_installer.rb:110:in `find_gems_with_sources'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/dependency_installer.rb:228:in `find_spec_by_name_and_version'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rubygems/dependency_installer.rb:259:in `install'
/Users/sema/Code/isolate/lib/isolate/entry.rb:94:in `block in install'
/Users/sema/Code/isolate/lib/isolate/events.rb:37:in `fire'
/Users/sema/Code/isolate/lib/isolate/entry.rb:83:in `install'
/Users/sema/Code/isolate/lib/isolate/sandbox.rb:220:in `block in install'
/Users/sema/Code/isolate/lib/isolate/sandbox.rb:218:in `each'
/Users/sema/Code/isolate/lib/isolate/sandbox.rb:218:in `each_with_index'
/Users/sema/Code/isolate/lib/isolate/sandbox.rb:218:in `install'
/Users/sema/Code/isolate/lib/isolate/sandbox.rb:74:in `activate'
/Users/sema/Code/isolate/lib/hoe/isolate.rb:62:in `block in define_isolate_tasks'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:205:in `call'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:200:in `each'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:200:in `execute'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:176:in `block in invoke_prerequisites'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:174:in `each'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:174:in `invoke_prerequisites'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:157:in `block in invoke_with_call_chain'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/task.rb:144:in `invoke'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:94:in `each'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:88:in `top_level'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:66:in `block in run'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/Users/sema/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/rake/application.rb:63:in `run'
/Users/sema/.rbenv/versions/1.9.3-p0/bin/rake:32:in `<main>'
Tasks: TOP => test => isolate

Allow isolate:sh start a console in Windows too

When invoking isolate:sh rake task, it tries to use the provided command or default to ENV['SHELL']

In Windows, SHELL is not defined and an equivalent is named COMSPEC

Making isolate support it as fallback of SHELL could be awesome.

Thank you.

If started not in app root, Isolate file is ignored

If you start an app that uses Isolate and you're NOT chdir'ed to the app root, the Isolate file is silently ignored, and no errors are raised.

For example, if you have a server, say, /usr/local/myapp/bin/myserver, and it contains this:

#!/usr/bin/env ruby
require 'isolate/now'

And you just type /usr/local/myapp/bin/myserver from the command line, the Isolate file is ignored and you die on gem errors.

The effect is users have to remember to cd /usr/local/myapp && ./bin/myserver or else they get weird errors.

Shouldn't it be the case that isolate/now and Isolate.now! mean an Isolate file is required?

Cache Isolated Gems

Should cache the Isolated gems, and use the cache path as the default path to install gems from.

Improve Doco

Isolate.now! needs docs, period, and there needs to be a lot better sharing of info between the README and the rest of the RDoc.

Refactor Tests

The coverage isn't great, they're a bit slow, and they could use some cleanup.

:system => false should be the default

As Ryan says, otherwise it's not a sandbox. This would be a change for 3.x. Need to think about this a bit from the selfish viewpoint, since it makes Heroku deployments slightly more annoying (:system => true is required for pass-through).

Isolate block definitions are not displaying properly due incorrect regexp on Windows

Isolate records the block used by Isolate.now! and display it when using env rake task.

This works perfectly on unix environments where all the paths are separated by slashes and line numbers separated by colon.

The problem is Windows contain drive letter which also contains colons.

The regular expression used to detect the filename and discard the line number is discarding the whole thing, only leaving the drive letter.

Example:


# f.rake
require 'isolate'

Isolate.now! do
  puts "something"
end

require 'isolate/rake'

Results in the following:


something

     path: tmp/isolate/ruby-1.8
      env: development
    files: Isolate, C

Changing the regexp to /\@(.+?):\d+/ produces this:


something

     path: tmp/isolate/ruby-1.8
      env: development
    files: Isolate, f.rake

That regexp will perfectly catch both 1.8 and 1.9 either Windows or Linux.

Thank you.

Non-gem prereq helpers

Add a utility that requires the existence of a given executable (like ffmpeg) on PATH. Possibly just sugar for a general "abort unless this block evals true" utility.

Isolate > 3.0.0 and Capistrano > 2.6.0 cause strange gem dependency issues

Reproducible on Isolate 3.2.0, Capistrano 2.8.0, REE latest, Rubygems 1.8.10

If we upgrade either Isolate above the listed 3.0.0, we run into an issue where calling cap deploy ... will cause Isolate to run and nuke a number of gems, which then causes Isolate to throw dependency errors (Could not find transaction-simple (~> 1.3) amongst [...] for example).

I haven't dug into this too much, so I don't have a fix yet. I just wanted to document this here first to see if anyone else was having this issue.

isolate shouldn't pick up developer_deps

If I'm installing a package, it shouldn't bother installing the developer dependencies like:

extra_dev_deps << ["rspec", "> 0"]

Madness lies that way... Eventually the versions conflict for sure.

Isolate 3.0.1 attempts to nuke all my system gems

And luckily fails :-)

My Isolate file:

gem 'rake'
gem 'rspec', '~> 1.3.1'
gem 'cucumber', '~> 0.9.4'

unless RUBY_PLATFORM =~ /java/
  gem 'rcov', '~> 0.9.9'
end

Neither at the project level or my user's Isolate settings I'm excluding system gems, so when doing rake isolate:env by the first time, I get this:

C:\Users\Luis\Projects\oss\me\rake-compiler>rake isolate:env
(in C:/Users/Luis/Projects/oss/me/rake-compiler)
[1/2] Isolating rspec (~> 1.3.1).
Fetching: rspec-1.3.2.gem (100%)
[2/2] Isolating cucumber (~> 0.9.4).
Fetching: json-1.4.6.gem (100%)
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Fetching: gherkin-2.2.9-x86-mingw32.gem (100%)
Fetching: cucumber-0.9.4.gem (100%)

(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)

Thank you for installing cucumber-0.9.4.
Please be sure to read http://wiki.github.com/aslakhellesoy/cucumber/upgrading
for important information about this release. Happy cuking!

(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)

[001/282] Nuking POpen4-0.1.4.
rake aborted!
cannot uninstall, check `gem list -d POpen4`
C:/Users/Luis/.gem/ruby/x86-mingw32/1.8/gems/rake-0.8.7/lib/rake.rb:2383:in `raw_load_rakefile'
(See full trace by running task with --trace)

The important line: [001/282] Nuking POpen4-0.1.4.

Which funnily match the total number of gems I have installed :-)

Full backtrace:

https://gist.github.com/972236

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.