macsidigital / laravel-zoom Goto Github PK
View Code? Open in Web Editor NEWLaravel Zoom Package
License: MIT License
Laravel Zoom Package
License: MIT License
Got this error when I list all meeting
Argument 1 passed to MacsiDigital\Zoom\Support\Response::__construct() must be an instance of GuzzleHttp\Psr7\Response, null given, called in 'zoomtest\vendor\macsidigital\laravel-zoom\src\Interfaces\Base.php on line 15
$zoom = new \MacsiDigital\Zoom\Zoom;
$meetings = $zoom->user->find('[email protected]')->meetings()->all();
While installing this package via composer , the package gives incompatibility error. Precise error message is given below.
Thanks,
Faisal Khan
Hello, I've been trying to get all the recordigns of a user without no success.
Playing with the Zoom Developer site, I've realized that if you do not provide a "from" date, the default value is current date.
I need to get the list of recordings in a period of time.
How can I pass a from date to the API query?
Thanks!
Argument 1 passed to MacsiDigital\API\Support\PersistResource::fill() must be an instance of MacsiDigital\API\Support\object, instance of MacsiDigital\Zoom\Meeting given,
The Create Meeting Registrant does not return the registrant_id
https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrantcreate
Any plans on implementing this?
https://marketplace.zoom.us/docs/api-reference/zoom-api/cloud-recording/recordingslist
I'm using the package with laravel 7.0 when i make a request it return this error and i don't know where to jwt token
Hi @colinhall17
Thanks for this great package. I have encountered a small bug while attempting to update meetings. I have a proposed fix for this as well, outlined below. Thanks!
macsidigital/laravel-zoom
v.4.0.9 and macsidigital/laravel-api-client
v3.1.2 which seem to be the latest versions of eachDescribe the bug
When updating a Zoom meeting, I get the following error:
Error : Call to undefined method MacsiDigital\Zoom\TrackingField::setPassOnAttributes()
With the following backtrace (I think phpunit cuts off the full backtrace in my setup)
.../vendor/macsidigital/laravel-api-client/src/Support/Relations/HasMany.php:163
.../vendor/macsidigital/laravel-api-client/src/Support/Relations/HasMany.php:146
.../vendor/macsidigital/laravel-api-client/src/Support/PersistResource.php:81
.../vendor/macsidigital/laravel-api-client/src/Support/PersistResource.php:24
.../vendor/macsidigital/laravel-api-client/src/Traits/InteractsWithAPI.php:389
.../vendor/macsidigital/laravel-api-client/src/Traits/InteractsWithAPI.php:341
.../vendor/macsidigital/laravel-api-client/src/Traits/InteractsWithAPI.php:273
To Reproduce
Here's a barebones test that reproduces the issue:
/** @test */
public function it_can_update_a_meeting()
{
Carbon::setTestNow('August 3 5:00 pm');
$zoom = app('zoom');
$user = $zoom->user->find('[email protected]');
$meeting = $user->meetings()->create([
'type' => 2,
'topic' => 'Testing',
'agenda' => 'Testing',
'start_time' => now()->toDateTimeLocalString(),
'timezone' => 'America/Montreal',
'duration' => 30,
'password' => Str::random(10),
]);
$meeting->update([
'topic' => 'Testing --updated',
'agenda' => 'Testing --updated',
'start_time' => now()->addMinutes(30)->toDateTimeLocalString(),
'timezone' => 'America/Montreal',
'duration' => 45,
]);
}
Expected behavior
The meeting should update. But it doesn't, due to the fatal error that occurs.
Additional context
I believe the fix is to change src/TrackingField.php
to extend MacsiDigital\API\Support\ApiResource
instead of MacsiDigital\API\Support\Resource
. When I did that, I was able to fix my code. I am hoping validate the idea with you as I'm not as familiar with the package's code. I submitted a PR in #53 for you to test it out and review
Hi,
The meeting save response getContents returns null, where getBody returns the array. Do not know if this is a global amendment.
Craig
V3 of the API Webinars
Registrant returning bad Method call
BadMethodCallException :- Call to undefined method MacsiDigital\Zoom\Support\Entry::registrant()
Then for the panelists, it created successfully, but when I checked the webinar on zoom dashboard, the created panelist was not reflecting there
Good evening, sir,
First of all I would like to congratulate you for your package which is great!
I just have a little problem with the auto-recording cloud.
Here's what I did and yet when I launch the meeting, the recording doesn't start automatically.
Did I make a mistake?
Thank you in advance
$meeting = Zoom::meeting()->make([
'topic' => 'REUNION',
'type' => 2,
'password' => 'PASSWORD',
'start_time' => $request->start
]);
$meeting->settings()->make([
'host_video' => true,
'participant_video' => true,
'join_before_host' => true,
'mute_upon_entry' => true,
'approval_type' => 2,
'registration_type' => 1,
'enforce_login' => false,
'waiting_room' => false,
'auto_recording' => 'cloud',
]);
$meeting = $user->meetings()->save($meeting);
The meeting settings are being replaced with blank values.
$data = [
"topic" =>"Test",
"type"=> 2,
"start_time" => "2019-07-28T13:00:00Z",
"duration"=>60,
"settings"=> [
"host_video"=> true,
"participant_video"=> true,
"join_before_host"=>true,
"approval_type"=> int(0)
];
array:7 [▼
"topic" => "Test"
"type" => 2
"start_time" => "2019-07-28T13:00:00Z"
"duration" => 60
"recurrence" => []
"tracking_fields" => []
"settings" => []
]
Hi, when will be past meetings going to come in package
Thanks,
Need a method to get all participants in a meeting
Getting error when i want to delete a meeting:
$status=$zoom->meeting->find($meeting)->delete();
Undefined property: MacsiDigital\Zoom\Support\Request::$headers
File Request.php
public function delete($end_point)
{
return $this->client->delete($end_point, [
'headers' => $this->headers,
]);
}
I changed the code of two methods and its working fine now.
File Request.php
public function delete($end_point)
{
try {
return $this->client->delete($end_point);
} catch (Exception $e) {
return $e->getResponse();
}
}
Model.php
public function delete($id = '')
{
if ($id == '') {
$id = $this->id;
}
if (in_array('delete', $this->methods)) {
$this->response = $this->client->delete($this->getEndpoint().'/'.$this->id);
if ($this->response->getStatusCode() == '204') {
return $this->response->getStatusCode();
} else {
throw new Exception($this->response->getStatusCode().' status code');
}
}
}
Is it correct or any other code statement already present to delete a meeting instead of $status=$zoom->meeting->find($meeting)->delete();?
When sending a:
$registrant = $meetingZoom->registrants()->create([
'email' => $user->email,
'first_name' => $user->name,
'last_name' => $lastName ? $lastName : "Registrant"
]);
$registrant->approve();
I always recieve:
Exception: 403 status code in file /var/www/html/project/vendor/macsidigital/laravel-zoom/src/Registrant.php on line 169
approve() is the only method where I'm having troubles to make it work right.
Hello friends,
I'm just trying to implement a simply meeting interfaz. When I try to get a meeting, I use
dd( \Zoom::meeting()->find('12345678901') ); // 11 digit meeting ID
And get this error
MacsiDigital\API\Exceptions\HttpException HTTP Request returned Status Code 401. Invalid access token.
Hello! I have been using this library to connect the zoom api with my laravel project, everything works fine in my local environment, but when I upload my project to production hosting, the library throws the following error:
Declaration of MacsiDigital\API\Support\Entry::setRequest($request) must be compatible with MacsiDigital\API\Contracts\Entry::setRequest(MacsiDigital\API\Contracts\Client $request)
I will appreciate your valuable help.
The error only occurs when host_video and participant_video both set to false
Invalid argument supplied for foreach() {"exception":"[object] (ErrorException(code: 0): Invalid argument supplied for foreach() at /var
/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php:252)
[stacktrace]
#0 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(252): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'Invalid argu
men...', '/var/www/www.ta...', 252, Array)
#1 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(158): MacsiDigital\\Zoom\\Support\\Model->fill(false)
#2 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(209): MacsiDigital\\Zoom\\Support\\Model->setAttribute('settings', Array)
#3 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(253): MacsiDigital\\Zoom\\Support\\Model->__set('settings', Array)
#4 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Meeting.php(106): MacsiDigital\\Zoom\\Support\\Model->fill(Array)
#5 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(244): MacsiDigital\\Zoom\\Meeting->make(Array)
#6 /var/www/www.tazman.co.il/app/Services/Zoom/ZoomMeetingsService.php(38): MacsiDigital\\Zoom\\Support\\Model->create(Array)
#7 /var/www/www.tazman.co.il/app/Services/Zoom/ZoomMeetingsService.php(55): App\\Services\\Zoom\\ZoomMeetingsService->create(Object(App\\Models\\CourseMeetingDescription),
Object(App\\Models\\Zoom), Object(Illuminate\\Support\\Carbon))
Parameters for meeting creation
[
"topic" => "test #2",
"type" => 2,
"start_time" => "2020-04-07T16:31:22",
"timezone" => "Asia/Jerusalem",
"password" => "12345678",
"settings" => [
"host_video" => false,
"participant_video" => false,
"join_before_host" => false,
"mute_upon_entry" => false,
"waiting_room" => false,
"meeting_authentication" => false,
"audio" => "voip",
"auto_recording" => "none",
"global_dial_in_countries" => [
"IL",
"Israel",
],
"use_pmi" => false,
],
]
And how I used it
$zoomService = new Zoom();
$zoomUser = $zoomService->user->first();
$zoomMeeting = $zoomUser->meetings()->create($params);
From the readme, regarding the creation of meetings:
$meeting = $user->meetings()->create([
'type' => '2',
'start_time' => '2019-06-29T20:00:00Z'
]);
This code, when I was running in a command, will get a 405 from zoom server. I read through the Zoom docs, and without the trailing 'Z', it would go through without issue. Please update the doc at your leisure. Thanks for the great library.
Describe the bug
updatePassword is not working
To Reproduce
Steps to reproduce the behavior:
count(): Parameter must be an array or an object that implements Countable
Expected behavior
Working updatePassword method
Additional context
Method flow in generell could not work
When fetching all the users using all(). Collection from collect() giving last user only.
$zoom = new \MacsiDigital\Zoom\Zoom;
$users = $zoom->user->all();
For eg. If two users are present User A and User B. Than collection method is returing collection of two items but having same user i.e Last User B.
However using some trick, I am getting a correct result now.
Model.php
public function make($attributes)
{
$new_class = new $this;
foreach ($attributes as $attribute => $value) {
$new_class->$attribute = $value;
}
return $new_class;
}
Is it correct ?
when initializing the addSettings function of the Webinar class, the method signature is MeetingSetting where the WebinarSetting was.
file: src / Webinar.php -
public function addSettings (MeetingSetting $ settings) -> public function addSettings (WebinarSetting $ settings)
your project helped me, thanks.
$user = $zoom->user->create([
'name' => 'Test Name',
'first_name' => 'First Name',
'last_name' => 'Last Name',
'email' => '[email protected]',
'password' => 'secret',
'type' => 1
]);
$meeting = $user->meetings()->create([
'type' => '2',
'start_time' => '2019-06-29T20:00:00Z'
]);
$registrant = $meeting->registrants()->create([
'email' => '[email protected]',
'first_name' => 'Test',
'last_name' => 'Registrant'
]);
Hi, Thank you very much for the library saved a lot of time with the integration. Keep up the great work.
I am using the package just to create the meeting from the back-end and hardly there are requirements other than that.
Now my issue is, is there any ways to get a participant by providing the email address and the meeting number from a live meeting?
Please note, these participants will be joining using the WebSDK.
Thank you in-advance.
I have the following error:
Argument 1 passed to MacsiDigital\API\Support\Relations\HasMany::save() must be an instance of MacsiDigital\API\Support\Relations\object, instance of MacsiDigital\Zoom\Meeting given.
When I try to save a new meeting from my hosting, in local environment that go with no problems.
I used this script with my platform but receiving 401 error which is related to authorization. I also used this article to check the API with Postman :
https://marketplace.zoom.us/docs/guides/tools-resources/postman/using-postman-to-test-zoom-apis
and works fine with JWT token code .
How can I make it work with laravel-zoom, where there is no option to add JWT token code!?
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for macsidigital/laravel-zoom ^4.1 -> satisfiable by macsidigital/laravel-zoom[4.1.0].
- Conclusion: remove laravel/framework v8.0.0
- Conclusion: don't install laravel/framework v8.0.0
- macsidigital/laravel-zoom 4.1.0 requires illuminate/support ^7.0|^8,0 -> satisfiable by illuminate/support[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.10.0, v7.10.1, v7.10.2, v7.10.3, v7.11.0, v7.12.0, v7.13.0, v7.14.0, v7.14.1, v7.15.0, v7.16.0, v7.16.1, v7.17.0, v7.17.1, v7.17.2, v7.18.0, v7.19.0, v7.19.1, v7.2.0, v7.2.1, v7.2.2, v7.20.0, v7.21.0, v7.22.0, v7.22.1, v7.22.2, v7.22.3, v7.22.4, v7.23.0, v7.23.1, v7.23.2, v7.24.0, v7.25.0, v7.26.0, v7.26.1, v7.27.0, v7.28.0, v7.28.1, v7.3.0, v7.4.0, v7.5.0, v7.5.1, v7.5.2, v7.6.0, v7.6.1, v7.6.2, v7.7.0, v7.7.1, v7.8.0, v7.8.1, v7.9.0, v7.9.1, v7.9.2].
- don't install illuminate/support 7.x-dev|don't install laravel/framework v8.0.0
- don't install illuminate/support v7.0.0|don't install laravel/framework v8.0.0
- don't install illuminate/support v7.0.1|don't install laravel/framework v8.0.0
- don't install illuminate/support v7.0.2|don't install laravel/framework v8.0.0
I'm trying to get list of users for test api.
I'm getting 401 status code.
After im add dd($this->response->getBody());
to find function in model.php
after i'm gettin following response from zoom.
array:2 [▼
"code" => 124
"message" => "Invalid access token."
]
I'm using laravel 7.0 on digital ocean ubuntu droplet.
what could be the problem?
Thanks
Hi
I am using this first time and having all my client key and secret. But while getting these information zoom asking for auth Redirect URL for OAuth and Whitelist URL. I want to know which app type you are using for this Jwt?
This is the error i am getting "HTTP Request returned Status Code 401. Invalid access token. "
Describe the bug
Occurrence Save() after $occurrence->start_time = x
not persisting on Zoom
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Occurrence Date persist on Zoom
Following Zoom Meetings documentation, if you're scheduling a meeting with recurrence type 2 (weekly), the parameter weekly_days
should be string to support multiple days as comma separated value (i.e. 2,3,5,7
), but if we set it so we get an error saying that it must be integer.
For instance, below:
<?php
$z = Zoom::user()->find('[email protected]');
$zoomMeeting = $z->meetings()->make([
'topic' => 'Recurring meeting weekly on tuesday,thursday and saturday',
'type' => 8, // Recurring with specific time
'start_time' => '2020-09-04T15:45:00',
'duration' => 15,
'timezone' => 'America/Vancouver',
]);
$zoomMeeting->recurrence()->make([
'type' => 2, // Weekly
'repeat_interval' => 1, // Every 1 week
'weekly_days' => '3,5,7', // Tuesday, Thursday, Saturday
'end_date_time' => '2020-09-11T16:00:00',
]);
$zoomMeeting->save();
The bug is not version specific but I'm using the latest Laravel 7.x with PHP 7.4.
Hi,
I'm creating the webinar with settings when i save the webinar it throw above exception.
Please help me i'm using laravel-zoom 2.0 and here is my backend code with exception screenshot.
Thanks
Regards,
Salman Safdar
$settings = [
'approval_type' => 2,
'panelists_video'=> true,
'host_video'=>true,
'audio'=>'both',
'question_answer'=>true,
'practice_session'=>true,
'auto_recording'=>'none',
'meeting_authentication'=>true,
];
$webData = [
'topic' => $data['topic'],
'agenda' => $data['agenda'],
'type' => 5,
'start_time' => new Carbon('2020-08-12 10:00:00')
'duration' => $duration,
'timezone'=> $timezone,
'password'=>$password,
'settings'=>$settings,
];
$webinar = \Zoom::webinar()->make($webData);
$webinar->settings()->make($settings);
$webinar->save();
i have multiple user and can create independent meeting and user who created the metting can approve the metting .how can i manage this scenario .
Hi, thanks for this awesome package!
I'm getting an error trying to save user settings, any help appreciated!
Here is what I'm doing:
$settings = \MacsiDigital\Zoom\Facades\Zoom::user()->find('myemail@here')->settings;
(dd here gets a settings object successfully)
$settings->inMeeting->remote_control = false;
$settings->inMeeting->feedback = false;
$settings->inMeeting->file_transfer = false;
$settings->emailNotification->jbh_reminder = false;
$settings->emailNotification->cancel_meeting_reminder = false;
$settings->emailNotification->alternative_host_reminder = false;
$settings->emailNotification->schedule_for_reminder = false;
$settings->recording->local_recording = false;
$settings->recording->cloud_recording = false;
$settings->recording->record_audio_file = false;
(dd here I see the settings object with the relationships filled accordingly. )
$settings->save();
On the save()
laravel throws
Error Class name must be a valid object or a string
I have successfully created new meetings, but I can't disable waiting room.
This is my code.
$meeting = $user->meetings()->create([
'topic' => $request["titulo"],
'type' => '2',
'password' => rand(100000,999999),
'duration' => $request['duracion'],
'start_time' => $fecha_inicio->toDateTimeLocalString(),
'settings' => [
'host_video'=>false,
'join_before_host'=>true,
'waiting_room'=>false,
'approval_type'=>2,
]
]);
As you can see I have setted false to waiting_room parameter, but it is created as true.
When I create a new user the api status code response is 201 instead 200.
In the model User line 91
When trying to create a meeting on an existing user, it loses the user ID
Code to set meeting:
$zoom_meet = $zoom->meeting;
$zoom_meet->setUserID($meeting_host->zoom_id);
$zoom_meeting = $zoom_meet->create($meeting_obj);
--- ALSO TRIED
Attaching from the zoom user it found:
$zoom->user->find($zoom_search)->first()
$zoom_meeting = $zoom_meet->meetings()->create($meeting_obj);
-- This is the response before send
Meeting {#485 ▼
#methods: array:5 [▶]
#userID: null
+response: null
#attributes: array:16 [▼
"uuid" => ""
"id" => ""
"host_id" => ""
"created_at" => ""
"join_url" => ""
"topic" => "Test"
"type" => 2
"start_time" => "2019-07-28T13:00:00Z"
"duration" => 60
"timezone" => ""
"password" => ""
"agenda" => ""
"recurrence" => []
"occurrences" => []
"tracking_fields" => []
"settings" => []
]
#createAttributes: array:11 [▶]
#updateAttributes: array:11 [▶]
#relationships: array:3 [▶]
#query_string: ""
#client: PrivateApplication {#157 ▶}
Hi,
This is the easy way to add registrant to a meeting, but what if we a recurring meeting and we want to add registrant to a single occurrence_id ?
$registrant = $meeting->registrants()->create([
'email' => '[email protected]',
'first_name' => 'Test',
'last_name' => 'Registrant'
]);
There is a grammar error in StoreWebinar Request.
"settings" => StoreWebianrSetting::class,
Fix => "settings" => StoreWebinarSetting::class
Thank you
When i try to update the webinar settings it doesn't apply
Steps to reproduce the behavior:
1 - get any webinar with Zoom::user()->find(id)->webinars()->first();
2 - Use $webinar->settings = [
registrants_confirmation_email => false
] or $webinar->settings->registrants_confirmation_email = false
3 - Save the webinar
when i do $webinar->settings i should get registrants_confirmation_email is false but its always true
Thank you for this amazing package
Hello,
thank you so much for creating a organised api for zoom. zoom's default api is very unorganised i think.
however, while trying to create a new user, i am getting 400 error status.
i tried the same code given in example.
$zoom = new \MacsiDigital\Zoom\Zoom;
$user = $zoom->user->create([
'name' => 'Ashraful Islam',
'first_name' => 'Ashraful',
'last_name' => 'Islam',
'email' => '[email protected]',
'password' => '123123',
'type' => 1
]);
and exception throws 400 status code
so i checked zoom accounts jwp app logs. and in the log i can see the response details.
the response is below,
{
endpoint: "https://api.zoom.us/v2/users",
response_headers: [
"Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
date_time: "2020-04-09 17:25:06",
method: "POST",
request_body: "{"action":"create","user_info":["first_name","last_name","email","type","password"]}",
response: {
code: 300,
message: "Request Body should be a valid JSON object."
},
request_headers: [
"accept: application/json",
"authorization: ******",
"connection: close",
"content-type: application/json",
"user-agent: GuzzleHttp/6.5.1 curl/7.59.0 PHP/7.2.8"
],
request_params: [
],
http_status: "400"
}
they say the request body is not valid json string. another main concern i see is, the request body does not contain any of my data !! it only contains the parameter names. and not the value.
so is there any problem in the data preparation method ? or we should pass the data in defferent format ?
We have this in the documentation
$registrant = Zoom::registrant()->make([...]);
Can't find this anywhere in the code and can't make a registrant. I
was wondering if the documentation was from a previous version
and there was a new way to create a registrant.
Thanks.
Please help me I can't figure it out how I can update the webinar settings.
Below is the functions i call for update .... it only update the webinar not webinar setting things like video Host/Panelists ON/OFF is not updated.
$webinar = \Zoom::webinar()->find($webinarId);
$webinar->fill($webinarData)->save();
$webinar->settings()->fill($settings);
I am trying to list all meetings joined by a specific registrant using this script .
code:
$zoom = new \MacsiDigital\Zoom\Zoom;
$meetings = $zoom->user->find('[email protected]')->meetings()->all();
$meetings_users = $zoom->user->all();
$meeting_of_user = array();
foreach($meetings as $meeting){
die(var_dump($meeting->registrants()->get([
'status' => 'approved',
'page_size' => '30',
'page_number' => '1'
])));
}
I can list all meetings found by that user but I need to list meetings joined by specefic registerant so I can show the meetings in the user profile.
This code returns 404 status code.
Hey I can't seem to figure out how to store the response from a meeting being created.
Starting with:
$meeting = $user->meetings()->create([...]);
I store the main items I need like the join_url and start_url but I cannot get the whole response back and keep a copy of it. I have tried different castings as well on the Text column which none worked.
I essentially get this back in the text column:
{"client":{},"exists":true,"wasRecentlyCreated":true,"passOnKeys":[]}
but when I use:
logger($meeting);
I get a really nice print out of everything that came back over the wire and/or same as when viewing the response in the browser using a JSON plugin.
What's the best way to get this into the DB column? Thanks in advance
I've tried many variations to update the settings for a webcast but always get
an error or the settings not updating.
MacsiDigital\Zoom\Webinar already has a set relationship from MacsiDigital\Zoom\WebinarSetting this is a One relationship and cna only have 1 set relation.
$webinar->find($id); $webinar->settings()->make([ 'approval_type' => 1, 'registration_type' => 2, 'enforce_login' => false, ]); $webinar->save();
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.