Git Product home page Git Product logo

claper's Introduction

Contributors Forks Stargazers Issues MIT License


Logo

Claper

The ultimate tool to interact with your audience.
Explore the docs ยป

Report Bug ยท Request Feature

Product Name Screen Shot

Claper turns your presentations into an interactive, engaging and exciting experience.

Claper has a two-sided mission:

  • The first one is to help these people presenting an idea or a message by giving them the opportunity to make their presentation unique and to have real-time feedback from their audience.
  • The second one is to help each participant to take their place, to be an actor in the presentation, in the meeting and to feel important and useful.

Supported languages: ๐Ÿ‡ฌ๐Ÿ‡ง English, ๐Ÿ‡ซ๐Ÿ‡ท French, ๐Ÿ‡ฉ๐Ÿ‡ช German, ๐Ÿ‡ช๐Ÿ‡ธ Spanish

Built With

Claper is proudly powered by Phoenix and Elixir.

Phoenix Elixir Tailwind

Documentation

You can find all the instructions and configuration in the documentation.

Development environment

Prerequisites

To run Claper on your local environment you need to have:

  • Postgres >= 15
  • Elixir >= 1.16
  • Erlang >= 26
  • NPM >= 10
  • NodeJS >= 20
  • Ghostscript >= 9 (for PDF support)
  • Libreoffice >= 24 (for PPT/PPTX support)

Installation

  1. Clone the repo
    git clone https://github.com/ClaperCo/Claper.git
  2. Install dependencies
    mix deps.get
  3. Migrate your database
    mix ecto.migrate
  4. Install JS dependencies
    cd assets && npm i
  5. Allow execution of startup file
    chmod +x ./start.sh
  6. Start Phoenix endpoint with
    ./start.sh

Now you can visit localhost:4000 from your browser.

If you have configured MAIL to local, you can access to the mailbox at localhost:4000/dev/mailbox.

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/amazing_feature)
  3. Commit your Changes (git commit -m 'Add some amazing feature')
  4. Push to the Branch (git push origin feature/amazing_feature)
  5. Open a Pull Request

License

Distributed under the GPLv3 License. See LICENSE.txt for more information.

Contact

Project Link: https://github.com/ClaperCo/Claper

claper's People

Contributors

alxlion avatar anarion80 avatar aweher avatar dhanus3133 avatar haruncurak avatar joleaf avatar kloenk avatar mokaddem avatar railsmechanic 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

claper's Issues

Docker container crash when install using the Docker way

Context
As an admin sys, I would like to test Claper on my local machine before installing it for my company

Describe the bug
Steps to reproduce

  1. Launch docker container : docker run -p 5432:5432 -e POSTGRES_PASSWORD=claper -e POSTGRES_USER=claper -e POSTGRES_DB=claper --name claper-db -d postgres:9 (works fine)
  2. Build claper container : docker build -t claper . (works fine)
  3. Launch claper container : docker run -p 4000:4000 -d claper
    โ‡’ Crashes with this message
ERROR! Config provider Config.Reader failed with:
{"init terminating in do_boot",{#{'__exception__'=>true,'__struct__'=>'Elixir.RuntimeError',message=><<101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,32,68,65,84,65,66,65,83,69,95,85,82,76,32,105,115,32,109,105,115,115,105,110,103,46,10,70,111,114,32,101,120,97,109,112,108,101,58,32,101,99,116,111,58,47,47,85,83,69,82,58,80,65,83,83,64,72,79,83,84,47,68,65,84,65,66,65,83,69,10>>},[{erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,685},{error_info,#{module=>'Elixir.Exception'}}]},{erl_eval,expr,5,[{file,"erl_eval.erl"},{line,446}]},{erl_eval,exprs,5,[{file,"erl_eval.erl"},{line,123}]},{elixir,recur_eval,3,[{file,"src/elixir.erl"},{line,289}]},{elixir,eval_forms,3,[{file,"src/elixir.erl"},{line,274}]},{'Elixir.Code',validated_eval_string,3,[{file,"lib/code.ex"},{line,404}]},{'Elixir.Config','__eval__!',3,[{file,"lib/config.ex"},{line,260}]},{'Elixir.Config.Reader','read!',2,[{file,"lib/config/reader.ex"},{line,92}]}]}}
init terminating in do_boot ({,[{erl_eval,do_apply,6,[{_},{_},{_}]},{erl_eval,expr,5,[{_},{_}]},{erl_eval,exprs,5,[{_},{_}]},{elixir,recur_eval,3,[{_},{_}]},{elixir,eval_forms,3,[{_},{_}]},{Elixir.Code,validated_eval_string,3,[{_},{_}]},{Elixir.Config,__eval__!,3,[{_},{_}]},{Elixir.Config.Reader,read!,2,[{_},{_}]}]})
** (RuntimeError) environment variable DATABASE_URL is missing.
For example: ecto://USER:PASS@HOST/DATABASE

    (stdlib 3.17) erl_eval.erl:685: :erl_eval.do_apply/6
    (stdlib 3.17) erl_eval.erl:446: :erl_eval.expr/5
    (stdlib 3.17) erl_eval.erl:123: :erl_eval.exprs/5
    (elixir 1.13.2) src/elixir.erl:289: :elixir.recur_eval/3
    (elixir 1.13.2) src/elixir.erl:274: :elixir.eval_forms/3
    (elixir 1.13.2) lib/code.ex:404: Code.validated_eval_string/3
    (elixir 1.13.2) lib/config.ex:260: Config.__eval__!/3
    (elixir 1.13.2) lib/config/reader.ex:92: Config.Reader.read!/2


Crash dump is being written to: erl_crash.dump...done

From what I see, the container do not detect the Postgres database anywhere.

Other information

  • OS : Manjaro Linux

This issue seems to be linked to the Docker containerization solely, since I tried the Elixir install using mix and I worked fine ๐ŸŽ‰

Update translation in Docker container

Hi,

I updated parts of the German translation on POEditor. Is there some way to update the files in the Docker container to check which ones need to be updated as well?

Docker: Loosing uploads after each deploy

Hello,

Everytime I deploy a new update of the app, the uploaded presentation stored in upload gets lost.
How can I prevent that ? I guess I have to add a volume in Docker, but what is the directory in the application to use then?

Thanks.

[Feature] Show/Hide Reactions

Hey, sometimes, I do not want to see the "Reactions" in my presentation. So an admin toggle button to enable/disable this feature (like "show messages", etc...) would be great.

[Question] Account creation possible despite .env setting

Awesome app!

I've got ENABLE_ACCOUNT_CREATION:false in .env but, for some reason, the Create Account link still shows and it's still possible to create an account.

I would appreciate any suggestions about what I'm doing wrong.

Ubuntu 22.04.2 LTS
Docker client 23.0.1
Docker server 20.10.23

Claper package for Nix

Hello,

I'm trying to get Claper in Nix, I'm opening this issue just in case if I have questions related to the packaging of the app.

Follow the work in here: NixOS/nixpkgs#201607

Related Claper pull requests:

Also, congrats for this great piece of software, it's a very nice one :)

Keep up the good work!

Docker does not run.

The following is an error when I try to run docker run -e DATABASE_URL=claper-db -e SECRET_KEY_BASE=key -p 4000:4000 claper

(Ecto.InvalidURLError) invalid url claper-db, host is not present. The parsed URL is: %URI{authority: nil, fragment: nil, host: nil, path: "claper-db", port: nil, query: nil, scheme: nil, userinfo: nil}
    lib/ecto/repo/supervisor.ex:92: Ecto.Repo.Supervisor.parse_url/1
    lib/ecto/repo/supervisor.ex:28: Ecto.Repo.Supervisor.runtime_config/4
    (claper 1.2.0) lib/claper/repo.ex:2: Claper.Repo.config/0
    lib/ecto/migrator.ex:126: Ecto.Migrator.with_repo/3
    (claper 1.2.0) lib/claper/release.ex:14: anonymous fn/2 in Claper.Release.migrate/0
    (elixir 1.13.2) lib/enum.ex:2396: Enum."-reduce/3-lists^foldl/2-0-"/3
    (claper 1.2.0) lib/claper/release.ex:13: Claper.Release.migrate/0
    (stdlib 3.17) erl_eval.erl:685: :erl_eval.do_apply/6

Pin messages sent by attendees

Front

Manager

Add a toggle "Show only pinned messages".

CleanShot 2023-10-20 at 11 01 54

Add a "Pin"/"Unpin" action to a message
CleanShot 2023-10-20 at 11 03 17

On the messages box, with all messages, show the pinned messages first.

Presenter

Show only pinned messages in the presenter if toggle "Show only pinned messages" is enabled.

Attendees view

Add a "Pinned" flag to a message when pinned = true

CleanShot 2023-10-20 at 11 09 57

Use this icon:

<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-pin-filled" width="12" height="12" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
   <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
   <path d="M15.113 3.21l.094 .083l5.5 5.5a1 1 0 0 1 -1.175 1.59l-3.172 3.171l-1.424 3.797a1 1 0 0 1 -.158 .277l-.07 .08l-1.5 1.5a1 1 0 0 1 -1.32 .082l-.095 -.083l-2.793 -2.792l-3.793 3.792a1 1 0 0 1 -1.497 -1.32l.083 -.094l3.792 -3.793l-2.792 -2.793a1 1 0 0 1 -.083 -1.32l.083 -.094l1.5 -1.5a1 1 0 0 1 .258 -.187l.098 -.042l3.796 -1.425l3.171 -3.17a1 1 0 0 1 1.497 -1.26z" stroke-width="0" fill="currentColor"></path>
</svg>

Use an SVG file like the "Host" badge.

Back

When "Show only pinned messages" toggle is changed, change the show_only_pinned value of the presentation_states table and broadcast the change to all (presenter + manager + attendees).

When "Pin"/"Unpin" on Manager is clicked on a message, change the pinned value of a message (posts table)

Database

Add a new column show_only_pinned (bool) to presentation_states table.

Add a new column pinned (bool) to posts table.

Add docker image for amd64 / fix M1 & Pi error

I would appreciate it if you could provide a docker image, which is compiled for amd64.
Until now, when running the docker compose on an apple M1 or Raspberry Pi, there is an error standard_init_linux.go:228: exec user process caused: exec format error.

This error could be issued by several possibilities. One is the wrong docker image. This could also be issued by wrong script encoding or missing/wrong shebang.

Please take a look and make it runnable on the mentioned platforms.

Polls do not scroll on mobile devices

Polls that have more than a few (more than 3-4) options on most mobile devices will take up the entire screen. The poll itself appears to be a modal overlay on top of the backdrop of the web app. The modal itself does not allow for scrolling, which means if you have 5+ options, polls cannot be completed on mobile devices.

Expected behavior: longer polls with many (5+ options) allow for scrolling to select later options as well as voting/submission.
Produced behavior: polls with many options display the poll modal with later options off screen, causing both options and voting to be inaccessible.

Upload files are lost - docker

I'm noticing that the uploads' folder is not being retained, and in fact nothing is being inserted into the folder.

I've tested this on the main and dev branches.

Docker config

services:
  db:
    image: postgres:9
    ports: 
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: claper
      POSTGRES_USER: claper
      POSTGRES_DB: claper
    volumes:
      - /opt/Claper/db:/var/lib/postgresql/data
  app:
    image: ghcr.io/claperco/claper:dev
    ports: 
      - 4000:4000
    volumes:
      - /opt/Claper/uploads:/app/priv/static/uploads
    environment:
      PRESENTATION_STORAGE: "local"
      DATABASE_URL: postgres://claper:claper@db:5432/claper
      SECRET_KEY_BASE: 0LZiQBLw4WvqPlz4cz8RsHJlxNiSqM9B48y4ChyJ5v1oA0L/TPIqRjQNdPZN3iEG
      MAIL_TRANSPORT: smtp
      ENDPOINT_PORT: 443
      ENDPOINT_HOST: "hidden"
      SMTP_RELAY: "smtp-relay.brevo.com"
      MAIL_FROM_NAME: "hidden"
      SMTP_USERNAME: "hidden"
      SMTP_PASSWORD: "hidden"
      SMTP_PORT: "587"
      SMTP_TLS: "if_available"
    depends_on:
      - db

Keyboard Shortcuts

It would be nice to be able to control the screen settings (show instructions, show messages, show poll results) by keyboard. So the mouse is not needed.

Inconsistence Translation

Thanks for this awesome project.

Btw, I found a translation inconsistency on the wait page, the day month and date don't seem to follow the local EN. Or is there a special way to set this part?

If there is an editable translation for Indonesian, I am ready to become a translator.

gambar

Create presentation without registration

Hello,
as introduced in my last issue I have a feature request.
It would be great, if there is a possibility to create a presentation witout a user account.
So a presentaion could be created and edited with an admin link and not with an account.

This would improve the project so much.

To make the admin much more secure, it would be possible to send a JWT in the link to make sure, the editor is authenticated.

Feat: Hide answers of poll / Quizz

Hello,
I wanted to bring up the idea of adding a feature to hide the current poll results. This would be beneficial for quizzes as it would prevent participants from being influenced by the current voting trends and promote more independent answers.

Bug: 400 Error in Hosted Presentation Mode

Hello!

Within the Hosted version, upon hitting the 'Start' Button to enter Presentation Mode, a 400 Error is returned.

image

image

Let me know if any other information is needed. Thanks!

[Feature request] Videos, poll in slides, correct answer, notes

Hello,
Very interesting project! Thanks for you work.

Here is a list of features that could be great:

  • support for slides with video (maybe with beamer/latex as I'm not sure its doable with raw PDF)
  • possibility to directly put the poll in the slides in a text form (like http://www.quizzoodle.com/)
  • possibility to define what was the correct answer of a poll
  • possibility to display notes for the speaker (ideally with the beamer option "show notes on second screen")

[Feature request] Add possibility to manage / present again a presentation

Hi!

Just another note from the testing process.

I must have put a wrong presentation finish time. I've just finished to prepare my intervention, I now have a "Finished" label on it.

Would be great to have the option to either represent or copy the presentation totally.

Thanks again, I hope this is useful feedback.

Database setup using docker

Hi,

I'm trying to use ClaperCo through Docker.
Does it needs to have an empty database available or it needs to have a database with the ClaperCo schema already available?

Thanks.

[Feature request] Translations management

Context
As a developer, I would like to have the possibility to use Claper in the language of my audience.

Solution(s)

  1. Provide an localisation interface (like Weblate or Crowdin) in order for contributors to add their native language and translate Claper
  2. If not possible yet, add a section in the README.md (or CONTRIBUTING.md if necessary) explaining how to get started with PO files.

[Feature] Add embed (excalidraw, youtube...)

Description

Add an "Embed" interaction on a slide like a Youtube video or any website with an iframe.

Specs

You can take inspiration from other interactions like Polls or Forms.

Front

Presenter

When an embed is enabled and is in the current slide position, show it in full screen.

Manager

When clicking on "Add interraction", add this option to the popup:

CleanShot 2023-10-20 at 11 29 16

Use this icon:

<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
  <path stroke-linecap="round" stroke-linejoin="round" d="M14.25 9.75L16.5 12l-2.25 2.25m-4.5 0L7.5 12l2.25-2.25M6 20.25h12A2.25 2.25 0 0020.25 18V6A2.25 2.25 0 0018 3.75H6A2.25 2.25 0 003.75 6v12A2.25 2.25 0 006 20.25z" />
</svg>

When selecting "Embed", show a form with fields title and content (get your inspirations from other interactions like Polls and Forms).

The content field is a textarea and the user has to fill it with an iframe. (<iframe></iframe>)

When added, you can enable it (like any other interactions). Do not forget: By enabling an interaction, you have to disable the others (only one enabled interaction by slide).

Report (when event is ended)

Display embed, if present, on the current slide in the report.

CleanShot 2023-10-20 at 11 44 54

Back

When an Embed is added, broadcast it to all (presenter + manager + attendees). Like I said before, take your inspiration from other interactions like Forms or Polls.

When an Embed is enabled, disable any other interaction on the current slide.

Database

Add a table embeds with columns title (string), content (string), position (int), presentation_file_id (int / foreign key), enabled (bool), inserted_at (timestamp), updated_at (timestamp).

Talent show Voting system.

Basically, allow people to vote a number from 1-10, rating a performer in a talent show or other competition. Then, average all the inputs, making a rating for the performer. Maybe allow a difference of 60-40% weight for judges vs audience, or an adjustable weighting.

Starting application error

When starting the application returns error below

** (CompileError) config/config.exs:8: module Config is not loaded and could not be found.

Kindly review

Is there any way a presenter could see the notes from the PPTX?

We would like to know if there is any way we could inlcude the notes from within the PPTX when uploading the original presentation. These should be then displayed only in the presenters view.
This will greatly help us in maintaing a coherent presentation.

Could not check origin for Phoenix.Socket transport.

I'm trying to deploy Claper.
It's reloading permanently with this log:

claper-app  |  [error] Could not check origin for Phoenix.Socket transport.
claper-app  |  Origin of the request: https://mydomain.com
claper-app  | 
claper-app  | This happens when you are attempting a socket connection to
claper-app  | a different host than the one configured in your config/
claper-app  | files. For example, in development the host is configured
claper-app  | to "localhost" but you may be trying to access it from
claper-app  | "127.0.0.1". To fix this issue, you may either:
claper-app  | 
claper-app  |   1. update [url: [host: ...]] to your actual host in the
claper-app  |      config file for your current environment (recommended)
claper-app  | 
claper-app  |   2. pass the :check_origin option when configuring your
claper-app  |      endpoint or when configuring the transport in your
claper-app  |      UserSocket module, explicitly outlining which origins
claper-app  |      are allowed:
claper-app  | 
claper-app  |         check_origin: ["https://example.com",
claper-app  |                        "//another.com:888", "//other.com"]
claper-app  | 
claper-app  | 
claper-app  | 19:34:37.369 request_id=FzfPQ_TanPBAkVUAAAVx [info] GET /events/new
claper-app  | 19:34:37.373 request_id=FzfPQ_TanPBAkVUAAAVx [info] Sent 200 in 4ms

What am I doing wrong? Claper is behind my Nginx Proxy Manager.

Hostname configuration for DNS domain name

Improve documentation about domain configuration + fix error:

[error] Could not check origin for Phoenix.Socket transport.

Origin of the request: https://clapper.some.domain/

This happens when you are attempting a socket connection to a different host than the one configured in your config/files.

For example, in development the host is configuredto "localhost" but you may be trying to access it from"127.0.0.1".

To fix this issue, you may either:

1. update [url: [host: ...]] to your actual host in the config file for your current environment (recommended)

2. pass the :check_origin option when configuring your endpoint or when configuring the transport in your UserSocket module, explicitly outlining which origins are allowed: check_origin: ["https://example.com", "//another.com:888", "[//other.com](https://other.com/)"]

SMTP is not working

I have set up Email SMTP but unfortunately it doesn't work.
Tried port 465, port 587 SSL, TLS, everything, unfortunately nothing works.

Chat messages should wrap at spaces or hypens

I can set this up and provide screenshots and demos, but running this for a few presentations this is one of two issues I ran into.

Expected behavior: chat messages sent will wrap at end of word or hyphenate words when feasible.
Produced behavior: chat messages are wrapped at the character limit for lines, regardless of the location within a word.

[Feature request] Add the possibility to have interaction templates in files uploaded.

Hi Claper!
I'm working in my free time for an environmental organization, and we're considering moving from wooclap to Claper.
I've just tested the app and it seems great, thanks a lot for the good work (unfortunately, we don't rely on stable financing, so it's difficult to contribute more than a few bucks)!

Our use case is that we have a template presentation that different people will use to present, with a few slides changing from a presentation to another.

One feature we miss during the test was the possibility to have a template presentation allowing not to rewrite each interaction for each presentation. The system wooclap had in integration with ggl slides was quite simple : a title and a link as metadata in the comment section.

If this is possible to do within a pptx file import, it would greatly help us in our future presentations. I can be more precise in a later comment if useful!

Claper behind Traefik Reverse Proxy

Hello,
thanks for the project.
I wanted to install it in my trafik cluster behind a trafik reverse proxy.
For this I build the following docker-compose.yml file.

# docker-compose.yml 
version: '3'

services:
  claper:
    #build: .
    image: ghcr.io/claperco/claper:main
    container_name: claper
    restart: always
    security_opt:
      - no-new-privileges:true
    environment:
      DATABASE_URL: postgresql://claper:claper@postgres:5432/claper
      SECRET_KEY_BASE: kjsdfhkhjfkjdshkfjhds
      #ENDPOINT_HOST: claper.mydomain.com
      #ENDPOINT_PORT: 4000
    networks:
      - default
      - intern
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.claper.tls=true"
      - "traefik.http.routers.claper.rule=Host(`claper.mydomain.com`)"
      - "traefik.http.routers.claper.entrypoints=web"
      - "traefik.http.services.claper.loadbalancer.server.port=4000"
      - "traefik.http.routers.claper.tls.certresolver=letsencrypt"
  postgres:
    #build: .
    image: postgres:9
    restart: always
    environment:
      POSTGRES_PASSWORD: claper
      POSTGRES_USER: claper
      POSTGRES_DB: claper
    security_opt:
      - no-new-privileges:true

    networks:
      - intern

networks:
  default:
    external:
      name: gateway
  intern:
    internal: true

Did anyone tried it already with a reverse-Proxy in front of the Claper service?

The claper container is starting and it says:

claper             | 09:05:43.314 [info] Running ClaperWeb.Endpoint with cowboy 2.9.0 at :::4000 (http)
claper             | 09:05:43.335 [info] Access ClaperWeb.Endpoint at http://localhost

Docker Issues (AMD and ARM)

I am starting with just the default docker-compose with no changes at all for AMD and starts buck crashes or starts but doesn't show a web interface.

ditto when using the ARM based instructions.

Any Docker held would be appreciated

Let use newline in polls

It would be nice to use a limited formatting in the poll text. At least the ability to enter a new-line with CTRL-ENTER.
Another way is to add a rich formatted filed for the poll introduction.

Example:

Introduction:
Welcome to our presentation !
Please feel free to interact.

Question:
How was the commuting ?

Answers:
( ) good
( ) bad

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.