vendredi 30 décembre 2011

Sites de confiance


Comment reconnaitre un site de confiance

Nombreux sont ceux qui se disent « il y'a un cadenas sur ce site donc il est sur», donc je peux effectuer des achats en ligne et donc saisir mon code de carte bleu.

Faut il faire confiance au cadenas ?: oui et non

pourquoi oui ?: le cadenas sur une page web indique que la communication avec le serveur web s'effectue via le protocole HTTPS, donc est sécurisé contrairement à HTTP.

HTTP c'est quoi ?: hypertext transfert protocole, c'est un protocole permettant a un client web et un serveur web de communiquer via TCP/IP.

HTTPS c'est quoi ?: c'est une combinaison du protocole http et ssl.

SSL c'est quoi ?: Secure socket layer, protocole permettant de crypter un flux.

Donc la communication ne peut être sniffée.

Pourquoi non ?: le cadenas indique que le transport des informations vers le site est sur, mais qu'est ce qui peut assurer que le site lui même n'est pas compromis  , ou encore pire qu'il n'est pas frauduleux(n'importe qui peut faire un site sécurisé).

Voici quelques conseils avant de faire tout achats ou divulguer des informations sensibles sur un site :

+Tout site normalement constitué doit contenir au minimum un courriel de contact, sinon un numéro de téléphone. Donc un petit appel ou un mail ne coute rien juste pour s'assurer que l'on a à faire à un site de confiance.

+Toujours essayer d'en savoir plus sur le site, voici deux sites ou l'on peut avoir accès à des informations sur un nom de domaine . www.Godaddy.com , www.alexa.com , ou faire une petite recherche sur google(si les informations ne sont pas disponible sur ses deux sites ou d'autres site du même genre, le site en question est à bannir).

Soyez toujours prudent !
Internet c'est bien, mais c'est aussi le mal.

Bonne année.

jeudi 29 décembre 2011

Vundle le gestionnaire des plugins vim


Comment Installer un excellent gestionnaire de plugins Vim

Pourquoi installer un gestionnaire de plugins?: pour mettre à jour votre éditeur vim de façon automatique et simplifié, plus besoin de chercher et installer les plugins manuellement, le gestionnaire le fait pour vous.

Je vais détaillé ici l'installation de Vundle (Vim Bundle)

Pour pouvoir se servir de Vundle, il faut avoir git installer sur son système linux(Debian)

Si vous n'avez pas git ou vous n'avez aucune idée

ouvrez un terminal et faites :

which git

si cette commande ne vous renvoie aucun résultat alors faites:  

apt-get install git-core


Une fois git installer pour installer vundle faites:

git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

pour configurer Vundle rajouter le code qui suit dans votre .vimrc

set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle
call vundle#rc()

Bundle 'gmarik/vundle'

Apres lancer vim

se mettre en mode commande et taper ceci:

:BundleInstall

pour en savoir plus concernant les commandes taper ceci:

:h vundle

une fois Vundle installer, pour chercher un plugin c'est BundleSearch, une fois le plugin trouvé, il faut juste le sélectionné et appuyer sur la touche "i" du clavier. Pour activer ce plugin il faut le rajouter dans le .vimrc
ex: j'installe le plugin css3, je rajoute dans mon .vimrc la ligne ci-dessous:
Bundle 'css3'

voici le blog très intéressant sur le sujet et sur pleins d'autres sujets:
http://gmarik.info/blog




jeudi 1 décembre 2011

Projet Serveur FTP

Mon premier projet en Ruby a ete de coder un Serveur FTP sans utiliser la classe FTP

C'est quoi Ruby?: Ruby est un langage oriente objet, qui permet une gestion des erreurs assez sympathique, qui est portable tout comme JAVA,donc il suffit juste d'installer l'interpréteur Ruby et votre script marchera.

C'est quoi un Serveur FTP: C'est  tout simplement un ou plusieurs équipements informatique (physique ou logique), offrant la possibilitee a un ordinateur distant connecte a celui ci, de copier depuis ou vers celui ci un ou plusieurs fichiers en suivant les recommandations du protocole FTP(File Transfert Protocole).

Ne pouvant publier mon code source, je vais me contenter d'évoquer ici les étapes qui pourront vous mener à un Serveur FTP qui réponds aux minimum requis par la RFC 959(Request For Comment, c'est un ensemble de normes qui régissent le protocole FTP).

 Comme toujours avant de commencer a coder, il faut définir ce que devra réaliser votre Serveur FTP, ensuite réaliser un découpage fonctionnel.

Ici c'est assez simple pour définir les attentes de notre Serveur FTP, il suffit de lire la RFC 959 qui est en anglais lol.

En Resume, il faut un serveur avec une implémentation des commandes suivantes:  USER, PASS, RETR, STOR, PORT, TYPE, MODE, STRU, NOOP, QUIT. Allez un petit bonus juste pour le fun (PASV, SYST, CDUP, PWD, CWD, LIST)

Premier indice bien lire la RFC 959,Les code-retours ont une importance capital

Petite explication sur le fonctionnement du protocole FTP: Le protocole FTP a deux mode de fonctionnement

Le Mode Actif: Dans ce mode c'est le client qui détermine sur quel port de connexion, la communication sera établie pour la transmission de données.Le Serveur devra initie la connexion de son port de donnée vers ce port.Ce mode est moins sécurise pour le client, car on peut sniffer la communication vu qu'elle s'effectue en telnet, et a l'aide d'un calcul assez simple avoir le port ouvert.

Le Mode Passif: Dans ce mode c'est le Serveur FTP qui Détermine sur quel port la communication sera établie pour la transmission des données.Ce mode offre plus de sécurité.

Il faut savoir qu'il y a deux flux distinct, Le flux des commandes et le flux des données

indices pour quelques commandes(une methode(fonction) par commande)

USER: Cette commande consiste a attendre le nom de l'utilisateur et de vérifier s'il est bien un utilisateur qui est autorise a accéder a votre serveur.

PASS: Cette commande consiste a vérifier le mot de passe de l'utilisateur et lui donner accès au serveur.

PORT: Cette Commande Corresponds au passage en mode actif, le paramètre est la spécification du port sur lequel le client veut établir la communication.

NOOP: Cette commande signifie "No Operation", c'est une commande que le client envoie pour rester connecter même s'il n'effectue aucune aucune opération sur le serveur.

ps: Amusez vous car ce projet est plutôt simple, le plus important est surtout de bien suivre les recommandations de la RFC 959(read the RFC 959 is the best way to improve your english).

lundi 7 novembre 2011

Projet Mini-shell

Mon premier projet de piscine php a été de coder un mini Shell Unix en php.

Qu'est-ce qu'un shell:
un shell est un interpréteur de commande autonome proposant une interface simplifiée à l'utilisateur.

Ne pouvant publier mon code source, je vais me contenter d'évoquer ici les étapes qui pourront vous mener à un mini Shell abouti lol.

J'ai eu 24h pour réaliser ce projet.

Mon niveau en php n'étant pas celui d'un expert en phpJe peux vous dire que ce projet serait réalisable par toute personne ayant des notions en programmation.

Avant de commencer à coder, il faut définir ce qui est attendue par votre shell, dans mon cas la moulinette attendait ses fonctions cat, ls, pwd, cd, setenv, unsetenv, définition des variables environnements, gestion des erreurs. Ensuite decouper votre projet en fonctions qui une fois assemblées donneront votre shell.
En gros il faut un prompt, un terminal, parser la ligne de commande rentrée par l'utilisateur(parser car il faudra différencier la commande du paramètre, fichier ...), faire une fonction par commande voir plus s'il le faut.

Un indice par fonction
prompt: un jeu d'enfant, juste affiché quelque chose en se basant sur le comportement d'un shell existant.
terminal: il faut lire et écrire dans un flux, ce qui suppose ouvrir et fermer un flux.
flux: tuyau bidirectionnel permettant la communication entre 2 entités.
parser la ligne: découper la ligne en utilisant un délimiteur (php.net/explode).
en ce qui concerne les commandes elles sont assez simple.

ps: vérifier sa ligne de commande des le début avant de la parser pour pouvoir prendre en compte la redirection et les cotes simples ou doubles.cela peut changer tout un code si la vérification de la ligne de commande n'a pas été prise en compte des le début.

dimanche 30 octobre 2011

Fichier de configuration de l'editeur vim sous linux

Voici un petit script pour une utilisation plus productive de l'éditeur Vim

Pour utiliser ce script créer un fichier vimrc comme ceci:
vim vimrc

Copier le script suivant à l'intérieure

" 1 Options generales

" Ne pas utiliser le mode de compatibilité vi
set nocompatible

:" Utiliser le mode compatibilité avec vi
"set compatible

" Activer le numerotage des lignes
set number

" Encodage par défaut des buffers et des fichiers
set encoding=utf-8
set fileencoding=utf-8

" On transmet les 'beep' au terminal, on ne 'flash' pas
set noerrorbells

" Parenthèses électriques
set showmatch

" activation de la souris
set mouse=a

" Pas de souris !
"set mouse=

" Taille maximale d'une ligne
set textwidth=80

" Complétion en mode insertion (<C-n>)
set completeopt=longest,menuone

" 2 Indentation

" Activation de l'auto indentation
set autoindent

" Indentation gerer par des plugins
"set noautoindent
"    filetype plugin indent on
"    filetype indent on

" On remplace les \t par des espaces
set expandtab

" Largeur de l'autoindentation
set shiftwidth=2
" Largeur de l'indentation avec <tab>
set softtabstop=2
" Largeur du caractère <tab>
set tabstop=1

" Indentation pour C (a vous de chercher ce que ca fait)
set cinoptions={.5s,+.5s,t0,n-1,p2s,(03s,=.5s,>1s,=1s,:1s

" 3 Recherche et substitution

" La recherche reprend au début du fichier (resp à la fin) une fois la fin (resp
" le début) atteint.
set wrapscan

" Highlight les paterns recherchés
set hlsearch

" Recherche en live
set incsearch

" 4 Surlignage, couleurs et police

" Configuration du thème de couleur
color darkblue "default torte darkblue

" Coloration syntaxique
syntax on
" et pour la coloration du shell :
let g:is_posix = 1

" Configuration du hilight quand vim est dans un terminal couleur
hi Normal    ctermfg=gray ctermbg=black

" Configuration du hilight pour gvim
hi Normal    guifg=#c0c0c0 guibg=#000040

" Configuration du parsing pour la coloration syntaxique
"syn sync minlines=10000 maxlines=10000

" Numérotation automatique des fichiers C++ (désactivée)
autocmd FileType cpp set number

" Numerotation automatique des fichiers C
autocmd FileType c set number

" 5 Ligne de statut et Menu

" Options pour le GUI
" m : afficher la barre de menu
" T : afficher la toolbar
" g : les menus inactifs sont grisés
" r : afficher la barre de défilement à droite
" L : afficher la barre de défilement à gauche quand l'écran est vsplité
" a=autoselect : le texte sélectionné en VISUAL est copié dans le pressepapier PRIMARY
set guioptions=mgTrLa

" Complétion dans la barre de commande
set wmnu
set wildmode=list:longest,list:full
" Fichiers ignorés lors de la complétion
set wildignore=*.o,*.r,*.so,*.sl

" Taille de l'historique de la barre de commandes
set history=2000

" Affichage de la position dans le fichier dans la barre de statut
set ruler

" Configuration de l'affichage de la date et de la position dans le fichier
set rulerformat=%27(%{strftime('%a\ %e\ %b\ %I:%M\ %p')}\ %2l,%-2(%c%V%)\ %P%)
" Affichage du mode dans la barre de statut
set showmode

" Affichage intelligent des avertissements (file format, file status, etc.)
set shm=a

" La ligne de statut est l'avant dernière ligne
set laststatus=2

" 6 Fenetres

" Hauteur minimale d'une fenêtre active
set winheight=1
" Hauteur minimale d'une fenêtre
set winminheight=0

" Ne redimensionne pas automatiquement toutes les fenêtres lors de
" l'ouverture/fermeture de l'une d'entre elles
set noequalalways

" Ajoute les nouvelles fenêtres en dessous ou à droite
set splitbelow
set splitright

" 6bis Tabs

" Raccourcis claviers pour les Tabs
map <C-Down>  :tabnew <CR>
nmap <C-Right> :tabnext <CR>
nmap <C-Left>  :tabprevious <CR>

" 7 Sauvegarde

" Fait une copie de sauvegarde lors de l'écrasement d'un fichier
set backup
" Dossier contenant la sauvegarde. N'oubliez pas de le créer et de lui faire un
" chmod 700
set backupdir=~/.backup

" 8 Unixage

" Path pour la recherche de fichier avec :find, :sfind et :tabfind
set path=.,/usr/include,/usr/X11R6/include,/usr/local/include

" Le texte sélectionné en mode visuel est collé dans le presse-papier PRIMARY
set clipboard=autoselect

" Shell par défaut
set shell=/bin/bash

" 9 Mapping

" Supprimer les blancs en début de ligne
nmap _S :%s/^\s\+//<CR>

" Bien interpréter les caractères de contrôle
nmap <ESC>[1;5D <C-Left>
nmap <ESC>[1;5C <C-Right>
nmap <ESC>Oa <C-Up>
nmap <ESC>[1;5B <C-Down>

"indentation automatique
vnoremap <C-F>    =$
vnoremap <tab>    =
nnoremap <tab>    =$
nnoremap <C-tab> mzvip=`z

" Génération des tags pour les fichiers à la C++
map <F11> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

" 10 Plugin

" Gestion des plugin grace a vundle
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

Bundle 'gmarik/vundle'
"Bundle 'html5.vim'
"Bundle 'HTML5-Syntax-File'
"Bundle 'css3'
"Bundle 'CSS3-Highlights'
filetype plugin indent on


"source /usr/share/vim-scripts/games/VimSokoban/sokoban.vim
"source /usr/share/vim-scripts/plugin/bufexplorer.vim
"source /usr/share/vim-scripts/plugin/taglist.vim

"Le plugin 2html utilise le CSS
let html_use_css3 = 1

"Configuration de vimspell
let loaded_vimspell = 1
set spelllang=fr
set spellsuggest=10                                                                                                                         
let spell_executable = "aspell"
let spell_auto_type = ''
let spell_insert_mode = 0

" Configuration OmbiCpp (C++)
let OmniCpp_DefaultNamespaces=["std", "_GLIBCXX_STD"]
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_NamespaceSearch = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_ShowPrototypeInAbbr = 1

""""""""""""""""""""""""""""""""""" script pour le header

" FUNCTION:
" Detection du type de fichier en regardant l'extension.
" VARIABLES:
" comment = commentaire sur le type de fichier.
" type = le chemin de l'interpreteur pour du type de fichier
" quand le fichier n'est pas un script executable.

function s:filetype ()

  let s:file = expand("<afile>:t")
  if match (s:file, "\.sh$") != -1
    let s:comment = "#"
    let s:type = s:comment . "!" . system ("whereis -b bash | awk '{print $2}' | tr -d '\n'")
    let s:nocomment = "#"
  elseif match (s:file, "\.py$") != -1
    let s:comment = "#"
    let s:type = s:comment . "!" . system ("whereis -b python | awk '{print $2}'| tr -d '\n'")
    let s:nocomment = "#"
  elseif match (s:file, "\.pl$") != -1
    let s:comment = "#"
    let s:type = s:comment . "!" . system ("whereis -b perl | awk '{print $2}'| tr -d '\n'")
    let s:nocomment = "#"
  elseif match (s:file, "\.c$") != -1
    let s:comment = "//"
    let s:type = s:comment . "C File"
    let s:nocomment = "//"
  elseif match (s:file, "\.php$") != -1
    let s:a = "1"
    let s:balise = "<?php"
    let s:comment = "//"
    let s:type = s:comment . "PHP File"
    let s:nocomment = "//"
  elseif match (s:file, "\.cpp$") != -1
    let s:comment = "//"
    let s:type = s:comment . "C++ File"
    let s:nocomment = "//"
  elseif match (s:file, "\.vim$") != -1
    let s:comment = "\""
    let s:type = s:comment . " Vim File"
    let s:nocomment = "\""
  elseif match (s:file, "\.rb$") != -1
    let s:comment = "#"
    let s:type = s:comment ." Ruby File"
    let s:nocomment = "#"
  elseif match (s:file, "\.html$") != -1
    let s:comment = "<!-- -->"
    let s:type = s:comment . "<!-- HTML File -->"
    let s:nocomment = "<!-- -->"
  elseif match (s:file, "\.css$") != -1
    let s:comment = "/*"
    let s:type = s:comment . " Css File"
    let s:nocomment = "\*/"
  else
    let s:comment = "#"
    let s:type = s:comment . " Text File"
    let s:nocomment = "#"
  endif
  unlet s:file

endfunction

" FUNCTION:
" Insertion du headers a la creation du fichier.
" VARIABLES:
" author = le propriétaire du fichier
" file = chemin pour acceder au fichier.
" created = Date de creation du fichier.
" modified = Date de la derniere modification.

function s:insert ()

  call s:filetype ()

  let s:author = s:comment . " Auteur:  Noubicier patrick"
  let s:file = s:comment . " Fichier: " . expand("<afile>")
  let s:created = s:comment . " Date de creation: " . strftime ("%H:%M:%S %d/%m/%Y")
  let s:modified = s:comment . " Date de derniere modification: " . strftime ("%H:%M:%S %d/%m/%Y")

  call append (0, s:balise)
  call append (1, s:type)
  call append (2, s:author)
  call append (3, s:file)
  call append (4, s:created)
  call append (5, s:modified)
  call append (6, s:nocomment)

  unlet s:balise
  unlet s:comment
  unlet s:type
  unlet s:author
  unlet s:file
  unlet s:created
  unlet s:modified
  unlet s:nocomment

endfunction

" FUNCTION:
" Mettre la date de derniere modification.
" mets a jour la ligne 5 correspondant a la date de derniere modification.

function s:update ()
 
  call s:filetype ()

  let s:pattern = s:comment . " MODIFIED: [0-9]"
  let s:line = getline (5)

  if match (s:line, s:pattern) != -1
    let s:modified = s:comment . " MODIFIED: " . strftime ("%H:%M:%S %d/%m/%Y")
    call setline (5, s:modified)
    unlet s:modified
  endif

  unlet s:comment
  unlet s:pattern
  unlet s:line

endfunction

autocmd BufNewFile * call s:insert ()
autocmd BufWritePre * call s:update ()

"""""""""""""""""""""""""""""""""""fin du script pour header
" Configuration de taglist
"set tags+=~/.vim/tags/stl


Les commentaires sous vim s'active grace au caractère guillemet double ' " '
Donc pour activer certaines options il suffit de supprimer ce caractère en début de ligne ou en désactiver d'autre  en le rajoutant en début de ligne.

Comme vous pouvez le constater j'ai rajouté un script pour le headers ou entête car à l'ETNA nous devons respecter une norme (le header est un des éléments de cette norme) et je me suis pris pas mal de -9 car je persistais à utiliser Vim contrairement à emacs qui génère automatiquement des headers.Tout problème a des solutions lol.

Pour gérer plus de type de fichier il suffit de rajouter une condition avec elseif ,Dans mon cas je n'ai gérer que les extensions dont j'aurai à me servir cette année et si besoin en ai j'en rajouterai.

Pour l'extension html, j'insère les balises de commentaire, donc il faut juste copier coller, le texte à droite au centre de la balise.

Ensuite enregistrer le fichier comme ceci
appuyez sur la touche Echap ou ESC, taper :wq!

Activer le vimrc comme ceci (je fais une copie que je renomme .vimrc)
cp vimrc .vimrc

Maintenant que le fichier est activer toute modification se fera dans le .vimrc comme ca en cas de mauvaise manipulation j'ai toujours un backup de mon vimrc sous la main.

Si votre modification dans le .vimrc est un succes pour mettre a jour le backup
cp .vimrc vimrc

Voici un site qui m'a beaucoup aidé pour la réalisation de ce script
http://vim-fr.org

Goodbye mister Ritchie

La mort de Steeve Jobs a été annoncé dans tout les média et celle de Dennis Ritchie est passé presque inaperçue alors que nous lui devons le langage C et le système UNIX.

Juste une question qu'est ce qui ne découle pas du C ou d'UNIX actuellement?

L'un a mis au point avec un cercle très restreint( Ken Thomson, Joe Ossanna ...), un langage et un système d'exploitation dont découlent presque tout les outils informatiques de nos jours.

L'autre a créer un besoin (d'appartenance, d’épanouissement, d'estime) "selon moi P.N"

Donc voici un petit hommage a un géant , un génie, un grand homme Monsieur Dennis Ritchie.

PS: Steve Jobs est un informaticien très doué et un entrepreneur de génie