samedi 19 août 2017

Chargements de fichiers par une fonction

La fonction permet chargements de fichiers, spécialement pour CakePHP.

Comme ça:


html:
<input type="file" />

PHP:
private function file_upload ($file = null, $dir = null){
        try {
            if(!file_exists($dir)){
                if(!mkdir($dir, 0755, true)){
                    throw new BadRequestException('Can not mkdir.');
                }
                chmod($dir, 0755);
            }
            if (!isset($file['error']) || is_array($file['error'])){
                throw new BadRequestException('Invalid parameters.');
            }
            switch ($file['error']) {
                case 0:
                    break;
                case UPLOAD_ERR_OK:
                    break;
                case UPLOAD_ERR_NO_FILE:
                    throw new BadRequestException('No file sent.');
                case UPLOAD_ERR_INI_SIZE:
                case UPLOAD_ERR_FORM_SIZE:
                    throw new BadRequestException('Exceeded filesize limit.');
                default:
                    throw new BadRequestException('Unknown errors.');
            }
         
            $temp = explode('.', $file["name"]);
            $extension = end($temp);
            //juste jpg ou png
            if (false === array_search($extension,['png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG'],true)) {
                throw new BadRequestException('Invalid file format.  '. $file['type']);
            }

            $uploadFile = sha1(time() . rand()) . "." . $extension;

            if (!@move_uploaded_file($file["tmp_name"], $dir . "/" . $uploadFile)){
                throw new BadRequestException('Failed to move uploaded file.');
            }

        } catch (BadRequestException $e) {
            throw $e;
        }
        return $uploadFile;
    }

La fenêtre de dialogue avec JQuery et JQuery UI

Cliquer sur le bouton et la fenêtre de dialogue va apparaître.



Code:
<button onclick="open_dialog()">Click here for the dialog</button>
<div id="dialog" title="Dialog" style="display:none;">
<p>Bon jour.</p>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css"></link>
<script>
    dialog = $("#dialog").dialog({
        autoOpen: false,
        //open:function(event,ui){$(".ui-dialog-titlebar-close").hide();},
        modal: true,
        draggable: true,
        width: "50%",
        show: "fade",
        hide: "fade",
        buttons:{
            "Faire quelque chose":function(){
                $(this).dialog('close');
            },
            "Fermer":function(){
                $(this).dialog('close');
            }
        }
    });
    function open_dialog(){
        dialog.dialog('open');
    }
</script>

dimanche 13 août 2017

Installer Keras et tester l'apprentissage profond

Contenu du didacticiel 

Preparation
1. Vagrant et Virtual Box.

2. Apache

3. MySQL

4. Python

5. Python Hello World

Apprentissage profond
1. Installer Keras et tester l'apprentissage profond (Deep learning)

2. Enregistrer et charger les paramètres

3. Enregistrer et charger les paramètres en même temps

4. Utiliser son propre le jeu de données

Installer Keras 

Au début, on va installer Keras.
Si vous avez GPU dans l'ordinateur:
$ python3.6 -m pip install tensorflow-gpu
$ python3.6 -m pip install keras
Si vous n'avez pas:
$ python3.6 -m pip tensorflow
$ python3.6 -m pip keras

Et matplotlib pour visualizer l'apprentissage profond.
$ sudo yum -y install gcc gcc-c++ kernel-devel
$ sudo yum -y install python-devel libxslt-devel libffi-devel openssl-devel
$ python3.6 -m pip install matplotlib

h5py aussi pour enregistrer le modèle.
$ python3.6 -m pip install h5py

Ecrire comme ça et enregistrer sous "dplrn.py" dans le dossier partagé:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.utils import np_utils

# Get the default MNIST data (Les donnes des numéros écrit à la main)
(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(60000, 784) / 255
X_test = X_test.reshape(10000, 784) / 255

y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

# Network
model = Sequential([
        Dense(512, input_shape=(784,)),
        Activation('sigmoid'),
        Dense(10),
        Activation('softmax')
    ])

# Compile
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

# Learning
model.fit(X_train, y_train, batch_size=200, verbose=1, epochs=20, validation_split=0.1)

# Forecast
score = model.evaluate(X_test, y_test, verbose=1)
print('test accuracy : ', score[1])


Tester l'apprentissage profond


Exécuter le fichier de python:
$ python3.6 /vagrant/dplrn.py

L'apprentissage profond de la reconnaissance des numéros écrit à la main va commencer:

"Test accuracy" (La précision du test) va s'afficher:


C'est 88% :) Très bien.

C'est MLP(Multi Layer Perceptron) mais il y a juste une couche pour la simplicité.

samedi 12 août 2017

Installer MySQL

Contenu du didacticiel

  1. Vagrant et Virtual Box
  2. Installer Apache  / (Utiliser Nginx et PHP)
  3. Installer MySQL / MariaDB
  4. Installer PHP / Python

MySQL

Maintenant, on a besoin d'installer MySQL. Qu'est-ce que MySQL? C'est un système de gestion de base de données relationnelles qui fait parties des logiciels de gestions de base de données les plus utilisés dans le monde. Si MariaDB est déjà présent dans la machine virtuel CentOS, on ne peut pas utiliser MySQL parce que MariaDB entre en conflit avec MySQL dans la machine virtuel.
Pour supprimer MariaDB de la machine virtuel, écrire la commande ci-dessous:
$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql/
MariaDB est supprimé, mais on ne va pas l'utiliser. On va installer MySQL.
Aller au lien: https://dev.mysql.com/downloads/repo/yum/
Et noter l'information avec la ligne rouge. Parce que on utilise CentOS (Linux) version 7 virtuel.
Ecrire la commande ci-dessous:
$ wget https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
$ sudo rpm -ivh mysql57-community-release-el7-10.noarch.rpm
$ sudo yum install mysql-server
Si on a fait une erreur et veut enlever un paquet:
$ sudo rpm -qa | grep -i <le nom de un paquet>
Et on va obtenir le exact nom du paquet, alors:
$ sudo rpm -e <le exact nom du paquet>
Après que MySQL soit installé sur la machine virtuel. Démarrer MySQL avec cette commande:
$ sudo systemctl start mysqld
Vérifier le statut de MySQL avec cette commande:
$ sudo systemctl status mysqld
Redémarrer MySQL:
$ sudo systemctl status mysqld
Arreter MySQL:
$ sudo systemctl stop mysqld
Pour démarrer Apache automatiquement quand le serveur virtuel est démarré:
$ sudo systemctl enable mysqld
Maintenant on a besoin de la configuration rapide de MySQL. Taper cette commande pour avoir un mot de passe temporaire:
$ sudo grep 'temporary password' /var/log/mysqld.log
C'est le mot de passe temporaire
Ecrire cette commande: ``` $ sudo mysql_secure_installation ``` Il nous sera demandé un mot de passe, écrire le mot de passe temporaire que l'on a obtenu précédemment, écrire "y" pour toutes les questions. Le nouveau mot de passe doit contenir au moins 8 lettres, un caractère spécial, une majuscule et un nombre.
Ecrire cette commande ci-dessous et s'identifier dans MySQL avec le nouveau mot de passe:
$ mysql -u root -p
Mais je pense le mot de passe est trop long. Donc on va mettre un mot de passe plus court. Commencer MySQL et fais cette commande:
mysql> SHOW VARIABLES LIKE 'validate_password%';
Et on va obtenir les conditions du mot de passe 
Taper ces commandes pour changer les règles du mot de passe:
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
Les conditions du mot de passe a été changé
On veut définir le mot de passe comme "root", alors écrire la commande ci-dessous:
mysql> set password for root@localhost=password('root');
Maintenant, le mot de passe de MySQL est "root". Pour sortir de MySQL sur Teraterm, écrire cette commande:
mysql> quit

Les commandes vieux de CentOS 6 (optionnel)

Si vous avez besoin d'utliser CentOS6, utiliser ces commandes.
$ wget https://dev.mysql.com/get/mysql57-community-release-el6-10.noarch.rpm
$ sudo rpm -ivh mysql57-community-release-el6-10.noarch.rpm
$ sudo yum install mysql-server
$ sudo service mysqld start
$ sudo service mysqld status
$ sudo service mysqld status
$ sudo service mysqld stop
$ sudo chkconfig mysqld on

Virtual Box et Vagrant

Virtual Box et Vagrant Contenu du didacticiel
  1. Vagrant et Virtual Box
  2. Installer Apache / (Utiliser Nginx et PHP)
  3. Installer MySQL / MariaDB
  4. Installer PHP / Python

Pourquoi un environnement virtuel avec Virtual Box et Vagrant?

Pourquoi on a besoin d'utiliser des environnements virtuels? Parce que la plupart d'entre nous ne possédons pas de serveurs physique juste pour débugger un logiciel. En utilisant un environnement virtuel, on n'en aura pas besoin et on l'utilisera pour débugger des logiciels.
On va utiliser Virtual Box et Vagrant pour faire un environnement virtuel. "Virtual Box" est un logiciel d'Oracle qui contrôle les systèmes d'exploitation virtuel. "Vagrant" est un logiciel open-source qui est utilisé pour la création et la configuration de systèmes d'exploitation virtuel. On va commencer par télécharger et installer Virtual Box et Vagrant.

Vérification

Quand c'est fini, on vérifiera s'ils sont installés correctement. Double clique sur "Oracle VM VirtualBox" et si ça démarre, ça marche.
Maintenant, on va vérifier Vagrant. Ouvrir la fenêtre d'invite de commandes et écrire la commande ci-dessous:
vagrant -v
Parfois, certains manuels l'écrivent ainsi:
$ vagrant -v
"$" veut dire "utilisateur normal", alors on n'a pas besoin d'écrire "$" sur l'invite de commandes. Ecrire juste "vagrant -v" pour les deux.
Et appuyer sur Entrée. Si un message comme celui-ci apparaît, ça marche. Si ce message n'apparaît pas, réinstaller "Virtual Box" et "Vagrant".

Un dossier d'environnement virtuel

On va créer un dossier pour l'OS virtuel de Linux. Créer un dossier dans C:. Le nom est "MyVM".
Et ici, créer un nouveau dossier nommé "MyCentOs".
Ensuite, aller dans le dossier précédemment créée, retourner sur la fenêtre d'invite de commande et taper la commande ci-dessous:
$ cd C:\MyVM\MyCentOs
Ecrire "cd C:\MyVM\MyCentOs", et appuyer sur Entrée et le répertoire actuel sera "C:\MyVM\MyCentOs".

Choisir et initialiser Box

On va utiliser CentOS (Linux OS), on va utiliser donc un Box appelé "bento". Le Box est un paquet du système d'exploitation virtuel. Pour utiliser bento, écrire une commande comme ci-dessous;
$ vagrant init bento/centos-7.3
"Vagrantfile" est crée dans le répertoire. C'est un fichier de configuration du système d'exploitation virtuel (CentOS version 7.3). Clic droit sur le fichier et choisir "Ouvrir avec" et choisir "Bloc-notes".
Le fichier "Vagrantfile" s'ouvre ainsi:
"#" veut dire que la ligne est un commentaire pas une commande. Donc on va supprimer un "#" pour en faire une commande, et enregistrer le fichier.
("Sublime Text" ou "VSCode" est beaucoup mieux que le bloc-notes)

Vagrant up

Quand on a tout fini, on peut commencer Vagrant avec "vagrant up". Ecrire la commande ci-dessous sur la fenêtre d'invite de commande:
$ vagrant up
Et votre Linux (Cent OS) virtuel va démarrer. Ça peut prendre un peu de temps.
Si on veut arrêter le CentOS virtuel, écrire comme-ci dessous:
$ vagrant halt
Si on veut recharger le CentOS virtuel:
$ vagrant reload

Connexion avec SSH

Pour connecter le Cent OS avec SSH, on va utiliser Teraterm qui est gratuit.
Télécharger Teraterm ici: https://ttssh2.osdn.jp/index.html.en
Mais si vous utilisez Mac ou Linux, faire ce commande pour démarrer SSH de vagrant:
$ vagrant ssh
Pour sortir SSH:
$ exit
Mais on va utiliser Teraterm avec Windows dans cette publication.
Démarrer Teraterm. Le host de votre serveur virtuel est alors "192.168.33.10"
Le nom d’utilisateur est vagrant et le mot de passe est vagrant aussi.
Ensuite, on peut se connecter au serveur virtuel avec SSH. ça semble être un serveur réel, mais en réalité c'est un serveur qui fonctionne localement.

Update

On a fini d'installer un environnement virtuel. Maintenant, on a besoin de mettre à jour. Ecrire ces deux commandes sur ton Teraterm:
$ sudo yum update
$ sudo yum upgrade

Et installer "vagrant-vbguest" qui vérifie automatiquement les différences de version du serveur virtuel et le "GuestAdditions". Fais la commande sur l'invite de commande. (pas sur Teraterm)
$ vagrant plugin install vagrant-vbguest
Pour vérifier le statut du serveur virtuel:
$ vagrant vbguest --status
Pour le mettre à jour, fais le commande:
$ vagrant vbguest
Si vous ne pouvez pas monter le fichier partagé:
Mounting failed with the error: No such device

Appendice (optionnel)

On a utilisé "bento/centos-7.3" pour l'init.
$ vagrant init bento/centos-7.3
Vous pouvez utiliser centos/7 aussi pour l'init.
$ vagrant init centos/7
centos/7 est plus stable de bento/centos-7. Mais si on utilise centos/7, on doit utiliser le "private key" (clé privé) pour l'ouverture de session. Le "private key" et ici: C:\MyVM\MyCentOs\.vagrant\machines\default\virtualbox
Ou, si vous utilisez Linux ou Mac, vous pouvez utiliser la commande de vagrant ssh.
$ vagrant ssh
Et on doit ajouter ce qui suit dans le Vagrantfile.
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
Et peut-être on doit désactiver SELinux pour utiliser PHP dans centos/7.
$ sudo yum install policycoreutils-python
$ sudo semanage permissive -a httpd_t

Installer Apache

Contenu du didacticiel

  1. Vagrant et Virtual Box
  2. Installer Apache  / (Utiliser Nginx et PHP)
  3. Installer MySQL / MariaDB
  4. Installer PHP / Python

Installer Apache

Apache est un logiciel utilisé pour faire fonctionner un ordinateur en tant que serveur. On va l'utiliser pour faire fonctionner Cent OS virtuel en tant que serveur. Le nom d'Apache est "httpd" sur Linux, alors:
$ yum info httpd
C'est les informations de httpd qui sont disponible pour nous, on va les installer. Sur Teraterm écrire la commande ci-dessous:
$ sudo yum -y install httpd
L'installation va démarrer.

Démarrer Apache (httpd)

Les commandes de CentOS7

Pour démarrer Apache, écrire la commande ci-dessous:
$ sudo systemctl start httpd.service
Le mot de passe est "vagrant".
Pour connaître le statut d'Apache:
$ sudo systemctl status httpd.service
Si on veut arrêter Apache:
$ sudo systemctl stop httpd.service
Pour redémarrer Apache:
$ systemctl restart httpd.service

Démarrer Apache automatiquement

Pour démarrer Apache automatiquement quand le serveur virtuel est démarré:
$ sudo systemctl enable httpd.service

Les commandes vieux de CentOS 6 (optionnel)

Si vous avez besoin d'utliser CentOS6, utiliser ces commandes.
$ sudo service httpd start
$ sudo service httpd status
$ sudo service httpd stop
$ sudo service httpd restart
$ sudo chkconfig httpd on

SELinux

SELinux interrompt Apache pour des raisons de sécurité. Mais on peut autoriser Apache à marcher:
$ sudo yum -y install policycoreutils-python
$ sudo semanage permissive -a httpd_t
Désactiver SELinux temporairement
$ sudo setenforce 0
Pour désactiver SELinux définitivement, ouvrier "/etc/selinux/config"
$ sudo vi /etc/selinux/config
et écrire comme ça:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.

SELINUX=disabled #Change HERE!!!!!

# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
Comment utilsier la commande de "vi" est ici:
Appuyez sur la touche A du clavier pour accéder au mode insérer pour pouvoir éditer le fichier. Appuyez sur la touche échap pour arrêter mode insérer, après d'avoir fini, appuyez sur les touches Shift + g pour aller en bas de page. Shift + zz pour enregistrer et fermer le fichier. On peut utiliser le mode commande en appuyant sur :. Pour enregistrer et quitter le mode commande, écrire :wq et appuyez sur entrée. Pour quitter le fichier sans sauvegarder, :q! et appuyez sur entrée. Pour chercher un mot, appuyez sur ? et écrire le mot cherché. Par exemple, si on écrit ?aaa et que l'on appuie sur entrée, "aaa" sera recherché et surligné dans le fichier. Appuyez sur n pour aller au résultat suivant.

Vérifier si le serveur virtuel fonctionne

(D'abord, démarrer ton Apache) et accéder au lien suivant: http://192.168.33.10/
Si ton Apache fonctionne, on va voir un message de bienvenue comme ça:

Lien symbolique

On crée un "lien symbolique" parce que ça aide pour le développement.
$ sudo rm -rf /var/www/html
$ sudo ln -fs /vagrant /var/www/html
Et tous des fichiers de "/vagrant" sont automatiquement synchronisé dans le dossier "/var/www/html".
$ ls /var/www/html

Et installer vim:
$ sudo yum -y install vim-enhanced