Git Product home page Git Product logo

python_levelup_2018's People

Contributors

naboru avatar szpndr 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

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

python_levelup_2018's Issues

PD 3, Zad 2, 3, pytania

W zad 3 w opisie pojawia się sformułowanie:

@log_this ma drukować w (w odpowiednim formacie) kolejności:

poziom logowania* nazwę funkcji
argumenty wywołania
wynik funkcji

Ta gwiazdka to jak rozumiem wynik braku odstępu i nazwa funkcji to kolejny podpunkt.
Natomiast później jest przykład działania i na pierwszym miejscu jest, o ile dobrze rozumiem, format.

Po takim wywołaniu:

my_func(1, 2, d=True)
Zawoła na loggerze:

logger.info('%s: %s -> %s', 'my_func', ('1', '2', 'd=True'), 'Wow!')

Prośba o uściślenie co się tam ma znaleźć.
No chyba że czegoś nie rozumiem i to co tu widać to jest poziom logowania. ;)

Z poleceń wynika, że to co mamy wklejać w formularze to sam kod dekoratora. O ile import logging jest wyraźnie zasugerowany przy rozwiązywaniu zadania 3. więc pewnie mamy go pominąć, to przy zadaniu 2. są chyba co najmniej dwa sposoby na rozbicie stringa przekazywanego do process_json. functool.wraps są wygodne, ale raczej nieistotne dla zadania. Pytanie czy mamy wklejać importy czy nie?

Praca domowa 4, zadanie 1,2,5 - kolejność alfabetyczna

Chciałbym się dopytać, co dokładnie autor miał na myśli pisząc w pracy domowej o "kolejności alfabetycznej", a dokładniej czy powinniśmy przyjąć, że kolejność ta ma być czuła czy nieczuła na wielkość liter?
Jest to o tyle istotne, że w tabeli city występują zarówno miasta zaczynające się od wielkich, jak i małych liter, więc przyjęte założenie będzie miało wpływ na zwracane przez endpoint "/cities" wyniki.

W sqlite domyślnie sortowanie z wykorzystaniem "gołej" klauzuli ORDER BY jest czułe na wielkość liter czyli odwołując się do przykładu z pracy domowej, najpierw zwróci wszystkie miasta zaczynające się od wielkich liter, a na końcu te zaczynające się od małych.

Pozdrawiam i Wesołych Świąt Wielkiej Nocy :)

Zadanie domowe 2 - pytania

Zadanie 2 jest sformułowane na tyle niejasno, że mam kilka pytań:

  • jak ma zachowywać się endpoint '/login' w przypadku, gdy użytkownik jest zalogowany?
  • czy to, jak wygląda numeracja ryb jest sprecyzowane? Mamy numerować "id_1", id_2", ... i rybek szukać po /fishes/id_1?format=JSON (taki URL wygląda co najmniej dziwnie)?
  • co ma zawierać endpoint '/'?
  • czy mamy weryfikować JSON podawany w '/fishes/' PUT, PATCH oraz '/fishes' POST pod względem poprawności, czy możemy założyć, że wprowadzane dane są poprawne?
  • jeśli chcemy zmienić 'lat' u jakiejś rybki to przesłany JSON to będzie:
    {
    "where": {
    "lat": 0.001,
    }
    }
    czy może
    {
    "lat": 0.001
    }

INSERT do bazy

Cześć, po wejściu na endpoint /actors/add, po wpisaniu imienia, nazwiska i kliknięcia na "Dodaj" otrzymuję sqlite3.IntegrityError: NOT NULL constraint failed: actor.actor_id

Rozumiem, że to dlatego, że w schemacie bazy podane jest, że id nie może być NULL, nie inkrementuje się też samo z siebie. Pytanie: jak udało się to obejść na zajęciach? :)

Heroku autoupdate

Czy ma ktoś może problem, gdzie heroku mimo aktualnej wersji wpada w długą pętle automatycznej aktualizacji i każda komenda heroku w terminalu wykonuje się kilkanaście minut?

Podrzucam logi z CLI heroku.
autoupdate.log

P.S. Reinstalacja nie pomaga :/

Problem z uruchomieniem aplikacji na heroku [No web process running]

Cześć,
czy ktoś z was miał może problem z uruchomieniem aplikacji na heroku?
Aplikacja działa na localhoscie i zostaje pomyślnie zdeployowana, ale nie chce się uruchomić.
Heroku zwraca mi następujący błąd:

2018-04-10T23:44:21.958026+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/cities" host=level-up-zad5.herokuapp.com request_id=cb0272c6-6d23-4afb-80ae-aff16454f5d7 fwd="94.254.131.187" dyno= connect= servi

Prawidłowy sposób na obsługę błędów

Mam pytanie do prowadzących odnośnie prawidłowej obsługi błędów. W rozwiązaniu pracy domowej 2 stworzyliście osobny plik z klasą do obsługi błędów i przy spełnieniu odpowiedniego warunku wyrzucacie błąd poprzez
raise InvalidUsage('Please provide json data')
Czy takie obsługiwanie błędów jest gdzieś określone. Ja poszedłem po najmniejszej linii oporu i po sprawdzeniu warunku z błędem wyrzucam błąd w taki sposób:
return json.dumps({"error": error_list}), 400
Wcześniej oczywiście tworzę sobie listę z błędami. Chodzi mi o wskazanie jakiegoś prawidłowego wzorca dla obsługi błędów. Domyślam się, że mój sposób nie jest właściwy, ale działa i chciałbym poznać jakiś wzorzec żeby przepisać to w prawidłowy sposób. Z góry dziękuję.

Termin oddania zadania 05

Hej, właśnie widzę, że zmienił się termin oddania zadania ze środy na wtorek. Widząc poprzednim razem wpis "środa" nie spojrzałem w kalendarz i nie zauważyłem, że jest to błąd (bo 10.04 był wtorkiem). Tak zaplanowałem sobie tydzień, żeby do środy do końca dnia wysłać rozwiązanie.
Czy będzie to w ogóle wzięte pod uwagę?

Worker failed to boot

Powoli zaczynam się poddawać. Od dwóch dni męczę się z połączeniem aplikacji z bazą danych na heroku i niestety moje próby są wyłącznie pasmem porażek. Poniżej wrzucam logi z serwera heroku. Może komuś uda się naprowadzić mnie na właściwe tory:

2018-04-09T21:44:21.094537+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 244, in handle_chld 2018-04-09T21:44:21.094674+00:00 app[web.1]: self.reap_workers() 2018-04-09T21:44:21.094677+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 524, in reap_workers 2018-04-09T21:44:21.094886+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR) 2018-04-09T21:44:21.094923+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3> 2018-04-09T21:44:21.094925+00:00 app[web.1]: 2018-04-09T21:44:21.094926+00:00 app[web.1]: During handling of the above exception, another exception occurred: 2018-04-09T21:44:21.094927+00:00 app[web.1]: 2018-04-09T21:44:21.094928+00:00 app[web.1]: Traceback (most recent call last): 2018-04-09T21:44:21.094931+00:00 app[web.1]: File "/app/.heroku/python/bin/gunicorn", line 11, in <module> 2018-04-09T21:44:21.095021+00:00 app[web.1]: sys.exit(run()) 2018-04-09T21:44:21.095024+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 74, in run 2018-04-09T21:44:21.095132+00:00 app[web.1]: WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run() 2018-04-09T21:44:21.095135+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 203, in run 2018-04-09T21:44:21.095359+00:00 app[web.1]: super(Application, self).run() 2018-04-09T21:44:21.095363+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 72, in run 2018-04-09T21:44:21.095464+00:00 app[web.1]: Arbiter(self).run() 2018-04-09T21:44:21.095467+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 231, in run 2018-04-09T21:44:21.095600+00:00 app[web.1]: self.halt(reason=inst.reason, exit_status=inst.exit_status) 2018-04-09T21:44:21.095601+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 344, in halt 2018-04-09T21:44:21.095770+00:00 app[web.1]: self.stop() 2018-04-09T21:44:21.095772+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 393, in stop 2018-04-09T21:44:21.095947+00:00 app[web.1]: time.sleep(0.1) 2018-04-09T21:44:21.095948+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 244, in handle_chld 2018-04-09T21:44:21.096078+00:00 app[web.1]: self.reap_workers() 2018-04-09T21:44:21.096081+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 524, in reap_workers 2018-04-09T21:44:21.096288+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR) 2018-04-09T21:44:21.096292+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3> 2018-04-09T21:46:28.789297+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/cities" host=alhemysql.herokuapp.com request_id=65262c28-cc63-4b8f-a625-7236167288bd fwd="89.70.133.74" dyno= connect= service= status=503 bytes= protocol=https 2018-04-09T21:49:46.193489+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/cities" host=alhemysql.herokuapp.com request_id=e5e8c1e8-42a7-45d4-a1bb-46f2b7dc1418 fwd="89.70.133.74" dyno= connect= service= status=503 bytes= protocol=https 2018-04-09T21:57:43.885495+00:00 heroku[web.1]: State changed from crashed to starting 2018-04-09T21:57:47.418652+00:00 heroku[web.1]: Starting process with commandgunicorn app:app2018-04-09T21:57:49.017894+00:00 app[web.1]: [2018-04-09 21:57:49 +0000] [4] [INFO] Starting gunicorn 19.7.1 2018-04-09T21:57:49.018394+00:00 app[web.1]: [2018-04-09 21:57:49 +0000] [4] [INFO] Listening at: http://0.0.0.0:55377 (4) 2018-04-09T21:57:49.018492+00:00 app[web.1]: [2018-04-09 21:57:49 +0000] [4] [INFO] Using worker: sync 2018-04-09T21:57:49.021914+00:00 app[web.1]: [2018-04-09 21:57:49 +0000] [8] [INFO] Booting worker with pid: 8 2018-04-09T21:57:49.040345+00:00 app[web.1]: [2018-04-09 21:57:49 +0000] [9] [INFO] Booting worker with pid: 9 2018-04-09T21:57:49.051977+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>. 2018-04-09T21:57:49.051980+00:00 app[web.1]: """) 2018-04-09T21:57:49.060981+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>. 2018-04-09T21:57:49.060984+00:00 app[web.1]: """) 2018-04-09T21:57:49.559303+00:00 heroku[web.1]: State changed from starting to up 2018-04-09T21:57:50.232313+00:00 heroku[web.1]: Process exited with status 3 2018-04-09T21:57:50.243017+00:00 heroku[web.1]: State changed from up to crashed 2018-04-09T21:57:50.001511+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning. 2018-04-09T21:57:50.001574+00:00 app[web.1]: 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and ' 2018-04-09T21:57:50.005761+00:00 app[web.1]: [2018-04-09 21:57:50 +0000] [8] [ERROR] Exception in worker process 2018-04-09T21:57:50.005766+00:00 app[web.1]: worker.init_process() 2018-04-09T21:57:50.005763+00:00 app[web.1]: Traceback (most recent call last): 2018-04-09T21:57:50.005765+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker 2018-04-09T21:57:50.005767+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process 2018-04-09T21:57:50.005768+00:00 app[web.1]: self.load_wsgi() 2018-04-09T21:57:50.005770+00:00 app[web.1]: self.wsgi = self.app.wsgi() 2018-04-09T21:57:50.005769+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi 2018-04-09T21:57:50.005772+00:00 app[web.1]: self.callable = self.load() 2018-04-09T21:57:50.005773+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load 2018-04-09T21:57:50.005771+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi 2018-04-09T21:57:50.005774+00:00 app[web.1]: return self.load_wsgiapp() 2018-04-09T21:57:50.005775+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 2018-04-09T21:57:50.005776+00:00 app[web.1]: return util.import_app(self.app_uri) 2018-04-09T21:57:50.005777+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app 2018-04-09T21:57:50.005778+00:00 app[web.1]: __import__(module) 2018-04-09T21:57:50.005781+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/__init__.py", line 424, in create_engine 2018-04-09T21:57:50.005779+00:00 app[web.1]: File "/app/app.py", line 31, in <module> 2018-04-09T21:57:50.005780+00:00 app[web.1]: engine = create_engine(conn) 2018-04-09T21:57:50.005782+00:00 app[web.1]: return strategy.create(*args, **kwargs) 2018-04-09T21:57:50.005783+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 52, in create 2018-04-09T21:57:50.005784+00:00 app[web.1]: plugins = u._instantiate_plugins(kwargs) 2018-04-09T21:57:50.009380+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning. 2018-04-09T21:57:50.005788+00:00 app[web.1]: AttributeError: 'psycopg2.extensions.connection' object has no attribute '_instantiate_plugins' 2018-04-09T21:57:50.006134+00:00 app[web.1]: [2018-04-09 21:57:50 +0000] [8] [INFO] Worker exiting (pid: 8) 2018-04-09T21:57:50.009397+00:00 app[web.1]: 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and ' 2018-04-09T21:57:50.013604+00:00 app[web.1]: Traceback (most recent call last): 2018-04-09T21:57:50.013602+00:00 app[web.1]: [2018-04-09 21:57:50 +0000] [9] [ERROR] Exception in worker process 2018-04-09T21:57:50.013606+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker 2018-04-09T21:57:50.013607+00:00 app[web.1]: worker.init_process() 2018-04-09T21:57:50.013608+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process 2018-04-09T21:57:50.013609+00:00 app[web.1]: self.load_wsgi() 2018-04-09T21:57:50.013610+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi 2018-04-09T21:57:50.013615+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load 2018-04-09T21:57:50.013611+00:00 app[web.1]: self.wsgi = self.app.wsgi() 2018-04-09T21:57:50.013616+00:00 app[web.1]: return self.load_wsgiapp() 2018-04-09T21:57:50.013613+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi 2018-04-09T21:57:50.013614+00:00 app[web.1]: self.callable = self.load() 2018-04-09T21:57:50.013617+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 2018-04-09T21:57:50.013619+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app 2018-04-09T21:57:50.013620+00:00 app[web.1]: __import__(module) 2018-04-09T21:57:50.013618+00:00 app[web.1]: return util.import_app(self.app_uri) 2018-04-09T21:57:50.013622+00:00 app[web.1]: engine = create_engine(conn) 2018-04-09T21:57:50.013621+00:00 app[web.1]: File "/app/app.py", line 31, in <module> 2018-04-09T21:57:50.013624+00:00 app[web.1]: return strategy.create(*args, **kwargs) 2018-04-09T21:57:50.013623+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/__init__.py", line 424, in create_engine 2018-04-09T21:57:50.013625+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 52, in create 2018-04-09T21:57:50.013626+00:00 app[web.1]: plugins = u._instantiate_plugins(kwargs) 2018-04-09T21:57:50.014005+00:00 app[web.1]: [2018-04-09 21:57:50 +0000] [9] [INFO] Worker exiting (pid: 9) 2018-04-09T21:57:50.013629+00:00 app[web.1]: AttributeError: 'psycopg2.extensions.connection' object has no attribute '_instantiate_plugins' 2018-04-09T21:57:50.174093+00:00 app[web.1]: [2018-04-09 21:57:50 +0000] [4] [INFO] Reason: Worker failed to boot. 2018-04-09T21:57:50.173979+00:00 app[web.1]: [2018-04-09 21:57:50 +0000] [4] [INFO] Shutting down: Master 2018-04-09T22:01:36.680551+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=alhemysql.herokuapp.com request_id=0ea59cfb-71f2-49b4-bff0-512ce1e9deca fwd="89.70.133.74" dyno= connect= service= status=503 bytes= protocol=https 2018-04-09T22:01:39.802282+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/cities" host=alhemysql.herokuapp.com request_id=91ccada8-354a-421b-8ea6-ac3265d9b8a6 fwd="89.70.133.74" dyno= connect= service= status=503 bytes= protocol=https

Zadanie domowe nr 6

Cześć!
Nie było mnie na ostatnich zajęciach, nie pojawiło się do tej pory żadne zadanie na gicie, ani nie przyszedł żaden mail. Jak mam to rozumieć? ;)

Brak informacji odnośnie przesłania drugiej pracy domowej

Przy pierwszej pracy domowej podany był link do formularza, w którym należało podać adres aplikacji oraz wkleić kod.

W przypadku drugiej pracy domowej nie ma żadnej informacji, jak mamy ją dostarczyć. Musi być po prostu pod tym samym linkiem co wcześniej, a kod tym razem nie jest wymagany, czy brak informacji to jednak przeoczenie?

Problem z wypchnięciem plików na Heroku

Może orientuje się ktoś jak zwalczyć następujący błąd pojawiający się przy deployowaniu apki na heroku:
remote: Compressing source files... done. remote: Building source: remote: remote: ! No default language could be detected for this app. remote: HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically. remote: See https://devcenter.heroku.com/articles/buildpacks remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to alhemysql. remote: To https://git.heroku.com/alhemysql.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/alhemysql.git' ?

Próbowałem rozwiązań znalezionych w sieci i nic niestety nie działa. Dodawałem runtime.txt, Pipfile ze wskazaniem Pythona 3.6.4 i cały czas ten sam błąd. Dotyczy to tylko najnowszej apki z sqlalhemy. Męczę się już z 2 godziny i powoli tracę nadzieję. Może ktoś już to przerabiał i pomoże...

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.