msanders / cider Goto Github PK
View Code? Open in Web Editor NEWHassle-free bootstrapping with Homebrew.
Home Page: https://pypi.python.org/pypi/cider/
License: MIT License
Hassle-free bootstrapping with Homebrew.
Home Page: https://pypi.python.org/pypi/cider/
License: MIT License
Here's the traceback:
$ cider cask missing ▸▸▸▸▸▸▸▸▸▸
Traceback (most recent call last):
File "/usr/local/bin/cider", line 9, in <module>
load_entry_point('cider==1.1.1', 'console_scripts', 'cider')()
File "/usr/local/lib/python2.7/site-packages/cider/_cli.py", line 217, in main
cli.main(standalone_mode=False)
File "/usr/local/lib/python2.7/site-packages/click/core.py", line 473, in main
with self.make_context(prog_name, args, **extra) as ctx:
File "/usr/local/lib/python2.7/site-packages/click/core.py", line 402, in make_context
ctx = Context(self, info_name=info_name, parent=parent, **extra)
TypeError: __init__() got an unexpected keyword argument 'standalone_mode'
Add example bootstrap.yaml
and defaults.yaml
files to README to demonstrate new syntax.
Cider shouldn't order packages alphabetically. Some packages might need to be installed ahead of others, for example, node & npm ahead of iojs.
Hi, thanks for your nice project.
I started cider and it crashed telling me that there is no file $HOME/.cider/bootstrap.json.
Please create the $HOME/.cider directory if it does not exist or output a hint for the user
so that one knows to create it. Sorry, if it's documented somewhere. I didn't find it.
Thanks
To run scripts for installing Homebrew, git, and every needed software.
Cider is a simple way of automating the configuration of brew and your favorite packages. Many of my favorite packages however don't live in default taps. A magnificent way to get around this problem would be to allow the automated addition of taps to the bootstrap.json. Cider automatically taps taps (hehe) in there first before installing the brews, so make it a little easier on us by adding this awesome feature (for lazy people with many taps).
~
❯ cider tap missing
caskroom/cask
caskroom/fonts
caskroom/unofficial
homebrew/apache
homebrew/binary
homebrew/completions
homebrew/dupes
homebrew/games
homebrew/php
homebrew/science
homebrew/versions
larsimmisch/avr
Detected new taps. Add them to the list? [y/N] y
Cider updated your taps.
Note that cider tap
already shows used taps (by acting as an alias for brew tap?)
Downloading/unpacking cider
Downloading cider-1.1.2.tar.gz
Running setup.py (path:/private/var/folders/4h/g8cpq3l174l6xrt_dsl8vl8c0000gn/T/pip_build_abach/cider/setup.py) egg_info for package cider
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/private/var/folders/4h/g8cpq3l174l6xrt_dsl8vl8c0000gn/T/pip_build_abach/cider/setup.py", line 61, in <module>
long_description=read_description(),
File "/private/var/folders/4h/g8cpq3l174l6xrt_dsl8vl8c0000gn/T/pip_build_abach/cider/setup.py", line 23, in read_description
with open("README.md") as f:
IOError: [Errno 2] No such file or directory: 'README.md'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/private/var/folders/4h/g8cpq3l174l6xrt_dsl8vl8c0000gn/T/pip_build_abach/cider/setup.py", line 61, in <module>
long_description=read_description(),
File "/private/var/folders/4h/g8cpq3l174l6xrt_dsl8vl8c0000gn/T/pip_build_abach/cider/setup.py", line 23, in read_description
with open("README.md") as f:
IOError: [Errno 2] No such file or directory: 'README.md'
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /private/var/folders/4h/g8cpq3l174l6xrt_dsl8vl8c0000gn/T/pip_build_abach/cider
Storing debug log for failure in /Users/abach/.pip/pip.log
Thanks!
Is there a way to automatically generate a backup file based on the current packages installed on my system?
Also, what is the difference between the cider
and cyder
command-line tools that get installed?
When trying to add regular brew packages to cider, it decides to stop, because brew does not have a formula for screen.
Isn't screen bundled with OSX? Anyway, maybe there was a formula for screen before, but got removed. Still, I have this error, which I don't know how to fix. ❯ cider cask missing
worked (fine).
~
❯ cider missing
Error: No available formula for screen
Whoops! `brew uses --installed --recursive screen` failed with code 1
~ 10s
❯ brew unlink
did not help either.
I had to remove screen and grep completely with ❯ brew remove
. After that it worked fine.
If I run cider restore
on a machine I've already restored, I get a bunch of warnings like "Warning: ack-2.14 already installed" which is a little annoying but doesn't impact behavior.
But if the current version of the formula is newer than what I have installed, I get an error:
Error: redis-2.8.17 already installed
To install this version, first `brew unlink redis'
Failed to install redis. Continue? [y/N] [y/N]:
This seems to be because cider is calling brew install
instead of brew upgrade
, which does what I would expect.
Following Runtime Error is encountered on trying unlink
~
❯ cider addlink iterm2profiles .iterm2profiles
Success! symlinked ~/.iterm2profiles -> ~/.cider/symlinks/iterm2profiles/.iterm2profiles
~
❯ cider unlink iterm2profiles
==> Moved ~/.cider/symlinks/iterm2profiles/.iterm2profiles -> ~/.iterm2profiles
Traceback (most recent call last):
File "/usr/local/bin/cider", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 251, in main
cli.main(standalone_mode=False)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 644, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 991, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 837, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 464, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/decorators.py", line 26, in new_func
return ctx.invoke(f, ctx.obj, *args[1:], **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 464, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 246, in unlink
cider.unlink(name)
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 661, in unlink
self.remove_symlink(name)
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 604, in remove_symlink
return self._modify_bootstrap("symlinks", transform)
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 116, in _modify_bootstrap
return modify_config(self.bootstrap_file, outer_transform)
File "/usr/local/lib/python3.7/site-packages/cider/_sh.py", line 214, in modify_config
contents = transform(copy.deepcopy(contents))
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 110, in outer_transform
bootstrap[key] = transform(bootstrap.get(key, fallback))
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 598, in transform
for key in symlinks.keys():
RuntimeError: dictionary changed size during iteration
~
❯ cider unlink iterm2profiles
Traceback (most recent call last):
File "/usr/local/bin/cider", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 251, in main
cli.main(standalone_mode=False)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 644, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 991, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 837, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 464, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/decorators.py", line 26, in new_func
return ctx.invoke(f, ctx.obj, *args[1:], **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 464, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 246, in unlink
cider.unlink(name)
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 659, in unlink
raise e
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 656, in unlink
os.rmdir(os.path.join(self.symlink_dir, name))
FileNotFoundError: [Errno 2] No such file or directory: '/Users/kishansairam9/.cider/symlinks/iterm2profiles'
Aftermath:
addlink
is executed sucessfully 👍.cider
👍 (This is causing FileNotFoundError
when running unlink
again after getting RuntimeError
)bootstrap.json
The spec states "$XDG_CONFIG_HOME
defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME
is either not set or empty, a default equal to $HOME/.config
should be used."
Instead of using .cider
as the default directory when $XDG_CONFIG_HOME
is not set, $HOME/.config/cider
should be used.
For full compliance with the spec, we'd also use $HOME/.local/share/cider
instead of $/Library/Application Support/com.msanders.cider
, but I'd be fine with leaving that as-is, since it is more idiomatic for OS X.
Cider appears to lack compatibility with the brew-pip
package. Whenever cider missing
is run, it returns an error when attempting to capture data related to packages installed via brew-pip
. To duplicate this error, run:
brew install brew-pip
then install any package from PyPi using:
brew pip pypi_package_name
and then attempt to use cider missing
to generate a cider file. It should return the error:
'brew uses --installed --recursive pypi_package_name' failed with code 1
I love the idea of cider
, but since it errors out each time I try to use cider missing
, I am uninstalling until this bug is fixed.
maybe this is actually something that woudl need to be resolved in click?
cider cask missing
Error: Unknown command: uses
Whoops!
brew cask uses --installed --recursive google-chromefailed with code 1
Fresh installation of OS X 10.11 with cider 1.1.8.
Please support the XDG basedir spec.
Defaulting to ~/.cider
contributes to a cluttered home-directory full of dot-files and dot-folders.
For backward compatibility I propose checking $XDG_CONFIG_HOME
first, and if no config exists there, try $HOME/.cider
.
When no symlink is present and trying to unlink, following error is occured:
~/.cider/symlinks master*
❯ ls
zsh
~/.cider/symlinks master*
❯ cider unlink sls
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 251, in main
cli.main(standalone_mode=False)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 644, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 991, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 837, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 464, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/decorators.py", line 26, in new_func
return ctx.invoke(f, ctx.obj, *args[1:], **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 464, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 246, in unlink
cider.unlink(name)
File "/usr/local/lib/python3.7/site-packages/cider/core.py", line 653, in unlink
raise StowError("No symlink found with name: {0}".format(name))
cider.exceptions.StowError: No symlink found with name: sls
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/cider", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/cider/_cli.py", line 269, in main
tty.puterr(e.message, prefix="Error:")
AttributeError: 'StowError' object has no attribute 'message'
Cause of Error:
No Message attribute for StowError
Fix: kishansairam9@704f2c4
Replace e.message
with e
After Fix:
~/.cider/symlinks master*
❯ cider unlink sls
Error: No symlink found with name: sls
The lastest version (0.60.0) does not have brew cask outdated
anymore.
Mas is a command line interface for mac App Store. Looks like you could also be able to bootstrap your mac purchases with cider :)
looking forward implementing it
Hi!
I'd like to install all my casks into /Applications, so it would be cool if there was a way to set the HOMEBREW_CASK_OPTS environment variable directly in cider.
Can you add a section to the bootstrap.json file (maybe "env") that one can use to set various environment variables?
I would normally put that into my .bashrc but that file is not there when I restore the first time.
So, something like:
"env": { "HOMEBREW_CASK_OPTS": "--appdir=/Applications", }
What do you think? Thanks.
Run cider missing taps
bootstrap.yaml should have valid entries for taps. In my case:
$ brew tap
blackfireio/blackfire
buo/cask-upgrade
homebrew/cask
homebrew/cask-versions
homebrew/core
Output of the taps being updated was captured, plus some other unexpected entries.
- !!python/unicode ''
- !!python/unicode '==> Auto-updated Homebrew!'
- !!python/unicode '==> Updated Formulae'
- !!python/unicode 'Updated 3 taps (homebrew/cask-versions, homebrew/core, homebrew/cask).'
- !!python/unicode 'blackfireio/blackfire'
- !!python/unicode 'buo/cask-upgrade'
- !!python/unicode 'gtk-vnc'
- !!python/unicode 'homebrew/cask'
- !!python/unicode 'homebrew/cask-versions'
- !!python/unicode 'homebrew/core'
- !!python/unicode 'radare2'
Which results in the following error:
$ cider restore
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
No changes to formulae.
Error: Invalid tap name ''
Whoops! `brew tap ` failed with code 1
HOMEBREW_VERSION: 1.7.1
ORIGIN: https://github.com/Homebrew/brew
HEAD: d6a245c05110c240e680da594c2cc6038998b82e
Last commit: 4 weeks ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 5292329db701b0085f555663121a1e8b1ffe3c6c
Core tap last commit: 7 minutes ago
HOMEBREW_PREFIX: /usr/local
CPU: quad-core 64-bit skylake
Homebrew Ruby: 2.3.7 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/bin/ruby
Clang: 10.0 build 1000
Git: 2.17.0 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 7.54.0 => /usr/bin/curl
Java: 1.8.0_181
macOS: 10.13.6-x86_64
CLT: 10.0.0.0.1.1527767617
Xcode: N/A
XQuartz: N/A
The JSON file format famously does not allow comments, which makes it really awkward for this use case -- these sort of configuration files should be well-commented so that you remember six months from now what you need each file for, and why you need to run each command in your cider config. Hjson is a project that defines a new standard based on JSON, but allows for comments and makes the file format much more human-friendly. YAML is also a great solution.
caskroom/cask/brew-cask
should be automatically installed if a bootstrap contains any casks. This isn't too annoying now, but will be once bootstraps are divided into separate files (#2).
On fresh installation of OS X 10.11, cider restore
and cider apply-defaults
has no effect even though Success! Applied defaults
is printed when an existing defaults.yaml
exists with many defaults.
Cider doesn't appear to support Python 3 yet. Here's what I get when installing via pip3
:
% pip3 install cider
Downloading/unpacking cider
Downloading cider-1.1.tar.gz
Running setup.py (path:/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py) egg_info for package cider
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py", line 17, in <module>
version, author = [grep_attr(body, attr) for attr in ("version", "author")]
File "/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py", line 17, in <listcomp>
version, author = [grep_attr(body, attr) for attr in ("version", "author")]
File "/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py", line 13, in grep_attr
).group(1)))
AttributeError: 'str' object has no attribute 'decode'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py", line 17, in <module>
version, author = [grep_attr(body, attr) for attr in ("version", "author")]
File "/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py", line 17, in <listcomp>
version, author = [grep_attr(body, attr) for attr in ("version", "author")]
File "/private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider/setup.py", line 13, in grep_attr
).group(1)))
AttributeError: 'str' object has no attribute 'decode'
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /private/var/folders/qy/8q5_l9gd3630_xq4qsrs2r7r0000gn/T/pip_build_mplewis/cider
Storing debug log for failure in /Users/mplewis/.pip/pip.log
cider missing
show Add prompt[y/N] untimely, as below,
$ cider missing
formula_a
...
formula_z
y
Add to bootstrap? [y/N] Success! Added formula_a to bootstrap
...
Success! Added formula_z to bootstrap
I think adding sys.stdout.flush()
after sys.stdout.write("Add to bootstrap? [y/N] ")
can solve this.
cider cask missing
no longer appears to function after 84f5f91 / 4c3c8e6.
It always reports Everything up to date.
even when there are additional cask items that need to be added into bootstrap.yaml
/ bootstrap.json
.
Example:
~/.cider ‹master› » brew cask list
araxis-merge google-chrome keka macdown microsoft-office p4v sourcetree visual-studio-code
dropbox grandperspective komodo-ide makemkv nvalt paragon-ntfs vagrant vlc
~/.cider ‹master› » cider cask list
araxis-merge
dropbox
grandperspective
macdown
makemkv
nvalt
p4v
paragon-ntfs
sourcetree
vagrant
vlc
~/.cider ‹master› » cider cask missing
Everything up to date.
Expected Result:
google-chrome
, keka
, komodo-ide
, microsoft-office
, visual-studio-code
Cider storage of defaults and applying defaults doesn't appear to support arrays.
Example usage:
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'
Something like cider stow [PATH] [NAME]
, which then updates your bootstrap to have the symlink entry "NAME/.*": "PATH"
(similar to GNU Stow).
When using cider set-default -bool
, the given domain key is properly stored into defaults.yaml
but the given domain key is not properly applied to the system. boolean true
and false
are converted into int
.
» cider set-default -bool com.apple.desktopservices DSDontWriteNetworkStores TRUE
» defaults read com.apple.desktopservices
{
DSDontWriteNetworkStores = 1;
}
» cider set-default -bool com.apple.desktopservices DSDontWriteNetworkStores true
» defaults read com.apple.desktopservices
{
DSDontWriteNetworkStores = 1;
}
» cider set-default com.apple.desktopservices DSDontWriteNetworkStores TRUE
» defaults read com.apple.desktopservices
{
DSDontWriteNetworkStores = 1;
}
» cider set-default com.apple.desktopservices DSDontWriteNetworkStores true
» defaults read com.apple.desktopservices
{
DSDontWriteNetworkStores = 1;
}
Expected behavior is:
» defaults write com.apple.desktopservices DSDontWriteNetworkStores true
» defaults read com.apple.desktopservices
{
DSDontWriteNetworkStores = true;
}
»
I noticed that cider does not really parse the output of brew, but instead copies elements into bootstrap.json.
This results in the following JSON, which, on restore, should lead to an error:
~
❯ cat ~/.cider/bootstrap.json
{
"casks": [
"==> Removing legacy Tap",
"filebot"
]
}
~
❯ cider cask missing
Warning: 2 missing formulas (tip: try `brew uses --installed` to see what's using it)
==> Removing legacy Tap
filebot
Add missing items to bootstrap? [y/N] y
Success! Added ==> Removing legacy Tap to bootstrap
Success! Added filebot to bootstrap
Note that this entry comes from a special misconfiguration of my brew cask installation (I guess), but cider should really account for user errors like that.
Make it a little bit smarter and sort out entries that start with special character, because brew formulas don't use them.
Ex. Homebrew/homebrew-bundle generates a Brewfile with the line:
brew 'vim', args: ['with-lua']
Cider generates:
- !!python/unicode 'vim'
Using OSX 10.10.1 I am getting https://gist.github.com/anonymous/ab0b99539a2f799352c2
pip 1.5.6 from /Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7)
If I run with pip3
it installs properly, but cider restore
fails with
Traceback (most recent call last):
File "/usr/local/bin/cider", line 9, in <module>
load_entry_point('cider==1.1.5', 'console_scripts', 'cider')()
File "/usr/local/lib/python3.4/site-packages/cider/_cli.py", line 251, in main
cli.main(standalone_mode=False)
File "/usr/local/lib/python3.4/site-packages/click/core.py", line 590, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.4/site-packages/click/core.py", line 936, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.4/site-packages/click/core.py", line 782, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.4/site-packages/click/core.py", line 416, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/click/decorators.py", line 26, in new_func
return ctx.invoke(f, ctx.obj, *args[1:], **kwargs)
File "/usr/local/lib/python3.4/site-packages/click/core.py", line 416, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/cider/_cli.py", line 113, in restore
cider.restore(ignore_errors=ignore_errors)
File "/usr/local/lib/python3.4/site-packages/cider/core.py", line 202, in restore
self._assert_requirements()
File "/usr/local/lib/python3.4/site-packages/cider/core.py", line 176, in _assert_requirements
if not self._has_xcode_tools():
File "/usr/local/lib/python3.4/site-packages/cider/core.py", line 163, in _has_xcode_tools
os.path.join(developer_dir, "usr", "bin", "git")
File "/usr/local/Cellar/python3/3.4.1_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/posixpath.py", line 92, in join
"components.") from None
TypeError: Can't mix strings and bytes in path components.
pip 1.5.6 from /usr/local/lib/python3.4/site-packages (python 3.4)
Sorry if I am missing something obvious. If you need more information let me know.
It'd be handy to have support for pinned formulas which prevent a package from being accidentally upgraded. Here is how those work:
Shouldn't having command line tools be enough?
Getting this warning of deprecation when running cider missing
, cider tap missing
, cider cask missing
/usr/local/lib/python3.7/site-packages/cider/_sh.py:200: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
return json.loads(contents) if is_json else yaml.load(contents)
Reason:
https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation
Related Issue:
google/mobly#561
Fix: kishansairam9@7721705
Use yaml.safe_load
instead of yaml.load
in _sh.py
(reference)
No disrespect to cider, because I very much appreciated its facilities and your contributions, but the project seems largely dormant at this point. Would you consider suggesting homebrew-bundle as an active alternative in the README
, particularly for those looking for new functionality like mas
support (#36)?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.