jeudi 29 juin 2017

Just a Developer

Just A Developer
Traduction d'un article de Terry Keeney  du 24 Mai 2017

L'explosion des langages, des frameworks et des plates-formes dans le monde du développement de logiciels a créé comme une épée à double tranchant pour ceux qui se considèrent comme des généralistes techniques capables de faire n'importe quoi. D'une part, elle a créé un monde de nouvelles choses toujours plus brillantes offrant toujours plus de nouveaux jouets avec lesquels expérimenter. D'autre part, elle a mis en évidence la grande différence entre ce que je classerai comme codeur et développeur, ce qui rend les interactions avec les recruteurs et d'autres acteurs au contact de la technologie de plus en plus irritantes.

Dans mon monde grossièrement généralisé, le Codeur peut être identifié par son cri de combat: "C'est un problème, je suis un développeur". Le Codeur se caractérise par sa compétence dans une gamme étroite de compétences choisies. Le Codeur progresse et devient meilleur dans son créneau par la simple pratique et la seule répétition.

En revanche, la plus grande compétence du Développeur est d'être un apprenant appliqué. Tout simplement, le développeur a un talent pour piger les nouveaux [langages ​​| frameworks | plates-formes] et il devient très compétent très rapidement. Il n'y a pas de problème au-delà de sa portée car il apprécie le développement à n'importe quelle niveau du stack.

Alors, avant de demander à nouveau ... NON JE SUIS PAS:
... développeur de back-end
... développeur frontal
... développeur Java
... développeur React
... développeur...

Pour ma compréhension fondamentale des principes sous-jacents et ma volonté et ma propension à apprendre tout ce qui m'est demandé ...

Je suis JUSTE un développeur

Cela a été publié à l'origine sur le site de Terry site en janvier. Une confluence d'événements a alimenté la même rage qui a inspiré cette publication sur dev.to en mai, que je partage ici aussi.

Le site de Terry
https://salabs.io/posts/just-a-developer.html

dev.to
https://dev.to/tkeeney/just-a-developer

mardi 20 juin 2017

Tel le phoenix!

Comme il faut bien un jour revenir sur ses vieilles collections, il est nécessaire de revenir à ce genre d'endroit. La Geekandie va, j'espère, connaître à nouveau l'activité de son passé.
Alors en attendant les articles, relisez un peu les anciens articles. Soit vous serez apeurés devant l'évolution des technologies en si peu de temps, soit vous y trouverez des choses intéressantes pour le présent.

Enjoy.

mardi 13 janvier 2015

Compendium sur les commandes linux utiles en réseau et système

Je fais ici un petit inventaire de commandes Linux utiles voire indispensables pour aborder le dépannage d'un réseau/système. Si vous souhaitez plus d'informations sur une de ces commandes : man! RTFM après tout.
Et n'hésitez pas à me signaler si vous voyez d'autres outils à ajouter.

Réseau

Il s'agit ici des commandes classiques pour configurer et surtout dépanner votre réseau.

La commande ifconfig 

La commande ifconfig permet la configuration locale ou à distance des interfaces réseau de tous types d'équipements (unité centrale, routeur). Sans paramètres, la commande ifconfig permet d'afficher les paramètres réseau des interfaces. Sous Debian, la configuration de l'adresse IP peut se faire avec Network-Manager (pas sur un serveur) et via le fichier /etc/network/interfaces.

La commande ping 

Outil très connu, la commande ping est en général très mal utilisée, les utilisateurs se contentant d'un ping google.fr avant de décréter que rien ne fonctionne. Voici une proposition de tests à faire avant de crier au désastre.
ping 127.0.0.1 adresse de bouclage
ping 172.16.1.1 adresse locale
ping 172.16.1.2 adresse d'une autre machine de notre réseau
ping 172.16.1.254 adresse de notre passerelle
ping ... adresses de toutes les passerelles connues
ping 8.8.8.8 adresse de google
ping 172.16.0.11 adresse du serveur DNS
ping google.fr adresse de google avec résolution de nom

La commande arp 

La commande arp permet de visualiser ou modifier la table du cache arp de l'interface. Cette table peut être statique et/ou dynamique. Elle donne la correspondance entre une adresse IP et une adresse MAC (Ethernet).
Le cache ARP est obtenu avec la commande arp -va
Utiliser arp -d pour supprimer une entrée
Un ping ultérieur permettra d'obtenir des informations fraîches.

La commande route 

Le routage définit le chemin emprunté par les paquets entre un point de départ et un point d'arrivée. La commande route permet également la configuration de pc, de switchs et de routeurs. Sans vouloir nous appesantir sur le routage ici, l'affichage des routes connues par la machine est un indice très intéressant. On utilise route -n pour ce faire.

La commande netstat 

La commande netstat permet de tester la configuration du réseau, visualiser l'état des connexions, établir des statistiques, notamment pour surveiller les serveurs. Pour information, netstat -nr donne la table de routage de la machine, comme route -n.

La commande traceroute 

La commande traceroute permet d'afficher le chemin parcouru par un paquet pour arriver à destination. Cette commande est importante, car elle permet d'équilibrer la charge d'un réseau, en optimisant les routes.

La commande dig 

La commande dig remplace ce qui était la commande nslookup. Cette commande sert à diagnostiquer des dysfonctionnements dans la résolution de noms (service DNS). Elle affichera le contenu de la réponse obtenue auprès du serveur DNS.

La commande host 

La commande host interroge les serveurs de noms. Elle peut par exemple être utilisée pour détecter des dysfonctionnement sur un réseau (serveurs hors services). Attention, n'utilisez pas cette commande sur des réseaux dont vous n'avez pas l'administration.

Système

Passons aux commandes utiles pour mieux cerner, dépanner, configurer votre système.

La commande lsof 

La commande lsof permet de lister les fichiers ouverts et les processus actifs.
Pour indiquer les processus de type internet : lsof -i 
On peut ne demander que pour un protocole lsof -ni tcp:25 
ou que vers une machine : lsof -ni @192.168.0.1:25
La forme suivante de la commande permet de connaître tous les fichiers ouverts par l'utilisateur 500 ou toto ou par le processus 1234 ou 12345. lsof -p 1234, 12345 -u 500, toto

La commande telnet 

Telnet était l'outil indispensable à connaître. Malheureusement, elle pose de sérieux problèmes de sécurité (elle transmet les mots de passe en clair sur le réseau). C'est pourquoi on lui préfère la commande ssh surtout si on doit s'en servir sur un réseau local ou sur internet.

La commande tcpdump 

La commande tcpdump permet de faire des captures de paquets sur votre réseau. Il n'est pas le plus agréable à utiliser des utilitaires de ce type et on trouve bien plus convivial dans l'interface.

La commande nmap 

nmap est un outil pour scanner les ports ouverts sur une machine distante. Énormément d'options sont disponibles. Il existe une surcouche graphique nommée Zenmap.

La commande top 

Un outil indispensable pour afficher les processus les plus gourmands de votre machine. 

La commande who 

Cette commande permet l'affichage des utilisateurs connectés.

La commande tload

tload affiche la charge CPU sous forme de graphique.

La commande ps

Cette commande affiche les processus exécutés sur la machine.
ps -ef : affiche tous les processus lancés.
ps -ejH: afficher process en arbre

La commande kill

Complément régulier de la commande précédente kill permet de tuer un processus (via son PID)
kill -9 : force à quitter
killall : quitte toutes les occurrences d’un programme

Les commandes halt, reboot et shutdown

halt, reboot, shutdown permettent l'arrêt, le redémarrage, ou la programmation de cet arrêt ou redémarrage.

La commande last

Pour obtenir l'historique des connexions : last.

La commande df

df sert à connaître le remplissage des disques (l’option -h permet d’obtenir les tailles en « human readable »).

La commande fdisk

Pour afficher la table des partitions, utiliser fdisk -l.

La commande free

free indique l’allocation de la ram et la mémoire libre restante.
free -m : information sur la mémoire

La commande vmstat

vmstat permet l'obtention d'information sur la ram, le swap, et l'utilisation cpu.

La commande hostname

hostname affiche le nom d’hôte de la machine conformément à ce qui est écrit dans le fichier /etc/hostname.

La commande uname

uname permet de récupérer des informations sur le système et le matériel.

La commande lsb_release

lsb_release -a donne toutes les informations sur la distribution.

La commande lspci

lspci liste tous les périphériques PCI.

La commande lsusb

lsusb liste tous les périphériques USB.

La commande dmesg

dmesg affiche les messages loggés par le buffer du noyau.

La commande apt-cache

apt-cache permet la gestion des paquets. Deux options sont très utiles
apt-cache search nom_paquet, permet de chercher un paquet,
et apt-cache show, permet d’obtenir des détails sur un paquet.

La commande apt-get

apt-get quqnt à lui permet la gestion des paquets. Les commandes que l’on utilisera le plus sont
update : mise à jour des sources de paquets disponibles,
upgrade : mise à jour du système et autres logiciels,
install : apt-get intall paquet-à-installer pour installer un nouveau logiciel et ses dépendances,
purge : permet de désinstaller un paquet de manière plus « propre » que remove car cela efface aussi les fichiers de configuration.

La commande dpkg

dpkg commande travaillant sur les paquets.
Pour obtenir des informations sur les paquets installés (options pour lister tous les paquets, désinstaller, etc.).
dpkg --get-selections : liste des paquets installés  
Mais aussi pour installer un paquet téléchargé : dpkg --install

La commande make

make permet de compiler un programme dont on détient les sources. La procédure classique est la suivante :
./configure (à lancer avec –help pour voir les différentes options de compilation) qui lance le script de configuration qui vérifie la présence de toutes les dépendances et écrit le fichier makefile qui contient les ordres de compilation,
make qui lance la compilation
et enfin make install qui installe le logiciel.

La commande update-rc.d

update-rc.d permet de configurer le démarrage ou l’arrêt automatique de service au démarrage de la machine ou selon le runlevel. On donne en argument le nom du service et l’action (remove ou default pour l’ajout) update-rc.d -f apache2 remove
-f permet de forcer l’effacement du lien symbolique même si le nom existe encore. On peut aussi placer un script de démarrage dans répertoire /etc/init.d ou le renseigner le fichier /etc/rc.local (qui a lui-même un lien symbolique dans /etc/init.d).

Quelques commandes supplémentaires

cat /etc/passwd affiche les utilisateurs.
cat /etc/group affiche les groupes.
which localise une commande. ex : which cat /bin/cat.
whereis localiser un fichier binaire.

jeudi 25 décembre 2014

Bonnes fêtes de fin d'années de la part de toute l'équipe

Toute l'équipe de joyeux fous furieux de ce blog vous souhaite de bonnes fêtes de fin d'année.

Et en ce jour de Nowel un petit truc de geek: Faites un traceroute xmas.futile.net et vous aurez un résultat sympathique :)

(PS : pour les plus fainéant ou si ça bug : https://pbs.twimg.com/media/B5pcHNyCMAAmIOl.png )

vendredi 19 décembre 2014

Des snippet pour jouer avec vos bits (ahem)

Voici un lien très intéressant lorsque vous devrez travailler sur des bit en C. Les codes sont utilisables librement. Il y a même un bug bounty de 10$ par bug ou faille trouvée. A vos claviers !

ICI

dimanche 14 décembre 2014

Vous vous battez contre la procrastination ? Nous aussi ! 15 indices pour y remédier.

Un peu de couleur dans ce monde austère ! Haut les cœurs, c'est bientôt Nowel. Et avec cette fête, je vous offre une petite distraction loin des lignes de commandes de mes camarades :)

La procrastination est un sujet dont on entend parler tous les jours. Etudiant, nous sommes tous particulièrement toucher, il faut bien se l’avouer. N’est-ce pas ? Vos devoirs là, qui traînent sur votre bureau, sur un document brouillon de votre ordinateur ? Depuis combien de temps vous attendent-ils ? 

Mais sait-on vraiment ce qu’est la procrastination ? D’où vient-elle ? Car oui, procrastiner, ce n’est pas seulement remettre les choses à plus tard. Cela peut être dû à de nombreuses raisons. C’est la peur de l’action elle-même. L’anxiété, la peur de l’échec, du perfectionnisme mal placé… Beaucoup de choses se cachent derrière ce que nous appelons communément "flemme".

Je vous présente aujourd’hui une petite infographie qui peut vous aider à vous organiser pour essayer de réduire les effets néfaste de cette remise au lendemain que nous subissons chaque jour. Cela peut paraître basique, mais honnêtement, combien d’entre vous le font ? ;)

(Oui, l'image déforme un peu l'endroit, mais au moins, elle est lisible ! )


jeudi 20 novembre 2014

Optimisation - Powershell

Bonjour,

Aujourd'hui je vous propose un petit article sur les différentes façons d'optimiser vos scripts powershell. Après quelques recherches sur le net je suis en effet tombé sur des solutions intéressantes.


Commençons tout de suite avec notre premier type d'optimisation : le temps d'exécution.

Performance 

Les boucles : 

En ce qui concerne les différentes possibilités de la boucle For, on retrouve classiquement le même fonctionnement que sur d'autres langages. 

Ainsi tester la condition dans la boucle comme ceci : 

$range = 1..100000            
            
For($i=0; $i -lt $range.Count; $i++) {            
    $i            
}
est 4 fois plus lent qu'en effectuant le check de l'objet range avant la boucle. (source)


For vs Foreach :

La boucle For est 40 à 50 fois plus rapide que la boucle foreach. Vous trouverez la comparaison ici.

Il est donc évident que lorsque vous avez la possibilité d'effectuer un count sur votre objet avant de faire votre boucle, si votre problématique est sur la vitesse d'exécution et non forcément la mémoire utilisée, alors l'utilisation de la boucle for est indispensable.


Utiliser -Filter : 

Il arrive fréquemment de lister quelque chose, et de filtrer notre résultat sur un nom par exemple. Et bien il existe une option sur certaines cmdlets appelé Filter. 

Celle-ci est 4 à 8 fois plus performante que le classique "$something | where{$_.name -eq "votre nom"}" puisque -Filter effectue la sélection lors de l'exécution de votre requête et ne sélectionne que les objets répondant à votre critère, là où votre Where-Object va tous les sélectionner pour ensuite rechercher ceux qui correspondent à votre chaîne. (source


Check de conditions :

Encore une fois quelque chose que l'on retrouve dans de nombreux langages. Un petit bout de code parle mieux que de longues explications : 

Code 1 : 
if(1 -eq $true)
{
   Do-Something
}

Code 2 :
if(1)
{
   Do-Something
}

Je pense que vous voyez où je veux en venir ;). (source)


Consommation mémoire

Comme la vitesse d'exécution ne fait pas tout, et qu'il est parfois nécessaire de contrôler un minimum la taille mémoire de ce que l'on récupère (notamment lors de collecte massive de données). Voici quelques petites informations que j'ai trouvé à droite et à gauche sur la toile.

Tout d'abord afin de déterminer la consommation mémoire de votre instance PowerShell : 
[System.gc]::gettotalmemory("forcefullcollection") /1MB


Pipe vs Var


Lorsque l'on récupère un ensemble d'objets grâce à une cmdlet et que l'on souhaite les retraiter par la suite, on a plusieurs possibilités.

On peut soit :
  • Stocker nos objets dans une variable et les parcourir avec un ForEach (ce qui garde tous les objets en mémoire pour la session PowerShell)
  • Passer directement nos objets un par un à notre foreach avec un pipe

Code 1 : 

$something = Get-Something
foreach($test in $something)
{
   Do-Something
}

Code 2 :

Get-Something | foreach {Do-Something}

A noter que cela répond à une situation bien précise où vous souhaitez optimiser l'utilisation mémoire plus particulièrement. En effet le code 2 sera plus soft sur la mémoire mais sera également plus lent. (source)


Sélectionner les attributs


Les objets powershell sont gros, très gros et même parfois trop gros. Il est donc nécessaire de limiter ses récupérations à certains attributs si tous ne nous intéressent pas.

Là encore on peut retrouver une commande de type "Get-Something | select anotherthing". Cela fait le travail, mais on a la possibilité de le faire de façon plus élégante avec certaines options de cmdlet (si celles-ci sont présentes car elles ne sont pas implémentées pour toutes les cmdlets.

On retrouve ainsi : -DontUseDefaultIncludedProperties et -IncludedProperties

Tout comme pour l'utilisation de -Filter, il est préférable d'utiliser ces deux options si celles-ci sont implémentées sur les cmdlets que vous utilisez puisque vous ne récupérerez alors que les attributs nécessaires et demandés et ce dès le début de votre requête (ce qui soulage votre réseau si vous requêtez du VMware ou de l'AD par exemple et accélère celle-ci). 

Je pense que leur nom est suffisamment parlant, il suffit de spécifier les propriétés que vous souhaitez récupérer après -IncludedProperties et le tour est joué. (source)


Garbage Collector


On ne peut pas parler d'optimisation mémoire sans aborder le garbage collector utilisé en PowerShell. En effet si vous vous êtes déjà intéressé à l'empreinte mémoire de vos scripts, et que vous avez cherché des solutions pour un équivalent du "Free" du C par exemple, vous avez très certainement du vous retrouver avec des réponses du genre "$var = $null".

Il se trouve que le garbage collector se charge en effet de nettoyer tous ces objets inutiles, notamment ceux présents dans vos boucles que vous ne réutiliserez plus jamais par la suite. Néanmoins, celui-ci ne passe pas forcément au bon moment et il existe donc quelques astuces pour forcer son appel.

Ainsi, le garbage collector ne passera pas lorsque vous effectuez une boucle et il attendra que celle-ci se termine, ce qui peut poser problème si vous décidez de collecter un nombre important de données dans une bonne grosse boucle de la mort (là encore je pense plus particulièrement aux personnes tapant des AD, qui récupèrent facilement de gros volumes de données).

Pour représenter un peu tout ça, j'ai effectué rapidement un bonne boucle bien sale vous faisant exploser votre mémoire : 

$a = @{}
$i = 1

while(1)
{
    $a[$i] = $i    
    $i++

}

Et si on veut appeler notre petit garbage collector dans notre boucle :  [System.GC]::Collect()

Vous pourrez tout de suite constater la différence d'évolution de la mémoire utilisée. Attention néanmoins à cette utilisation puisque appeler le garbage collector lorsque celui-ci n'est pas prévu peut faire effondrer vos performances (à utiliser donc avec précaution). (source)

Je pense avoir fait le tour de tout ce que j'ai pu trouver jusqu'à présent. Si jamais vous avez d'autres informations n'hésitez pas et partagez.