C'est le mal. C'est juste le mal. Et je vais vous expliquer pourquoi tous les problèmes d'indentation du monde sont dus à ces saloperies de tabulations.
Le premier élément qui entre en jeux c'est que la largeur d'une tabulation est CONFIGURABLE. Je peux dire à certains éditeurs que je veux 4 caractères, je peux dire à d'autres que j'en veux 2, ou d'autre 8.
Moi tout seul ça n'aurait aucun intérêt de faire ça, mais je suis pas tout seul au monde. Potentiellement, quelqu'un va ouvrir mon code avec un éditeur configuré différemment du mien et il va trouver ça illisible.
Et ça c'est dans le cas où il est possible de le configurer car parfois ce n'est pas possible (je pense à l'affichage des forges comme Github ou Gitlab par exemple.)
Le second élément, c'est qu'en utilisant la tabulation comme méthode principale d'indentation, on peut se retrouver FORCÉ d'utiliser des espaces pour l'alignement du code. Par exemple sur l'image linkée, je chaîne les méthodes de mon objet en alignant les T_OBJECT_OPERATOR successifs. À la ligne 6, avec des tabulations je dois rajouter un espace pour corriger l'alignement. Et PAF on se retrouve avec une indentation mixte. Et si votre langage se base sur l'indentation pour fonctionner, ça marche pas (Python 3 aime pas du tout ça d'ailleurs)
Le dernier élément (et qui a à voir avec le fait qu'une tabulation ce n'est pas FAIT pour indenter mais pour tabuler) c'est cette chose méconnue qui s'appelle le tabstop. Avec une tabulation réglée sur 4 on a un tabstop tous les 4 caractères donc 0, 4, 8, 12, 16, 20 etc.
Dans l'image linkée à partir de la ligne 8 j'aligne les valeurs de mon tableau et on voit bien en comparant que la ligne 9 a une seule tabulation après la clé là où la ligne 10 a… 3 espaces. Parce que la tabulation va jusqu'au tabstop. Dans un éditeur ou une forge qui ne supporte pas les tabstops ou qui a une configuration différente, la ligne 9 aura un caractère de trop parce qu'une tabulation fera 4 de long et pas 3. Donc pour aligner des trucs correctement on doit à nouveau forcément utiliser des espaces.
Au final soit on utilise des tabulations à configurer selon les éditeurs de chacun⋅e, on compense les erreurs avec des espaces et on aligne les éléments aussi avec des espaces. Soit on utilise toujours des espaces, ça s'affiche partout pareil et on ne configure rien nulle part si ce n'est le raccourci pour insérer X espaces quand on appuie sur la touche tab du clavier parce que ça va quand même plus vite.
Bref, au final c'est peut-être pas pour rien si les communautés PHP, Python, Java ou JS recommandent 4 espaces et si côté HTML et Ruby on recommande 2 espaces. :-)
OWS a bossé avec la célèbre application de messagerie mobile WhatsApp pour y utiliser leur protocole TextSecure.
Pourquoi c'est une bonne nouvelle ? Parce que WhatsApp a déjà des millions d'utilisateurs qui, du coup, voient la protection de leur vie privée faire un bond en avant.
Mais en même temps, WhatsApp reste une appli propriétaire et même si OWS les a aider à implémenter leur protocole et les valident, on ne peut pas savoir si ils vont pas rajouter un truc pourri dedans.
Un github-like en Go (apparemment assez léger pour tourner sur un raspberry) et sous licence MIT.
Je me met ça de côté pour le boulot (jai besoin de l'authentification LDAP), ça semble très prometteur.
Mon environnement de bureau c'est XFCE. Il est bien, léger, suffisamment configurable pour faire ce que je veux.
Mais il manque un petit quelquechose au gestionnaire de fenêtre, un tout petit truc qui me prive d'une impression de fluidité : Les transition. Un bête changement progressif et presque instantané de l'opacité d'une fenêtre qui s'ouvre ou se ferme, d'une tooltip qui apparait, etc…
Compton est un fork parait-il plus stable de xcompmgr qui fait juste ça (et qui du coup est léger comme une plume)
Il faut juste un peu de configuration (trouvée sur le net et adopté instantanément) : https://butt.leetchee.fr/public.php?service=files&t=533f148aaa228f97c82e14b3a3810efe
Et maintenant mon XFCE est parfait.
Des fois j'aime GNU/Linux <3
« I’d always hoped we were more virtuous than the mainstream, but it turns out we just didn’t have enough power to cause much harm. Our ingrained sense of victimization has become a perverse justification for bullying. That’s why I’m calling time on nerd culture. It’s done wonderful things, but these days it’s like a crawling horror of a legacy codebase so riddled with problems the only rational decision is to deprecate it and build something better. »
What is Jessica’s sin in this story?
Chez IBM ils s'ennuient un peu. Alors ils cherchent des occupations. Et ils trouvent que le JSON c'est un format un peu trop facile à gérer alors du coup ils développent de quoi transformer ces beaux petits flux JSON en bon gros XML qui tache.
WTF.
À la maison j'utilise ArchLinux et pour les mises à jours j'ai pris l'habitude de taper sudo pacman -Syu
Du coup au boulot avec ma Debian-like (Ubuntu, mais ça pourrait aussi bien être Mint ou Debian) ça me fait chier de taper sudo apt-get update && sudo apt-get upgrade
Vous allez me dire que je pourrais faire un alias, mais c'est moins drôle qu'utiliser un wrapper ^_^
Donc pacapt est une interface cli pour quelques gestionnaires de paquets afin d'avoir les mêmes commandes qu'avec pacman :
pacman by Arch Linux, ArchBang, Manjaro, etc.
dpkg/apt-get by Debian, Ubuntu, etc.
homebrew by Mac OS X
macports by Mac OS X
yum/rpm by Redhat, CentOS, Fedora, etc.
portage by Gentoo
zypper by OpenSUSE
pkgng by FreeBSD
cave by Exherbo Linux
Je viens de perdre 30 min à chercher pourquoi il manquait des icônes dans ma barre de notification.
Des trucs triviaux comme redshift ou radiotray mais aussi des trucs plus chiants comme Pidgin ou (malheureusement) Skype que j'utilise UN PEU pour communiquer avec des collègues ou des clients.
Il se trouve que Canonical a fait un truc pour « améliorer l'expérience utilisateur » qui s'appelle les Indicators et fourni un service dont le but est d'intercepter les applications qui font une icône dans la zone de notif et de les afficher dans la zone des Indicators.
Et quand on utilise pas leur cochonnerie d'Unity ou GNOME (qui a du s'adapter j'imagine) il faut penser à couper le démarrage de 'indicator-application-service'
Et c'est comme ça qu'on fait de GNU/Linux un système accessible ?
" - Cette interface est tellement simple que votre mère pourrait l'utiliser.
Juste parfait ^_^
Chiffrement, vie privée, non conservation des logs, sécurité, sha3, aes, rsa, ssl, financement participatif.
Ils sont jolis ces mots hein ? Vous savez ce qu'il manque ? Libre.
Et du coup la liste est plutôt celle ci :
Boite noire, gruyère, privateur, espionnage, pot de miel, arnaque, surveillance.
Pensez plutôt à Mailpile : https://www.mailpile.is/
J'en suis là. À rêver sur le fait d'écrire des tests pour les applis que je développe au boulot. Mais « on a pas le temps, il faut livrer pour que le client paie. »
Et bien sûr, le développement de modifications ralenti.
Au lieu de tous pleurer que Mozilla commençait à se verrouiller quand on a appris qu'ils arrêtaient le support des instances persos de Sync à partir de Firefox 29, ben on aurait mieux fait de nous renseigner un peu !
Il s'avère qu'en fait, ils ont juste repris de zéro pour intégrer Sync à Firefox Accounts.
Donc à partir de Firefox 29, pour avoir son instance de Sync, il faut utiliser Fxa Auth Server. C'est écrit en Node.js et ça a l'air infiniment plus simple à installer.
Mozilla <3
Un gestionnaire de mots de passe qui les stocke dans une arborescence de fichiers textes chiffrés avec GPG.
Avec xclip il stocke le mot de passe dans le presse papier pendant 45sec.
Avec pwgen il génère directement de nouveaux mots de passe.
La base étant un simple dossier, on peut la mettre sur le cloud (je l'ai tout de même mise dans un encfs pour cacher l'arborescence)
Il y a des scripts de conversions pour les bases d'autres gestionnaires: http://www.zx2c4.com/projects/password-store/#migration
Il y a une extension pour le navigateur libre Firefox : https://github.com/jvenant/passff#readme
Et au bout de 30min d'usage, j'ai spontanément commencé à l'utiliser également comme… bloc note.
Ça doit être le truc le plus KISS que j'ai vu depuis shaarli.
« You are a teacher taking a group of schoolchildren to the local library.
You're all in the library, sitting around a table.
You are the Kernel.
You have a notebook that you can write things in (your cache).
The children are userspace.
The table is RAM.
The bookshelves are permanent disk storage.
If a child wants to read a book, he asks your permission.
You look up the books location from the library records.
You: "Yes you can read the book. The book is located here. Go fetch it."
You note this is a popular book, so note the location in your notebook for faster response.
The child toddles off and fetches the book.
Child: "I have the book. Can I have some table-space so I can sit down and read it."
You: "I'll clear some space and assign it to you. There you go."
Time passes. Another child has a book to read, but no space to sit down.
You: "Child #1, you're taking too long, Take your book and stand over there for 5 minutes while others use your table-space."
and so forth. »
C'est quand même dommage qu'il préfère démissionner plutôt que réellement s'excuser de son homophobie (non, faire un billet disant que Mozilla est engagé pour l'égalité et qu'il va respecter ça, ce n'est pas une excuse.)
Bref, espérons que le/la prochain⋅e conviendra mieux.
La même avec MariaDB (ou MySQL):
SELECT type, SUM((place = 'home')), SUM((place = 'school')), … FROM reports GROUP BY type
Comme indiqué ici: http://stackoverflow.com/a/17086564, c'est parce que true casté en int vaut 1 (et false vaut 0)
Pour générer des mots de passe suffisamment longs et pourtant mémorable, je suis les instructions de XKCD: http://xkcd.com/936/
Avant, j'utilisais http://correcthorsebatterystaple.net/ mais certains ont évidemment plus de facilité avec des mots français.
J'ai donc copié le code, remplacé la liste de mots (Les 10 000 mots de plus de 3 lettres les plus fréquents) et viré le JS vers google analytics.
Je traduirai l'interface aussi quand j'aurais le temps.
Une application de messagerie mobile chiffrée, en partie libre et open-source (ils libèrent le code petit à petit) une politique de confidentialité claire: « We never share your data with anyone. No. »
Que demande le peuple ? ^_^
Plus: Ils expliquent leur protocole https://core.telegram.org/techfaq et proposent 200.000$ à qui trouvera un trou.
Je me suis sacrément pris le chou ce matin pour faire marcher correctement mon NAT sur mon nouveau serveur.
J'ai la situation suivante:
HV0 contient trois containers OpenVZ (VZ0, VZ1, VZ2)
VZ0 est un reverse proxy, VZ1 et VZ2 des LNMP (Linux, Nginx, MariaDB, PHP) qui hébergent respectivement site1 et site2
HV0 a donc une règle iptables qui redirige les connexion sur le port 80 vers VZ0:80
Problème:
Impossible d'atteindre site1 depuis VZ2 ou site2 depuis VZ1.
Explication:
C'est du au fait que lors d'une requête (mettons depuis VZ1), les paquets sont envoyés sur l'ip publique de HV0 qui fait la redirection de port correctement. On a donc des paquets dont la source est VZ1 et la destination VZ2.
VZ2 reçoit, traite la requête et envoie la réponse à VZ1. Les paquets de réponse ont pour source VZ2 et destination VZ1.
Mais VZ1 en voyant arriver les paquets de VZ2, n'en fait rien de particulier, il a posé une question à HV0, pas à VZ2, donc il s'attend à une réponse de HV0.
Solution:
Il faut donc qu'au moment de la redirection, HV0 modifie les paquets pour qu'ils indiquent qu'il est la source.
Ainsi, VZ2 répondra à HV0 qui transmettra à VZ1.
Les joies d'iptables ^_^ (et apprendre la nouvelle syntaxe d'nftables ça va être marrant aussi)
Bon à savoir !
(Bon ma clé expire en 2017, mais après l'avoir créée je m'étais dit que ça me ferai bien chier au moment de son expiration.)
Par ailleurs, ma clé a l'identifiant 0xc2f8a5c7 et duckduckgo a un bang !pgp
Quand on est une meuf à Epitech.
Vu que je vois des gens parler de 7-zip dans mes flux une petite info pour ceux qui ne le sauraient pas:
7zip utilise les algo de compression LZMA et LZMA2 et un conteneur orienté windows; le 7z
Chez les Unix-likes c'est mieux d'utiliser xz qui compresse en LZMA2 avec le format xz et qui supporte directement les métadonnées des systemes de fichier Unix.
En plus, il est utilisable directement avec tar -J (ou tar --xz)
J'utilise parfois un casque USB et j'en avais assez d'ouvrir à chaque fois pavucontrol pour changer la sortie audio de mes logiciels alors j'ai trouvé ce script.
Il défini le sink par défaut (pour les nouvelles applications) et déplace toutes les applis déjà lancées vers ce sink. Quand on le relance, il fait pareil mais avec le second sink.
Je l'ai un peu modifié pour qu'il soit plus simple de définir quels périphériques on veut intervertir.
Il n'y a plus qu'à définir un raccourci clavier pour le lancer.
"Il est tellement mieux que l'autre. Haha quand je pense à tous ces noobs qui utilisent le premier et qui disent qu'ils sont développeurs. Trouvez vous un vrai langage" - Un vrai développeur pas élitiste.
Ça me rend toujours triste quand on est obligé de faire un foin pour un truc tellement minime que ça devrait passer tout seul.
Un changement tout petit, mais vital pour les catégories discriminées et important pour leurs alliés.
Deux lignes (pour ne pas dire deux mots, parce que git raisonne en lignes) dans un commentaire, c'est quoi ? Ben c'est suffisant pour que les dominants imposent leur point de vue de dominant et refusent ce changement. C'est suffisant pour que les dominants en profitent pour poser leur couilles allégoriques sur la table (ou n'importe quel autre symbole du pouvoir qu'ils estiment posséder) et disent: « Non, j'ai décidé que tu n'existais pas. »
Apparemment, quand on formate une clé USB, il faut bien faire attention à sélectionner la bonne taille de blocks. Si on prend trop petit, les performances sont flinguées.
Si quelqu'un a un article sur le pourquoi du comment, je veux bien. En attendant, voila un moyen de trouver quelle est la taille des blocks de votre périphérique.
C'est même dangereux puisque certaines régies ne surveillent pas les codes malveillants qui pourraient être envoyés aux internaute.
Et il y a PLEIN de ransomware qui passent.
Ça peut aussi s'appliquer à plein d'autres domaines AFK.
En fait au crédit mut' ils ont tout mis sur un seul ActiveDirectory et du coup Outlook suggère le nom de tous les employés du groupe. Et les banquiers neuneux ne vérifient pas qu'ils écrivent bien à la bonne personne. En gros, ça pourrait arriver à n'importe quel pécore qui se base uniquement sur l'autocomplétion pour envoyer un mail.
(j'ai fait du helpdesk dans deux banques et les gens qui gèrent notre argent ne savent pas se servir de leurs logiciels)
J'ignorais qu'OpenVPN était capable de forwarder les requêtes qui ne lui sont pas destinées :) via sebsauvage.net
Une doc CSS complète et intuitive !
Une regex pour valider correctement une adresse mail… (via sebsauvage)
Je suis en train de tester f.lux ( http://stereopsis.com/flux/ ), on verra ce que ça donne aujourd'hui
J'entends déjà les fanboys Apple crier au visionnaire…
Seb a sorti la version 0.0.28beta de Shaarli avec mon patch pour PubSubHubbub et un nouveau thème très agréable à l'œil.
Le mot clé secret pour avoir un support technique compétent.
J'aime bien la description de l'ingénieur efficace.
xkcd <3