wiki:members/GRIP-UQAM

Version 87 (modified by https://id.mayfirst.org/gripuqam, 3 years ago) (diff)

--

Languages:

Who we are?

http://gripuqam.org We are french speaking so this page will be translated unsing the advise in faq/translate/pages

Wiki page we read or collaborate to write @ mayfirst

Tickets we follow

Taged with GRIP-UQAM

Results (1 - 10 of 21)

1 2 3
Ticket Modified Resolution Owner Summary
#8123 3 years ago fixed python-django-social-auth not compatible with id.mayfirst.org
#8118 3 years ago fixed Ross Apache mod_disk_cache on Chelsea
#7948 3 years ago fixed Dana Hard error in deleting a user
#7746 3 years ago fixed Ross Some debian packages I'd love to use on chelsea.mayfirst.org
#5580 3 years ago fixed provide alternate fastcgi implementation option for persistent daemons
#8271 3 years ago wontfix Ross America/Montreal not present in TZ list to choose from in MF-Drupal 7 installation on chelsea
#8052 3 years ago fixed Ross memcached proposal for implementation on shared infrastructure
#10512 4 years ago fixed JaimeV New postgreSQL database on ossie
#10425 4 years ago fixed JaimeV tidy on ossie (Detect faulty and chopped off HTML for Emogrifier in Drupal)
1 2 3

Taged with python, tendenci, django, pyramid, php, drupal7, drupal, golang, fastcgi, chelsea, ossie

Results (1 - 10 of 1053)

1 2 3 4 5 6 7 8 9 10 11
Ticket Modified Resolution Owner Summary
#14671 79 minutes ago Update failed
#14652 8 days ago fixed JaimeV Drupal 7
#14546 6 weeks ago JaimeV I want know why can't to install Drupal 8
#14362 4 months ago fixed JaimeV php7.0-zip not installed
#14359 4 months ago optimal method for creating a drupal development install
#11677 4 months ago JaimeV how-to guide for creating drupal dev site on Mayfirst server
#14356 4 months ago Jamie McClelland How are drupal updates handled?
#14353 4 months ago JaimeV guidance on initial drupal setup needed ASAP
1 2 3 4 5 6 7 8 9 10 11

Reported by us

#7720
Deleted
#7721
Ticket list for GRIP-UQAM
#7746
Some debian packages I'd love to use on chelsea.mayfirst.org
#7841
I need two PostGres databases on chelsea
#7948
Hard error in deleting a user
#7949
I deleted the user I was logged in with the members control panel, makes a persistent whitepage in the browser
#7954
Lost access to Hosting Order Area
#8052
memcached proposal for implementation on shared infrastructure
#8118
Apache mod_disk_cache on Chelsea
#8123
python-django-social-auth not compatible with id.mayfirst.org
#8176
Permanent application process
#8271
America/Montreal not present in TZ list to choose from in MF-Drupal 7 installation on chelsea
#8273
Drupal core available translations do not appear in Localization update 7.x-1.0-beta3
#8277
I find it strange that everybody can read drupal settings.php
#9914
File Cache Drupal (7) Module: is it authorized on members sites?
#10321
I can no more change the ServerAlias
#10322
New postgreSQL database on ossie
#10327
Encoding problem with new postgres DB on ossie
#10399
New postgreSQL database on ossie
#10425
tidy on ossie (Detect faulty and chopped off HTML for Emogrifier in Drupal)
#10429
Failed to create the new user in the control panel
#10430
New postgreSQL database on ossie
#10512
New postgreSQL database on ossie
#10968
New postgreSQL database on floriberto
#11277
New postgreSQL databases on floriberto
#11282
Is it possible to install alpine on floriberto?
#11283
php5-intl on floriberto
#11285
node-less on floriberto
#11289
java on floriberto
#11303
provide libsodium13 for PHP to generate random numbers
#11304
php5-twig
#11366
New postgreSQL databases on floriberto
#11399
npm (package manager for Node.js) on ossie
#11400
npm (package manager for Node.js) on ossie
#11427
Email redirections did not work with hotmail last week
#11480
npm (package manager for Node.js) on chelsea
#11509
UID problem for code executed through Apache (This may be a security problem)
#11521
Is postgresql running on chelsea?
#11534
Soft errors setting cron jobs
#11536
Is postgresql running on floriberto?
#11544
Scheduled commands (cron jobs): Auto fill schedule field: Weekly
#11545
hard-error too long login name
#11547
New postgreSQL database on proudhon
#11548
Strange situation
#11587
PostgreSQL 8.4.20 on proudhon
#11588
psql: FATAL: database "ladepense-alimentsdici-webadmin" does not exist
#11601
Some ideas for installing Drupal 8
#11898
Web application hard-error
#11906
New postgreSQL databases on proudhon
#11957
Are there some Postgres DB backups on some machines (for members) ?
#11967
A mail redirection to a hotmail address is blocked on ossie
#11980
python3-yaml debian package on ossie
#11996
Python script to redirect email to other domains (Gmail, Hotmail, Yahoo, ...)
#11997
PostgreSQL looks like dead on proudhon
#11999
New postgreSQL database on peery
#12030
PostgreSQL looks like dead on proudhon
#12047
New postgreSQL databases on proudhon and peery
#12080
IP redirection domain name hosted at MayFirst, for a web site hosted elsewhere?
#12092
python3-yaml debian package on peery
#12093
PostgreSQL looks like dead on proudhon
#12121
Custom php.ini settings not affecting configuration
#12235
PostgreSQL looks like dead on chelsea
#12791
New postgreSQL database on hashmi
#12835
New postgreSQL databases on claudette
#12838
The server returned a "405 Method Not Allowed".
#13450
May the Postgres deamon go to swap?
#13456
time debian module on chelsea
#13476
Generating your https certificate failed
#13499
Information : proudhon and chelsea slow today morning
#13695
infolettre.alimentsdici.info No route to host
#13753
lecrapaud.org wordpress website possibly compromized on claudette
#13755
https://members.mayfirst.org/cp/ White screen
#14430
php7.2-bcmath + new postgreSQL database on daza

Taged with GRIP-UQAM with description

Results (1 of 21)

1 2 3 4 5 6 7 8 9 10 11
Ticket Modified Resolution Owner Summary
#5580 3 years ago fixed provide alternate fastcgi implementation option for persistent daemons
Description

Joseph and i have plans to demonstrate an alternate model for fastcgi service, based on a long-running fcgi daemon listening on a unix-domain socket.

Looking at the options, it appears that the non-DFSG-free mod_fastcgi has a FastCgiExternalServer option that can do exactly this.

also, it looks like mod_fcgid cannot simply connect to an already-running external server, and no such feature is planned :(

apache offers mod_proxy_fcgi for version 2.4 or later, but we're running apache 2.2 (and will be at least as long as we're running squeeze). It's also not clear if mod_proxy_fcgi will work with unix-domain sockets, or if it is limited to TCP.

I think we should use unix domain sockets; i think for a web site driven by php, we should run an independent php -b $SOCKETPATH instance as a runit service.

Another possible approach would be to use nginx instead of apache to serve the site, since nginx can pretty simply talk to a fastcgi backend over a socket. We could even reverse-proxy to a loopback-bound nginx from apache, but that starts to seem like rather too much of a stack. I suppose we could run nginx on an isolated IP address on the mosh so it doesn't conflict with apache? that'd require us to configure apache to bind explicitly to only certain IP addresses instead of *:80

Joseph, given these options, what do you think is the best way forward?

1 2 3 4 5 6 7 8 9 10 11

Development Tool

Pages we may need one day

Cron

  • Consider output to an (even empty) file a good practice allowing to check last time the command has been executed. This is because some subtle errors may prevent execution of cron commands, eg. see #11534
    ... &> cron/results/<file>
    
  • Consider nice and ionice to give priority to interactive tasks
    nice -n 127 ionice --class=idle ...
    

Some PostgreSQL commands

  • List of DB with parameters
    $ psql postgres --command="\l"
    
  • Create user
    postgres:~$ createuser -D -R -S <UNIX user>
    
  • Create DB
    postgres:~$ createdb -O <postgres user> <database name>
    
  • Backup
    $ pg_dump -Fc --verbose --file=<file name (.data)> <database name>
    
  • Restore the data base as a different user eg. to clone a Drupal website (bad idea to clone a drupal website)
    $ pg_restore --verbose --no-owner --no-privileges --dbname=<database name> <file name (.data)>
    
  • See SQL requests send by psql for commands like \l (\list)
    $ psql -E --dbname postgres
    
  • Drop all tables in a database
    • keywords: drop all tables from postgres database
    • This can be copyed into psql
      DROP FUNCTION IF EXISTS remove_all();
      
      CREATE FUNCTION remove_all() RETURNS void AS $$
      DECLARE
          rec RECORD;
          cmd text;
      BEGIN
          cmd := '';
      
          FOR rec IN SELECT
                  'DROP SEQUENCE ' || quote_ident(n.nspname) || '.'
                      || quote_ident(c.relname) || ' CASCADE;' AS name
              FROM
                  pg_catalog.pg_class AS c
              LEFT JOIN
                  pg_catalog.pg_namespace AS n
              ON
                  n.oid = c.relnamespace
              WHERE
                  relkind = 'S' AND
                  n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
                  pg_catalog.pg_table_is_visible(c.oid)
          LOOP
              cmd := cmd || rec.name;
          END LOOP;
      
          FOR rec IN SELECT
                  'DROP TABLE ' || quote_ident(n.nspname) || '.'
                      || quote_ident(c.relname) || ' CASCADE;' AS name
              FROM
                  pg_catalog.pg_class AS c
              LEFT JOIN
                  pg_catalog.pg_namespace AS n
              ON
                  n.oid = c.relnamespace WHERE relkind = 'r' AND
                  n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
                  pg_catalog.pg_table_is_visible(c.oid)
          LOOP
              cmd := cmd || rec.name;
          END LOOP;
      
          FOR rec IN SELECT
                  'DROP FUNCTION ' || quote_ident(ns.nspname) || '.'
                      || quote_ident(proname) || '(' || oidvectortypes(proargtypes)
                      || ');' AS name
              FROM
                  pg_proc
              INNER JOIN
                  pg_namespace ns
              ON
                  (pg_proc.pronamespace = ns.oid)
              WHERE
                  ns.nspname =
                  'public'
              ORDER BY
                  proname
          LOOP
              cmd := cmd || rec.name;
          END LOOP;
      
          EXECUTE cmd;
          RETURN;
      END;
      $$ LANGUAGE plpgsql;
      
      SELECT remove_all();
      

http://stackoverflow.com/questions/3327312/drop-all-tables-in-postgresql

Git

Json

.json validator

Javascript packages: Bower

From npm to bower

  • $ nice -n 127 ionice --class=idle npm install bower --save
  • $ nice -n 127 ionice --class=idle npm update #update!
  • or (like there is something to check here)
  • $ nice -n 127 ionice --class=idle npm update bower #update!
  • .bowerrc
  • $ nice -n 127 ionice --class=idle nodejs node_modules/bower/bin/bower init # to start a new empty bower.json
  • Install some libraries...
  • $ nice -n 127 ionice --class=idle nodejs node_modules/bower/bin/bower update --production #update!

Example .bowerrc for Drupal 7

{
  "directory" : "../../web/sites/all/libraries"
}

Install Javascript libraries with Bower package manager

#$ nodejs node_modules/bower/bin/bower install --save "jquery#1.4.4" # Drupal 7 version
# or (good idea (checked))
nodejs node_modules/bower/bin/bower install --save jquery#~1.4.4 # Drupal 7 version
nodejs node_modules/bower/bin/bower install --save jquery-colorbox # depends on jquery
nodejs node_modules/bower/bin/bower install --save ckeditor#full/stable
  • $ ls bower_components/
  • or
  • $ ls ../../web/sites/all/libraries

Example bower.json for Drupal 7

{
  "name": "drupal7",
  "private": true,
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "../../web/sites/all/libraries",
    "test",
    "tests"
  ],
  "dependencies": {
    "jquery": "~1.4.4",
    "jquery-colorbox": "^1.6.3",
    "ckeditor": "#full/stable"
  }
}

Composer

Some Composer documentation

Some Composer commands

  • $ ./composer.phar self-update
  • $ ./composer.phar update

Composer extensions

Includes

Example composer.json for Drupal 7

composer require drush/drush
composer require seld/jsonlint
{
    "require": {
        "drush/drush": "^8.0",
        "seld/jsonlint": "^1.4",
        "ezyang/htmlpurifier": "^4.7",
        "kraksoft/colorbox": "^1.5",
        "pelago/emogrifier": "^1.0",
        "tinymce/tinymce": "^3.5", # remove this line, this version is not available through composer!
        "ckeditor/ckeditor": "^full/4.5.1"
    }
}

Local Repositories

{
    "require": {
        "drush/drush": "8.0.5"
    },
    "repositories": [
        {
            "type": "git",
            "url": "../share/url/github.com/drush-ops/drush/8.0.5"
        },
        {
            "type": "path",
            "url": "../share/url/github.com/*/*/*"
        }
    ]
}

The next one does not work!

{
    "require": {
        "drush/drush": "8.0.5"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "file://tmp/gripuqam/share/url"
        }
    ]
}

https://getcomposer.org/doc/05-repositories.md#package-2

{
    "packages": {
        "drupal/core": {
            "8.0.5": {
{
    "name": "drupal/core",
    "version": "8.0.5",
    "dist": {
        "url": "github.com/drupal-composer/drupal-core/8.0.5",
        "type": "path"
    }
}
            }
        }
        "drush/drush": {
            "8.0.5": {
{
    "name": "drush/drush",
    "version": "8.0.5",
    "dist": {
        "url": "github.com/drush-ops/drush/8.0.5",
        "type": "path"
    }
}
            }
        }
        "psr/log": {
            "1.0.0": {
{
    "name": "psr/log",
    "version": "1.0.0",
    "dist": {
        "url": "github.com/php-fig/log/1.0.0",
        "type": "path"
    }
}
            }
        }
    }
}

{
    "require": {
        "drupal/core": "8.0.5"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                  "name": "drupal/core",
                  "version": "8.0.5",
                  "dist": {
                      "url": "../share/url/github.com/drupal-composer/drupal-core/8.0.5",
                      "type": "path"
                  },
                  "description": "Drupal is an open source content management platform powering millions of websites and applications.",
                  "type": "drupal-core",
                  "license": "GPL-2.0+",
                  "require": {
                    "php": ">=5.5.9",
                    "symfony/class-loader": "2.7.*",
                    "symfony/console": "2.7.*",
                    "symfony/dependency-injection": "2.7.*",
                    "symfony/event-dispatcher": "2.7.*",
                    "symfony/http-foundation": "~2.7.2",
                    "symfony/http-kernel": "2.7.*",
                    "symfony/routing": "2.7.*",
                    "symfony/serializer": "2.7.*",
                    "symfony/translation": "2.7.*",
                    "symfony/validator": "2.7.*",
                    "symfony/process": "2.7.*",
                    "symfony/yaml": "2.7.*",
                    "twig/twig": "^1.23.1",
                    "doctrine/common": "2.5.*",
                    "doctrine/annotations": "1.2.*",
                    "guzzlehttp/guzzle": "~6.1",
                    "symfony-cmf/routing": "1.3.*",
                    "easyrdf/easyrdf": "0.9.*",
                    "zendframework/zend-feed": "~2.4",
                    "stack/builder": "1.0.*",
                    "egulias/email-validator": "1.2.*",
                    "masterminds/html5": "~2.1",
                    "symfony/psr-http-message-bridge": "v0.2",
                    "zendframework/zend-diactoros": "~1.1",
                    "composer/semver": "~1.0"
                  },
                  "require-dev": {
                    "behat/mink": "~1.6",
                    "behat/mink-goutte-driver": "~1.2",
                    "jcalderonzumba/gastonjs": "~1.0.2",
                    "jcalderonzumba/mink-phantomjs-driver": "~0.3.1",
                    "mikey179/vfsStream": "~1.2",
                    "phpunit/phpunit": "~4.8",
                    "symfony/css-selector": "2.7.*"
                  },
                  "replace": {
                    "drupal/action": "self.version",
                    "drupal/aggregator": "self.version",
                    "drupal/automated_cron": "self.version",
                    "drupal/bartik": "self.version",
                    "drupal/ban": "self.version",
                    "drupal/basic_auth": "self.version",
                    "drupal/block": "self.version",
                    "drupal/block_content": "self.version",
                    "drupal/book": "self.version",
                    "drupal/breakpoint": "self.version",
                    "drupal/ckeditor": "self.version",
                    "drupal/classy": "self.version",
                    "drupal/color": "self.version",
                    "drupal/comment": "self.version",
                    "drupal/config": "self.version",
                    "drupal/config_translation": "self.version",
                    "drupal/contact": "self.version",
                    "drupal/content_translation": "self.version",
                    "drupal/contextual": "self.version",
                    "drupal/core-annotation": "self.version",
                    "drupal/core-bridge": "self.version",
                    "drupal/core-datetime": "self.version",
                    "drupal/core-diff": "self.version",
                    "drupal/core-discovery": "self.version",
                    "drupal/core-event-dispatcher": "self.version",
                    "drupal/core-file-cache": "self.version",
                    "drupal/core-gettext": "self.version",
                    "drupal/core-graph": "self.version",
                    "drupal/core-php-storage": "self.version",
                    "drupal/core-plugin": "self.version",
                    "drupal/core-proxy-builder": "self.version",
                    "drupal/core-serialization": "self.version",
                    "drupal/core-transliteration": "self.version",
                    "drupal/core-utility": "self.version",
                    "drupal/core-uuid": "self.version",
                    "drupal/datetime": "self.version",
                    "drupal/dblog": "self.version",
                    "drupal/dynamic_page_cache": "self.version",
                    "drupal/editor": "self.version",
                    "drupal/entity_reference": "self.version",
                    "drupal/field": "self.version",
                    "drupal/field_ui": "self.version",
                    "drupal/file": "self.version",
                    "drupal/filter": "self.version",
                    "drupal/forum": "self.version",
                    "drupal/hal": "self.version",
                    "drupal/help": "self.version",
                    "drupal/history": "self.version",
                    "drupal/image": "self.version",
                    "drupal/inline_form_errors": "self.version",
                    "drupal/language": "self.version",
                    "drupal/link": "self.version",
                    "drupal/locale": "self.version",
                    "drupal/minimal": "self.version",
                    "drupal/menu_link_content": "self.version",
                    "drupal/menu_ui": "self.version",
                    "drupal/migrate": "self.version",
                    "drupal/migrate_drupal": "self.version",
                    "drupal/node": "self.version",
                    "drupal/options": "self.version",
                    "drupal/page_cache": "self.version",
                    "drupal/path": "self.version",
                    "drupal/quickedit": "self.version",
                    "drupal/rdf": "self.version",
                    "drupal/responsive_image": "self.version",
                    "drupal/rest": "self.version",
                    "drupal/search": "self.version",
                    "drupal/serialization": "self.version",
                    "drupal/seven": "self.version",
                    "drupal/shortcut": "self.version",
                    "drupal/simpletest": "self.version",
                    "drupal/standard": "self.version",
                    "drupal/stark": "self.version",
                    "drupal/statistics": "self.version",
                    "drupal/syslog": "self.version",
                    "drupal/system": "self.version",
                    "drupal/taxonomy": "self.version",
                    "drupal/telephone": "self.version",
                    "drupal/text": "self.version",
                    "drupal/toolbar": "self.version",
                    "drupal/tour": "self.version",
                    "drupal/tracker": "self.version",
                    "drupal/update": "self.version",
                    "drupal/user": "self.version",
                    "drupal/views": "self.version",
                    "drupal/views_ui": "self.version"
                  },
                  "minimum-stability": "dev",
                  "prefer-stable": true,
                  "autoload": {
                    "psr-4": {
                      "Drupal\\Core\\": "lib/Drupal/Core",
                      "Drupal\\Component\\": "lib/Drupal/Component",
                      "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver"
                    },
                    "files": [
                      "lib/Drupal.php"
                    ],
                    "classmap": [
                      "lib/Drupal/Component/Utility/Timer.php",
                      "lib/Drupal/Component/Utility/Unicode.php",
                      "lib/Drupal/Core/Database/Database.php",
                      "lib/Drupal/Core/DrupalKernel.php",
                      "lib/Drupal/Core/DrupalKernelInterface.php",
                      "lib/Drupal/Core/Site/Settings.php"
                    ]
                  },
                  "config": {
                    "preferred-install": "dist",
                    "autoloader-suffix": "Drupal8"
                  },
                  "scripts": {
                    "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump",
                    "post-autoload-dump": "Drupal\\Core\\Composer\\Composer::ensureHtaccess"
                }
            }
        }
    ]
}

Some Drush commands

  • drush -v help
  • drush -v status
    • drush -v core-status
  • drush -v status-report
  • drush -v elysia-cron
  • drush -v core-cron
  • drush -v pm-refresh
    • drush -v rf
  • drush -v pm-download
    • drush -v dl
  • drush -v pm-updatecode
    • drush -v upc
  • drush -v pm-update
    • drush -v up
  • drush -v pm-list
    • drush -v pml
    • drush --status=enabled pm-list
  • drush pm-info <admin_menu|...>
  • drush pm-enable
  • drush pm-disable
  • drush -v updatedb
    • drush -v updb
  • drush libraries-list
  • drush -v l10n-update-status
  • drush -v cache-clear
  • drush -v bam-sources
  • use --uri="http://example.org" then sending mail for simplenews https://www.drupal.org/node/1776536
  • nice...

Installing Drupal 7 or 8 with Composer (on a development server outside MayFirst)

$ composer create-project "drupal-composer/drupal-project" <directory>

Using symlinks to avoid duplication of code and save server memory

Installing Drupal 7 or 8 with Drush (on a development server outside MayFirst)

$ drush help site-install
$ drush dl drupal-7
$ cd drupal-7.43/
$ drush site-install minimal --db-url=sqlite://sites/default/files/.ht.sqlite
$ drush site-install minimal --db-url="pgsql:host=/var/run/postgresql;dbname=infolettre-alici-webadmin;user=infolettre-alici-webadmin"
$ drush rs

git for Drupal

$ git ls-remote --tags <repository> | sort --key=2 --version-sort | less
$ git clone --branch <branch or tag> <repository> <directory>

Drupal 8 requirements and particularities

CKEditor for Drupal 7

Lets'use wysiwyg module

  • Supported Editors Matrix https://www.drupal.org/node/596966
  • $ drush dl --select wysiwyg
  • $ drush dl wysiwyg-2.x-dev
  • $ drush en wysiwyg
  • $ drush status-report
  • .../sites/all/libraries$ ln -s .../bower_components/ckeditor/ .

Does not work! Brobably because of symbolic links... better use .bowerrc to set target directory as suggested above.

http://cdn.ckeditor.com/4.5.4/full-all

Useful Debian Packages (Chelsea)

Note Altern-C

To keep in mind

4875 id=4875

#4875
rethink our use of swap for kvm guests

#5580
provide alternate fastcgi implementation option for persistent daemons

#5605
install django for the use of MF/PL members

#6287
phpMyAdmin not loggin me in?

drupal.org followup

PHP Libraries

hybridauth/hybridauth

http://hybridauth.sourceforge.net/userguide.html

$ composer require hybridauth/hybridauth

Google::

  • easy

LinkedIn::

  • easy

OpenID::

  • easy (no secret information needed)

Yahoo OpenID::

Microsoft Live::

  • Not clear if the domain root URL can be used as redirect URI
  • Using the domain root URL as redirect URI results in an error at the time of clicking the icon on the registered web site
  • It is not possible to register inside Microsoft developper website a redirect URI similar to the one used for Google, because some caracteres are not accepted.
  • one could try to make a simpler redirection URI which would redirect to the one simililar to the one used for Google.
  • microsoft oauth2 application id
  • Getting Your Client ID for Web Authentication
  • https://account.live.com
  • Mes applications

Facebook

jessie (stable) bpo stretch (testing) /usr/share/php/
composer/composer 2016-03-27 b # composer Composer
hybridauth/hybridauth 2016-01-12 2.6
psr/log 2012-12-21 1.0 1.0 1.0 php-psr-log Psr/Log
symfony/symfony 2016-02-28 3.0 2.3 2.8 php-symfony-framework-bundle Symfony/Bundle/FrameworkBundle
https://packagist.org/packages/ DebianPackage /usr/share/php/
https://packagist.org/packages/ DebianPackage /usr/share/php/
https://packagist.org/packages/ DebianPackage /usr/share/php/
https://packagist.org/packages/ DebianPackage /usr/share/php/
https://packagist.org/packages/ DebianPackage /usr/share/php/

Drupal Modules

Tooltip example 2b

Tooltip example 2h

"Tooltip 2g" Tooltip example 2g

"Tooltip 2h" Tooltip example 2h

Tooltip example 2e

Tooltip example 2f

Tooltip example 2c does not work

multiline` Tooltip example 2d

Tooltip example 4a

#!span title="Tooltip 2a" Tooltip example 2a

multiline tooltip" Tooltip example 3a

multiline tooltip

Tooltip example 3b }}}

D7 ordered Drupal 8 Drupal 7 D8 ordered
Core
Actions
Activity Tracker
Aggregator
Automated Cron
Ban
Block
Book
Administration
Administration menu Admin Toolbar
Admin Toolbar Extra Tools

Hybridauth

http://cgit.drupalcode.org/hybridauth/tree/README.txt?id=refs/heads;id2=7.x-2.x

Inside Drupal

Entities

Drupal 8

HTML Slides

Radical Servers

Symfony Programming