Coder Social home page Coder Social logo

Comments (32)

MakD avatar MakD commented on June 3, 2024 2

Works as intended now 🔥

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024 2

I will check how hard it would be to implement but my main focus for the future will be to get this feature/plugin into the official jellyfin version

Does something to combine this PR and your plugin would be possibly cause to button for something similar would really make the UI messy and too much I think.

jellyfin/jellyfin-web#5011

Thanks for mentioning it.
The plan is to open a discussion for this feature anyway but before i want to rewrite the core of it, so it would be ready for merging. Changes for the UI etc can be discussed then

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024 1

Ha that is weird that you don't have anything in the chrome logs.
Well glad it works for you now 👍

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024 1

Okay yeah seems like the script doesn't have the right permissions.
What you could try to do is editing the index.html yourself.

Check your jellyfin installation for the file.
Inside the file look for a section where <script tags are (near the bottom of the file) and add the following line:
<script plugin="InPlayerEpisodePreview" version="1.1.0.0" src="/InPlayerPreview/ClientScript"></script>

If that doesn't work you may have to find a solution for the write permissions to the file on your system.
I don't think i can change anything about that on the plugin side

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024 1

I will check how hard it would be to implement but my main focus for the future will be to get this feature/plugin into the official jellyfin version

from inplayerepisodepreview.

inzsome avatar inzsome commented on June 3, 2024 1

Okay yeah seems like the script doesn't have the right permissions. What you could try to do is editing the index.html yourself.

Check your jellyfin installation for the file. Inside the file look for a section where <script tags are (near the bottom of the file) and add the following line: <script plugin="InPlayerEpisodePreview" version="1.1.0.0" src="/InPlayerPreview/ClientScript"></script>

If that doesn't work you may have to find a solution for the write permissions to the file on your system. I don't think i can change anything about that on the plugin side

Changing the write permisions of Jellyfin\Server\jellyfin-web worked for me. I granted read and write access to the group Users (<DOMAIN>\Users) and restarted the server. After that, I could see the button.

from inplayerepisodepreview.

nechodom avatar nechodom commented on June 3, 2024

Same problem... +1

from inplayerepisodepreview.

franciscomfcmaia avatar franciscomfcmaia commented on June 3, 2024

Same problem! +1

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Hey guys, I am sorry that you have an issue with the program.
Currently i don't really have the capacity to work at the project right now.
I will try to get some stuff done next week.

It would be nice if you guys could share a little bit more information to track down the problem.
For example, which client are you using, JMP Client or Web version?
If you are using the Web version, could you open up the Browser Console and check if there are any lines that start with [InPlayerEpisodePreview], or any errors (marked red).
In which version of the program did the error occur (V1.0.0.0 or V1.0.1.0).
Does the bug also happen on the previews version?
Are you using the Intro Skipper plugin by any chance?

from inplayerepisodepreview.

MaitrePacha avatar MaitrePacha commented on June 3, 2024

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

Same here. No button on the web player

from inplayerepisodepreview.

Gauvino avatar Gauvino commented on June 3, 2024

Hey, thanks for the reply. I'm using the web interface but I'm currently not home for another week, I'll send you the logs then. I'm using the latest version of IPEP, 1.0.1.0, and yes, I'm using the Intro Skipper plugin.

Same as him and also I'm seeing that the plugin is still stuck on version 1.0.0.0 in extensions tabs but won't download the 1.0.1.0 and also by forcing it and doing it manually it's still marked as 1.0.0.0

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Hey guys,

I made some changes for the new Jellyfin version.
Would be nice if you guys could give me an update on the appearnce of the button for the new version.

If you are still unable to see the button please check inside the browser console if you can see some messages with the prefix [InPlayerEpisodePreview]

from inplayerepisodepreview.

Gauvino avatar Gauvino commented on June 3, 2024

after testing the new update on 10.9 on docker, i finally see the the boutton and the console logs of docker show me this

chrome_jy859TINZm
chrome_PWk0Hn55rf

but nothing in the chrome 124 console logs

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

No luck for me. Chrome still doesn't show logs or button on the latest 10.9

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Does it show anything for you in the jellyfin/docker logs?

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

I am not on docker. It's windows installation

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

You can check your log files in jellyfin under Home -> Dashboard -> Logs
Have a look if anything comes up if you search for Loaded assembly "Namo.Plugin.InPlayerEpisodePreview, Version=1.1.0.0

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

Damn here I see the issue

Namo.Plugin.InPlayerEpisodePreview.InPlayerEpisodePreviewPlugin: Attempting to inject preview script code in "C:\Program Files\Jellyfin\Server\jellyfin-web\index.html"
[2024-05-13 00:19:08.336 +05:30] [ERR] [104] Namo.Plugin.InPlayerEpisodePreview.InPlayerEpisodePreviewPlugin: Encountered exception while writing to "C:\Program Files\Jellyfin\Server\jellyfin-web\index.html": "System.UnauthorizedAccessException: Access to the path 'C:\Program Files\Jellyfin\Server\jellyfin-web\index.html' is denied.

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

Here as well

2024-05-13 00:42:49.440 +05:30] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly "Namo.Plugin.InPlayerEpisodePreview, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null" from "C:\ProgramData\Jellyfin\Server\plugins\InPlayerEpisodePreview_1.1.0.0\Namo.Plugin.InPlayerEpisodePreview.dll

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

[2024-05-14 22:45:48.931 +05:30] [INF] [24] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly "Namo.Plugin.InPlayerEpisodePreview, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null" from "C:\ProgramData\Jellyfin\Server\plugins\InPlayerEpisodePreview_1.1.0.0\Namo.Plugin.InPlayerEpisodePreview.dll"

Did as suggested. Even disabled the custom css, thinking it might be creating issues. No help

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Have you checked again if you see anything in the chrome logs (Press F12 -> Go to console, and then start an episode)

If you are using the Web version, could you open up the Browser Console and check if there are any lines that start with [InPlayerEpisodePreview], or any errors (marked red).

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

Have you checked again if you see anything in the chrome logs (Press F12 -> Go to console, and then start an episode)

If you are using the Web version, could you open up the Browser Console and check if there are any lines that start with [InPlayerEpisodePreview], or any errors (marked red).

Requesting http://192.168.0.159:8096/Shows/e38c4dc4516450468b384699526531f2/Episodes?IsVirtualUnaired=false&IsMissing=false&UserId=f872ba95204d43319dc9981c6760e436&Fields=Chapters%2CTrickplay
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Requesting http://192.168.0.159:8096/Users/f872ba95204d43319dc9981c6760e436/Items/e212a381f20e0ff4cfee6c61d7f27c39/Intros
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Requesting url without automatic networking: http://192.168.0.159:8096/Items/e212a381f20e0ff4cfee6c61d7f27c39/PlaybackInfo?UserId=f872ba95204d43319dc9981c6760e436&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&AudioStreamIndex=1&SubtitleStreamIndex=15&MediaSourceId=e212a381f20e0ff4cfee6c61d7f27c39&MaxStreamingBitrate=1414945928
main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2 HLS Error: Type: otherError Details: internalException Fatal: false
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
o.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.trigger @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
v.onerror @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
error (async)
t @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r._handleFragmentLoadProgress @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
Promise.then (async)
r._doFragLoad @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r._loadFragForPlayback @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.loadFragment @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.loadFragment @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.doTickIdle @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.doTick @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.tick @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.completeInitSegmentLoad @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
Promise.then (async)
r._loadInitSegment @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.loadFragment @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.doTickIdle @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.doTick @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.tick @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.onLevelLoaded @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
o.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.trigger @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.handlePlaylistLoaded @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.handleTrackOrLevelPlaylist @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
onSuccess @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.readystatechange @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
XMLHttpRequest.send (async)
e.openAndSendXhr @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
Promise.then (async)
e.loadInternal @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.load @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.load @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.onLevelLoading @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
o.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.trigger @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.loadPlaylist @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
set @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
set @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
set @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.startLoad @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.startLoad @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.filterAndSortMediaOptions @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
r.onManifestLoaded @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
o.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.trigger @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.handleMasterPlaylist @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
onSuccess @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.readystatechange @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
XMLHttpRequest.send (async)
e.openAndSendXhr @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
Promise.then (async)
e.loadInternal @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.load @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.load @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.onManifestLoading @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
o.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.emit @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.trigger @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
e.loadSource @ node_modules.hls.js.970a5cb5618e7282c138.chunk.js:1
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
d @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
M @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
o @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
Promise.then (async)
M @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
o @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
Promise.then (async)
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
value @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
d @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
M @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
o @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
Promise.then (async)
(anonymous) @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
Promise.then (async)
value @ htmlVideoPlayer-plugin.f87c183ee5ae587347d1.chunk.js:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
d @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
F @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
a @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
Promise.then (async)
F @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
a @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
Promise.then (async)
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
Promise.then (async)
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
Promise.then (async)
oe @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
Promise.then (async)
re @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
Promise.then (async)
r.play @ main.jellyfin.bundle.js?a32cc7cf54b43478bbe4:2
(anonymous) @ itemDetails.0a2a7534c917d71cf406.chunk.js:2
(anonymous) @ itemDetails.0a2a7534c917d71cf406.chunk.js:2
a @ itemDetails.0a2a7534c917d71cf406.chunk.js:2Understand this error
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Requesting url without automatic networking: http://192.168.0.159:8096/Sessions/Playing
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Requesting url without automatic networking: http://192.168.0.159:8096/Sessions/Playing/Progress
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Sending web socket message: KeepAlive
3node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Requesting url without automatic networking: http://192.168.0.159:8096/Sessions/Playing/Progress
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Sending web socket message: KeepAlive
node_modules.jellyfin-apiclient.bundle.js?a32cc7cf54b43478bbe4:2 Requesting url without automatic networking: http://192.168.0.159:8096/Sessions/Playing/Progress

Dont see anything with the lines

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Okay, when you are watching a video, could you right click and select "View Page Source".
Then search with Ctrl+F for /InPlayerPreview/ClientScript.

In theory you should finde the line you added to your index.html

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

So normally that line should download the scriptfile from the plugin.
Next thing you could try would be:

  • uninstall the plugin (just to be sure)
  • download the web-client-script
  • copy the js file inside into the folder where your index.html is
  • replace the old script line from the plugin with this one:
<script plugin="InPlayerEpisodePreview" version="1.1.0.0" src="web-client-script.js"></script>

If that isn't working try this line:

<script src="web-client-script.js"></script>

Remember to restart your jellyfin server in between

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

image
my page source. Trying the second step

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

I guess mine is an isolated issue. Tried both lines, after uninstalling and multiple restarts. Could'nt get it to show up.

image
image

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Oh man i am out of ideas right now, i am sorry.
If something comes to my mind i will hit you up.

Is there a reason why you are using the webclient?
Maybe you could switch to the desktop client. At least for me it works way better and also supports directplay for H265.
You could try it out, check if the plugin works there (you have to install it seperatly, check the Readme section for JMP)
Here is the link to the latest release, if you wanna try it out
https://github.com/jellyfin/jellyfin-media-player/releases

Also the desktop client has the extra feature for starting episodes directly from the list

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

@Namo2 finally got an error log in the console, hoping this can be a help. BTW the plugin works awesome in the JMP

image

from inplayerepisodepreview.

Namo2 avatar Namo2 commented on June 3, 2024

Quickly patched this up.

The dll is the complete plugin. You would need to go in your jellyfin folder then to plugins and open "InPlayerEpisodePreview_1.1.0.0". Just replace the dll inside there with the one from the zip.

If that works hit me up. I would make the changes public then

inPlayerEpisodePreview-1.1.1.0-beta-server.zip

from inplayerepisodepreview.

MakD avatar MakD commented on June 3, 2024

Just a query. Even though on your suggestion, I am using JMP, but some of my users use phone to watch my library. Is changing episode from the prompt on web (since the Android app is a web wrapper) totally not possible and is a code limitation, out just currently not implemented?

from inplayerepisodepreview.

Gauvino avatar Gauvino commented on June 3, 2024

I will check how hard it would be to implement but my main focus for the future will be to get this feature/plugin into the official jellyfin version

Does something to combine this PR and your plugin would be possibly cause to button for something similar would really make the UI messy and too much I think.

jellyfin/jellyfin-web#5011

from inplayerepisodepreview.

Related Issues (6)

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.