Giter Site home page Giter Site logo

rails-templates's Introduction

Rails Templates

Quickly generate a rails app with the default Wagon configuration using Rails Templates.

โš ๏ธ The following templates have been made for Rails 7. If you use Rails 6, please refer to the no-update branch templates

Minimal

Get a minimal rails app ready to be deployed on Heroku with Bootstrap, Simple form and debugging gems.

rails new \
  -d postgresql \
  -m https://raw.githubusercontent.com/lewagon/rails-templates/master/minimal.rb \
  CHANGE_THIS_TO_YOUR_RAILS_APP_NAME

Devise

Same as minimal plus a Devise install with a generated User model.

rails new \
  -d postgresql \
  -m https://raw.githubusercontent.com/lewagon/rails-templates/master/devise.rb \
  CHANGE_THIS_TO_YOUR_RAILS_APP_NAME

rails-templates's People

Contributors

ajdubovoy avatar alex-benoit avatar andrerferrer avatar annedj avatar arthur-littm avatar claracodes avatar cveneziani avatar db0sch avatar diogolsq avatar dmilon avatar eschults avatar flexbox avatar grmnlrt avatar hidehiro98 avatar johansenja avatar juliends avatar krokrob avatar marisnner7 avatar martin-alexander avatar mdelegrange avatar meleu avatar nfilzi avatar paultursuru avatar primaulia avatar sarahlafer avatar ssaunier avatar tonipanacek avatar trandthanh 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rails-templates's Issues

Heroku H10 error, caused by the procfile in the templates

Heroku throws an error if the procfile have spaces in the command, so, to fix that you need to remove the space between "web:" and the command.

In devise.rb at line 42 and in minimal.rb at line 41:

web: bundle exec puma -C config/puma.rb

you have to remove the space to fix the problem:

web:bundle exec puma -C config/puma.rb

Webpacker 4.0 issue with Babel and CSS

I've been trying to install Mapbox on a new rails app generated by Le Wagon template.

First, by default, webpack won't extract CSS anymore. We need to enable it manually:

// config/webpacker.yml
[...]
# Extract and emit a css file
extract_css: true
[...]

Second, i encounter a weird bug on my browser console saying that variable _typeof was not defined. Map was not displayed. Only a grey area. Turns out that webpack was transpiling all node_modules packages through Babel, which causes an issue with mapbox-gl.

To avoid that, we need to add this line: environment.loaders.delete('nodeModules'); to the file config/webpack/environment.js.
It will bypass node_modules packages from the transpiler.
But if we want to bypass only a specific package, another gist of code is available there: rails/webpacker#1903 (comment)

Will do a PR when I have the time next week

Stimulus Rails 7

Error while generating new rails 7:
run rails webpacker:install:stimulus from "."
rails aborted!
Don't know how to build task 'webpacker:install:stimulus' (See the list of available tasks with rails --tasks)

Action Mailer is added by default even for apps started with --skip-action-mailer

I'm not sure how can a conditional be setup for this, but currently those two lines will try and configure the app environments for action mailer even when it's skipped (which a lot of teachers do for lectures):

rails-templates/devise.rb

Lines 160 to 161 in c390b00

environment 'config.action_mailer.default_url_options = { host: "http://localhost:3000" }', env: 'development'
environment 'config.action_mailer.default_url_options = { host: "http://TODO_PUT_YOUR_DOMAIN_HERE" }', env: 'production'

Check compatibility and upgrades

Let's have a closer look at the recent updates to:

  • Upgrade Bootstrap to 5.0
  • Remove the execjs gem forced version 2.7 once autoprefixer-rails is compatible with execjs version 2.8

Devise template crashes when downloading stylesheets.zip

TD;DR

This is exactly the same that has been reported on #154, except with the Devise template.

Long version

The Authorization and Pundit lecture starts with creating a new Rails application using devise.rb:

rails new \
  -d postgresql \
  -m https://raw.githubusercontent.com/lewagon/rails-templates/master/devise.rb \
  rails-authorization

cd rails-authorization

However, it crashes when downloading the stylesheets.zip file:

         run    curl -L https://github.com/lewagon/rails-stylesheets/archive/more-js.zip > stylesheets.zip from "."
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    14  100    14    0     0     25      0 --:--:-- --:--:-- --:--:--    25
         run    unzip stylesheets.zip -d app/assets && rm -f stylesheets.zip && rm -f app/assets/rails-stylesheets-more-js/README.md from "."
Archive:  stylesheets.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of stylesheets.zip or
        stylesheets.zip.zip, and cannot find stylesheets.zip.ZIP, period.

Editing the occurrences of more-js to master as indicated on #154 seems to work.

tzinfo-data gem error

When running bundle install on the minimal template. I'm getting

[!] There was an error parsing `Gemfile`: `windows` is not a valid platform. The available options are: [:ruby, :ruby_18, :ruby_19, :ruby_20, :ruby_21, :ruby_22, :ruby_23, :ruby_24, :ruby_25, :ruby_26, :mri, :mri_18, :mri_19, :mri_20, :mri_21, :mri_22, :mri_23, :mri_24, :mri_25, :mri_26, :rbx, :truffleruby, :jruby, :jruby_18, :jruby_19, :mswin, :mswin_18, :mswin_19, :mswin_20, :mswin_21, :mswin_22, :mswin_23, :mswin_24, :mswin_25, :mswin_26, :mswin64, :mswin64_19, :mswin64_20, :mswin64_21, :mswin64_22, :mswin64_23, :mswin64_24, :mswin64_25, :mswin64_26, :mingw, :mingw_18, :mingw_19, :mingw_20, :mingw_21, :mingw_22, :mingw_23, :mingw_24, :mingw_25, :mingw_26, :x64_mingw, :x64_mingw_20, :x64_mingw_21, :x64_mingw_22, :x64_mingw_23, :x64_mingw_24, :x64_mingw_25, :x64_mingw_26]. Bundler cannot continue.

I'm on OSX

404 OpenURI::HTTPError when trying to create the rails app

Steps applied:

rails new \
  --database postgresql \
  --webpack \
  -m https://raw.githubusercontent.com/lewagon/rails-templates/rails-six/devise.rb flash-v2

Expected behavior:

A new rails application

Current behavior:

404 Not Found. (OpenURI::HTTPError)

Traceback:

apply  https://raw.githubusercontent.com/lewagon/rails-templates/rails-six/devise.rb

Traceback (most recent call last):
	30: from /home/joao/.rbenv/versions/2.6.5/bin/rails:23:in `<main>'
	29: from /home/joao/.rbenv/versions/2.6.5/bin/rails:23:in `load'
	28: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.1/exe/rails:10:in `<top (required)>'
	27: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:72:in `require'
	26: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:72:in `require'
	25: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.1/lib/rails/cli.rb:18:in `<top (required)>'
	24: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.1/lib/rails/command.rb:46:in `invoke'
	23: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.1/lib/rails/command/base.rb:69:in `perform'
	22: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
	21: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
	20: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
	19: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.1/lib/rails/commands/application/application_command.rb:26:in `perform'
	18: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
	17: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/group.rb:232:in `dispatch'
	16: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `invoke_all'
	15: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `map'
	14: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `each'
	13: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `block in invoke_all'
	12: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
	11: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
	10: from (eval):1:in `apply_rails_template'
	 9: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.1/lib/rails/generators/app_base.rb:166:in `apply_rails_template'
	 8: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/thor-1.0.1/lib/thor/actions.rb:222:in `apply'
	 7: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:35:in `open'
	 6: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:736:in `open'
	 5: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:165:in `open_uri'
	 4: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:224:in `open_loop'
	 3: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:224:in `catch'
	 2: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:226:in `block in open_loop'
	 1: from /home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:756:in `buffer_open'
/home/joao/.rbenv/versions/2.6.5/lib/ruby/2.6.0/open-uri.rb:378:in `open_http': 404 Not Found (OpenURI::HTTPError)

Rails Templates Minimal & Devise are not running pgrep spring | xargs

While trying to install both templates, the installation stops after this:

        apply  https://raw.githubusercontent.com/lewagon/rails-templates/master/minimal.rb
         run    pgrep spring | xargs kill -9 from "."

Usage:
 kill [options] <pid> [...]

Options:
 <pid> [...]            send signal to every <pid> listed
 -<signal>, -s, --signal <signal>
                        specify the <signal> to be sent
 -l, --list=[<signal>]  list all signal names, or convert one to a name
 -L, --table            list all signal names in a nice table

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).

[Idea] Use simple-form's fix for forms with radio_buttons

Hello there! I've noticed that the forms generated with this template make the first radio button align to the right. This is because bootstrap 5 requires something else. Luckily, simple_form's team have already fixed this here.

Here is an example:
W/O the _form_legend_clear.scss file
without scss

W the _form_legend_clear.scss file
with scss

I hope you can include this in your templates to make it easier for the people using your templates, myself included.

gem 'turbolinks', '>5' + jquery

I used this template to upgrade an existing rails 4.2.3 project to rails 5, everything worked fine (thanks a lot LeWagon!)

But it came with a gem I didn't use before (gem 'turbolinks', '>5') which made my JS not working. Found it's a common issue:

if you have a large codebase with lots of $(el).bind(...)Turbolinks will surprise you. Most part of your JavaScripts will stop working in usual way. It's because the nodes on which you bind events no longer exist.
=> https://github.com/kossnocorp/jquery.turbolinks

jquery.turbolinks gem fix the problem but as detailed in this issue (kossnocorp/jquery.turbolinks#62) you have to revert turbolinks gem to '2.5.3' so everything work fine.

Does it sound like a good fix?

Navbar Not Keyboard Accessible

In the _navbar.html.erb partial we have:

            <%= image_tag "https://kitt.lewagon.com/placeholder/users/ssaunier", class: "avatar dropdown-toggle", id: "navbarDropdown", data: { bs_toggle: "dropdown" }, 'aria-haspopup': true, 'aria-expanded': false %>

This means that all the click events are on an image, which does not receive keyboard focus and is not accessible to either keyboard or screen-reader users. Also the image has no alt text.

It should most likely be wrapped in a <button> element (styled to not change the look of the image, when not focused), and the image should be given alt text.

Thanks so much!

Add annotate to minimal and devise template

During TA I saw lots of students going to schema.rb to check the attributes of a model (which is not very convenient)

Annotate nicely displays the attributes in the model file.
https://github.com/ctran/annotate_models

# == Schema Information
#
# Table name: users
#
#  id                     :bigint           not null, primary key
#  email                  :string           default(""), not null
#  encrypted_password     :string           default(""), not null
#  remember_created_at    :datetime
...

I have a branch ready to be pushed to open a PR if I can be contributor ๐Ÿ™‚

Otherwise, the lines to add:

# minimal.rb and devise.rb
group :development, :test do
  ...
  gem 'annotate'
  ...
end  
...
after_bundle do 
  ...
  # annotate gem install
  generate('annotate:install')
  ...
end

then the command annotate fills the models files
annotate --routes can be useful also

Both Templates get stuck on generate simple_form:install Ubuntu 18.04

Last couple of lines from the terminal `Webpacker successfully installed ๐ŸŽ‰ ๐Ÿฐ
run bundle exec spring binstub --all

  • bin/rake: spring inserted
  • bin/rails: spring inserted
    rails db:drop db:create db:migrate
    [Simple Form] Simple Form is not configured in the application and will use the default values. Use rails generate simple_form:install to generate the Simple Form configuration.
    Dropped database 'todo_development'
    Dropped database 'todo_test'
    Created database 'todo_development'
    Created database 'todo_test'
    generate simple_form:install`

and it sits there for atm 30mins

minimal.rb is crashing when downloading stylesheets.zip

TL;DR

The minimal.rb, in line 25, tries to download https://github.com/lewagon/rails-stylesheets/archive/more-js.zip, but in the rails-stylesheets repo, the more-js branch doesn't exist.

If we replace every mention of more-js with master, the template works.


Long version

In the AirBnB day 1 the students are instructed to start a new Rails project using the minimal.rb template:

rails new \
  -d postgresql \
  -m https://raw.githubusercontent.com/lewagon/rails-templates/master/minimal.rb \
  CHANGE_THIS_TO_YOUR_RAILS_APP_NAME

When I do it on my end the command crashes with this error:

         run    curl -L https://github.com/lewagon/rails-stylesheets/archive/more-js.zip > stylesheets.zip from "."
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    14  100    14    0     0     10      0  0:00:01  0:00:01 --:--:--    19
         run    unzip stylesheets.zip -d app/assets && rm -f stylesheets.zip && rm -f app/assets/rails-stylesheets-more-js/README.md from "."
Archive:  stylesheets.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of stylesheets.zip or
        stylesheets.zip.zip, and cannot find stylesheets.zip.ZIP, period.

This is happening because the contents of stylesheets.zip is a plaintext with a 404 error message. And the 404 message happens because the more-js branch doesn't exist anymore.

I tried editing the minimal.rb, changing all mentions to more-js with master, and it apparently works.

Add Stimulus

After the Q3 2021 updates which introduces more JavaScript in the curriculum, and especially promotes Stimulus as the recommended way to write JS in Rails, let's add Stimulus setup steps to the Devise template to let students focus on writing their controllers ๐ŸŽ‰

style animate.css

While deploying on heroku I add this issue :
Refused to apply style from 'https://mr-portfolio.herokuapp.com/' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

I fixed it by changing from

@import "animate.css/animate.css";
to
@import "animate.css/animate";

inside the application.scss file I noticed that the previous template was with @import "animate.css/animate";
and not
@import "animate.css/animate.css";

Cops on .rubocop.yml aren't using their qualified names

FrozenStringLiteralComment, and many others, throw a console warning (as well as a vscode one) unless written with its department: Style/FrozenStringLiteralComment.

Eg.:

[...]/.rubocop.yml: Warning: no department given for FrozenStringLiteralComment.

I fixed it for tomorrow's lecture, but I'll leave this here as a reminder for myself (or in case someone wants to fix it).

I'll send a PR tomorrow when I can.

With divise.rb, when create new rails app, it stops here

With this command

rails new \
  --webpack \
  --database postgresql \
  -m https://raw.githubusercontent.com/lewagon/rails-templates/master/devise.rb \ 
  app_name
    generate  controller
Running via Spring preloader in process 58799
      create  app/controllers/pages_controller.rb
      invoke  erb
      create    app/views/pages
      create    app/views/pages/home.html.erb
       route  root to: 'pages#home'
         run  rm .gitignore from "."
      create  .gitignore
    generate  devise:install

Update templates for Rails 6

A few things not relevant anymore to Rails 6 (list to be completed)

  • In app/controllers/application_controller.rb no need anymore of protect_from_forgery with: :exception as the parameter is moved to ActionController::Base and set to true by default see rails/rails@ec4a836
  • In app/views/layouts/application.html.erb no need of <%= javascript_include_tag 'application' %> as all native javascript components of Rails are moved to Webpack

gitignore doesn't include master.key

config/master.key is ignored by the default Rails .gitignore in Rails 5.2 and 6.0. This template doesn't include that file in the ignore, so a lot of people who have used this template have pushed their master keys up to GitHub. (See more info on encrypted credentials here)

The gitignore should be updated to include these two lines:

# Ignore master key for decrypting credentials and more.
/config/master.key

file '.gitignore', <<-TXT

Or, even better it should just append whatever custom ignores you need to the default .gitignore so problems like this don't need to be fixed with every new Rails release.

Thanks :)

why is assets.debug turned off in development?

I don't understand why the config.assets.debug is forced to false in the development environment.

gsub_file('config/environments/development.rb', /config\.assets\.debug.*/, 'config.assets.debug = false')

My understanding of this config is that it enables on-the-fly assets compiling. However, I'm also weirded out that disabling it doesn't seem to always disable on-the-fly assets compiling. @grmnlrt told me that it might have to do with the fact that the lewagon template has a single scss file, but I still don't get it, would someone explain it to me?

A student had a problem today where he had precompiled assets locally once, and the on-the-fly compiling would never pick up again before we clobbered local assets.

Missing bootstrap-sass dependency

After I running the template, I noticed all the clicking events for bootstrap were not working. As I went to check the yard.lock the bootstrap-sass dependency was missing.
Everything worked fine after running yarn add bootstrap-sass. I would be interesting to have it already come in the template.

Missing test folder

Currently @lewagon template does not contain a test/spec folder.

It is fundamental to transmit basic of tests, and set it as a good practice from the start.
That will prevent excess of legacy and promote a very good and time saving practice.

At minimal add some pointers ๐Ÿ”— to the README on how set up minitest, rspec, and how to test basic rails steps.

voili voilร  voilou ๐Ÿ˜ƒ

http://guides.rubyonrails.org/testing.html

Webpacker Conflict With Mapbox-GL

During AirBnB project week at batch 329 in Montreal we had a Mapbox-GL issue with one group.

Image of error attached below.

The solution was to downgrade Webpacker to v.3.5.5 in the Gemfile.

This might be a problem for other groups in other batches so I thought I'd point it out. If not, then please ignore and close the issue ๐Ÿ‘

Webpacker 6 doesn't support custom installers anymore.

I just ran into the following error and it seems that

Webpacker 6 doesn't support custom installers anymore.

[โ€ฆ]
success Saved 2 new dependencies.
info Direct dependencies
โ”œโ”€ @popperjs/[email protected]
โ””โ”€ [email protected]
info All dependencies
โ”œโ”€ @popperjs/[email protected]
โ””โ”€ [email protected]
Done in 0.68s.
         run  rails webpacker:install:stimulus from "."
rails aborted!
Don't know how to build task 'webpacker:install:stimulus' (See the list of available tasks with `rails --tasks`)

(See full trace by running task with --trace)

Add Css resseter

Hello, was thinking about adding a Css Resseter as my front-end teacher in aix-marseille told me it's a pretty common best practice.

If you are ok with that, will be happy clone and pull request.

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.