Giter VIP home page Giter VIP logo

core-bundle's Introduction

Contao Open Source CMS

About

Contao is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the project website for more information.

Purpose

The purpose of this package is to develop the Contao bundles in a monorepo. Use it when you want to create a pull request or report an issue.

The monorepo is automatically split into separate packages:

Please do not use contao/contao in production! Use the split packages instead.

Platinum partners

Thanks to our platinum partners for helping us fund the development of Contao.

Development

To create a pull request and to test your changes within a running Contao application, it is the easiest to use the Contao Managed Edition. Start by installing it in your current directory:

composer create-project --no-install contao/managed-edition <directory> <branch>

Replace <directory> with the directory where you want to install the Managed Edition (use . for the current directory). Replace <branch> with 5.x-dev if you want to add a new feature, or with <lts-version>.x-dev (currently 4.13.x-dev) if you want to fix a bug.

Then adjust the require section in your composer.json file, so Composer loads the monorepo instead of the individual bundles:

"require": {
    "php": "^8.1",
    "contao/contao": "5.x-dev"
},

Again, use 5.x-dev if you want to add a new feature or <lts-version>.x-dev if you want to fix a bug.

Next, install the dependencies:

composer update

Composer automatically clones the Git repository into the vendor/contao/contao folder. You can complete the setup by running vendor/bin/contao-setup on the command line.

Any changes you make in vendor/contao/contao will be tracked via Git, so you can submit your pull request directly from your application.

Running scripts

First install the code quality tools:

composer bin all install

Then run the code quality scripts via Composer:

composer all

You can also run the scripts separately:

composer rector
composer ecs
composer service-linter
composer monorepo-tools
composer unit-tests
composer functional-tests
composer phpstan
composer depcheck

Use the -- argument to pass additional flags to the underlying commands:

composer unit-tests -- --filter CoreBundle
composer ecs -- --clear-cache

Functional tests

To set up the functional tests, create a database named contao_test:

mysql -e "CREATE DATABASE contao_test"

If your database uses credentials, copy the file core-bundle/phpunit.xml.dist to core-bundle/phpunit.xml and adjust the following line:

<php>
    <env name="DATABASE_URL" value="mysql://root@localhost:3306/contao_test" />
</php>

Then run the functional tests via Composer:

composer functional-tests

Node.js

To build the assets, you need a Node.js version >= 18.12 and the pnpm package manager. Then run these commands:

pnpm install
pnpm build

End-to-end tests

The Contao end-to-end tests are availabe as an NPM package. You can install and run them with pnpm:

pnpm add contao-e2e-tests --dev
pnpm contao-e2e-tests

License

Contao is licensed under the terms of the LGPLv3.

Getting support

Visit the support page to learn about the available support options.

core-bundle's People

Contributors

a-v-l avatar ameotoko avatar aschempp avatar ausi avatar backbone87 avatar bezin avatar bytehead avatar cliffparnitzky avatar dennisbohn avatar discordier avatar dmolineus avatar fritzmg avatar gmpf avatar leofeyer avatar m-vo avatar marcobiedermann avatar markejn avatar mynyx avatar psi-4ward avatar qzminski avatar rabauss avatar richardhj avatar serhii-dv avatar severingloeckle avatar toflar avatar tristanlins avatar volkerrichert avatar xchs avatar zoglo avatar zonky2 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

core-bundle's Issues

Replace debug mode with Symfony environment

Issue by @aschempp
Tuesday Dec 23, 2014 at 09:05 GMT

I think we've discussed this before, but let's do it here to get a decision.

We should use app.php and app_dev.php – the Symfony default – as entry scripts. The app_dev would be dev environment and should set $GLOBALS['TL_CONFIG']['debugMode'] = true; for legacy reasons.

Can we vote on the topic?

4.0.0-alpha2: Fatal error: Class 'Contao\BackendInstall' not found in /htdocs/contao4/web/contao/install.php on line 27

Issue by @BugBuster1701
Saturday Jun 21, 2014 at 20:18 GMT

Install Aufruf bringt diese Meldung.
Installiert wurde die alpha2 mittels der Release ZIP (grüner Button)
Das Verzeichnis vendor/contao/module-core fehlt.

Warning: include(/htdocs/contao4/vendor/contao/module-core/src/controllers/BackendInstall.php): failed to open stream: No such file or directory in vendor/composer/ClassLoader.php on line 377

#0 vendor/composer/ClassLoader.php(377): __error(2, 'include(/htdocs/contao4/...', '/htdocs/contao4/...', 377, Array)
#1 vendor/composer/ClassLoader.php(377): Composer\Autoload\includeFile()
#2 vendor/composer/ClassLoader.php(269): Composer\Autoload\includeFile('/htdocs/contao4/...')
#3 [internal function]: Composer\Autoload\ClassLoader->loadClass('Contao\\BackendI...')
#4 web/contao/install.php(27): spl_autoload_call('Contao\\BackendI...')
#5 {main}


Warning: include(): Failed opening '/htdocs/contao4/vendor/contao/module-core/src/controllers/BackendInstall.php' for inclusion (include_path='.:/usr/local/php5.4.10-cgi/lib/php') in vendor/composer/ClassLoader.php on line 377

#0 vendor/composer/ClassLoader.php(377): __error(2, 'include(): Fail...', '/htdocs/contao4/...', 377, Array)
#1 vendor/composer/ClassLoader.php(377): Composer\Autoload\includeFile()
#2 vendor/composer/ClassLoader.php(269): Composer\Autoload\includeFile('/htdocs/contao4/...')
#3 [internal function]: Composer\Autoload\ClassLoader->loadClass('Contao\\BackendI...')
#4 web/contao/install.php(27): spl_autoload_call('Contao\\BackendI...')
#5 {main}


Fatal error: Class 'Contao\BackendInstall' not found in /htdocs/contao4/web/contao/install.php on line 27

Remove the JS library dependency

Issue by @leofeyer
Monday Sep 01, 2014 at 19:07 GMT

Scripts like Swipe and highlight.js do not depend on MooTools or jQuery, still their templates can only be added to the page layout if either MooTools or jQuery is activated. There should be a new category just like "analytics scripts".

Suche - "oee" wird zu "o" normalisiert

Issue by @Domi1244
Monday Feb 02, 2015 at 16:33 GMT

Ins Formular habe ich "oee" eingegeben. Ergebnisse hierfür bekam ich weit über 100. Kaum eine der Seiten beinhaltete allerdings das Wort.
Ich habe ein wenig nachgeforscht und herausgefunden, dass die Zeile

$strKeywords = mb_eregi_replace('[^[:alnum:] \*\+\'"\.:,_-]|\. |\.$|: |:$|, |,$', ' ', $strKeywords);

in der Search.php mir aus "oee" "o " macht, wodurch die vielen Treffer natürlich Sinn ergeben.

Wenn ich die Funktion und die if außenrum entferne und somit die Fallback funktion "preg_replace" greift, habe ich nur noch 4 Ergebnisse, die auch alle zutreffen, allerdings habe ich dann Probleme mit echten Umlauten. Kann man da etwas machen?

Use the Symfony request response

Issue by @leofeyer
Saturday Jul 26, 2014 at 10:52 GMT

The Contao template should not echo the output and exit but return its output to the Symfony front end controller, so the Symfony request response routines are fully run.

Do not hardcode bundles in AppKernel

Issue by @aschempp
Friday Oct 31, 2014 at 22:42 GMT

Hardcoding the FrameworkBundle in the AppKernel will result in an exception, if the FrameworkBundle is added to the autoload.json

Fatal error: Uncaught exception 'LogicException' with message 'Trying to register two bundles with the same name "FrameworkBundle"'

We should only use the bundle autoloading and add the basic requirements to the autoload.json. This would also mean we can change them without affecting the distribution repo.
I can provide PRs if you prefer that.

Frontend-Preview Nachrichten / Events

Issue by @SGehle
Wednesday Feb 11, 2015 at 16:30 GMT

Hallo!
Wäre es nicht sinnvoll, wenn beim Klick auf die Frontend-Preview beim bearbeiten einer Nachricht oder eines Events der entsprechende Eintrag angezeigt wird anstelle der Startseite der Webseite?
Wenn ein Artikel bearbeitet wird, wird ja in der Vorschau auch direkt die Seite des Artikels geladen.

Contao framework not initialized upon invalid route

If you enter a URL that is not matched by a route (e.g. http://contao.local/), the Contao framework does not get initialized:

Fatal error: Class 'Contao\Frontend' not found in ~/contao/standard-edition/vendor/contao/core-bundle/src/EventListener/OutputFromCacheListener.php on line 31

The problem is that the Symfony exception listener is a sub request and we have recently added the following lines:

// InitializeSystemListener::onKernelRequest()
if (!$event->isMasterRequest()) {
    return;
}

@aschempp How do we handle this case?

Install 4.0 alpha2 from github

Issue by @katgirl
Tuesday Jul 08, 2014 at 14:41 GMT

git clone https://github.com/contao/contao.git contao-4
cd contao-4
curl -sS https://getcomposer.org/installer | php
php composer.phar install --prefer-dist

Script system/bin/automator generateSymlinks handling the post-update-cmd event returned with an error

Exception trace:
 () at phar:///var/www/virtual/kat42/contao-4/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:144
 Composer\EventDispatcher\EventDispatcher->doDispatch() at phar:///var/www/virtual/kat42/contao-4/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:103
 Composer\EventDispatcher\EventDispatcher->dispatchCommandEvent() at phar:///var/www/virtual/kat42/contao-4/composer.phar/src/Composer/Installer.php:300
 Composer\Installer->run() at phar:///var/www/virtual/kat42/contao-4/composer.phar/src/Composer/Command/UpdateCommand.php:128
 Composer\Command\UpdateCommand->execute() at phar:///var/www/virtual/kat42/contao-4/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:241
 Symfony\Component\Console\Command\Command->run() at phar:///var/www/virtual/kat42/contao-4/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:892
 Symfony\Component\Console\Application->doRunCommand() at phar:///var/www/virtual/kat42/contao-4/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:191
 Symfony\Component\Console\Application->doRun() at phar:///var/www/virtual/kat42/contao-4/composer.phar/src/Composer/Console/Application.php:117
 Composer\Console\Application->doRun() at phar:///var/www/virtual/kat42/contao-4/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:121
 Symfony\Component\Console\Application->run() at phar:///var/www/virtual/kat42/contao-4/composer.phar/src/Composer/Console/Application.php:83
 Composer\Console\Application->run() at phar:///var/www/virtual/kat42/contao-4/composer.phar/bin/composer:43
 require() at /var/www/virtual/kat42/contao-4/composer.phar:15

Two different approaches to Symfony Security/Firewall

Issue by @aschempp
Monday Feb 09, 2015 at 11:19 GMT

I have read up and tested the Symfony Security component to find out how it can be integrated in Contao 4. I think we all agree that we should provide some sort of integration, meaning the visitor could be authenticated inside Symfony components, the profilter etc.

Background on Security and Firewalls

Symfony uses a so called "firewall" to protect access and authenticate users. In our case, we will need two Symfony firewalls because we have two different users for fronted and backend. Each firewall is independently configured, e.g. how the user authentication works.

Authentication vs. Authorization

There is a clear difference between authenticating a user and authorizing access to something in the Symfony security component. We're only talking about authentication here. More info on the topic can be found at http://symfony.com/doc/current/book/security.html

Implementation options

I came up with two different approaches how to deal with the user authentication.

Using Contao to authenticate Symfony firewalls

Draft at aschempp/contao-core-bundle@aschempp:feature/no-disableAlias...feature/security

In this approach we use the existing Contao BackendUser and FrontendUser to authenticate the visitor. The existing Contao classes are basically kept exactly as the are.

On the Symfony side, we add our own authentication management. Instead of letting Symfony store information about the current user in the session, we use the so-called stateless option to authenticate the Symfony user on every request by asking the Contao user. As an example, this is similar to using an API token in Symfony to identify the user (it's actually built on that).

Pros

  • The Contao user classes are kept as they are and are 100% backwards compatible
  • People familiar with the Contao authentication system will still know how it works
  • It is still possible to add Symfony security voters to use Symfony for access authorization.

Replacing Contao authentication with Symfony firewalls

Draft at aschempp/contao-core-bundle@aschempp:feature/webprofiler...feature/advanced-security currently only for backend user.

The second approach would be to replace the Contao authentication with Symfony security components. Symfony has several built-in user authentication methods, like form login or remember-me cookie.

Pros

  • The full power and flexibility of Symfony authentication can be used
  • Symfony developers will be familiar with how it works
  • It would much easier to add new authentication methods like Facebook or Twitter login
  • Developers can use third-party bundles to add new features (see http://knpbundles.com/keyword/authentication)
  • We can still support BackendUser/FrontendUser for legacy reasons, though the stuff like tl_session table needs to be re-engineered.

Conclusions

I think using the Symfony security/authentication should/will be the "long-termin solution" anyways. It's "only" a question of "when". To me, it's a matter of how much effort we want and can invest into this topic. Adding Contao authentication (option 1) will be much easier in the first place, but I don't know if it will limit the advantages of Contao 4 and the Symfony integration.

/cc @leofeyer @Toflar @discordier

backend icons missed

Issue by @magicsepp
Wednesday Jun 11, 2014 at 15:01 GMT

Articles icon is seen, Events and others parts of system/modules are missed!
part of the generated html:

<li>
<a class="navigation news" title="" href="contao/main.php?do=news&ref=ded81d14">News</a>
</li>
<li>
<a class="navigation calendar" style="background-image:url('system/modules/calendar/assets/icon.gif')" title="" href="contao/main.php?do=calendar&ref=ded81d14">Events</a>
</li>

for the background path I got a 404 not found message

Open questions regarding the Symfony integration

Issue by @leofeyer
Thursday Jun 19, 2014 at 19:00 GMT

Questions to discuss at the upcoming Mumble call:

  • How do we inject the Contao configuration?
  • How do we integrate the DI container?
  • How do we integrate the event dispatcher?
  • How do we minimize the number of duplicate files (see #10-comment46790152)?
  • Do we want the back end to go through the Symfony router?
  • Should we boot the kernel in dev mode if the Contao debug mode is enabled?

Cannot load resource ".".

Issue by @leofeyer
Sunday Jun 29, 2014 at 19:33 GMT

Right now, Symfony does not fully support the custom route we are using for our front end router. If you e.g. try to run app/console cache:clear on the command line, it will throw an Exception:

[Symfony\Component\Config\Exception\FileLoaderLoadException]  
Cannot load resource ".".

@aschempp @contao/developers

Update the (sub)folder lock status

Issue by @xchs
Wednesday Jun 11, 2014 at 22:24 GMT

When I change the access rights for a given folder structure by setting the "Public" attribute in the folder settings it seems that the lock status icon for the subfolders does not change accordingly.

How to reproduce:

  • Set up a new Contao 4.0.0-alpha1 installation
  • Import e.g. the COD example website
  • Open the "File manager" back end module
  • Do not expand the node for the contaodemo folder
  • Enable the option "Public" in the contaodemo folder settings
  • Expand the contaodemo folder node
  • The subfolder icons still show the lock status symbol

Perhaps it is somehow related with the expand / collapse Ajax call since it works as expected when all nodes are expanded before the "Public" setting is changed.

Recreate the `files` folder symlinks on folder rename

Issue by @xchs
Saturday Jun 14, 2014 at 02:02 GMT

It could be reasonable to automatically update the files folder symlinks once the symlink target folder is renamed.

As it is now, we would always have to run the maintenance job to recreate the respective symlinks again:

  • Create a new folder foo in the "File manager" and enable the "Public" attribute to make it become publicly accessible. This should create the corresponding symlink (foo -> ../../files/foo) in the web/files directory.
  • Now, rename the folder foo to e.g. bar
  • In the web/files directory there is still a symlink foo that points to the target folder ../../files/foo, which, however, in the meantime no longer exists.
  • Finally, run the "Recreate the symlinks" maintenance job to update the symlink accordingly

In short: similar to the DBAFS synchronization it might come in handy to perform immediately a symlink update job as well.

Errors on Installation with 3.4.2

Issue by @hostianer
Monday Jan 26, 2015 at 14:57 GMT

MAMP Pro PHP 5.6.2, local on OSX.
Also tested with PHP 5.5.18

Version 3.4.0 is working without problems.

If i go to the /install.php i`m getting these errors:

Notice: Undefined index: HTTP_X_FORWARDED_HOST in /Applications/MAMP/htdocs/pixelianer/system/modules/core/library/Contao/Environment.php on line 302 

Notice: Undefined index: SSL_SESSION_ID in /Applications/MAMP/htdocs/pixelianer/system/modules/core/library/Contao/Environment.php on line 313 

Notice: Undefined index: HTTPS in /Applications/MAMP/htdocs/pixelianer/system/modules/core/library/Contao/Environment.php on line 313 

Notice: Undefined index: HTTPS in /Applications/MAMP/htdocs/pixelianer/system/modules/core/library/Contao/Environment.php on line 313 

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/pixelianer/system/modules/core/library/Contao/Environment.php:302) in system/modules/core/library/Contao/Controller.php on line 2125 
#0 [internal function]: __error(2, 'Cannot modify h...', '/Applications/M...', 2125, Array) 
#1 system/modules/core/library/Contao/Controller.php(2125): header('HTTP/1.1 303 Se...') 
#2 system/modules/core/controllers/BackendInstall.php(315): Contao\Controller::reload() 
#3 system/modules/core/controllers/BackendInstall.php(80): Contao\BackendInstall->acceptLicense() 
#4 contao/install.php(24): Contao\BackendInstall->run() 
#5 {main} 

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/pixelianer/system/modules/core/library/Contao/Environment.php:302) in system/modules/core/library/Contao/Controller.php on line 2126 
#0 [internal function]: __error(2, 'Cannot modify h...', '/Applications/M...', 2126, Array) 
#1 system/modules/core/library/Contao/Controller.php(2126): header('Location: http:...') 
#2 system/modules/core/controllers/BackendInstall.php(315): Contao\Controller::reload() 
#3 system/modules/core/controllers/BackendInstall.php(80): Contao\BackendInstall->acceptLicense() 
#4 contao/install.php(24): Contao\BackendInstall->run() 
#5 {main}  

Configuration file format

Issue by @aschempp
Monday Jan 05, 2015 at 13:07 GMT

I know this has been discussed before, but we should "write down" the final decision regarding configuration file format.

Afair @leofeyer said we should use YAML because it's easer, but later on said we could potentially use XML. Now I noticed Symfony core bundles seem to use XML everywhere, and I also read that XML supports more features. I also find it more readable.

I like Christian's idea of using XML for bundles but YAML for the application in general.

Can we vote on the topic?

Fix installing Contao via Composer

Issue by @leofeyer
Tuesday Jul 08, 2014 at 14:21 GMT

git clone https://github.com/contao/contao.git
cd contao
git checkout develop
composer install

Fails due to the missing parameters.yml file:

[Symfony\Component\Config\Exception\FileLoaderLoadException]                                                                                                                                            
Cannot import resource "parameters.yml" from "/Users/leofeyer/Downloads/contao/app/config/config.yml". (The file "parameters.yml" does not exist (in: /Users/leofeyer/Downloads/contao/app/config, ).)

Make public extension folders configurable

Issue by @leofeyer
Thursday Jun 19, 2014 at 15:10 GMT

Right now the autoloader just symlinks the extension folders assets/ and themes/ into the public web/ directory. However, it should be possible to configure other folders in the autoload.ini file.

Use `utf8mb4` as default charset for MySQL

Issue by @leofeyer
Wednesday Nov 12, 2014 at 09:27 GMT

To fully support Unicode in MySQL, we should use utf8mb4 as the default charset (see contao/core#7140). However, this would effectively raise the system requirements to MySQL 5.5.3+.

@contao/developers Is this something that we should consider in Contao 4? I don't know how many hosting companies are still running MySQL 5.0 or 5.1? The ones I know have MySQL 5.5 (or MariaDB).

Install tool: fatal error after database connection setup

Issue by @xchs
Tuesday Jun 10, 2014 at 21:04 GMT

The Contao 4.0.0-alpha1 install tool throws a fatal error when it comes to the database connection setup:

Fatal error: Uncaught exception Exception with message Query error: Table 'contao4.tl_user' doesn't exist (SELECT COUNT(*) AS count FROM tl_user WHERE admin=1) thrown in vendor/contao/contao-library/src/Contao/Database/Statement.php on line 283

#0 vendor/contao/contao-library/src/Contao/Database/Statement.php(254): Contao\Database\Statement->query()
#1 vendor/contao/contao-library/src/Contao/Database.php(190): Contao\Database\Statement->execute()
#2 vendor/contao/module-core/src/controllers/BackendInstall.php(577): Contao\Database->execute('SELECT COUNT(*)...')
#3 vendor/contao/module-core/src/controllers/BackendInstall.php(191): Contao\BackendInstall->createAdminUser()
#4 web/contao/install.php(26): Contao\BackendInstall->run()
#5 {main}

Remove "disableAlias" mode

Issue by @aschempp
Monday Feb 02, 2015 at 11:55 GMT

The disableAlias mode does not generate URLs with index.php/alias.html, instead it uses index.php?id=5.

I think we should drop this in Contao 4. Can anyone remember why this was supported in the first place? I remember something about old IIS support…

Opinions/votes?

Move editors to separate plugin

Issue by @fbender
Sunday Jun 15, 2014 at 11:12 GMT

To reduce complexity as well as improve flexibility and reusability, I propose to remove TinyMCE and ACE from Contao 4 and instead create separate plugins for both. A standard installation could (and should!) still include those plugins by default (through a Composer dependency), or even propose alternatives like CKEditor or CodeMirror (or no editor at all) during installation.

Benefits:

  • Those who don't want or need an editor can reduce the footprint of their Contao installation.
  • Users can choose an editor to their liking, e.g. a minimal or especially accessible one.
  • Editors can be updated independently of Contao.
  • Development can be handled by the community (though the default editors should always work with any release or beta version – but since the changes required are mostly minimal, this is not a big issue).
  • Reuse what is available through Composer – don't know if there are packages for other projects but if there are, it may be interesting to see if we can somehow merge efforts here.

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.