Giter Site home page Giter Site logo

openmensa / openmensa Goto Github PK

View Code? Open in Web Editor NEW
71.0 71.0 9.0 3.78 MB

Central hub for canteen information (meals, location ...)

Home Page: https://openmensa.org

License: GNU Affero General Public License v3.0

Ruby 77.59% HTML 1.08% JavaScript 1.27% SCSS 7.25% Sass 0.08% Slim 12.00% Shell 0.16% Dockerfile 0.54% Makefile 0.02%
canteen meals openmensa ruby

openmensa's Introduction

OpenMensa - Die offene Mensa Datenbank

GitHub Workflow Status (main branch) Coverage Maintainability

OpenMensa is a free database for canteens. We act as a central exchange for all canteen relevant information, such as canteen list, canteen position and meal menus.

We provide a standardized format to access and provide this information. This reduces the workload for a canteen provider to make their meal menus available on different end points (website, android, iOS ...).

We are currently focused on Germany but are interested to open to other countries.

Getting started

  1. install needed gems

    bundle install
  2. Run test suite

    bundle exec rspec

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Add specs for your feature
  4. Implement your feature
  5. Commit your changes (git commit -am 'Add some feature')
  6. Push to the branch (git push origin my-new-feature)
  7. Create new Pull Request

License

AGPLv3 License

Copyright, 2014-2023 OpenMensa

openmensa's People

Contributors

atgoogat avatar chk1 avatar cmur2 avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar gregoor avatar jgraichen avatar kaifabian avatar knorpelsenf avatar leptopoda avatar lukashass avatar marcoroth avatar mswart avatar neothethird avatar renovate-bot avatar renovate[bot] avatar snyk-bot avatar tomkoenecke 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

openmensa's Issues

feed messages table is distorted

On a canteen you can click on the letter ✉ symbol of a feed to see the status of the recent fetches. e.g. https://openmensa.org/feeds/1785/messages

There is a problem with the table on that page:

The HTML of the table looks like this:

<tr>
    <td rowspan="0">+ 1 i class=(reason_map[fetch.reason]) title=t(:feed_fetch, :reasons, fetch.reason)</td>
    <td>17. April, 10:06 Uhr</td>
    <td>Veränderung</td>
    <td class="number">0</td>
    <td class="number">0</td>
    <td class="number">2</td>
    <td class="number">0</td>
    <td class="number">1</td>
</tr>
<tr>
    <td rowspan="0">+ 1 i class=(reason_map[fetch.reason]) title=t(:feed_fetch, :reasons, fetch.reason)</td>
    <td>17. April, 09:00 Uhr</td>
    <td>Keine Veränderung</td>
    <td class="number">0</td>
    <td class="number">0</td>
    <td class="number">0</td>
    <td class="number">0</td>
    <td class="number">0</td>
</tr>
...

Seems to be this file:

td rowspan=fetch.messages.size + 1
i class=(reason_map[fetch.reason]) title=t(:feed_fetch, :reasons, fetch.reason)

Add field for allergy information and other restriction labels

Many visitors of canteens rely on allergy information and labels for vegetarian or vegan food for ethical reasons as well as other restrictions based on faith. If this would be added in a machine-readable way, applications could allow for filtering based on certain dietary restrictions.

Feeds from my parser are not fetched daily.

I wrote a parser for some canteens from the Heidelberg Studierendenwerk and so far everything seemed to be working fine.
But today I noticed that neither the "today" nor the "full" feed are fetched on a daily basis.

An example:
http://openmensa.org/c/277/
It says there:

Feed "today"
Letzte Abruf: vor 10 Stunden
Nächster Abruf: -
Feed "full"
Letzte Veränderung: 04.05.2016
Letzte Abruf: 05.05.2016
Nächster Abruf: -

(I manually updated the "today" feed 10 hours ago)
So why is there no date for "Nächster Abruf"? Is there a setting for automatic fetching that I missed?

Feature: Group a meal's notes

A meal's notes could support optional groups.

Example

API

{
  "id": 260,
  "name": "Gemüse-Couscouspfanne mit Joghurt-Ingwer-Dip, dazu bunter Blattsalat",
  "notes": [
    "mensaVital"
  ],
  "notegroups": {
    "additives": [
      "Milch",
      "Gluten",
      "Farbstoff"
    ],
    "nutritional-information": [
      "Brennwert = 2144 kJ (512 kcal)",
      "Fett = 13,1g",
      "Kohlenhydrate = 70,6g",
      "Eiweiß = 19,6g"
    ]
  },
  "prices": {
    "student": 2.3,
    "employee": 3.65,
    "other": 4.6
  },
  "category": "Alternativ-Angebot"
}

Feed

<meal>
    <name>Gemüse-Couscouspfanne mit Joghurt-Ingwer-Dip, dazu bunter Blattsalat</name>
    <note>mensaVital</note>
    <note>vegetarisch</note>
    <notegroup name="additives">
        <note>Milch</note>
        <note>Gluten</note>
        <note>Farbstoff</note>
    </notegroup>
    <notegroup name="nutritional-information">
        <note>Brennwert = 2144 kJ (512 kcal)</note>
        <note>Fett = 13,1g</note>
        <note>Kohlenhydrate = 70,6g</note>
        <note>Eiweiß = 19,6g"</note>
    </notegroup>
    <price role="student">2.30</price>
    <price role="employee">3.65</price>
    <price role=other>4.60</price>
</meal>

This would be backwards-compatible, but allow for tydier notes.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • chore(deps): update dependency rspec-rails to v6.1.5
  • chore(deps): update ruby to v3.3.5 (docker.io/ruby, ruby)
  • chore(deps): update dependency brakeman to v6.2.1
  • chore(deps): update dependency good_job to v4.2.1
  • chore(deps): update dependency rails to "~> 7.2.0"
  • chore(deps): update dependency rubocop to "~> 1.66.0"
  • chore(deps): update dependency rubocop-rails to "~> 2.26.0"
  • chore(deps): update dependency sass-embedded to v1.78.0
  • chore(deps): update sentry-ruby monorepo to v5.19.0 (sentry-rails, sentry-ruby)
  • chore(deps): update yarn to v4.4.1
  • chore(deps): update dependency @rspack/cli to v1
  • chore(deps): update dependency @rspack/core to v1
  • chore(deps): update dependency husky to v9
  • chore(deps): update dependency rspec-rails to v7
  • chore(deps): update dependency rubocop-rspec to v3
  • chore(deps): update dependency sass-loader to v16
  • chore(deps): lock file maintenance

Detected dependencies

bundler
Gemfile
  • ruby ~> 3.3.0
  • rails "~> 7.1.0"
  • rails-i18n "~> 7.0"
  • jsbundling-rails undefined
  • propshaft undefined
  • rails-assets-manifest undefined
  • puma "~> 6.0"
  • bcrypt undefined
  • good_job "~> 4.0"
  • oj undefined
  • pg "~> 1.2"
  • slim "~> 5.0"
  • cancancan "~> 3.2"
  • omniauth "~> 2.0"
  • omniauth-facebook undefined
  • omniauth-github undefined
  • omniauth-google-oauth2 undefined
  • omniauth-oauth2 undefined
  • omniauth-rails_csrf_protection "~> 1.0"
  • omniauth-twitter undefined
  • parse-cron undefined
  • rack-cors undefined
  • geocoder "~> 1.6"
  • gravtastic undefined
  • rails-timeago undefined
  • simple_form undefined
  • api-responder undefined
  • decorate-responder "~> 2.1"
  • draper "~> 4.0"
  • has_scope "~> 0.8.0"
  • paginate-responder "~> 2.0"
  • responders undefined
  • will_paginate undefined
  • sentry-rails undefined
  • sentry-ruby undefined
  • stackprof undefined
  • telegraf undefined
  • brakeman undefined
  • listen undefined
  • spring undefined
  • spring-commands-rspec undefined
  • squasher undefined
  • rubocop "~> 1.65.0"
  • rubocop-capybara "~> 2.21.0"
  • rubocop-factory_bot "~> 2.26.0"
  • rubocop-performance "~> 1.21.0"
  • rubocop-rails "~> 2.25.0"
  • rubocop-rspec "~> 2.31.0"
  • pry undefined
  • pry-byebug undefined
  • rspec-collection_matchers undefined
  • rspec-its undefined
  • rspec-rails "6.1.4"
  • capybara "~> 3.35"
  • capybara-email "~> 3.0"
  • cuprite "~> 0.13"
  • factory_bot_rails "~> 6.1"
  • rails-controller-testing undefined
  • timecop undefined
  • webmock undefined
  • simplecov undefined
  • simplecov-cobertura undefined
docker-compose
docker-compose.yml
  • postgres 16-alpine
  • nginx 1.27-alpine
dockerfile
Dockerfile
  • docker/dockerfile 1.9
  • docker.io/node 22-slim
  • docker.io/ruby 3.3.4-slim-bullseye
  • docker.io/ruby 3.3.4-slim-bullseye
github-actions
.github/workflows/docs.yml
  • actions/checkout v4
  • actions/setup-python v5
  • actions/upload-pages-artifact v3
  • actions/deploy-pages v4
  • ubuntu 22.04
  • ubuntu 22.04
.github/workflows/test.yml
  • actions/checkout v4
  • actions/setup-node v4
  • ruby/setup-ruby v1
  • codecov/codecov-action v4
  • actions/checkout v4
  • ruby/setup-ruby v1
  • actions/checkout v4
  • actions/setup-node v4
  • actions/checkout v4
  • docker/setup-buildx-action v3
  • docker/login-action v3
  • docker/metadata-action v5
  • docker/build-push-action v6
  • actions/checkout v4
  • postgres 16-alpine
  • ubuntu 22.04
  • ubuntu 22.04
  • ubuntu 22.04
  • ubuntu 22.04
  • ubuntu 22.04
npm
package.json
  • @fortawesome/fontawesome-free ^6.5.2
  • @rails/ujs ^7.1.3-2
  • bourbon ^7.3.0
  • jquery ^3.7.1
  • jquery.autocomplete ^1.2.0
  • leaflet ^1.9.4
  • leaflet-hash ^0.2.1
  • leaflet.locatecontrol ^0.81.0
  • leaflet.markercluster ^1.5.3
  • @gfx/zopfli ^1.0.15
  • @rsbuild/core ^0.7.0
  • @rspack/cli ^0.7.0
  • @rspack/core ^0.7.0
  • compression-webpack-plugin ^11.1.0
  • husky ^8.0.3
  • lint-staged ^15.0.0
  • prettier ^3.0.0
  • rspack-manifest-plugin ^5.0.0
  • sass-embedded ^1.76.0
  • sass-loader ^14.2.1
  • node >= 20
  • yarn 4.3.1
  • yarn 4.3.1
pipenv
Pipfile
  • mkdocs-material ~=9.5.2
  • mkdocs-git-revision-date-plugin ~=0.3.2
  • mdx-truly-sane-lists ~=1.2
  • mkdocs-awesome-pages-plugin ~=2.9.0
ruby-version
.ruby-version
  • ruby 3.3.4

  • Check this box to trigger a request for Renovate to run again on this repository

New Hamburg parser

@jgraichen

The Hamburg parser from https://github.com/mswart/openmensa-parsers/ is broken.

Since the mswart/openmensa-parsers repository is not maintained and the website of Hamburg has changed significantly, I decided to write a new parser for Hamburg and host it on my own repository: https://github.com/cvzi/mensahd (https://cvzi.github.io/mensahd/hamburg.json)
I added it as a new parser to openmensa (https://openmensa.org/parsers/94).

The only problem is that the old parser is still active and the canteens are now listed twice.
Example:
Old https://openmensa.org/c/122 and new https://openmensa.org/c/1747

I was wondering if it is possible to either disable the old hamburg parser or get access to it on openmensa to change the feed urls?

If that is possible, I'd consider fixing some more of the broken parsers from mswart/openmensa-parsers

Änderungsvorschläge in status table

In my parsers there are some canteens that have 1's under "Änderungsvorschläge" in the status table:
screenshot_anderungsvorschlage
I am not sure what that means? If I click on the number, I get to a page that says

Mannheim, Mensa am Schloss
Änderungsvorschläge
15. Mai, 23:24 Uhr

Canteen suggestion page is not moderated

The page on https://openmensa.org/c/new is not moderated. This allows users to post arbitrary content on the page. It seems that this is happening right now (there are some suspicious entries, might be that someone uses that page as a dead drop).

I suggest adding a moderation feature for that page.

Support meal pictures

Some canteens provide pictures for meals. It would be nice if the api and feed supported this.

As a starting proposal, I suggest a simple "pictures" additional attribute for meals which contains a list of links to pictures. This list can be empty if there is no picture.

Store/handle opening times for canteens

The feed already supports opening times, but at the moment not the application itself.

This feature is extract from next branch as it is not so important but requires a bunch of changes/challenges.

References #4

Complete next branch

As stated in #4

  • feed is extended (v2.1)
  • update is extended to work with (v2.1) feeds
  • data model is enhanced with parser, source, feed
  • developer can manage parser, sources, feeds manual
  • developer can manage source/feeds by meta data feed and index URL
  • extend canteen meta data via email and telephone number
  • the developer mailer is extended (e.g. with helpful summary subject lines)
  • user can submit error reports for canteens
  • user can propose (meta) data changes
  • user can report canteens that needs a parser
  • implement source list synchronization
  • implement source synchronization
  • adjust fetch crontab for new improved scheduling
  • extend parser mailer to messages for source and parser
  • view error reports
  • accept/merge data proposals
  • improve become developer workflow (documentation, plus explicit action)
  • parser info status page for developer
  • error/messages page for developer
  • handle archived canteens (and the belonging sources and feeds) correctly
  • support editing canteens / open canteen from parser#show
  • support developer to provide more information about himself like public email address, URL ...
  • add parser box to canteen#show page to provide information about author and parser (if data are provided/wanted)
  • support marking parser as maintainer wanted ...
  • style text area on report error page
  • support not to correct/adjust canteen position on new data proposals
  • convert "" to nil on most new fields

support multiple languages

Some canteens must already provide information in multiple languages. With increasing number of people moving around the globe more freely, supporting multiple languages sounds like a natural evolution.

Interesting tool used by frontend web apps, which uses Wikidata as source for food names
http://googleknowledge.github.io/qlabel/demo/menu/

Since I work with linked data, I find it offering some helpful ways to manage multilingual content. From API perspective and recognizing JSON becoming most popular serialization in world of web APIs, this feature of JSON-LD looks very helpful - http://www.w3.org/TR/json-ld/#string-internationalization

Can't place canteen on map if address was not found

I created a canteen and entered an address like I did a few times, but with one particular address I received a fully grey map, I was not able to place a marker. There were no map tiles and no marker to move around, I was not able to zoom or pan the map.

The address in question belongs to "Bistro Frieden" :
Scharnhorststraße 100, 48151 Münster, Germany

I suspect this is because the geocoder can not find the address, OSM's nominatim does not find it either.

I managed to find a workaround by filling the coordinate fields with the Firefox devtools (fields are readonly)

Aasee Münster parser stopped working

Hey everyone,

I recently realized the parser for the Aasee canteen in Münster stopped working.

I got in touch with the canteen and they said, they indeed stopped to provide the XML. But they provide an HTML you could use to parse the meals. They send me this link: https://muenster.my-mensa.de/essen.php?v=5326049&hyp=1&lang=de&mensa=aasee#aasee_tag_2020231

So far I didn't implement a parser for openmensa, but if none of you is working on it, I would give it a try.

Cheers.

iCalendar stream for user/canteen

Hi there, I already spoke to Malte about my idea to implement a calendar API for users. I thought about the following scenarios:

  1. There is a public stream for each canteen.
  2. The user can generate a link to a stream based on his canteen favorites. (auth via token)

The url should handle some parameters like "show event for all day" or "event's time based on the canteen's opening hours". A response then contains events with the parsed information for each day. I would also build a small url generator for users based on your decisions.

For the implementation I found ri_cal and/or icalendar.

Please provide me some feedback on what you want me to implement. Thanks :)

Canteens not updated anymore

Some canteens appear to not be updated anymore, even though their parsers appear to work fine.

See the issue on OpenMensa Parsers.

Observations

The "main" canteen for Aachen, the Academica, is normally displayed. However, secondary canteens, which use the same parser, e. g. Ahorn, have not received any updates since a while.

I do not know what differences OpenMensa sees between these parser.

Updated Parsers for Studentenwerk Thüringen

Hi there!

During the last days a pull request at https://github.com/mswart/openmensa-parsers got merged, which added parsers for almost every canteen from Studentenwerk Thüringen.
I will try to document for which canteens a parser already exists but isn't working, and which parsers are completely new.

Canteen Name City current status(old parser) new parser-link
Mensa am Wartenberg Eisenach - http://omfeeds.devtation.de/thueringen/ei-wartenberg/full.xml
Mensa Nordhäuser str. Erfurt not working http://omfeeds.devtation.de/thueringen/ef-nordhaeuser/full.xml
Mensa Altonaer str. Erfurt not-working http://omfeeds.devtation.de/thueringen/ef-altonaer/full.xml
Cafeteria Schlüterstr. Erfurt - http://omfeeds.devtation.de/thueringen/ef-schlueterstr/full.xml
Cafeteria Leipzigers. Erfurt - http://omfeeds.devtation.de/thueringen/ef-leipzigerstr/full.xml
Mensa Weg der Freundschaft Gera - http://omfeeds.devtation.de/thueringen/ge-freundschaft/full.xml
Mensa Ehrenberg Ilmenau not working http://omfeeds.devtation.de/thueringen/il-ehrenberg/full.xml
Cafeteria Ehrenberg Ilmenau not-working http://omfeeds.devtation.de/thueringen/il-cafeteria/full.xml
Nanoteria Ilmenau not-working http://omfeeds.devtation.de/thueringen/il-nanoteria/full.xml
Roentgen Mensa Ilmenau - http://omfeeds.devtation.de/thueringen/il-roentgen/full.xml
Mensa Carl-Zeiss Promenade Jena not working http://omfeeds.devtation.de/thueringen/je-zeiss/full.xml
Cafeteria EAH Jena - http://omfeeds.devtation.de/thueringen/je-eah/full.xml
Mensa Ernst Abbe Platz Jena not working http://omfeeds.devtation.de/thueringen/je-ernstabbe/full.xml
vegeTable Jena - http://omfeeds.devtation.de/thueringen/je-vegeTable/full.xml
Cafeteria zur Rosen Jena - http://omfeeds.devtation.de/thueringen/je-rosen/full.xml
Mensa Philosophenweg Jena not working http://omfeeds.devtation.de/thueringen/je-philosophen/full.xml
Cafeteria Uni Hauptgelände Jena - http://omfeeds.devtation.de/thueringen/je-haupt/full.xml
Cafeteria Bibliothek Jena - http://omfeeds.devtation.de/thueringen/je-bib/full.xml
Mensa Weinberghof Nordhausen - http://omfeeds.devtation.de/thueringen/nh-mensa/full.xml
Mensa Blechhammer Schmalkalden - http://omfeeds.devtation.de/thueringen/sk-mensa/full.xml
Cafeteria am Horn Weimar - http://omfeeds.devtation.de/thueringen/we-horn/full.xml
Mensa am Park Weimar not working http://omfeeds.devtation.de/thueringen/we-park/full.xml
Cafeteria Anna Amalia Bibliothek Weimar - http://omfeeds.devtation.de/thueringen/we-anna/full.xml
Cafeteria Coudraystr. Weimar - http://omfeeds.devtation.de/thueringen/we-coudray/full.xml

It would be great if the new canteens could be added to openmensa and the ones that aren't working at the moment could be changed to use the new parsers :)

Cheers

Allow for dual opening hours and two separate meals per day

some of our mensas have a lunch (mittagessen) and dinner (abendessen), and thus two opening hours. how should this be entered?

<times type="opening">
  <monday open="11:00-14:00; 17:00-20:00" />

and the meals with a category?

<canteen>
<day date="2012-05-29">
  <category name="Mittag - Hauptgericht">
    <meal>
      <name>Rührei mit Rahmspinat und Salzkartoffeln</name>
      <note>ovo-lacto-vegetabil</note>
      <price role="student">1.20</price>
      <price role="employee">2.60</price>
      <price role="other">3.00</price>
    </meal>
    <meal>
      <name>Hähnchengeschnetzeltes mit exotischen Früchten, dazu Bio-Reis und Mischsalat</name>
      <note>mit Geflügelfleisch</note>
      <price role="student">2.00</price>
      <price role="employee">3.35</price>
      <price role="other">4.00</price>
    </meal>
  </category>
  <category name="Mittag - Sonstiges">
    <meal>
      <name>Spargelcremsuppe</name>
      <price role="other">2.00</price>
    </meal>
  </category>
  <category name="Abend - Hauptgericht">
    <meal>
      <name>Spaghetti</name>
      <price role="other">2.00</price>
    </meal>
  </category>
</day>

<day date="2012-05-28">
  <closed/>
</day>
</canteen>

fetching HTTPS feeds with CAcert certificate fail

Hi guys,

since the last update, my feeds do not get fetched anymore, since they fail with a "certificate verify failed". It seems that the updates either induced a new certificate check, or CAcert is no longer listed as a trusted CA.

Best regards,
Kai

Dependabot can't resolve your Ruby dependency files

Dependabot can't resolve your Ruby dependency files.

As a result, Dependabot couldn't update your dependencies.

The error Dependabot encountered was:

Bundler::GemNotFound with message: Could not find rack-cors-1.0.4 in any of the sources

If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.

Responding to feedback

Currently there seems to be no way to respond to user feedback (or alternatively mark as "resolved")

firefox_2016-12-13_22-13-33

Timeout when opening parser with many feeds

Currently, I cannot open some parsers that have many feeds, like Zürich: https://openmensa.org/parsers/52 I just get a timeout after 60 s.

My guess after briefly looking at the code (still without any Rails knowledge) is that it just naively loads every message for every feed_fetch for every feed for every canteen (at least I couldn't find any clever DB query) and this just kills performance when you have many feeds with many fetches each by generating thousands of DB queries.

More detailed page titles

Current every page has "OpenMensa" as page title. It is not wrong, but not precise. At least the canteen pages should provide better subjects e.g for better display in browser history or completion.

Make canteen names more consistent

The current canteens are named after different styles, prefixes like city, canteen type ("cafe", "mensa" ...), institution name.

[ ] Decide on a recommenced naming schema
[ ] Implement tools to remind / enforce this schema; like canteen create/edit form.

Support changelog / canteen update notification

For other tools I would be very helpful, if they could be subscribe to canteen changes (new canteen, canteen updated ...) - either on human basis (E-Mail to user) or software basis (API call ...).

In addition I think it would make sense to create a changelog/news page, where users can see the last changes for canteens (new canteens, updated canteens ...)

Feed schema: Add metadata

As a developer of a canteen parser, I would find it useful to include some (optional) metadata about the canteen and the parser itself.

  • Is the canteen publicly accessible? Company canteens usually aren't, so I could give a hint about that.
  • Parser-related info/metadata (this is more technical and might or might not be shown to the actual end-user)
    • Source URL: As a parser developer, I could give a hint about where I got my information from.
    • Parser version
    • Developer info (Name, email address, and/or URL) - or, maybe even better, a URL to a website with more information about the parser or developer (this could be a link to Github). It should give enough information to contact the developer in case something is wrong with the parser. So far it is not possible to get this information via the API.

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.