Giter VIP home page Giter VIP logo

intro_programming's Introduction

A collection of IPython Notebooks for teaching Python.

This project is the basis of introtopython.org, an open resource for teaching and learning Python. The site teaches the basics of Python, and then teaches people to build projects in Python. If you know how to work with IPython notebooks, you can contribute to the project.

You can also view the raw notebooks using the IPython Notebook Viewer (home page. The content is almost identical on both sites, but the introtopython.org version is easier to navigate, and has some dynamic js features such as collapsible output.

Contents

Goals:

  • Introduce students as quickly as possible to the basics of programming, and then help them choose an interesting project that they're capable of completing.
  • Introduce best practice as early as possible, while remaining accessible to students with no background in programming at all.
  • Help teachers who know little about programming start teaching Python to their students.
  • Make it easy for experienced Python programmers to conduct a code review of the project.

Contributing - Brief:

Contributing to this project requires IPython version 3.0 or higher. These instructions are written based on setting up a development environment on Ubuntu 14.04, but they should be adaptable to any modern system with a Python environment already set up. If you have any questions about getting your development environment set up for contributing to this project, please drop a note in Issue 11, or get in touch with me directly. I can be reached by email, ehmatthes at gmail, or on twitter @ehmatthes.

If you would like to start contributing and aren't sure what to do, there is a list of places to start in Issue 17.

These notebooks are written primarily in Python 3. If the default Python on your system is Python 3, then you'll have a simpler time contributing to the project. If you only have Python 2, you might want to consider adding Python 3 to your system. You can contribute to the project using Python 2, since there is so much overlap between the two versions of Python, especially when working on the more basic notebooks. To fully contribute to the project, you will need to have both Python 2 and Python 3 available.

Using Miniconda to set up a development environment

The first visualization project (Mapping Global Earthquake Activity) uses packages that are most conveniently installed using Conda.

The easiest way to do this is using Miniconda. Go to the Miniconda home page. Download and run the appropriate installer for your system. The following commands will get conda set up on a 32-bit Linux system:

~$ wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86.sh
~$ bash Miniconda3-latest-Linux-x86.sh
~$   # Say yes to the prompt for prepending Miniconda3 install location to PATH
~$ exec bash

Create a conda environment

Once you've got conda installed, use it to make an environment for this project. Make a directory for this project, and start a conda environment that includes ipython and ipython notebook:

$ mkdir introprogramming && cd introprogramming
intro_programming$ conda create -n ip_env python=3 ipython ipython-notebook
intro_programming$ source activate ip_env
(ip_env)intro_programming$ 

From this point, the project works the same as using virtualenv. Skip ahead to Open the notebooks

Using virtualenv to set up a development environment

You can also use virtualenv to set up a development environment.

Install pandoc

Pandoc is used by IPython Notebook to convert from the .ipynb format to .html.

$ sudo apt-get install pandoc

Now we'll set up the virtualenv:

$ mkdir intro_programming && cd intro_programming
intro_programming$ virtualenv -p python3 venv
intro_programming$ source venv/bin/activate
(venv)intro_programming$ git clone https://github.com/ehmatthes/intro_programming

# Required to access the notebooks:
(venv)intro_programming$ pip install ipython[all]==3 jsonschema

# Required for testing links within the project:
(venv)intro_programming$ pip install requests==2.0.0

Open the notebooks:

(venv)intro_programming$ cd intro_programming/notebooks
(venv)intro_programming/intro_programming/notebooks$ ipython notebook

This will open a browser, and you can click on the notebook you'd like to edit.

Creating html versions of the notebooks:

(venv)intro_programming$ cd intro_programming/scripts
(venv)intro_programming/intro_programming/scripts$ ./build_html_pages

After this, you should see an .html file for each .ipynb file in the notebooks directory. The html files are ignored by git for this project. If you want to build your own custom site based off this project, look at the source for /scripts/build_html_pages.sh. If you're not sure how to modify the script for your own purposes, I'm happy to help clarify how the conversion process works.

View your html pages

To view your html pages, start a server in the intro_programming/notebooks directory, and then access the pages locally:

(venv)intro_programming$ cd intro_programming/notebooks
(venv)intro_programming/intro_programming/notebooks$ python -m http.server

Then go to http://localhost:8000, and you should see the index page. (By the way, if you're using an index page with social plugins, you can see all the people who have accidentally tweeted or shared a local development version of their project. :)

Editing Python 2.7 examples

To edit the Python 2 examples in some of the notebooks, it's helpful to have a separate virtualenv that is built using Python 2.7. The steps to set up this virtualenv are identical to the steps above, except

$ mkdir intro_programming && cd intro_programming
intro_programming$ virtualenv -p python3 venv

becomes

$ mkdir intro_programming2.7 && cd intro_programming2.7
intro_programming2.7$ virtualenv -p python2.7 venv

There may be a bit more involved in a full setup, depending on which versions of Python you have on your system, but that should get you up and running.

Questions

If you have any questions about getting the project running locally, drop a note in Issue 11, or get in touch with me directly. I can be reached by email, ehmatthes at gmail, or on twitter @ehmatthes.

Thanks for looking!

intro_programming's People

Contributors

bkamapantula avatar ehmatthes avatar lukecyca 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

intro_programming's Issues

Make Linux/ Windows/ Mac notes collapsible

As we move into focusing on projects, there will be more notes about OS-specific implementations. It would be good to have these collapsible, so readers only see notes specific to their OS.

When people have to fight their OS to do something, it is good to point out in that OS' section that it is easier on other systems. Encourage new people developing on Windows to consider trying Linux. Not evangelism; just objective "This is how you do it on Linux, which is easier for this reason. You might want to give it a try." Follow that with a link to an expanded section in the programming_environment notebook about trying Linux on a vm, or a dual boot, or an extra computer.

Resolve I/ we/ you convention

As I have written different sections over the last few months, I have bounced around between the pronouns I, we, and you. This probably reads inconsistently for anyone who works through the notebooks from hello_world through the projects.

As more people start to contribute to the project, I am guessing that "we" is a good approach.

So, I think the following needs to be done:

  • Agree that "we" is better than "I" in most cases.
  • Read through the site's copy, from hello_world through to the projects, and edit for a consistent tone in this regard.

Test project setup instructions (readme) on a vanilla 12.04 vm

Now that the project uses matplotlib, and two virtualenvs with two different versions of Python, the setup process can easily fail to complete. There are many dependencies between these packages, and I haven't even brought Basemap into the readme yet.

I have been destroying and building virtualenvs repeatedly, but it would be good to run through the process described in the readme on a vanilla Ubuntu 12.04 vm, and make sure I haven't left out any system-wide requirements.

I would also love to see a version of these setup instructions for non-Ubuntu systems.

Add a "how to use this resource" page

This information is pretty dense for new programmers. The fun part is learning a little bit, and then doing some exercises or trying some challenges. Rather than sprinkle exercises after every little section, encourage people to read a bit and then look at the exercises sections, doing the ones they can.

Workflow notes

Basic workflow:

  • Write a skeleton notebook for an upcoming lesson.
  • Add any missing examples/ clarifications while presenting to students
  • Commit changes and push live, in front of students, at end of lesson
  • Later, clean up and add links and navigation, further clarifications, etc.

This workflow is meant to also show students how collaborative tools such as github work.

Optimize static deployment

From #29:

The total size of css files included at this point is almost 500kb. On modern systems this should be trivial, especially once resources are cached. But a simple improvement would be to scrape the built pages, and remove any elements from the raw style definitions that are not actually used in html pages.

My rough guess, for the record, is that this step would result in an overall css cumulative file size of 10% of the non-optimized total. There is so much functionality in ipython's css, and bootstrap's css, that the majority of it is unused.

Not a high priority right now, but if the site sees more use this is worth keeping in mind. If you want to see the individual files, take a look at the source for a typical deployed page.

Make Python 2 sections collapsible?

As the notebooks gain more detail, I wonder if it might be useful to allow hiding of notes that refer to Python 2. They need to be in there, but it would be good to aim for the simplest, cleanest page possible for learners, without omitting needed details.

(Watching the Python 2/ Python 3 transition difficulties is not fun atm.)

Clean up top navigation?

The navigation bar is getting crowded:

image

I added the "Home" element because I couldn't figure out how to make the project name "Introduction to Python" link to the index page. If this can be fixed, we can probably get rid of the "Home" link. Before getting rid of this, we should make sure the new navigation works on mobile.

I'm also not sure about the social media buttons. I'm not sure we need all three there.

Project Request: 3d-mapping tutorial

The Visualizing Global Earthquake Activity has always been well-received. Someone recently requested an extension of this project that would show how to deal with more dimensions of data:

What about displaying 3D data. Any examples? For example, showing roads with the third dimension representing the traffic load on the road or the number of potholes/deaths/accidents per mile.

I would love to get to this at some point, but I probably won't dig into it for a while. This would be a great project for someone to write up.

Make a resources page

Main resources to include:

  • Resources for independent learning
    • udacity, codecademy, coursera, edx, lpthw
  • Exercise/ Challenge resources
    • codingbat, project euler

Host static version off of Notebook Viewer

This will have a number of benefits:

  • It is a much simpler hosting infrastructure.
  • Pages should load faster. This is mostly an issue with longer notebooks, which should be broken into smaller notebooks anyway.
  • Can add tracking metrics such as Google Analytics.

Organizational/ Structural notes

Exercises

  • provide opportunity to practice what was just presented, and only what was just presented
  • make it easy for students to focus on what was just presented, by depending on as little other skills and knowledge as possible

Challenges

  • go beyond the minimum understanding of what was just presented
  • have students integrate prior skills and knowlege

Examples of sections with a good mix of exercises and challenges:

Make structure of notebooks consistent

I am using the different heading levels inconsistently. This could be cleaned up by clarifying the levels within each notebook.

Something like this is ideal:

Main Topic

Major Subtopic

Subtopic detail

Even finer detail

Building collaboration

I have long thought that one of the biggest strengths of introtopython.org is the ability for strong programmers to improve the site as they look it over. Once it reaches a critical mass, introtopython.org should stay pretty up-to-date and relevant because anyone can catch a mistake, or something out of date, and submit a PR to fix it.

One significant way to grow the project would be to recruit people with expertise in different areas of Python to write notebooks that feature different projects. There could be a whole series of mapping projects, data visualization projects, game projects...

Rather than me or a few people trying to write up a bunch of projects that are not really in our area of expertise, we should try to find the right people to write a series of projects. I think I might reach out to the matpotlib/ data viz community and see if anyone is interested in writing up a project.

In the meantime, if anyone has a specific project to request, let's ticket it and use the Project Request label.

Content notes

Functions:

  • scope
  • passing mutable arguments such as lists

Clean up test_links.py

I don't think there will be a whole lot of tests for this project, because it's mostly a writing project. I don't envision all of the code in the notebooks being tested; a good error reporting system should take care of those issues.

test_links.py

One test I do care about is the ability to test all links in the project. Links are particularly important for this project, because every time someone follows a link, they are trying to understand something. Broken links make it difficult to build understanding, which would quickly lead to frustration. People also use links to navigate to the topics they are currently working on, and to go back to topics they are starting to understand but need some review on.

This test should:

  • verify that all links between notebooks are working;
  • verify that all external links are working;
  • verify that all anchor links are working.

The test currently finds all links in a local cache of html files. It then tests those links against either a locally served version of the project, or an externally deployed version. The --root (-r) flag lets you set the url root that the files are served at, which is by default http://localhost:8000, the address of the SimpleHTTPServer that is run by the script itself. The test should either find links from local html files, and then test those locally, or find links from deployed files, and then test those deployed files.

For now, I can use the script as is to test locally (that will continue to work), or I can deploy and then test the deployed files. It's a bit scrappy for the moment, but it works for now and refinement of this script is fairly low-hanging fruit.

Implement highlighted lines in appropriate notebooks

Individual lines of code can now be highlighted in code cells, once converted to html. This feature will improve the following notebooks:

  • (finished 12/6) while_input
  • (finished 12/7) dictionaries
  • (finished 12/8) more_functions
  • (finished 12/8) var_string_num
  • (finished 12/9) lists_tuples
  • (finished 12/11) introducing_functions
  • if_statements

Add names to exercises

Makes it much easier to talk about with students and others. Also makes it easier to track which exercises have been completed.

Create a page that contains all exercises and challenges from the entire project.

There are many collections of Python exercises, and programming exercises in general online. But many of those very quickly get into intermediate-level problems. The problem set that introtopython.org contains could be very appealing to brand-new programmers, who cannot progress quickly enough to keep up with many existing sets of exercises.

The goal of this work is to pull out all exercises and challenges into one place, so that people can choose to try these exercises and challenges without having to skim through all the explanatory text. With a proper presentation, people who get stuck on certain exercises would then be likely to go to the relevant sections of the overall project to learn what they need to in order to complete the exercises. It could be a really good teaching and learning resource, and a good PR piece as well.

I am actively working on this on the branch all_exercise_page. I won't link to the page from the main project until it is complete and presented well, but the evolving page will be at introtopython.org/all_exercises_challenges.html.

I'm not expecting any particular help at this point, but with a few more eyes on the project I'm going to be more clear about my current focus. After landing this, I will probably go back to focusing on having enough content to bring people all the way from hello_world to the projects. Then it will be a fun job of writing up a few projects, and asking some new programmers to try the site out and share feedback. Long-term, there's some fun outreach we can do to teachers who don't come from a CS background, but who want to introduce their students to programming.

Translation support

I wouldn't call it a "Issue". I would prefer the term "Wish".

I wish there was a easy way to add translations to intro_programming. But I couldn't find a way to add translations to IPython notebooks.

I'd be willing to make an attempt for a translation to german, but I feel that without support from the library side this will fail as soon as there are updates from the original english course.

Goals for exercises

There should be enough exercises that students can get help on a number of exercises, and then still have enough to complete a number of exercises independently. If students don't get to the point of writing simple programs independently, they will not get far in programming.

This can easily clutter up the notebooks. I have several thoughts about managing this:

  • Make the exercises collapsible. When the notebook loads, exercises are hidden. When a student is ready to do the exercises, they click a show exercises button, and they can see the exercises.
  • Include 2-3 exercises in each teaching notebook, and then link to a separate notebook with more exercises.

Use Bootstrap

I like Bootstrap sites, and I think it would add something to the project as it stands. We could leave bootstrap at some point, but it would make the styling better than what we see from a simple nbconvert.

Optimize html versions of notebooks

There are a number of ways to optimize the html, for better load times and better user experience.

  • Pull css into a separate file. It seems the command ipython nbconvert dumps all css for all possible notebooks into the head of each html file. This makes sense, because many notebooks are meant to be standalone pieces. For this project, it makes sense to pull the css into a separate file. I believe user's browsers are not caching css, since it is included in each page.
    • This has been done.
  • Use bootstrap? The basic appearance is not that bad, but if the focus is on creating a website, there are some improvements that bootstrap can help with.
  • Consider using ipython nbconvert --template basic. This would require generating our own css, but that might work better. I am guessing there is a lot of css that we are not using. It might be reasonable to write our own css rules or create our own template for a basic Introduction to Python site.
    • This has been done.
  • Test all internal links. Write a test that goes through each notebook, verifying that each internal link is working correctly.
    • test_links.py currently tests links between notebooks and external links, but no anchor tags. The script can easily be extended to cover anchor tags.
  • Test all external links. This is a much more resource-intensive test, but it could be really useful as the project moves forward. There are not many external links at this point, but it would be really good to link to docs.python.org as the project matures. There are plenty of other good external resources that we should share with teachers and students. Finding broken links before link rot sets in would go a long way towards maintaining a clean user experience. Issue 8 | Issue 4
    • test_links.py currently tests links between notebooks, and external links. Tests locally, and I have used it to check deployed html pages. Can be cleaned up to take flag testing for local or deployed pages.

Change intro_programming_index.ipynb to index.ipynb

It was not clear to me when I started the project that this would be set up as a website. That is one of the primary goals of the project at this point, so this renaming simplifies deployment of html files.

In-browser Python editor

@ehmatthes
I am wondering if you have considered an in-browser editor like Skulpt [1]. This will be useful for students to test code live.

I have attached a screenshot for the same. This is a crude hack. I included example code after generating html.

[1] http://www.skulpt.org/
intro_programming_skulpt

Clean up build_html_pages.sh script

build_html_pages.sh

I started this as a series of shell scripts, so that different sections of the pages could be managed separately. But as I look at the whole series, it probably makes sense to pull them into one file, or a smaller series.

May also rewrite the entire series in Python, this was just what I already knew how to do in bash. I will rethink that as I start to play with the html files more. As of right now they are just a mirror of what nbconvert produces.

Regardless, the script should continue to work either by itself, or run from a commit hook.

Consider using a static templating engine

I have a series of custom scripts that build the html pages. Might be much more efficient to use an existing templating engine, rather than my own custom script.

Not a pressing problem, because the custom scripts are not that difficult to manage, and I'm not exactly sure what a larger templating engine would bring to the project at this point.

Templating engines to consider, and other relevant information:

Really should choose a Python static site generator:

  • jinja, pelican, hyde, nikola

Goals for exercises

There should be enough exercises that students can get help on a number of exercises, and then still have enough to complete a number of exercises independently. If students don't get to the point of writing simple programs independently, they will not get far in programming.

This can easily clutter up the notebooks. I have several thoughts about managing this:

  • Make the exercises collapsible. When the notebook loads, exercises are hidden. When a student is ready to do the exercises, they click a show exercises button, and they can see the exercises.
  • Include 2-3 exercises in each teaching notebook, and then link to a separate notebook with more exercises.

Fix IPython input history spacing

I was browsing the site and noticed that on double-digit input history references were a bit closer to the execution than their single digit friends.

From var_string_num.html:
screen shot 2013-12-18 at 11 58 44 am

screen shot 2013-12-18 at 11 59 01 am

If you remove width: 11ex from nbconvert_styles.css.

screen shot 2013-12-18 at 11 58 20 am

This also ensures that if you have any longer-digit numbers, the padding will be correct still.

Implement previous/ next navigation

Currently you have to go back to the index page or the syllabus to get from one notebook to another. Make a "previous - index - next" style navigation at the top and bottom of each notebook.

Consider a Creative Commons license for content

I have no idea if this is necessary. Technically, I don't think it is. All of the content on the site is actually part of the repository, so I believe the MIT license covers everything.

Still, it would be good to verify whether a CC license is necessary or not.

Invite others to help write exercises and challenges

Why write exercises?

One of the strengths of this project is that students can learn a new Python concept, and then apply what they've learned by trying to complete a short series of exercises. That makes high-quality exercises one of the most important parts of the project.

There should be enough exercises that students can get help on a number of exercises, and then still have enough to complete a number of exercises independently. If students don't get to the point of writing simple programs independently, they will not get far in programming.

This could be one of the most straightforward and helpful ways to contribute to the project. If you'd like to help write some exercises or challenges, please fork the project and make a pull request. If you're not sure how to do that, please feel free to ask, and I'll help you get through the first pull request.

Exercise or Challenge?

An exercise asks the learner to use what was just covered, in a way that mostly repeats the examples that were just given. The exercise can use a new context, but it should tell the learner to use a specific skill to complete a specific task.

A challenge asks the learner to combine what they have just learned with significant previous concepts. A challenge may be less directive and more open to interpretation; it may ask the learner to solve a problem that can be solved with a newly learned concept, without being overly directive about how to use the new concept.

Examples

The following notebooks have decent starter exercises for each main topic that is introduced:

These are just some starter exercises, so please feel free to add more.

Notebooks with few exercises

The following notebooks have sections with no exercises yet:

I would love to have some help writing decent exercises for these notebooks.

Invitation

Writing exercises and challenges can be fun and satisfying. If you want to help but are not sure how to get started, please introduce yourself in this thread and I'll be happy to help you get started!

Standardize semantic formatting

Python function names, such as my_list.append(item), are written right now in an informal way so as to not put off beginners in the text. So append is just referred to as "the append() function".

This seems good, but it does not show people the general format. Perhaps work in the general format as well, at some point in the discussion of each significant function.

Split longer notebooks into more reasonable chunks

Some of the notebooks, as currently laid out, are pretty long. This makes the project feel more like a reference than an active learning tool. Breaking into smaller sections would probably make it easier for students and teachers to navigate, and to feel like they are making progress.

What's an ideal chunk size?

  • Keep the outer hierarchy roughly the same as it is currently laid out in the syllabus.
  • Each major subject within the current notebooks should probably become its own notebook.
  • All sections should end with Exercises, and challenges wherever appropriate.

Ways to contribute

If anyone is interested in helping out, here are a number of ways you can jump in:

Write more exercises.

  • Ideally, we would have 3-5 exercises for each aspect of each major topic presented. This gives students the chance to do an exercise or two with help, and then complete another exercise or two independently. The goal is that students can solve at least one exercise in each section independently.

Write more challenges

  • Exercises ask students to write a small program that demonstrates competence with one particular skill or concept. Challenges ask students to combine different skills, or use new skills to implement developmentally appropriate versions of their own ideas.
  • Challenges can be written in any section, right after the Exercises for that section. It would also be good to develop a good set of interesting Challenges at the end of each notebook.

Write up a project

  • Now that the Python essentials are mostly written, the interesting work is writing up projects that people will want to complete. Propose a project, and write a notebook that shows people how to complete the project.

Proofread for accuracy

  • If you have a solid understanding of programming skills and concepts, I'd love to hear feedback about anything that could be explained more clearly, or more accurately.

@ehmatthes

Document ipynb formatting for Exercises and Challenges

The scripts for converting from ipynb to html successfully depend on a specific formatting for Exercises and Challenges. In particular, the script that builds the all exercises and challenges page needs specific formatting.

This should probably be documented in the readme, or in a page linked to from readme. Research the conventions for supporting readme pages; more markdown pages, or make a wiki? I lean towards markdown, but not sure if that's conventional. I like markdown pages because they are part of the repo that gets cloned.

Exercise sections should follow this format:

  • Make a new cell.
  • Make a line with the label "Exercises", followed by ---
  • Make a series of exercises, with titles preceded by ####
  • Start a new cell, with a link to top

This is what the code in your notebook should look like:

<a name='exercises_section_identifier'></a>Exercises

---
#### Title of Exercise
- specific directive
    - more specific directive

#### <a name='exercise_title_of_exercise'></a>Title of Exercise
- specific directive
    - more specific directive

[new cell]
[top](#)

The script for all_exercises_challenges looks for the top cell when scraping for exercises and challenges.

Sets of Challenges follow the same format, with the word 'Challenges' in place of 'Exercises'.

General feedback

If you have some general feedback about the project, feel free to leave it here.

Make a notebook that compiles all exercises

The exercises are one of the strongest features of this project. Most problem sites are aimed at higher-level programmers. When this project is mature, there should be a good set of gradually-graded exercises and challenges that people completely new to programming can work through at their own pace. There should be enough redundancy that people can get help with three or four exercises, and still have three or four more to work through independently.

It is good to have the exercises listed in with the content. It encourages people to try their hand at exercises as they learn, rather than pretending they get something because they read it. It would be quite useful, however, to also have a page that only lists exercises. So, I am envisioning:

  • an 'index' page for all exercises
  • a tagging or categorizing system for exercises so that people can search by context of the exercise, and Python concepts that the exercises focus on.
  • a feature that makes it easy for teachers to select and print exercises for students
  • a feature that makes it easy for students to select and print their own series of exercises.

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.