Giter VIP home page Giter VIP logo

mediadrop's Introduction

MediaDrop

MediaDrop is a modular video, audio, and podcast publication platform which can be extended with plugins (previously known as "MediaCore Community Edition").

The offical website is http://mediadrop.video contains more information about the software including installation documentation.

If you require help with MediaDrop customization or installation, check out our friendly community forums.

mediadrop's People

Contributors

anicholls avatar anthonyt avatar appukonrad avatar benliles avatar brainysmurf avatar canerbasaran avatar dewhisna avatar domenkozar avatar felixfriedrich avatar felixschwarz avatar ikolar avatar jarjav avatar kallies avatar kdump avatar kharmine avatar knyar avatar mglanville avatar natedub avatar pokoli avatar qtheuret avatar rbu avatar sudheesh001 avatar tiansiyuan avatar valeriominetti 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  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

mediadrop's Issues

Style fix in /admin/categories edit button

Hi,

With some i18n, the 'edit' button cell is splitted in two lines. As long as 'edit' translation is longer.

A CSS fix would be to have parent with 'white-space: nowrap' and children with 'display: inline;'.

Regards,
Étienne

Logout in admin hidden / not styled

There is no visible logout button in the admin section. Only if the users moves the mouse to the top navigation bar, an unstyled link right next to the mediacore logo is shown.

Relative Links in base.css

There's a few images in the base.css stylesheet which are pointing to the incorrect file path.

.meta-episodes { background:url('/images/icons/rss.png') no-repeat left; }
.meta-itunes { background:url('/images/icons/rss.png') no-repeat left; }
.meta-rss { background:url('/images/icons/rss.png') no-repeat left; }
.meta-audio { background:url('/images/icons/audio.png') no-repeat left; }
.meta-video { background:url('/images/icons/video.png') no-repeat left; }
.meta-go { background:url('/images/icons/go.png') no-repeat left; }

These should all have the relative link starting with '../images'

Name of the site rather than "MediaCore" in the title tag? (idea)

Hello,

Why not replace in templates/layout.html this:

    <title py:match="title" py:with="title = unicode(select('text()'))">
            <py:if test="title">${Markup(title)} |</py:if>
            MediaCore
    </title>

by this:

    <title py:match="title" py:with="title = unicode(select('text()'))">
            <py:if test="title">${Markup(title)} |</py:if>
            XXXXXXXX
    </title>

...where XXXXXXXX would be the name of the site defined in the admin area? :-)

Can be hardcoded in this file but... can be nice to allow this for everybody and by default for the 0.8.2 stable.
Like that, when adding a page of the site to bookmarks, users can quickly see that this page is from XXXXXXXX's site. Especially for the homepage who has "Explorer | MediaCore" in this title tag. Not very easy to guess, after many weeks/months and many bookmarks later, that this bookmark is from XXXXXXXX's site when watching just its name. ;-)

What do you think about that? :-)

Thanks in advance.

Uploading media within Admin interface fails

When attempting to upload a media file from within the Admin interface, I get the following error.

URL: http://localhost:8080/admin/media/new/add_file
File '/home/ricinus/mc_env/lib/python2.5/site-packages/WebError-0.10.1-py2.5.egg/weberror/evalexception.py', line 431 in respond
  app_iter = self.application(environ, detect_start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3-py2.5.egg/tg/configuration.py', line 655 in wrapper
  return app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3-py2.5.egg/tg/configuration.py', line 555 in remover
  return app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/repoze.tm2-1.0a5-py2.5.egg/repoze/tm/__init__.py', line 23 in __call__
  result = self.application(environ, save_status_and_headers)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/repoze.who-1.0.18-py2.5.egg/repoze/who/middleware.py', line 107 in __call__
  app_iter = app(environ, wrapper.wrap_start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/ToscaWidgets-0.9.9-py2.5.egg/tw/core/middleware.py', line 43 in __call__
  return self.wsgi_app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/ToscaWidgets-0.9.9-py2.5.egg/tw/core/middleware.py', line 68 in wsgi_app
  resp = req.get_response(self.application)
File 'build/bdist.linux-x86_64/egg/webob/request.py', line 918 in get_response
File 'build/bdist.linux-x86_64/egg/webob/request.py', line 886 in call_application
File '/home/ricinus/mc_env/lib/python2.5/site-packages/ToscaWidgets-0.9.9-py2.5.egg/tw/core/resource_injector.py', line 68 in _injector
  resp = req.get_response(app)
File 'build/bdist.linux-x86_64/egg/webob/request.py', line 918 in get_response
File 'build/bdist.linux-x86_64/egg/webob/request.py', line 886 in call_application
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Beaker-1.5.1-py2.5.egg/beaker/middleware.py', line 73 in __call__
  return self.app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Beaker-1.5.1-py2.5.egg/beaker/middleware.py', line 152 in __call__
  return self.wrap_app(environ, session_start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Routes-1.11-py2.5.egg/routes/middleware.py', line 130 in __call__
  response = self.app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/wsgiapp.py', line 125 in __call__
  response = self.dispatch(controller, environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/wsgiapp.py', line 324 in dispatch
  return controller(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 221 in __call__
  response = self._dispatch_call()
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 172 in _dispatch_call
  response = self._inspect_call(func)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 107 in _inspect_call
  result = self._perform_call(func, args)
File '/home/ricinus/mc_env/mediacore/mediacore/lib/base.py', line 91 in _perform_call
  self, controller, params, remainder=remainder)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3-py2.5.egg/tg/controllers.py', line 182 in _perform_call
  response = self._render_response(controller, output)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3-py2.5.egg/tg/controllers.py', line 294 in _render_response
  controller.decoration.lookup_template_engine(request)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3-py2.5.egg/tg/decorators.py', line 140 in lookup_template_engine
  engine, template, exclude_names = self.engines[content_type]
KeyError: ''

Listing (admin/){scripts,images,styles} possible by default (add a .htaccess? :-))

Hello,

Even if no private content in these directories and each can be viewed via direct access, and even if we can set "Options -Indexes" in the global configuration of Apache, as users will deploy MediaCore in various environments, can be great to put in mediacore_dir/mediacore/public this:

Add a .htaccess with this content:
Options -Indexes

Like this, no directory listing but a "Forbidden" page when accessing to:
http://www.example.tld/my_media/(admin/)scripts/
http://www.example.tld/my_media/(admin/)images/ (and his sub-directories: media, podcasts, ...)
http://www.example.tld/my_media/(admin/)styles/

Maybe disable the .htaccess by default (named in .disabled_htaccess for example) because some users have not the mod_rewrite enabled. So, same thing as many big projects, a .htaccess ready but disabled by default. Just explain in the htaccess file and in the doc the advantages of using this .htaccess (this file can be enhanced in futures releases of MediaCore). Or if not adding this file in the next release of MediaCore, at least explain this in the doc only (and say how to enable mod_rewrite and add manually this file).

Nicolas.

KeyError: u'ogg' when trying to add an ogg file to media item

Full text: File '', line 2 in add_file
File '/usr/lib/python2.5/site-packages/Pylons-0.10rc1-py2.5.egg/pylons/decorators/init.py', line 37 in jsonify
data = func(_args, *_kwargs)
File '/home/egon/mediacore/mediacore/lib/decorators.py', line 209 in validate
return self._handle_validation_errors(args, kwargs, inv)
File '/home/egon/mediacore/mediacore/lib/decorators.py', line 248 in _handle_validation_errors
return error_handler(_args, *_kwargs)
File '/home/egon/mediacore/mediacore/controllers/admin/media.py', line 292 in add_file
media_file = _add_new_media_file(media, file.filename, file.file)
File '/home/egon/mediacore/mediacore/controllers/upload.py', line 235 in _add_new_media_file
media_file.container = guess_container_format(file_ext)
File '/home/egon/mediacore/mediacore/lib/filetypes.py', line 196 in guess_container_format
mt = mimetype_lookup[extension]
KeyError: u'ogg'

I haven't seen this message for any other file extensions.

Uploader Failure on flash-disabled browsers

The frontend uploader works if A) user has flash + javascript, B) user has neither flash nor javascript support.

We need it to work in situation C) user has javascript but not flash.

This should be as simple as detecting if the flash uploader object was successfully created and rolling back any changes to the dom if not.

/media prefix not possible ("conflict" with the "media" controller name when matching URL)

Hello,

At my first trial of MediaCore, I set prefix on /media rather than /my_media for URL.
And strangely, I had many 500 errors, etc. (/media/media/YYY didn't work but /media/podcasts/XXX/YYY functioned properly for example). Even when restarting Apache (mod_wsgi used), etc.
Yes, not very beautiful URL when access to the media controller because URL were /media/media/YYY but...
Only after a long time, I thought about a possible conflict in the term "media" matching in URL (same name for prefix AND for a controller used). Especially because no problem when accessing to any controller not named "media".

And visibly, it was that!
I changed my prefix to something else (at each place) and now, no one error.
/my-custom-name/media/YYY not anymore show me a 500 error but redirect me (if media including in a podcast) to /my-custom-name/podcasts/XXX/YYY.

So, can be confused at a first trial of MediaCore, and as many people will probably test the prefix "/media" for their first tests, they can have (and possibly stay at) a first bad impression of the MediaCore product/project (while it's a very great product!).

Nicolas. :-)

Search depends on mysql triggers, which can only be installed with root permissions

We should allow administrators to avoid needing root permissions on their database, and use SQLAlchemy triggers instead of MySQL triggers to keep the media_fulltext table up-to-date.

We denormalize our InnoDB tables into a single MyISAM media_fulltext table, which, as the name implies, has a FULLTEXT index which provides a reasonably good natural and boolean language search over media titles, descriptions, tags and categories. This denormalization occurs at the database-level, which is preferred among DBAs, but it lessens interoperability.

We can create a SQLAlchemy SessionExtension that duplicates the behaviour of our MySQL triggers. During the "after_flush" phase, we can see what records have been changed and make further changes before the transaction is committed. This should operate outside the ORM and on the tables themselves to achieve the best possible performance.

This will also put us well on our way to supporting PostgreSQL.

PostgreSQL support

Most of MediaCore already works with Postgres, but a couple things need to be done differently.

  1. The triggers that keep the media_fulltext table up-to-date need to be tested and any differences in syntax will need to be resolved.
  2. Fulltext searches on MySQL use the MATCH (..) AGAINST (..) syntax, Postgres has its own syntax. mediacore.model.media.MediaQuery.search will need to become dialect-aware so it knows which syntax to use.

Better support for i18n

Cheers, this is quite a but of a "feature/bug". I'll try to be short and clear.

First of all, it's really important to understand how gettext handles plural forms:

http://genshi.edgewall.org/wiki/Documentation/i18n.html#messages
http://pylonshq.com/docs/en/0.9.7/i18n/#plural-forms

  1. mediacore needed some changes to correctly handle plural froms in genshi, I needed about 5 hours to manage those few lines, patch:

http://github.com/iElectric/mediacore/commit/9195406a9d403b88bb7de7632c7bbdd4aa7147e3

  1. Variables in translations

current state:
said on ${datetime}…

correct usage:
said on ${datetime}…

  1. Handling plural translations

current state:
Comment<py:if test="media.comment_count_published != 1">s/py:if

correct usage:
<i18n:choose numeral="media.comment_count_published">
Comment
Comments
/i18n:choose

The last two are pretty common all over the code. I'll start refactoring and push to my fork. Thanks for a great CMS!

.psd for nav (menu) buttons too?

Hello,

I see that you have open-sourced the buttons:
http://getmediacore.com/blog/mediacore-buttons/

But not the nav buttons?
Can be nice to have the .psd for the nav.png file, because many people want to customize this menu (add a link "Blog", "Forum", "News", etc.).

Is it possible to open-sourcing this too?

Thanks in advance.

P.S. : I added new information into the "MySQL prefix for tables?" topic (in "Closed" section).

Nicolas. :-)

Error Removing Default Test Comment

Trying to remove the default comment produces the following error.

URL: http://localhost:8080/admin/comments/bulk/trash
File '/home/ricinus/mc_env/lib/python2.5/site-packages/WebError-0.10.1-    py2.5.egg/weberror/evalexception.py', line 431 in respond
  app_iter = self.application(environ, detect_start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3-  py2.5.egg/tg/configuration.py', line 655 in wrapper
  return app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/TurboGears2-2.0.3- py2.5.egg/tg/configuration.py', line 555 in remover
  return app(environ, start_response)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/repoze.tm2-1.0a5-py2.5.egg/repoze/tm/__init__.py', line 47 in __call__
  self.commit()
File '/home/ricinus/mc_env/lib/python2.5/site-packages/repoze.tm2-1.0a5-py2.5.egg/repoze/tm/__init__.py', line 52 in commit
  t.commit()
File '/home/ricinus/mc_env/lib/python2.5/site-packages/transaction-1.0.0- py2.5.egg/transaction/_transaction.py', line 322 in commit
  self._commitResources()
File '/home/ricinus/mc_env/lib/python2.5/site-packages/transaction-1.0.0-py2.5.egg/transaction/_transaction.py', line 414 in _commitResources
  rm.tpc_begin(self)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/zope.sqlalchemy-0.4-py2.5.egg/zope/sqlalchemy/datamanager.py', line 67 in tpc_begin
  self.session.flush()
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/session.py', line 1354 in flush
  self._flush(objects)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/session.py', line 1432 in _flush
  flush_context.execute()
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/unitofwork.py', line 261 in execute
  UOWExecutor().execute(self, tasks)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8- py2.5.egg/sqlalchemy/orm/unitofwork.py', line 753 in execute
  self.execute_save_steps(trans, task)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/unitofwork.py', line 768 in execute_save_steps
  self.save_objects(trans, task)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/unitofwork.py', line 759 in save_objects
  task.mapper._save_obj(task.polymorphic_tosave_objects, trans)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/mapper.py', line 1381 in _save_obj
  history = attributes.get_state_history(state, prop.key, passive=True)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/attributes.py', line 1319 in get_state_history
  return state.get_history(key, **kwargs)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/state.py', line 89 in get_history
  return self.manager.get_impl(key).get_history(self, self.dict, **kwargs)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/attributes.py', line 495 in get_history
  self, state, v)
File '/home/ricinus/mc_env/lib/python2.5/site-packages/SQLAlchemy-0.5.8-py2.5.egg/sqlalchemy/orm/attributes.py', line 1283 in from_attribute
  if original not in [None, NEVER_SET, NO_VALUE]:
File '/home/ricinus/mc_env/mediacore/mediacore/model/authors.py', line 71 in __eq__
  return self.ip == other.ip and super(AuthorWithIP, self).__eq__(other)
AttributeError: 'NoneType' object has no attribute 'ip'

JW HTML5 Player not displaying src tag for audio

when selecting JWPLAYER for HTML5 in the admin panel after visiting the site no media plays.

I only use mp3 files on our site, so i'm not sure if this affects other media types as well. But within the tags in safari at least it does display the file path (src=) meaning it doesn't know what media to play.

0.9alpha flv support gone?

Hello,
I can't get mediacore to load jw for a FLV file, whether linked to, or uploaded. Is this broken for now?

What shows up instead of a the player is this:

Your browser is incapable of playing this media.

Contact page?

Hello,

Just thought about adding a contact form page, based on the already coded Error controller (document/report actions) and the template error.html, but modified to only show the form (so it will be Contact controller and contact.html template for example). Can also be unified into one controller "Mail" (more general name) with "error" (rather than document) and "contact" actions, and rename the "report" action into a more general name: "send").

The e-mail address where the message will be sent can be the e-mail address defined in the admin area > Notification Emails > Support Requested (or a new specific field added: "Contact Requested").

Here is how it would in the front-end: http://img840.imageshack.us/img840/3869/contactus.png
(the footer menu is a UL, with multiples LI inline here)

What do you think about that? :-)

Translation errors

Managed to run MC .9-wip. Some translation hooks (?) are missing. Have translated all strings to Polish, but still see untranslated entries:
Media addition date is still only in English. (on media view page).
Comment hint (on comment edit box) is untranslated.
Comment dates are untranslated
Description field description uses field name, which is in English.
Appearance "options" in admin panel are untranslated.
Remote URLs in Add Remote URLs is untranslated.

setup.sql missing from 0.8.1-rc1

The installation instructions mention importing the setup.sql (prior to setup-triggers.sql):

The second step is to create all the tables and starting data for the
database. All of the information is in setup.sql, so you can load it
with a one line command, like so:

However there isn't a setup.sql included in either the .tar.gz file, or from git.

Categories not showing up

Categories not showing up even if there's media in the category. For example, this page: http://yougrapple.com/media/single-leg-entry-using-an-arm-drag is media under categories "Single Leg" and "Standup", but (1) the "Single Leg" category doesn't show up in the categories page and (2) in the "Standup" category, it's showing that there are two videos but there are three (that is, this video isn't getting categorized.

MySQL prefix for tables?

Hello,

I don't see where we can define a prefix for the MySQL tables.
Is it possible?

Visibly not because hardcoded but... yes, I can replace in all files "media_categories" with "myprefix_media_categories", etc. but many files need to be changed, and need to do that at each update of MediaCore.

So, if not already possible, can you add the tables prefixes support?

Thanks in advance. :-)

"object.__init__() takes no parameters" in BaseController

When I start MediaCore 0.7.2 on Fedora Linux 12 (Python 2.6.2) I get this exception when I access the start page:

File 'MediaCore-0.7.2/mediacore/controllers/media.py', line 66 in __init__
  super(MediaController, self).__init__(*args, **kwargs)
File 'MediaCore-0.7.2/mediacore/lib/base.py', line 153 in __init__
  super(BaseController, self).__init__(self, *args, **kwargs)
File 'lib/lib/python2.6/site-packages/TurboGears2-2.0.3-py2.6.egg/tg/controllers.py', line 77 in __init__
  super(DecoratedController, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters

Sorting asked (most popular, etc.) not "memorized" for "Page 2/3/..."

Hello,

I see that if we click on Show: "Most Popular", we're going successfully to "/media?show=popular" with the most popular items shown. But, when more than one page and we click on "Page 2" for example, we're going to "/media?page=2" rather than "/media?show=popular&page=2".

Nicolas.

Textarea block on Explore page

Adviced by Nathan I am creating this feature/improvement entry.
Would be great to see possibility to add at last one block with text on frontpage (explore). E.g. to add editor comments, or some special content.
Perfectly, special media type/text would be great to allow "archive" of editor comments.

Including Nathan comment also:

I like this idea a lot! Initially we could just add a new <textarea> in the Appearance settings
panel, and whatever you enter there would show up in a box on the Explore page. We could
squeeze this simple solution into v0.9 for sure.

As for having an archive of editor comments, I think this would be best done as a plugin.
Imagine a blog plugin that integrates into the Explore page — now that'd be really cool to see!

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.