Giter VIP home page Giter VIP logo

pcc's Introduction

Python Crash Course

A Hands-On, Project-Based Introduction to Programming

This is a collection of resources for Python Crash Course, an introductory programming book from No Starch Press by Eric Matthes. Click here for a much cleaner version of these online resources.

If you have any questions about Python Crash Course, feel free to get in touch:

Email: [email protected]

Twitter: @ehmatthes

Setup Instructions

Here you can find instructions for:

Downloading source code

The simplest way to get the online resources for the book is to click on the Download ZIP button on the upper right side of this page, which will download the source code files (and other resources) for the entire book.

Cheat sheets can be really helpful when you're working on a set of programming exercises or a project. This set of cheat sheets will help remind you of the concepts you're learning, as well as the Python syntax for these concepts.

Some of the libraries featured in the book have been updated recently, which is a good thing - it means you're learning to use Python packages that are steadily being improved.

When packages are updated you have the option of using the version that was featured in the book, which lets you run code exactly as it's written in the book. You can also choose to install the latest version of each package, and modify the code in the book slightly. Each approach is outlined clearly in these updates.

A list of updates is kept here.

pcc's People

Contributors

ehmatthes avatar ericwlange 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  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

pcc's Issues

grayscale cheatsheets

Hi, how did you made the cheatsheets?
I'd like to make print them with a white background (for a bw printer)

On MacOS, Chapter 12, I don't see a spaceship

I typed in the code in chapter 12 to add the spaceship. All I see is a blank screen.

Running on macOS

image

So I tried it in a VM running linux, and I see the space ship.

Running same Code in Linux

image

I went back to macOS and opened up your chapter12 solution and still no spaceship.Just a blank screen. Then I opened your code in Linux and I see the spaceship.

Like #67 I couldn't install latest pygame using the instructions in the book. So I guessed and used

$ pip3 install pygame

I don't know the difference between that and the suggestion

$ python3 -m pip install --user pygame

I don't see any errors in the console when I run. Just this:

chapter_12$ cd /Users/mgwelch/Documents/references/python-crash-course-resources/chapter_12 ; env "PYTHONIOENCODING=UTF-8" "PYTHONUNBUFFERED=1" /usr/local/opt/python/bin/python3.7 /Users/mgwelch/.vscode/extensions/ms-python.python-2019.2.5558/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 64094 /Users/mgwelch/Documents/references/python-crash-course-resources/chapter_12/alien_invasion.py 
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html

Apparently something is wrong with my macOS environment.

pygame installed but not import

Hi, Eric:

I am using MacOS, and run those instructions already

brew install hg sdl sdl_image sdl_ttf
brew install sdl_mixer portmidi
pip3 install --user  hg+http://bitbucket.org/pygame/pygame

after this, when I switch to python3 console, import pygame, no module named 'pygame'

below is the screenshoot:
screen shot 2017-08-12 at 14 29 36

Chapter 10. Task 10-6. Addition.

Hi @ehmatthes!
Thank very much for really awesome book!

I think I found an error.

Chapter 10: "Files and Exceptions" we have a task 10-6:


10-6. Addition: One common problem when prompting for numerical input
occurs when people provide text instead of numbers. When you try to convert
the input to an int, you’ll get a TypeError. Write a program that prompts for
two numbers. Add them together and print the result. Catch the TypeError if
either input value is not a number, and print a friendly error message. Test your
program by entering two numbers and then by entering some text instead of a
number.


But if "user" enter a text and the program try convert it we get a ValueError.

403 Forbidden

Dear Eric Matthes:
Thank you for this book.I like it very much!
But when i try to add a new topic,just like Chapter 19,but i failed because of 403 forbidden.
It seems something wrong in {% csrf_token %}.
Can you help me to solve this problem?
With pleasure.

python_repos.py

code encounters error on line 46
AttributeError: 'NoneType' object has not attribute 'decode'

I think this error may be due to non-standard ASCII characters in the repo_dict descriptions.

python_repos.py test

I noticed that in your guide to testing the status code for python_repos.py, you have "import python_repos_for_testing as pr". When I used that, python gave me an error that there's no such module. So I changed it to "import python_repos as pr", and that seemed to work. The test ran without errors.
Was it OK to make that change, or did I mess up the unittest?

Thanks!

Freetype missing

In chapter 12 when you are supposed to install pygame (did this on both ubuntu 17.10 and 18.04) and you come to pip3 install --user hg+http://bitbucket.org/pygame/pygame

It complains that freetype is missing. So I had to also install libfreetype6-dev also. Then it works.

There is an error occur in test_survey.py in Chapter 11

Dear Matthes:

Thanks for your book "Python Crash Course"!

I have learned a lot from it through coding. And I find out an error occur in test_survey.py in Chapter 11.

First I coded it by myself, but the Ipython console display "Failed". Then I search the Internet to find the answer.

When I find your code in Github, and run the code. The Ipython console also displays the same error as follows:

image

The paradox is that when I run the language_survey.py, the Ipython console display the right result.

Can't get ship to move

Hey Eric, I'm following the instructions in chapter 12 and I can't seem to get my ship to move at all. Do I need to do anything to "capture" the keyboard input while checking the code running in the game screen? I can see the key codes being printed out in the console, but the screen does not update. I even tried using the code you've provided for the restore point with no luck.
I did pre-install the audio components you mention that are optional at the beginning of the project. Is there something I need to do to have this script work with those components installed?
My code thus far: https://github.com/dbonomo/fun-with-pygame

chapter17 python_repos.py

Hello, I run your code meet some problems.

The last line of code:
chart.render_to_file('python_repos.svg')

In Windows10, pycharm environment run to get:
'NoneType' object has no attribute 'decode'

So I change something to run that, but I don't know exactly how it works, the code is:
chart.render_to_file('python_repos.svg', decode='utf-8')

Thank you!

Pip3 has been successfully installed, but the pygame installation prompt failed

Hello

Currently installing pygame encounters a problem:
Pip3 has been successfully installed, but pygame can not be installed
Google some of the solutions, but did not solve this problem.
The use of python3 failed to install; python2.7 was installed successfully.

ting@ting-All-Series:~$ sudo pip3 install --user hg+http://bitbucket.org/pygame/pygame
The directory '/home/ting/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ting/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting hg+http://bitbucket.org/pygame/pygame
Cloning hg http://bitbucket.org/pygame/pygame to /tmp/pip-i07ajklr-build
Complete output from command python setup.py egg_info:

WARNING, No "Setup" File Exists, Running "config.py"
Using UNIX configuration...

/bin/sh: 1: freetype-config: not found
/bin/sh: 1: freetype-config: not found
/bin/sh: 1: freetype-config: not found

Hunting dependencies...
WARNING: "freetype-config" failed!
SDL     : found 1.2.15
FONT    : found
IMAGE   : found
MIXER   : found
PNG     : found
JPEG    : found
SCRAP   : found
PORTMIDI: found
PORTTIME: found
FREETYPE: not found
Missing dependencies

----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-i07ajklr-build/

=========================
ting@ting-All-Series:~$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.4/dist-packages (python 3.4)

Chapter 10: alice.py (Python 2.7.12)

Code review: Exceptions (IOError vs FileNotFoundError) under Python 2.7.12

Able to run alice.py via:
filename = 'alice.txt' try: with open(filename) as f_obj: contents = f_obj.read() except IOError: msg = "Sorry, the file " + filename + " does not exist." print(msg)

System: MAC OS 10.11.6, Anaconda Python REPL

heroku application error

Hi Eric,

So I've set up the learning log web app twice through. Everything is functional on localhost and I'm not getting any errors during the heroku setup. Heroku is telling me that my build was successful, but when I try to open the app, I get an error screen saying...

"Application error
An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details."

I don't see any obvious problems in the build log, so I'm not sure how/where to start the troubleshooting process. I'm confident that all of my files are correctly set up and in the correct locations. When I got this error the first time through, I deleted everything and started over, paying close attention to all of your update notes to make sure everything was current. As mentioned, the app works locally and builds successfully on heroku, but it can't be served. What could cause this?

I'm checking with our IT group to verify that our firewall is not somehow blocking the process. The fact that I'm able to do everything heroku-related except open the app makes me think this isn't the problem, but I'm checking anyway.

If you want me to send the build log, please let me know.

Thanks!

Black Square instead of ship.bmp

I am at ship.py and wrote the instruction self.image = pygame.image.load('images/ship.bmp'). I do not get any error but when I run the script, I just get a black square at the bottom of the screen instead of the ship.bmp. Any ideas? Am I missing any packages to be installed?

Pygal Bar Graphs & Maps Aren't Interactive

I am having an issue with chapters 15 and 16. When I open a map or bar graph in MS Edge and hover over a par or country, the outline darkens but I do not get any of the info that should be showing (ie. Country code and population).

Below is an example of the code I have for world_population.py.

import json
from pygal.maps.world import World
from pygal.style import RotateStyle
from country_codes import get_country_code

Load the data into a list.

filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)

Build a dictionary of population data.

cc_populations = {}
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
cc_populations[code] = population

Group the countries into 3 population levels.

cc_pops_1, cc_pops_2, cc_pops_3, = {}, {}, {}
for cc, pop in cc_populations.items():
if pop < 10000000:
cc_pops_1[cc] = pop
elif pop < 1000000000:
cc_pops_2[cc] = pop
else:
cc_pops_3[cc] = pop

See how many countries are in each level.

print(len(cc_pops_1), len(cc_pops_2), len(cc_pops_3))

wm = World()
wm.force_uri_protocol = 'http'
wm.title = 'World Population in 2010, by Country'
wm.add('0-10m', cc_pops_1)
wm.add('10m-1bn', cc_pops_2)
wm.add('>1bn', cc_pops_3)

wm.render_to_file('World Population.svg')

print command on page 67

whenever I perform the exercise foods.py page 67 it prints the commands separately instead of in a group, i.e. it prints "my favorite foods are:" right after I type the print command instead of in a block of text with the foods like stated in the book.
Doc1.docx
how do i fix that?

Chapter 12 - problem with installing the Pygame

Hi Eric,

I am using MacOS 10.14 and I have a problem with installing Pygame.

After running those codes in Terminal:

brew install hg sdl sdl_image sdl_ttf
brew install sdl_mixer portmidi
pip3 install --user hg+http://bitbucket.org/pygame/pygame

Everything is going well except the last code (pip3 installer).

See the screenshot below:
screenshot 2018-09-30 at 19 04 56

Do you know what could be the problem here?

Thank you in advance!

Chapter 18 models.py TypeError on ForeignKey() Instance

I'm not sure if this is a recent change / change to Django since the book was published, but while following the exercises in Chapter 18 on Django2.0, I got the TypeError: __init__() missing 1 required positional argument: error when I was working on Chapter 18's portion of adding the Entry class to the models.py file. I even tried copy-pasting exactly the code you have in Github in case I just had a typo or so, but I still got the error.

The error occurred when creating the topic attribute in the Entry class definition because the instance created with models.ForeignKey() only had 1 argument (Topic) and did not have an argument for on_delete.

When I included an argument for on_delete, the error resolved. However, I wasn't 100% sure yet which value I should use for the on_delete argument because I am still so early on in the Learning Log project. I settled for on_delete=models.PROTECT for now because based on the project, I felt as if we wouldn't want all the entries to get deleted simply because a Topic got deleted and also because on_delete=models.SET_NULL ended up with its own errors. I'll research that more.

namespacing in learning_log\urls.py

Hi Eric,

The only way I could get this to work was by taking out the namespace argument, which you say on page 413 is important to know how to implement when projects start to grow. Please help me structure learning_log\urls.py so that I can use namespacing.

This one works (in that the server starts up)

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('learning_logs.urls')),
]

System check identified no issues (0 silenced).
April 24, 2018 - 12:22:41
Django version 2.0.4, using settings 'learning_log.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

=================================

This fails...

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('learning_logs.urls', namespace='learning_logs')),
]

File "C:\Users\mburnett\PycharmProjects\untitled\learning_log\learning_log\urls.py", line 7, in module>
url(r'', include('learning_logs.urls', namespace='learning_logs')),
File "C:\Users\mburnett\PycharmProjects\untitled\learning_log\11_env\lib\site-packages\django\urls\conf.py", line 39, in include
'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

It's asking for an "app_name," but I don't know where that attribute should be set.

Here is the other urls.py file as it exists in learning_logS

"""Defines url patterns for learning_logs."""

from django.conf.urls import url
from . import views

urlpatterns = [
# Home page.
url(r'^$', views.index, name='index'),

# Show all topics.
url(r'^topics/$', views.topics, name='topics'),

# Detail page for a single topic.
url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),

]

Thanks!

don't draw aliens in screen

hello,I have a question,
in "def update_screen(ai_settings, screen, ship, aliens, bullets):" function ,
I write aliens.draw(screen) this one fuc, but the programing still can't running.
the following is error:

Traceback (most recent call last):
File "alien_invasion.py", line 32, in
run_game()
File "alien_invasion.py", line 31, in run_game
gf.update_screen(ai_settings, screen, ship, alien, bullets)
File "/Users/Wzd/Documents/github/alien_invasion/game_functions.py", line 35, in update_screen
aliens.draw(screen)
AttributeError: 'Alien' object has no attribute 'draw'

can you help me ,thanks ,I 'm reading your book, it's good!

Chapter 17: python_repos.py cannot handle description of None

When working in Chapter 17 setting up custom tooltips (pp 388-389) I ran into the issue where the description for the project 'shadowsocks' was None. When the project is run you get a 'AttributeError: 'NoneType' object has no attribute 'decode'' exception when you try to render.

To get around this I had to add a None checker before I populate the plot_dict data, something like this:

for repo_dict in repo_dicts:

    # Cleans any none values and replaces with empty string
    for k, v in repo_dict.items():
        if v is None:
            repo_dict[k] = ''

    names.append(repo_dict['name'])
    plot_dict = {
        'value': repo_dict['stargazers_count'],
        'label': repo_dict['description']
    }

    plot_dicts.append(plot_dict)

Not sure this is the fastest way of doing it but it worked for me.

tooltip hyperlink off-screen

The descriptions for httpie, ansible and certbot are relatively long and make the hyperlink to the project inaccessible given its default position in the bottom right of the text box. How can we tell pygal to wrap the description in a constant-width text box so the hyperlink is always in view?

Do we have any control over where the "Link >" string appears in the text box?

Thanks!

ch12 somewhere i don't understand,please help me!

in the ch12,ship.py
the self.rect.centerx only stores the integers,so must change it to float,
so use self.center to instead,
but in the line 35:self.rect.centerx = self.center,
why centerx can store in float in this time?
i don't understand,please tell me,thank you sincerely!

Error in Chapter 11, language_survey.py and survey.py

Hi,

I get the following error when i try to run language_survey.py:

Traceback (most recent call last):
File "", line 1, in
File "/home/savo/python/pythoncrash/book/chapter_11/language_survey.py", line 8, in
my_survey.show_question()
File "/home/savo/python/pythoncrash/survey.py", line 11, in show_question

NameError: name 'question' is not defined

I checked multiple times for typos, then downloaded the code from github and tried to run it - got the same error. I can't figure out what it is.

P.S. i changed the working directory accordingly with os.chdir(), so it's not that

runing django TemplateDoesNotExist

Hello I am learning 19 chapters, the emergence of the error 'TemplateDoesNotExist', I see a lot of some of the instructions, or did not solve the problem, you can help me see where is not set up, thank you so much, the following is the log

``

Request Method: GET
http://127.0.0.1:8000/new_topic/
1.11.3
TemplateDoesNotExist
learning_logs/new_topics.html
/usr/local/lib/python3.6/site-packages/django/template/loader.py in get_template, line 25
/usr/local/opt/python3/bin/python3.6
3.6.1
['/Users/Wzd/Documents/github/python/mydjango/project_1/learing_log', '/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/Wzd/Library/Python/3.6/lib/python/site-packages', '/usr/local/lib/python3.6/site-packages']
Tue, 25 Jul 2017 14:29:17 +0000
`Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/new_topic/

Django Version: 1.11.3
Python Version: 3.6.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'learning_logs']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Template loader postmortem
Django tried loading these templates, in this order:

Using engine django:
* django.template.loaders.filesystem.Loader: /Users/Wzd/Documents/github/python/mydjango/project_1/learing_log/learning_logs/templates/learning_logs/new_topics.html (Source does not exist)
* django.template.loaders.app_directories.Loader: /usr/local/lib/python3.6/site-packages/django/contrib/admin/templates/learning_logs/new_topics.html (Source does not exist)
* django.template.loaders.app_directories.Loader: /usr/local/lib/python3.6/site-packages/django/contrib/auth/templates/learning_logs/new_topics.html (Source does not exist)
* django.template.loaders.app_directories.Loader: /Users/Wzd/Documents/github/python/mydjango/project_1/learing_log/learning_logs/templates/learning_logs/new_topics.html (Source does not exist)

Traceback:

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/Wzd/Documents/github/python/mydjango/project_1/learing_log/learning_logs/views.py" in new_topic
46. return render(request, 'learning_logs/new_topics.html', context)

File "/usr/local/lib/python3.6/site-packages/django/shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)

File "/usr/local/lib/python3.6/site-packages/django/template/loader.py" in render_to_string
67. template = get_template(template_name, using=using)

File "/usr/local/lib/python3.6/site-packages/django/template/loader.py" in get_template
25. raise TemplateDoesNotExist(template_name, chain=chain)

Exception Type: TemplateDoesNotExist at /new_topic/
Exception Value: learning_logs/new_topics.html`

pcc/chapter_19/learning_logs/views.py - The edit_entry() View function

Hey Eric, I'm doing the Chapter 19 assignment and I'm quite stuck with the edit_entry() View Function.
It seems, that under Django 2.0 the function causes an error and raises an exception:

Reverse for 'learning_logs/topic' not found. 'learning_logs/topic' is not a valid view function or pattern name.

python_repos.py

Hi Eric,
I am reading your Python Crash Course and am currently at Chapter 17, Working with APIs.

For the python_repos.py example, I wanted to use the following code:
description = repo_dict.get('description', 'No description provided')
Instead of:
description = repo_dict['description']
if not description:
description = 'No description provided.'

But this gives me an error code:
"NoneType" object has not attribute 'decode'.

Why is this?

Thank you!

Best,
Tian

Missing license

Hello,

I would like to use these cheat sheets for my Python class, but this GitHub repository is missing license. I'm not sure whether I can use these files or not.

May I ask you to add some LICENSE file to the repository?

Thank you very much for your work.

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.