Giter Club home page Giter Club logo

site's Introduction

tradefurniturecompany.co.uk (Magento 2).

How to update all tradefurniturecompany/* packages

sudo service crond stop
sudo service nginx stop                
sudo service php-fpm stop
bin/magento maintenance:enable      
composer remove tradefurniturecompany/core
composer remove tradefurniturecompany/blog
composer remove tradefurniturecompany/google-shopping
composer remove tradefurniturecompany/image 
composer remove tradefurniturecompany/report  
rm -rf composer.lock
composer clear-cache
composer2 require --ignore-platform-reqs --no-plugins tradefurniturecompany/core:*
composer2 require --ignore-platform-reqs --no-plugins tradefurniturecompany/blog:*
composer2 require --ignore-platform-reqs --no-plugins tradefurniturecompany/google-shopping:*
composer2 require --ignore-platform-reqs --no-plugins tradefurniturecompany/image:*
composer2 require --ignore-platform-reqs --no-plugins tradefurniturecompany/report:*
composer update # https://mage2.pro/t/6327/2 
bin/magento setup:upgrade
bin/magento cache:enable
rm -rf var/di var/generation generated/*
bin/magento setup:di:compile
rm -rf pub/static/*
bin/magento setup:static-content:deploy \
	--area adminhtml \
	--theme Magento/backend \
	-f en_US en_GB
bin/magento setup:static-content:deploy \
	--area frontend \
	--theme TradeFurnitureCompany/default \
	-f en_GB
bin/magento cache:clean
sudo service php-fpm start
sudo service nginx start
bin/magento maintenance:disable
sudo service crond start
rm -rf var/log/* var/report/*

site's People

Contributors

dmitrii-fediuk avatar

Stargazers

 avatar Clive Walkden avatar

Watchers

 avatar James Cloos avatar  avatar

site's Issues

«PDO::beginTransaction(): MySQL server has gone away in vendor/magento/zendframework1/library/Zend/Db/Adapter/Pdo/Abstract.php on line 305» on `cron:run`

************************************
Caller:      PDO::beginTransaction
Callee:      Magento\Framework\App\ErrorHandler::handler
*****************1******************
File:        vendor/magento/zendframework1/library/Zend/Db/Adapter/Pdo/Abstract.php
Line:        305
Caller:      Zend_Db_Adapter_Pdo_Abstract::_beginTransaction
Callee:      PDO::beginTransaction
Context:     
protected function _beginTransaction()
    {
        $this->_connect();
        $this->_connection->beginTransaction();
    }
*****************2******************
File:        vendor/magento/zendframework1/library/Zend/Db/Adapter/Abstract.php
Line:        496
Caller:      Zend_Db_Adapter_Abstract::beginTransaction
Callee:      Zend_Db_Adapter_Pdo_Abstract::_beginTransaction
Context:     
public function beginTransaction()
    {
        $this->_connect();
        $q = $this->_profiler->queryStart('begin', Zend_Db_Profiler::TRANSACTION);
        $this->_beginTransaction();
        $this->_profiler->queryEnd($q);
        return $this;
    }
*****************3******************
File:        vendor/magento/framework/DB/Adapter/Pdo/Mysql.php
Line:        282
Caller:      Magento\Framework\DB\Adapter\Pdo\Mysql::beginTransaction
Callee:      Zend_Db_Adapter_Abstract::beginTransaction
Context:     
public function beginTransaction()
    {
        if ($this->_isRolledBack) {
            throw new \Exception(AdapterInterface::ERROR_ROLLBACK_INCOMPLETE_MESSAGE);
        }
        if ($this->_transactionLevel === 0) {
            $this->logger->startTimer();
            parent::beginTransaction();
            $this->logger->logStats(LoggerInterface::TYPE_TRANSACTION, 'BEGIN');
        }
        ++$this->_transactionLevel;
        return $this;
    }
*****************4******************
File:        vendor/magento/framework/Model/ResourceModel/AbstractResource.php
Line:        66
Caller:      Magento\Framework\Model\ResourceModel\AbstractResource::beginTransaction
Callee:      Magento\Framework\DB\Adapter\Pdo\Mysql::beginTransaction
Context:     
public function beginTransaction()
    {
        $this->getConnection()->beginTransaction();
        return $this;
    }
*****************5******************
File:        vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php
Line:        398
Caller:      Magento\Framework\Model\ResourceModel\Db\AbstractDb::save
Callee:      Magento\Framework\Model\ResourceModel\AbstractResource::beginTransaction
Context:     
public function save(\Magento\Framework\Model\AbstractModel $object)
    {
        if ($object->isDeleted()) {
            return $this->delete($object);
        }

        $this->beginTransaction();

        try {
            if (!$this->isModified($object)) {
                $this->processNotModifiedSave($object);
                $this->commit();
                $object->setHasDataChanges(false);
                return $this;
            }
*****************6******************
File:        vendor/magento/framework/Model/AbstractModel.php
Line:        655
Caller:      Magento\Framework\Model\AbstractModel::save
Callee:      Magento\Framework\Model\ResourceModel\Db\AbstractDb::save
Context:     
public function save()
    {
        $this->_getResource()->save($this);
        return $this;
    }
*****************7******************
File:        vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php
Line:        745
Caller:      Magento\Cron\Observer\ProcessCronQueueObserver::processPendingJobs
Callee:      Magento\Framework\Model\AbstractModel::save
Context:     
}
            } catch (\Exception $e) {
                $this->processError($schedule, $e);
            }
            if ($schedule->getStatus() === Schedule::STATUS_SUCCESS) {
                $procesedJobs[$schedule->getJobCode()] = true;
            }
            $schedule->save();
        }
    }
*****************8******************
File:        vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php
Line:        243
Caller:      Magento\Cron\Observer\ProcessCronQueueObserver::Magento\Cron\Observer\{closure}
Callee:      Magento\Cron\Observer\ProcessCronQueueObserver::processPendingJobs
Context:     
}

            $this->lockGroup(
                $groupId,
                function ($groupId) use ($currentTime, $jobsRoot) {
                    $this->cleanupJobs($groupId, $currentTime);
                    $this->generateSchedules($groupId);
                    $this->processPendingJobs($groupId, $jobsRoot, $currentTime);
                }
            );
        }
    }

    /**
     * Lock group
     *
*****************9******************
File:        vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php
Line:        272
Caller:      Magento\Cron\Observer\ProcessCronQueueObserver::lockGroup
Callee:      Magento\Cron\Observer\ProcessCronQueueObserver::Magento\Cron\Observer\{closure}
Context:     
"Could not acquire lock for cron group: %s, skipping run",
                    $groupId
                )
            );
            return;
        }
        try {
            $callback($groupId);
        } finally {
            $this->lockManager->unlock(self::LOCK_PREFIX . $groupId);
        }
    }
*****************10*****************
File:        vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php
Line:        244
Caller:      Magento\Cron\Observer\ProcessCronQueueObserver::execute
Callee:      Magento\Cron\Observer\ProcessCronQueueObserver::lockGroup
Context:     
$this->lockGroup(
                $groupId,
                function ($groupId) use ($currentTime, $jobsRoot) {
                    $this->cleanupJobs($groupId, $currentTime);
                    $this->generateSchedules($groupId);
                    $this->processPendingJobs($groupId, $jobsRoot, $currentTime);
                }
            );
        }
    }
*****************11*****************
File:        vendor/magento/framework/Event/Invoker/InvokerDefault.php
Line:        88
Caller:      Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod
Callee:      Magento\Cron\Observer\ProcessCronQueueObserver::execute
Context:     
protected function _callObserverMethod($object, $observer)
    {
        if ($object instanceof \Magento\Framework\Event\ObserverInterface) {
            $object->execute($observer);
        } elseif ($this->_appState->getMode() == State::MODE_DEVELOPER) {
            throw new \LogicException(
                sprintf(
                    'Observer "%s" must implement interface "%s"',
                    get_class($object),
                    \Magento\Framework\Event\ObserverInterface::class
                )
            );
*****************12*****************
File:        vendor/magento/framework/Event/Invoker/InvokerDefault.php
Line:        74
Caller:      Magento\Framework\Event\Invoker\InvokerDefault::dispatch
Callee:      Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod
Context:     
}

        if (isset($configuration['shared']) && false === $configuration['shared']) {
            $object = $this->_observerFactory->create($configuration['instance']);
        } else {
            $object = $this->_observerFactory->get($configuration['instance']);
        }
        $this->_callObserverMethod($object, $observer);
    }
*****************13*****************
File:        vendor/magento/framework/Event/Manager.php
Line:        66
Caller:      Magento\Framework\Event\Manager::dispatch
Callee:      Magento\Framework\Event\Invoker\InvokerDefault::dispatch
Context:     
$event = new \Magento\Framework\Event($data);
            $event->setName($eventName);

            $wrapper = new Observer();
            $wrapper->setData(array_merge(['event' => $event], $data));

            \Magento\Framework\Profiler::start('OBSERVER:' . $observerConfig['name']);
            $this->_invoker->dispatch($observerConfig, $wrapper);
            \Magento\Framework\Profiler::stop('OBSERVER:' . $observerConfig['name']);
        }
        \Magento\Framework\Profiler::stop('EVENT:' . $eventName);
    }
*****************14*****************
File:        generated/code/Magento/Framework/Event/Manager/Proxy.php
Line:        95
Caller:      Magento\Framework\Event\Manager\Proxy::dispatch
Callee:      Magento\Framework\Event\Manager::dispatch
Context:     
public function dispatch($eventName, array $data = [])
    {
        return $this->_getSubject()->dispatch($eventName, $data);
    }
*****************15*****************
File:        vendor/magento/framework/App/Cron.php
Line:        86
Caller:      Magento\Framework\App\Cron::launch
Callee:      Magento\Framework\Event\Manager\Proxy::dispatch
Context:     
$configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class);
        $this->objectManager->configure($configLoader->load(Area::AREA_CRONTAB));

        $this->areaList->getArea(Area::AREA_CRONTAB)->load(Area::PART_TRANSLATE);

        /** @var \Magento\Framework\Event\ManagerInterface $eventManager */
        $eventManager = $this->objectManager->get(\Magento\Framework\Event\ManagerInterface::class);
        $eventManager->dispatch('default');
        $this->_response->setCode(0);
        return $this->_response;
    }
*****************16*****************
File:        vendor/magento/module-cron/Console/Command/CronCommand.php
Line:        117
Caller:      Magento\Cron\Console\Command\CronCommand::execute
Callee:      Magento\Framework\App\Cron::launch
Context:     
$bootstrapOptionValue = $bootstrapOptionValues[ProcessCronQueueObserver::STANDALONE_PROCESS_STARTED];
            if ($bootstrapOptionValue) {
                $params[ProcessCronQueueObserver::STANDALONE_PROCESS_STARTED] = $bootstrapOptionValue;
            }
        }
        /** @var \Magento\Framework\App\Cron $cronObserver */
        $cronObserver = $objectManager->create(\Magento\Framework\App\Cron::class, ['parameters' => $params]);
        $cronObserver->launch();
        $output->writeln('<info>' . 'Ran jobs by schedule.' . '</info>');
    }
*****************17*****************
File:        vendor/symfony/console/Command/Command.php
Line:        255
Caller:      Symfony\Component\Console\Command\Command::run
Callee:      Magento\Cron\Console\Command\CronCommand::execute
Context:     
}

        $input->validate();

        if ($this->code) {
            $statusCode = ($this->code)($input, $output);
        } else {
            $statusCode = $this->execute($input, $output);
        }

        return is_numeric($statusCode) ? (int) $statusCode : 0;
    }
*****************18*****************
File:        vendor/magento/framework/Interception/Interceptor.php
Line:        58
Caller:      Magento\Cron\Console\Command\CronCommand::___callParent
Callee:      Symfony\Component\Console\Command\Command::run
Context:     
public function ___callParent($method, array $arguments)
    {
        return parent::$method(...array_values($arguments));
    }
*****************19*****************
File:        vendor/magento/framework/Interception/Interceptor.php
Line:        138
Caller:      Magento\Cron\Console\Command\CronCommand::Magento\Framework\Interception\{closure}
Callee:      Magento\Cron\Console\Command\CronCommand::___callParent
Context:     
$code = $currentPluginInfo[DefinitionInterface::LISTENER_AROUND];
                $pluginInfo = $pluginList->getNext($type, $method, $code);
                $pluginInstance = $pluginList->getPlugin($type, $code);
                $pluginMethod = 'around' . $capMethod;
                $result = $pluginInstance->$pluginMethod($subject, $next, ...array_values($arguments));
            } else {
                // Call original method
                $result = $subject->___callParent($method, $arguments);
            }

            if (isset($currentPluginInfo[DefinitionInterface::LISTENER_AFTER])) {
                // Call 'after' listeners
                foreach ($currentPluginInfo[DefinitionInterface::LISTENER_AFTER] as $code) {
                    $pluginInstance = $pluginList->getPlugin($type, $code);
                    $pluginMethod = 'after' . $capMethod;
                    $result = $pluginInstance->$pluginMethod($subject, $result, ...array_values($arguments));
*****************20*****************
File:        vendor/mage2pro/core/Cron/Plugin/Console/Command/CronCommand.php
Line:        24
Caller:      Df\Cron\Plugin\Console\Command\CronCommand::aroundRun
Callee:      Magento\Cron\Console\Command\CronCommand::Magento\Framework\Interception\{closure}
Context:     
function aroundRun(Sb $sb, \Closure $f, II $i, IO $o) {
		try {return $f($i, $o);}
		catch (\Exception $e) {
			df_log_e($e, $this);
			throw $e;
		}
	}
*****************21*****************
File:        vendor/magento/framework/Interception/Interceptor.php
Line:        135
Caller:      Magento\Cron\Console\Command\CronCommand::Magento\Framework\Interception\{closure}
Callee:      Df\Cron\Plugin\Console\Command\CronCommand::aroundRun
Context:     
if (isset($currentPluginInfo[DefinitionInterface::LISTENER_AROUND])) {
                // Call 'around' listener
                $code = $currentPluginInfo[DefinitionInterface::LISTENER_AROUND];
                $pluginInfo = $pluginList->getNext($type, $method, $code);
                $pluginInstance = $pluginList->getPlugin($type, $code);
                $pluginMethod = 'around' . $capMethod;
                $result = $pluginInstance->$pluginMethod($subject, $next, ...array_values($arguments));
            } else {
                // Call original method
                $result = $subject->___callParent($method, $arguments);
            }

            if (isset($currentPluginInfo[DefinitionInterface::LISTENER_AFTER])) {
                // Call 'after' listeners
                foreach ($currentPluginInfo[DefinitionInterface::LISTENER_AFTER] as $code) {
*****************22*****************
File:        vendor/magento/framework/Interception/Interceptor.php
Line:        153
Caller:      Magento\Cron\Console\Command\CronCommand::___callPlugins
Callee:      Magento\Cron\Console\Command\CronCommand::Magento\Framework\Interception\{closure}
Context:     
$result = $pluginInstance->$pluginMethod($subject, $result, ...array_values($arguments));
                }
            }

            return $result;
        };

        $result = $next(...array_values($arguments));
        $next = null;

        return $result;
    }
*****************23*****************
File:        generated/code/Magento/Cron/Console/Command/CronCommand/Interceptor.php
Line:        26
Caller:      Magento\Cron\Console\Command\CronCommand::run
Callee:      Magento\Cron\Console\Command\CronCommand::___callPlugins
Context:     
public function run(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output)
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'run');
        if (!$pluginInfo) {
            return parent::run($input, $output);
        } else {
            return $this->___callPlugins('run', func_get_args(), $pluginInfo);
        }
    }
*****************24*****************
File:        vendor/symfony/console/Application.php
Line:        893
Caller:      Symfony\Component\Console\Application::doRunCommand
Callee:      Magento\Cron\Console\Command\CronCommand::run
Context:     
foreach ($command->getHelperSet() as $helper) {
            if ($helper instanceof InputAwareInterface) {
                $helper->setInput($input);
            }
        }

        if (null === $this->dispatcher) {
            return $command->run($input, $output);
        }

        // bind before the console.command event, so the listeners have access to input options/arguments
        try {
            $command->mergeApplicationDefinition();
            $input->bind($command->getDefinition());
        } catch (ExceptionInterface $e) {
            // ignore invalid options/arguments for now, to allow the event listeners to customize the InputDefinition
*****************25*****************
File:        vendor/symfony/console/Application.php
Line:        262
Caller:      Symfony\Component\Console\Application::doRun
Callee:      Symfony\Component\Console\Application::doRunCommand
Context:     
return 1;
            }

            $command = $this->find($alternative);
        }

        $this->runningCommand = $command;
        $exitCode = $this->doRunCommand($command, $input, $output);
        $this->runningCommand = null;

        return $exitCode;
    }
*****************26*****************
File:        vendor/magento/framework/Console/Cli.php
Line:        105
Caller:      Magento\Framework\Console\Cli::doRun
Callee:      Symfony\Component\Console\Application::doRun
Context:     
public function doRun(Console\Input\InputInterface $input, Console\Output\OutputInterface $output)
    {
        $exitCode = parent::doRun($input, $output);

        if ($this->initException) {
            throw $this->initException;
        }

        return $exitCode;
    }
*****************27*****************
File:        vendor/symfony/console/Application.php
Line:        145
Caller:      Symfony\Component\Console\Application::run
Callee:      Magento\Framework\Console\Cli::doRun
Context:     
$phpHandler[0]->setExceptionHandler($debugHandler);
            }
        }

        $this->configureIO($input, $output);

        try {
            $exitCode = $this->doRun($input, $output);
        } catch (\Exception $e) {
            if (!$this->catchExceptions) {
                throw $e;
            }

            $renderException($e);

            $exitCode = $e->getCode();
*****************28*****************
File:        bin/magento
Line:        23
Callee:      Symfony\Component\Console\Application::run
Context:     
echo 'Autoload error: ' . $e->getMessage();
    exit(1);
}
try {
    $handler = new \Magento\Framework\App\ErrorHandler();
    set_error_handler([$handler, 'handler']);
    $application = new Magento\Framework\Console\Cli('Magento CLI');
    $application->run();
} catch (\Exception $e) {
    while ($e) {
        echo $e->getMessage();
        echo $e->getTraceAsString();
        echo "\n\n";
        $e = $e->getPrevious();
    }
    exit(Magento\Framework\Console\Cli::RETURN_FAILURE);

Apptrian_ImageOptimizer should not process files of the staging website

Now I see in logs of the production website:

/var/www/vhosts/tradefurniturecompany.co.uk/htdocs/app/code/Apptrian/ImageOptimizer/bin/elf64/jpegtran -copy none -optimize -progressive -outfile /var/www/vhosts/staging.tradefurniturecompany.co.uk/htdocs/pub/media/catalog/category/P28&4A4DR-RS.jpg /var/www/vhosts/staging.tradefurniturecompany.co.uk/htdocs/pub/media/catalog/category/P28&4A4DR-RS.jpg

«Duplicate entry 'light-retro-chic-sideboard-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID'»

[2020-02-14 10:14:15] main.CRITICAL: URL key for specified store already exists. {"exception":"[object] (Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException(code: 0): URL key for specified store already exists. at vendor/magento/module-url-rewrite/Model/Storage/DbStorage.php:292, Magento\Framework\Exception\AlreadyExistsException(code: 0): URL key for specified store already exists. at vendor/magento/module-url-rewrite/Model/Storage/DbStorage.php:322, Magento\Framework\DB\Adapter\DuplicateException(code: 1062): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'light-retro-chic-sideboard-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT INTO url_rewrite (redirect_type,is_autogenerated,metadata,description,entity_type,entity_id,request_path,target_path,store_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?) at vendor/magento/framework/DB/Adapter/Pdo/Mysql.php:589, Zend_Db_Statement_Exception(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'light-retro-chic-sideboard-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT INTO url_rewrite (redirect_type,is_autogenerated,metadata,description,entity_type,entity_id,request_path,target_path,store_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?) at vendor/magento/framework/DB/Statement/Pdo/Mysql.php:110, PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'light-retro-chic-sideboard-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID' at vendor/magento/framework/DB/Statement/Pdo/Mysql.php:91)"} []

«In Mysql.php line 589: Deadlock found when trying to get lock; try restarting transaction, query was: DELETE FROM `cron_schedule` WHERE (status = 'success') AND (job_code in ('ddg_automation_customer_subscriber_guest_sync', 'ddg_automation_importer', 'ddg_automation_status', 'ddg_automation_abandonedcarts', 'ddg_automation_reviews_and_wishlist', 'ddg_automation_campaign', 'ddg_automation_order_sync', 'ddg_automation_cleaner', 'ddg_automation_catalog_sync', 'ddg_automation_email_templates')) AND (created_at < '2020-02-16 16:46:02')» in `magento.cron.log`

«sh: -c: line 0: syntax error near unexpected token `('» caused by `app/code/Apptrian/ImageOptimizer/bin/elf64/jpegtran`

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `/var/www/vhosts/tradefurniturecompany.co.uk/htdocs/app/code/Apptrian/ImageOptimizer/bin/elf64/jpegtran -copy none -optimize -progressive -outfile /var/www/vhosts/tradefurniturecompany.co.uk/htdocs/pub/media/catalog/product/m/e/meja-besar-1-(2).jpg /var/www/vhosts/tradefurniturecompany.co.uk/htdocs/pub/media/catalog/product/m/e/meja-besar-1-(2).jpg 2>&1'

Elasticsearch: «No alive nodes found in your cluster»

 {"exception":"[object] (Elasticsearch\\Common\\Exceptions\\NoNodesAvailableException(code: 0): No alive nodes found in your cluster at vendor/elasticsearch/elasticsearch/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php:53)"} []

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.