jeudi 12 avril 2018

How to create a Spatial DataBase

In this document, we are going to create and load a spatial database.
Our environment is made up of :
Debian Linux server
Postgres DBMS

To start, you have to install PostGis that will add support for Geographic Object in your Postgres.
Go to you command line and enter these commands  as root user
apt-get update
apt-get install postgis

You can verify the installation of postgis with the following commands
dpkg-query -l "postgis"
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                            Version              Architecture         Description
+++-===============================-====================-====================-====================================================================
ii  postgis                         2.4.4+dfsg-1.pgdg90+ amd64                Geographic objects support for PostgreSQL

Install extension for you DATABASE
(you may need to be root user first : sudo su )
psql -U postgres
=#CREATE DATABASE vn_gis;
=#\c vn_gis
=#CREATE EXTENSION postgis;
This last command will create all the Spatial functions, and Object types in the DataBase
To see the version of postgis install for you database :
( Make =#\c vn_gis
You are now connected to database "vn_gis" as user "postgres".
vn_gis=# select postgis_version();
            postgis_version
---------------------------------------
 2.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

Download you shap files at : http://download.geofabrik.de/
Convert your shap files ( No just the .shp file) to your .sql file.
For this, you will need at least :
.shp - geometry data
.dbf - attribute data
.shx - geometry index file
If not you my use all the extensions you have ( .prj, .fbn, .fbx, .ain, .aih, .ixs, .mxs, .atx, .shp.xml and .cpg)
The command need for the convertion is as follow :
shp2pgsql -l -s <SRID> file_path.shx <DATABASENAME> new.sql 
NB:You have to run this command being in the folder containing you shap files

A Spatial Reference System Identifier ( SRID) is a unique value used to unambiguously identify projected, unprojected and local spatial coordinate system definitions. These coordinate systems form the heart of all GIS application  
 
You can check for the SRID of you zone at : https://epsg.io/

shp2pgsql -I-s 3405  gis.osm_landuse_a_free_1.shp vn_gis  > shapfile.sql
psql -U postgres  -d vn_gis -f shapfile.sql

You can view you database structure.
Connect to you database  in our case : vn_gis then use the following command:

=# \d
                List of relations
 Schema |       Name        |   Type   |  Owner
--------+-------------------+----------+----------
 public | geography_columns | view     | postgres
 public | geometry_columns  | view     | postgres
 public | raster_columns    | view     | postgres
 public | raster_overviews  | view     | postgres
 public | spatial_ref_sys   | table    | postgres
 public | vn_gis            | table    | postgres
 public | vn_gis_gid_seq    | sequence | postgres


 View data in tables : case spatial_ref_sys
=# select * from spatial_ref_sys ;

Thanks for using

jeudi 22 février 2018

shell script to print multiplication table

This is a simple Bash shell script to print out the multiplicaiton
./table.sh 5 10
0*10=0
1*10=5
2*10=10
3*10=15
4*10=20
5*10=25
6*10=30
7*10=35
8*10=40
9*10=45

Version 1
#! /bin/bash

for i in  {0..12}
do
    echo "$i*$1=" $(($i*$1))
done



Version 2

#! /bin/bash
for ((number=0; number<$2; number++))
do
echo "$number*$2="$(($number*$1))
done


 Run table.sh
chmod u+x table.sh
./table.sh 5 10


How to read file with Bash shell programme

Hi to all
Here are simple programmes to read and ordianary file line by line.
Suppose you have a file called user.txt 

toto1 passtoto1 M.toto1 prof1, réseau
toto2 passtoto2 M.toto2 prof2, réseau
toto3 passtoto3 M.toto3 prof3, réseau
toto4 passtoto4 M.toto4 prof4, réseau
toto5 passtoto5 M.toto5 prof5, réseau


Version 1

reader.sh file looks like this

#! /bin/bash 
cat < user.txt | while true
do
read -r ligne
if [ "$ligne" = "" ]; then break ; fi
echo $ligne
done

exit 0

Run the reader.sh
Make reader.sh runnable
chmod u+x reader.sh 
 
./reader.sh


Version 2 takes the file to read as parameter

while read -r line
do
    echo $line
done < "$1"

exit 0

dimanche 28 janvier 2018

les commandes linux


Initiation à UNIX – TP



Ces exercices ont pour objectif de revoir le cours et utiliser les commandes UNIX sur les fichiers. Travail en binôme (groupe de 2 étudiants).

  1. Donnez les différentes façons pour créer un fichier vide.

    • touch nom_fichier
    • echo -n > nom_vichier
    • cat /dev/null > nom_fichier
    • > nom_fichier
  2. (2 pts) Supposons qu'un fichier data contient les lignes suivantes :

aaabc2;

absdsdc.

Qwertyui.

zxcasdfgcvb,

aafdsfsdf;

cbccvf45;

ab333c5;

aa34c;

    Que font et quel est le résultat des commandes ci-dessous ?

    $ grep 'a.*c' data

    retourne les lignes du fichier data ayant la lettre a et suivi d'un caractère, de n'importe quel chaine de caractères et la lettre c

    aaabc2;

    absdsdc.

    zxcasdfgcvb,

    ab333c5;

    aa34c;

    $ grep 'c[0-9]' data

    retourne les lignes du fichier data ayant la lettre c, suivi d'un chiffre entre 0 et 9

    aaabc2;

    ab333c5;

  1. (2 pts) Expliquez le résultat des commandes ci-dessous ?

    $ ls -Rl | grep rwxr-- | more

    Affiche page par page tous fichiers, dossier et sous-dossier ayant les droits lecture-ecriture-excution de l'utilisateur et aucun droit pour le group de l'utilisateur et aucun droit pour les autres utilisateur

    $ echo toto | mkdir

    Une erreur car la commande mkdir attend en entrée une chaine de caractere et non une sortie

  2. Affichez la liste de tous les fichiers dont l’extension est « .so » avec leurs attributs (option -l ) dans le répertoire /usr/lib et ses sous-repertoires eventuels (note culturelle : ces fichiers sont des bibliothèques).

    ls -Rl /usr/lib | grep '.so'

  3. Comment peut-on écrire une commande sur deux lignes séparées (dans le cas d'une commande avec beaucoup de paramètres par exemple) ? Expliquez.

    Oui il est possible d'ecrire un commande sur deux lignes séparées

    Il faut terminer toute ligne suivi de la suite de la commande par un "\"

    debut_commande \

    > suite_commande

  4. Quelle est la différence entre ( cd foo; ls; ) et { cd foo; ls; }? Expliquez.

    (cd foo; ls;) permet de regrouper les commandes cd foo et ls en un block

    {cd foo; ls;} n'est pas valide

  5. (2 points) La commande ls -la rep fournit le résultat ci-dessous :

    total 6
    drwxrwxr-x 2 paul staff 512 Oct 13 15:12 .
    drwxr-xr-x 8 root root  512 Sep 23 05:52 ..
    -rwx---r-x 1 paul staff 417 Oct 13 19:17 fiche

    Précisez pour chacune des actions ci-après, si elle est autorisée ou non en donnant la raison :

    1. tout membre du groupe staff peut lire fiche

      Autorisée car le droit de lecture est attribué aux membres du group staff

    2. tout membre du groupe staff peut renommer fiche

      Autorisé car le group staff a tous les droits sur le dossier contenant le fichier fiche

  1. Créez un sous-répertoire question. Supprimez tous les droits d'accès pour le groupe et les autres. Comment peut-on obtenir le même résultat sans utiliser la commande chmod et sans changer le masque du shell après l’opération?

    mkdir -m=u+rwx,g-rwx,o-rwx question

  2. Créez une commande « la » qui liste tous les fichiers d’un répertoire (y compris les fichiers cachés - commençant par un point).

    alias la="ls -al"

  3. Quelle différence existe-t-il entre la copie d'un fichier (avec cp) et l'établissement d'un lien physique (avec ln) ?

    la différence entre cp et ln est que :

    • cp cree un nouveau fichier avec un nouveau inode mais en gardant le meme contenu de fichier
    • ln ne cree pas d'inode pour le lien et garde le meme contenu

    • Quelle est la différence entre $(ls) et `ls` ?

      les deux commandes ne sont pas bonne

    • Quel est le résultat de la commande type help ? Quel est le rôle de cette commande type ?

      help est une primitive du shell

      Elle permet de dire si une commande est interne au Shell ou pas

    • (2 points)Transcrivez les commandes suivantes de la notation classique vers la notation octale, ou vice versa.

      chmod u=rwx,g=x,o=r fic1

      chmod 714 fich1

      chmod u=rx,g=wx,o=r fic2

      chmod 534 fic2

      chmod u=rx,g=wx,o=r fic2

      chmod 653 fic3

      chmod u=rw,g=rx,o=wx fic3

      chmod 103 fic4

      chmod u=x,o=wx fic4

  1. Afficher récursivement le contenu des répertoires dans /home sans l'affichage des nombreux messages d'erreur tels que l'accès au répertoire interdit.

    ls -R /home 2> /dev/null

  2. Donnez la commande qui copie, dans votre répertoire public_html, les fichiers dont le nom se termine par .html ou .htm du répertoire public_html de l'utilisateur paul.

    find $HOME/public_html \( -name "*.html" -or -name "*.htm" \) -exec cp {} /home/paul/public_html \;

  3. Observer le résultat des commandes echo a{d,e,f}b et echo a{1..20..2}. Créer les répertoire lib, src, doc dans le répertoire de travail par une seule commande mkdir avec un seul argument. Que déduirez-vous le rôle du méta-caractère '{}' ici ?

    creation des repertoires : mkdir {lib, src, doc}

    {} permet de passer les argurments se trouvant à l'interieur un à un a la commande

dimanche 14 janvier 2018

Commandes Linux 1 TP2

Cet article est issu des TP de l'IFI-Vietnam Hanoi ( Institut Francophone International).

TP2
4 Redirection
Creation du fichier pwd
$pwd > pwd
Creationn du fichier whoami
$whoami > whoami
Creation du fichier id
$id > id
Creation du fichier activite1
pwd whoami id > activite1

Creation du fichier activite2
$pwd >> activite2
Insertion de whoami dans activite2
$whoami >> activite2
Insertion de id dans activite2
$id >> activite2
Verification a l'aide de diff si activite1 est indentique a activite2
$diff activite1 activite2
les deux fichier etant identique le resultat est vide

 Redirection
Creation du fichier list contenant la liste des entrees du dossier courant
$ls -l >> liste
contenu du fichier liste
total 24
-rw-r--r-- 1 sonfack sonfack 197 janv. 14 22:48 activite1
-rw-r--r-- 1 sonfack sonfack 197 janv. 15 00:00 activite2
-rw-r--r-- 1 sonfack sonfack 172 janv. 14 22:44 id
-rw-r--r-- 1 sonfack sonfack   0 janv. 15 00:07 liste
-rw-r--r-- 1 sonfack sonfack  17 janv. 14 22:44 pwd
-rw-r--r-- 1 sonfack sonfack 936 janv. 15 00:06 TP2_Shell
-rw-r--r-- 1 sonfack sonfack   8 janv. 14 22:44 whoami
contenu du repertoir courant
total 28
-rw-r--r-- 1 sonfack sonfack  197 janv. 14 22:48 activite1
-rw-r--r-- 1 sonfack sonfack  197 janv. 15 00:00 activite2
-rw-r--r-- 1 sonfack sonfack  172 janv. 14 22:44 id
-rw-r--r-- 1 sonfack sonfack  395 janv. 15 00:07 liste
-rw-r--r-- 1 sonfack sonfack   17 janv. 14 22:44 pwd
-rw-r--r-- 1 sonfack sonfack 1044 janv. 15 00:10 TP2_Shell
-rw-r--r-- 1 sonfack sonfack    8 janv. 14 22:44 whoami
Metacaractere
Affichate de : UNIX est un produit de AT&T
$echo " UNIX est un produit de AT&T"
Affichate le texte : Mon repertoire de connexion $HOME est : "le contenu de la variable  a mettre ici "
$echo " Mon repertoire de connexion $HOME  est /home/sonfack "
Affichate le texte : Le code du caractere * est 42
$echo "Le code du caractere * est 42"
Affichate le texte : Le code du caractere " est 34, celui de ' est 39
$echo "Le code du caractere " est 34, celui de ' est 39"
Affichate le texte : La date est  "resultat de la commande a mettre ici "
$echo "La date est $(date)"
Affichate le texte : Le nombre d'utilisateur connecte est  "resultat de la commande a mettre ici "
$echo "La date est $(who)"

Jocker
Affichate successivement la liste des fichier de /usr/bin dont le nom :
 commence par s
 comporte exactement 4 caracteres
 comporte au moins 2 caractères qui ne sont pas des minuscules
 comporte au moins un chiffre

mercredi 29 novembre 2017

Gestion de Models CodeIniter avec MY_Model.php


Codeigniter MVC

Le but de ce document est de vous présentater l'architecture MVC de Codeigniter selon le framework Ruby on Rails.

Model

Le model doit pouvoir effectuer les taches suivantes :
  • Sauvegarder les données dans la base de donnée ;
  • récupérer les données de la base de donnée ;
  • valider les données ;
  • envoyer les mails ;
  • connecter au API ;
  • Etc

Pour notre implémentation, nous allons définir un ensemble de convention pour faciliter la manipulation des models.
  1. Chaque model accède à une seule table
Pour cette première règle, nous remarquons rapidement que certaines manipulations seront communes à toutes les models ; c'est par exemple l'enregistrement, la lecture, le modification et le suppression des données aux quelles notre model a accès.
Pour simplifier cette première contrainte et de ce fait éviter la répétition, nous allons suivre l’implémentation suivante :

class MY_Model extends CI_Model{

protected $_table;
/* le nom de la table est le meme que celui de la classe sans la partie _model
*/

protected $_id;
/* le nom de id de la table est celui de la table suivi de _id
*/

protected $_etat = 'status';
/* l etat 1 correspond a l etat actif et 0 (zero) etat inactif
*/
protected $_rules = array();
/*
les regle que doivent respecter les donnees pour etre valide
*/

public function __construct() {
parent::__construct();
$this->load->helper('inflector');
/*
chargement du helper 'inflector' qui contient de nombreuses fonctions permettant de manipuler les mots anglais
*/
if(!$this->_table){
$this->_table = strtolower(str_replace('Model_','', get_class($this)));
}
if(!$this->_id){
$this->_id = strtolower((str_replace('Model', 'id', get_class($this))));
}
if(!$this->_etat){
$this->_etat = strtolower((str_replace('Model', 'etat', get_class($this))));
}

if($this->config->item($this->_table)){
$this->_rules = $this->config->item($this >_table) ;
}
}

public function get(){

}

/*
Dans la fonction add il faut que la date de l'insertion soit mise automatiquement
*/
public function add(){

}



/*
Dans la fonction update il faut que la date de l'ajout soit mise automatiquement
*/
public function update(){

}


/*
delete correspond ici à la désactivation de la ligne dans la table
*/
public function delete(){

}

public function validate(){

}

public function post(){

}

}


/*
Notre model user
*/
class User_Model extends MY_Model{

}


  1. Les noms des models
les noms des models sont une concaténation entre le nom de leur table et le mot clé Model. Cette syntaxe permet de réduire le travail du programmeur dans l'écriture du code et d'automatiser facilement la manipulation des données.

class User_Model extends MY_Model{

}

Nom de la table : user
Nom de identifiant de la table : user_id
Nom de l'attribut état : user_status
Nom du model : User_Model

A télécharger : MY_Model.php à ajouter dans le dossier application/core de votre framework CodeIgniter

jeudi 24 juillet 2014

Générer les clés uniques

Ce programme permet de générer 100 clés unique de façon aléatoire
vous pouvez le personnaliser facilement.

<?php
$min = 0;
$max = 9;
$tail = 100; // pour le test $tail est le nombre max de cle a génerer
$cle_exist = array();
if(count($cle_exist) == 0){
echo "pas de cle</br>";
$cle = rand($min, $max).rand($min, $max).rand($min, $max);
$cle_exist[] = $cle ;

// generation de la suite des cles
for($i = 0; $i < $tail ; $i++){
$cle = rand($min, $max).rand($min, $max).rand($min, $max);
while(in_array($cle, $cle_exist, TRUE) == TRUE) {
$cle = rand($min, $max).rand($min, $max).rand($min, $max);
}
$cle_exist[] = $cle;

}

}
// affichage du resultat
foreach($cle_exist as $cle){
echo $cle."</br>";
}