298 private links
Ohoh !
Epic, le studio créateur des jeux Unreal Tournament, a annoncé (ce 8 mai 2014) la création d'un nouveau volet de la saga UT, mais avec des changements plus que radicaux ; pour commencer, le jeu sera gratuit, mieux que "Free-to-Play", le projet est repris depuis 0, ligne de code et artwork, en développement avec une équipe d'anciens développeurs d'UT et surtout en collaboration avec la communauté ! Bonne nouvelle, le jeu sera conçu pour fonctionner à la fois sur Windows, Mac et GNU/Linux, et le code source sera disponible sur GitHub.
Quelques liens direct :
- leur wiki https://wiki.unrealengine.com/Unreal_Tournament
- leur forum https://forums.unrealengine.com/
- leur page Twitch.tv https://www.twitch.tv/unrealengine
(Via SebSauvage http://sebsauvage.net/links/?PbcwUA)
Quelques nouvelles, au sujet du protocole futur remplaçant du serveur graphique Xorg (la news date de 2 mois).
Concernant le Environnement de Bureau MATE, ce sera la version 1.10 qui intégrera le support pour Wayland \o/ http://wiki.mate-desktop.org/roadmap#release_110
Note pour moi-même: GNU ddrescue, utile pour récupérer des données sur un support avec des erreurs.
Remarque : il est conseillé d'utiliser la compression lzip, pour ses capacités de récupération de données.
Voir aussi lziprecover.
Un tutoriel pour apprendre les bases du développement réseau en C.
Pour la version en PDF, regardez en bas de page (http://www.inetdoc.net/pdf/socket-c.pdf)
Un ensemble de guides et de livres pour apprendre à développer des processus liés au réseau (et aussi à tuer des dragons ;-))
Un livre qui a reçu une bonne critique, au sujet du développement en C sous GNU/Linux, aussi bien pour les développeurs que pour les administrateurs systèmes.
Il est tout de même orienté vers la lib glibc, et aussi disponible en format numérique (PDF/ePub)
Vous utilisez souvent GnuPG pour chiffrer du texte, mais vous voulez vous simplifier la tâche lorsque vous devez utiliser vim avec, et aussi rajouter un peu de sécurité ?
Voici donc le plugin gnupg.vim.
Lorsque je parle de "sécurité", le plugin d'après son auteur désactive des fonctionnalités de vim comme swapfile, viminfo, et undofile, ce qui permet d'éviter de lire les données écrites du fichier en lisant son fichier temporaire, par exemple.
EDIT: le script est disponible sur GitHub, ce qui permet de vérifier son intégrité https://github.com/jamessan/vim-gnupg
EDIT2 (2013-07-31): il est disponible en tant qu'ebuild sous Gentoo \o/ → app-vim/gnupg
Suite à mon petit article (https://links.thican.net/?OIlYuQ) sur le même principe (des requêtes HTTP), mais en utilisant telnet, voici donc une autre version bien plus propre, avec curl.
Pour rappel :
Utilisons donc quelques variables pour simplifier les envois (c'est du bash, au fait)
- host : c'est le nom de domaine du site web à contacter (pour utiliser avec la variable HOST),
- port : le port du serveur distant (port 80 très souvent, doit être un nombre entre 1 et 65 535 inclus),
- url : l'url de la page web à joindre, (sous la forme "/index.html", avec un '/' au début),
- getVars et postVars : la suite de variables qui vont être envoyées au serveur web, dans les requêtes GET et POST. (ces infos doivent être sous la forme "name=toto&code=2&update&field=text") ; dans une requête GET, postVars sera ignorée.
Attention : la variable "host" est obligatoire (le port est par défaut à "80" si la variable est vide).
Requête GET : curl --include http://${host}:{port:-80}/${url}?{getVars}
Requête POST : curl --include --data ${postVars} http://${host}:{port:-80}/${url}?{getVars}
That's it!
Concrètement, la différence entre telnet et curl, elle se réside uniquement dans votre démarche d'apprentissage et de compréhension.
Si vous voulez apprendre, modifier des données pour faire des tests, avoir un contrôle un peu plus poussé sur vos données, utilisez donc telnet.
Par contre, si vous voulez quelque chose qui fasse son boulot, simplement, avec le moins d'erreurs possible car maintenu à jour, sans prise de tête, tournez donc vers curl.
EDIT: une méthode, plus simple et plus "propre" à utiliser, avec curl : http://links.thican.net/?wGhHkw
Si vous avez besoin de tester un serveur web sans utiliser un navigateur web (pour ainsi mieux voir ce qui est concrètement reçu et envoyé), voici un début d'aide :
On va donc utiliser telnet, un logiciel qui permet simplement de se connecter à une machine distant, sur le port souhaité, et d'envoyer simplement des paquets TCP.
Utilisons donc quelques variables pour simplifier les envois (c'est du bash, au fait)
- host : c'est le nom de domaine du site web à contacter (pour utiliser avec la variable HOST),
- port : le port du serveur distant (port 80 très souvent, doit être un nombre entre 1 et 65 535 inclus),
- url : l'url de la page web à joindre, (sous la forme "/index.html", avec un '/' au début),
- getVars et postVars : la suite de variables qui vont être envoyées au serveur web, dans les requêtes GET et POST. (ces infos doivent être sous la forme "name=toto&code=2&update&field=text") ; dans une requête GET, postVars sera ignorée.
Attention : la variable "host" est obligatoire (le port est par défaut à "80" si la variable est vide).
Pour les requêtes GET, voici donc :
{ echo -n -e "GET /${url}?${getVars} HTTP/1.1\nHOST: ${host}:${port:-80}\n\n"; sleep 0.5 } | telnet ${host} ${port:-80}
Pour les requêtes POST, il faut rajouter l'info de la variable "Content-Type: application/x-www-form-urlencoded" (attention, d'après cette page http://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data s'il s'agit d'autres formes de données, mieux vaut modifier le contenu de cette variable), voici donc :
{ length=$(echo -n ${postVars} | wc -c --); echo -n -e "POST /${url}?${getVars} HTTP/1.1\nHOST: ${host}:${port:-80}\nContent-Type: application/x-www-form-urlencoded\nContent-Length: ${length}\n\n${postVars}"; sleep 0.5 } | telnet ${host} ${port:-80}
Voilà, c'est tout, simple non ? ;-)
Remarques :
- "Pourquoi le temps de pause dans telnet (sleep 0.5) ?"
Pour des raisons qui m'échappent, telnet va semble-t-il trop vite, et il envoit donc un paquet TCP avec le flag "RST" (Reset), ce qui coupe court le serveur distant, ainsi que l'affichage (même si le serveur distant a envoyé les données, telnet ne les affichera pas). Du coup, il se peut que vous tomber sur ce problème, si le serveur distant est long à répondre (grosse requête, trop de trafic, etc.), il faut donc augmenter le temps de pause. - "Pourquoi mettre un '/' en plus au début dans l'URL ("GET /${url}") ?"
Les '/' en doublon ne sont normalement pas gênants pour accéder à une ressource (essayez donc des URL avec une suite de '/', ça ne devrait pas poser problème). Effectivement, si le serveur distant ne gère pas correctement ces '/' doublons, il risque de râler, mais en tout cas, si le premier '/' est manquant (exemple "GET index.html"), là, c'est sûr, la requête est mauvaise. Donc, autant en mettre trop que pas assez. ;-)
Quand je lis cette discussion, je me dis que certains veulent empêcher le monde d'être meilleur (mode ronchon activé).
Bon, concrètement, il faut vraiment admettre que la lettre 'T' est obligatoire, une bonne fois pour toute !
Voir la RFC3339 https://tools.ietf.org/html/rfc3339
Pour faire simple, 'T' est obligatoire comme séparateur, mais il "peut être possible d'utiliser un espace, parce qu'on est gentil toussa" ; et du coup, ce passage "on est gentil toussa", ben voilà, tout le monde l’interprète à sa sauce.
Pourtant, d'autres programmes l'ont déjà compris, comme :
- PHP : date(DATE_RFC3339) (voir ma page https://thican.net/myip.php)
- syslog-ng : ts_format(rfc3339) (du coup, tous mes logs gérés créés par syslog sont de la forme 2013-06-26T11:26:15+02:00)
voir aussi, plus récemment : http://gnu-coreutils.7620.n7.nabble.com/bug-6132-bug-in-date-rfc-3339-TIMESPEC-option-doesn-t-print-T-td19183.html
Il n'y a que date dans coreutils qui a cet espace.
du coup, soit on utilise : date --rfc-3339=seconds | tr ' ' 'T'
ou : date +'%Y-%m-%dT%H:%M:%S%:z' (oui oui oui, il faut mettre "%:z" et non "%z", car vous risquerez d'avoir +0200 au lieu de +02:00. La seule raison qui pousse à ce comportement, c'est d'éviter au maximum tous les caractères non-alpha-numériques dans les noms de fichiers… bof quoi.)
Une retranscription traduite en français sur les avantages et les intérêts de passer à Wayland, comme remplaçant du vieillissant X.org.
Une police d'écriture sous GNU/Linux, ttf-unifont dans les paquets Debian, qui a un nombre élevé de caractères affichable, parfait pour tester l'unicode.
Une suite d'outils qui permet d'utiliser une GUI (Graphical User Interface), donc une interface graphique, pour gérer d'autres services sous GNU/Linux.
Il faudrait voir ensuite comme et sauvegarder le fichier de config, le mieux serait simplement d'avoir l'outil qui donne à copier/coller le résultat, et détaillent ce qui a été modifié, rajouté, supprimé.
À voir donc.
(via Korben http://korben.info/une-interface-pour-vos-logiciels-gnulinux.html)
Si vous avez besoin de sauvegarder des fichiers, en les mettant sur un serveur ftp distant, tout ça en tâche automatique, voici un script de mon cru (parmi tant d'autres, je n'ai pas cherché) qui peut rendre bien service :
(EDIT: Vu que les indentations ont sauté, voici une copie directe en téléchargement http://thican.net/~thican/backup-ftp.sh)
################################
!/bin/env bash
coding: utf-8
Script for saving files through FTP, to a remote host (for cron or CLI)
Thibaud CANALE
thican [at] thican [dot] net
2013-06-09
GPLv3
Parameters for FTP host (you only need to edit this 4 parameters)
hostFTP="" # "ftp.example.com"
userFTP="" # "foo"
passwordFTP="" # "bar"
remoteDir="./"; # remote directory, where to save files (like "backup")
you have to create the directory yourself.
tempIFS=${IFS};
IFS=$'\x0a\x00'; # useful to avoid problem with namefiles contening some
spaces (sic)
errorStatue=false;
Test if parameters for the connexion to the FTP host are all set.
if [ "x${hostFTP}" = "x" ] || [ "x${userFTP}" = "x" ] ||
[ "x${passwordFTP}" = "x" ]; then
echo "ERROR: at least one parameter for FTP connexion is not set. Exiting." >&2
exit 1;
fi
Test if at least one parameter is given.
if [ "x${1}" = "x" ]; then
echo "Missing arguments. Exiting." >&2
exit 2;
fi
Check if each ${args} is a regular file, to be upload to ftp server.
If yes, uploading it now.
If no, display a message error.
for args in ${@}; do
if [[ -f ${args} && ! -L ${args} ]]; then # symbolic files are ignored.
ftp -n ${hostFTP}<<END
user ${userFTP} ${passwordFTP}
put ${args} ${remoteDir:-"./"}/$(basename ${args})
bye
END
else
errorStatue=true;
echo "${args} is NOT a regular file. Skipping." >&2;
fi
done
#IFS=$'\x20\x09\x0a\x00'; # Reset of the default IFS (I don't care about the old one)
IFS=${tempIFS};
We check if ${errorStatue} containts some error.
if ${errorStatue}; then
exit 3;
fi
exit 0
################################
Ainsi, sauvegardez donc ce script dans /usr/local/bin/, par exemple, éditez donc les paramètres de connexion au serveur FTP dans le début du script, et utilisez-le avec cron, juste après vos tâches de sauvegardes automatisées.
Voilà, ce n'était pas plus compliqué que ça. :-)
(Note to myself)
Internal field separator sous GNU/Linux.
Par défaut :
% echo -n -E $IFS | hexdump -C --
00000000 20 09 0a 00 | ...|
00000004
\x20 == espace, \x09 == tabulation "\t", \x0a == nouvelle ligne "\n" et \x00 == NULL
https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#Table_des_128_caract.C3.A8res_ASCII
(Je mets toujours du temps à retrouver ça, même si cette fois, c'est arrivé du premier coup, alors je sais qu'ici, je le retrouverai plus rapidement.)
Ohlala, j'avais vu l'annonce, mais j'avais oublié d'en faire l'info :
Voici donc la sortie de la version 15 de Linux Mint, nommée Olivia.
Je l'ai donc installée hier, grâce à une clef USB car l'iso est hybrid, donc un simple coup de "dd", et me voilà avec une clef USB bootable.
EDIT: hé bien non, je n'y suis pas allé, pas les moyens, trop de boulots.
Vous pouvez donc trouver dans ce dossier les ISO de Debian Wheezy (ou Debian 7), sorti ce 5 mai 2013 (aujourd'hui même donc), pour les architectures amd64 et i386, ainsi que leur .torrent respectif.
Ainsi, j'ai donc tout télécharger en bittorrent, et je met donc à disposition aussi par le biais du service Web tous ces iso, alors qu'en plus de ça, je continue d'uploader (là, j'ai un peu réduit, j'ai mis à 3 Mo/s en up)
Vive Bittorrent :)
@TODO:
TL;DR
Une nouvelle solution libre de monitoring, mais bien plus élaborée.