Tixlegeek's DevBlog Code, Gringo, Silicium

qrcode

[T-Watch2020] Framework ESP-IDF Intro:Notes de développement

Hey! :D

J'ai commandé une ttgo twatch2020 il y a quelques mois, et, j'en ai profité pour suivre les conseils de l'ami Tobozo, et me forcer à utiliser Arduino (que j'exècre pour des raisons stupides, mais j'assume)

Ça a duré quelque temps, mais, rapidement, j'ai eu envie de coder un framework en pure C pour ESP-IDF. Le travail est conséquent, mais, j'aime ça, alors je le fais (en plus, personne ne l'a fait, et je suis sur que ça va intéresser des gens.)
Je vais m'efforcer de vous expliquer mon cheminement, et de vous donner un maximum de détails! (encore un conseil qui vient de tobozo).


 

Lire la suite...

qrcode

[CONFINEMENT] Supporter Discord

Salutations!

Une petite note rapide pour vous partager un petit truc qui me sauve la vie en ces temps de confinement, et de télétravail. Contexte:



Je donne des cours de réseau/maths dans un lycée. Pour gérer les cours on utilise les mails, et Discord.  En effet, tous les élèves ou presque savent s'en servir, c'est pratique, multi-plateforme, et ça ne crash pas trop souvent. Bref. Il faut que j'utilise discord si je veux pouvoir faire mon boulot.

Le problème, avec Discord, c'est que c'est une saloperie de malware. J'exagère.... un peu. Il fonctionne en tache de fond, il modifie le comportement de votre ordinateur sans vous le dire, et, il vous est impossible de contrôler son comportement sans faire des manipulations. Bref, c'est probablement une poule qui ressemble à un malware. Pour l'utiliser, voilà ce que je fais:

Hygiène de base

On me traitera de parano, soit. Peu me chaud. La parano, c'est une illusion, en fait, on parle d'hygiène. Dire qu'avoir un hygiène informatique irréprochable, c'est de la parano, ça reviens à dire que ceux qui se lavent sont sales.

  • Sur périphériques mobiles:
    • Les caméras sont scotchées. Quand j'en ai besoin, je les déscotche.
    • Quand je n'en ai pas besoin, je me force à ne pas le prendre.
  • Sur périphérique fixe:
    • Quand je n'ai pas de discussion à avoir, je débranche mon micro.
    • Je n'ai pas de webcam, et, si j'en ai besoin (jamais) j'en branche une.
  • Sur tous les périphériques:
    • Je n'installe pas de trucs chelous.
    • Je fais des mises à jour.

Voilà pour la base. Enfin, la mienne, vous êtes libres et dotés d'un libre-arbitre qui n'appartient qu'a vous.

Tuer Discord

Un comportement que je déteste chez Discord, c'est qu'il reste en tache de fond quand on le quitte. Ça me met hors de moi pour plusieurs raisons:

  • Il est manifestement un adware.
  • Il me tutoie.

Du coup, j'ai fait un script bash pour le tuer complètement, sans lui laisser une chance de minauder:


#!/bin/bash
ps aux | grep discord | grep -v grep | awk '{print "kill -9 " $2}' | sh

  Ce script récupère la liste des processus (dont le nom contient) discord, et, les tue. Une optimisation serait d'envoyer automatiquement un mail aux équipes de discord avec "FUCK YOU BITCH" dedans.

Subsidiairement, j'utilise le même script pour tuer Steam, qui a les mêmes désavantages que Discord...

HppHckng!

 

qrcode

[CONFINEMENT] J'ai fait un remix de We are number one (lazy-town)

Salutations!

On s'occupe comme on peut durant le confinement. Pour ma part, j'ai ressorti lmms pour faire un peu de musique. J'ai décidé de reprendre We are number one de Lazy-town. Un choix qui ne repose sur aucune base solide.

Voilà ce que ça donne:

Voilà voilà. Bon confinement, et, hpphckng!

qrcode

Un Outil/Jouet pour tester les motifs d'interférence.

Salutations!

Hier, avec dans l'idée de développer de nouveaux projets, je me suis lancé dans la création d'un outil/jouet permettant de manipuler et visualiser les motifs d'interférence générés par plusieurs émetteurs.

Au début, je n'avais pas prévu de le distribuer (du coup il est moche et pas commenté), mais, le petit effet qu'il a eu sur twitter m'a poussé à le rendre publique!

Lire la suite...

qrcode

Cacher un dossier qui traine sur un serveur WEB

Salutations!

Si vous êtes dans le milieu de la sécu, vous devez sans-doute connaitre ce sentiment particulier de mépris envers un technicien, quand, après un scan d'arborescence par bruteforce (Dirbuster, etc..) ou tout simplement après un DORK lors de la phase de recon, vous tombez sur un dossier en directory listing, sur un serveur publique, avec des mots de passe, des clefs ssh, ou des dumps SQL dedans.

Effectivement, ça peut être utile (mais, pas en prod! D:) sur un httpd perso mutu, de pouvoir stoquer des choses de temps en temps (photos, documents sans importance stratégique, tool php bien sécurisé...) et bien je vais vous apprendre à le faire correctement!

Lire la suite...

qrcode

Code source de l'ordinateur de guidage Apollo 11

Salutations!

Sur internet, on trouve de tout. Quand je trouve un truc étrange ou sympa, je le met de coté, et, aujourd'hui, je ressort un lien cool de mon chapeau à liens cools.

Maintenant, vous le saurez, le code source de l'ordinateur de guidage d'Apollo11 est sur github.

Code source original de l'ordinateur de guidage Apollo 11 (AGC) pour le module de commande (Comanche055) et le module lunaire (Luminary099). Numérisé par les gens du Virtual AGC et du MIT Museum. Le but est d'être un repo pour le code source original d'Apollo 11. En tant que tel, les PR sont les bienvenues pour tous les problèmes identifiés entre les transcriptions dans ce référentiel et les scans source originaux pour Luminary 099 et Comanche 055, ainsi que pour tous les fichiers que j'ai pu manquer.

(https://github.com/chrislgarry/Apollo-11)

En tout premier lieu, on notera que le chef de ce projet, est Margaret H. Hamilton, une très populaire "une informaticienne, ingénieure système et chef d'entreprise américaine. " dont on entends parler pour ses diverses contributions au monde de l'information.

Moi, ce qui me fascine le plus, c'est le code assembleur. En tout honnèteté, je n'y ai rien compris, et, il faudrait lire la doc du module lunaire pour le comprendre (chose étrange à dire). Un extrait pris au hasard:

 

# NORMAL EXIT:     ENDEXT
#
# ALARM/ABORT:  ALARM -- BAD REFSMMAT -- CODE:220
#       OPERATOR ERROR IF V47 SELECTED DURING ANOTHER EXTENDED VERB.
#
# ERASABLES
# USED: SAMPTIME        (2)     TIME OF :ENTER: KEYSTROKE
#       AGSK    (2)     GROUND ELAPSED TIME OF THE AEA CLOCK :ZERO:
#       AGSBUFF (140)   CONTAINS AGS INITIALIZATION DATA (SEE :OUTPUT: BELOW)
#       AGSWORD (1)     PREVIOUS DOWNLIST SAVED HERE

        EBANK=  AGSBUFF

        BANK    40
        SETLOC  R47
        BANK

        COUNT*  $$/R47

AGSINIT CAF     REFSMBIT
        MASK    FLAGWRD3                # CHECK REFSMFLG.
        CCS     A
# Page 207
        TC      REDSPTEM                # REFSMMAT IS OK
        TC      ALARM           # REFSMMAT IS BAD
        OCT     220
        TC      ENDEXT

NEWAGS  EXTEND
        DCA     SAMPTIME                # TIME OF THE :ENTER: KEYSTROKE
        DXCH    AGSK            # BECOMES NEW AEA CLOCK :ZERO:

REDSPTEM        EXTEND
        DCA     AGSK
        DXCH    DSPTEMX
AGSDISPK        CAF     V06N16
        TC      BANKCALL                # R1 = 00XXX. HRS., R2 = 000XX MIN.,
        CADR    GOMARKF         # R3 = 0XX.XX SEC.
        TC      ENDEXT          # TERMINATE RETURN
        TC      AGSVCALC                # PROCEED RETURN
        CS      BIT6            # IS ENTER VIA A V32
        AD      MPAC
        EXTEND
        BZF     NEWAGS          # YES, USE KEYSTROKE TIME FOR NEW AGSK

        EXTEND                  # NO, NEW AGSK LOADED VIA V25
        DCA     DSPTEMX         # LOADED INTO DSPTEMX BY KEYING
        TC      REDSPTEM -1             # V25E FOLLOWED BY HRS.,MINS.,SECS.
                                # DISPLAY THE NEW K.
 

Voilà, c'est un petit bout d'histoire que voilà, et, je trouve ça extrèmement cool que ce genre de chose devienne publique, et aussi facilement accessibles.

 

Apollo-11 Source Code

 

Hpphckng!

qrcode

Je n'ai pas vraiment de téléphone... PLOT TWIST! (non)

Salutations!

Ce soir, j'ai décidé de partager un petit morceau de philosophie de salon IRC. Au moment ou j’écris cet article, on est en 2020: Le monde entier - ou presque - tourne autour des téléphones. Difficile de faire sans, puis-ce que de plus en plus de services incontournables délaissent peu à peu leurs site-web, au profit d'applications qu'il faut installer sur des terminaux mobiles compatibles.

Pour ma part, je suis un gros con apathique. J'utilise twitter tout au long de la journée, pour discuter et m'informer (c'est un peu un challenge en sois) mais, j'utilise assez peu le reste de la sphère sociale. J'ai un compte facebook qui me sert à discuter, mais, uniquement sur PC, je vais parfois voir ce qui se passe sur IRC et Discord, Reddit... C'est à peu près tout. J'ai un compte Instagram qui me servait à partager mes dessins à une époque, mais, j'aime pas trop ça. J'allais oublier, mais, je suis aussi un gros consommateur de Youtube (oui :/) et, les mails, je ne les utilise que via un PC.

Le techos qui s'en fou

Bref, tout ça pour dire que mon dernier téléphone "Milieu de gamme" était un Wiko Pulp 4G. J'ai précommandé un Librem-5, et, je me suis glissé dans le batch d'Avril 2020 (on verra!). Je ne sais plus à quelle époque j'ai précommandé le Librem, mais, ça doit faire un bail...quelques années? Entre temps, le wiko a cramé. Du coup j'ai traficoté mon ancien Nexus 5 qui a refonctionné 1 mois, mais, rapidement, j'ai du investir de l'argent dans un téléphone temporaire. Et, depuis, mon téléphone de tous les jours est un "Smartphone android" de la marque "Teeno", qui m'a coûté la modique somme de 33€.

D'un point de vue fonctionnel, c'est clairement la pénitence, enfin, ça le serait si j'étais obligé de rester scotché à mon téléphone, mais, par chance, je suis doué de libre arbitre. Pour vous décrire succintement mon utilisation journalière:

  1. Déverouiller le téléphone.
  2. Tuer les applications en cours.
  3. Le frapper deux fois contre une surface ferme pour réactiver le son.
  4. Ouvrir [Twitter OU Firefox OU Play Musique]
  5. Attendre quelque secondes, en tripotant l'écran pour ne surtout pas qu'il se remette en veille avant le lancement complet de l'application, en évitant les zones "dangereuses" de l'écran.
  6. Utiliser mollement l'application en repoussant les crises d'angoisses.
  7. Finir par fermer l'application quand la RAM est pleine, ou qu'un truc la faite buguer.
  8. Tuer les applications en cours.
  9. Mettre en veille.

Autant vous dire que ce cérémoniale complètement con a des désavantages... Mais pas que! Certains ne seront pas dupe, et auront vite compris que la seule chose qui me sépare d'une "expérience utilisateur optimale", c'est 300€ et 1h de mon temps, soit. Pour autant, rien jusqu'a présent ne m'a vraiment poussé à changer de téléphone, et pour cause:

  • Le son ne fonctionne pas réellement? De toute façon, le son il est pourri... Quand j'ai quelquechose à écouter, je met un casque. Pour tout le reste, le vibreur est une option qui me contente parfaitement. Alors, du coup, c'est vrai que je ne peux pas utiliser mon téléphone comme réveil... Si ça vous choque, je porte votre attention sur le fait qu'un téléphone n'a aucune raison de tenir lieu de réveil. Un peu de concentration! :p

 

  • Les applications sont toute molles, oui, mais, au moins, elles ne m'empoisonnent pas l'existence. Sur mon dernier téléphone "utilisable", je désactivait la plupart des notifications.

 

  • Les applications crashent rapidement? Parfait, je n'aime pas rester scotché trop longtemps. Si j'ai un truc long à faire, de toute façon, je le ferai sur PC.  Dans le pire des cas, je kill tout et je recommence.

 

  • L'utilisation des applications est une peine indicible? De toute façon, c'est le cas. Vous, vous ne vous en rendez pas compte, mais, je remarque un truc génériquement vrai: l'intégralité des gens qui utilisent un smartphone ont l'aire de galérer un maximum.

Je vous l'accorde, je suis un peu de mauvaise foi... Parfois j'aimerai prendre une belle photo/vidéo, mais, avec mon téléphone, il vaut mieux que j'oublie. Pour le coup, c'est vrai, je vis un peu dans le déni, mais, j'assume.

Et, finalement, ça donne quoi?

Rien de transcendant. Je ne vais pas me mettre à vous dire que, la technologie c'est mal, et qu'un 3310 c'est le must. Je comprend parfaitement l'intéret des services et réseaux actuels.

Pour autant, je ne vais pas me priver de vous dire que, c'est clairement parti en couille, cette histoire de smartphone. Je vais aussi vous dire que, oui, on peut très bien vivre un peu en retrait du réseau, sans pour autant tout abandonner, et que, si la seule façon de le faire, c'est d'accepter d'avoir un téléphonne pourri du cul, alors en plus, c'est économique.

Je risque de passer pour un anti-apple, et pour cause, c'est pas mon truc, mais, j'ai l'impression que les gens ont appris à penser qu'un smartphone à 1SMIC, ça les vaut... Bien, factuellement, non. Vous vous trompez. Et, pour paraphraser ce bon gros George:


 

Voilà, je ne sait pas trop ou je voulais en venir avec ce blog. Je crois que j'avais des choses à dire, sans pour autant que ça ait réellement du sens. Si j'en suis venu à ces conclusions, alors peut-être est-ce une partie de la vérité à propos de notre usage de la technologie.

Quoi qu'il en soit, j'ai un téléphone pourri, la rentabilité est maximale, et, franchement, je le vis très bien.

HppHckng!

qrcode

Mon NAS fait maison: RAID10, sous OpenMediaVault

Salutations!

J'ai monté un petit NAS récement. Il y a énormément de gens qui parlent de leur expérience sur le net... Je ne vais donc pas vous détailler toute la procédure, mais, je me suis dit que j'allais vous présenter succintement mon petit bricolage. Le prochain article sera un STRESS TEST RAID D:

Pour ceux qui se posent la question, un NAS est un appareil permettant de fournir un espace de stockage en réseau (SMB/NFS/FTP/SSH...). Pour ma part, j'ai décidé de sacrifier de l'espace, au profit d'un RAID 10. Dans ce cas, le RAID va répartir les données sur 4 disques de 500Go (parce qu'ils n'étaient pas chers <3 ) de manière à avoir une double redondance, mais en perdant la moitié de l'espace total. Pour plus d'info, allez sur la page wikipedia qui est super bien faite.

La config

Un pote m'a récement filé une ancienne tour à lui. Dedans, j'y ai trouvé une jolie petite carte mère avec 4 ports SATA, un port IDE, 4Go de RAM, et un petit i2. (il m'a aussi filé un vieux nas, qui fera peut être l'objet de plus amples investigations plus tard) Ce sera donc la base. Je n'ai pas besoin de beaucoup de ressources, et elle dispose de tout ce dont j'ai besoin.

Pour les disques, j'ai 4 disques à plateau 2.5" de 500Go, que je vais bien entendu brancher en SATA. Mais, il me faut un 4ème disque pour installer un OS dessus. Heureusement, j'ai des vieux disques IDE qui trainent, dont un de 40Go qui fera l'affaire. Comme la carte mère dispose d'un connecteur IDE, c'est la solution la plus simple. Certains diraient que j'aurais pu installer le système sur un disque USB, mais, que voulez vous, j'aime bien les vieux trucs qui font "grat grat".(avis non motivé scientifiquement)

Concernant le réseau, on est moins bien lotis. Le port ethernet intégré à la carte, c'est du 100Mb. Pour ma part j'essaye de rester en 1000Mb pour mes équipements, parce qu'on est pas dans les années 2000. Du coup, je vais y fourrer une carte Ethernet PCI 1000Mb parce que j'ai ça qui traine un peu partout dans les coins de mon atelier.

Pour finir, un détail qui a son importance: Je voulais mettre tout ça dans une jolie petite tour toute simple, et, pour faire sérieux, j'ai décidé d'investir là dedans:

En gros, c'est une baie SATA 4x2.5" qui s'enfile dans un slot standard sur une façade de tour. Oui, je sais, je n'avais pas besoin de ça mais, j'voulais faire comme les grands.
Déjà: c'est pas donné. J'ai investi 49€ de mon précieux argent là dedans, et j'en suis encore un peu aigri, mais, ça fait le taf. C'est du plastoque, ça tremblotte un peu, mais dans l'ensemble, ça fonctionne, et c'est joli... Je ne suis pas sur que ça tienne très longtemps, mais, j'imagine que je n'aurai pas à changer de disque trop souvent nonplus.

J'ai aussi investi 30€ dans la caisse la moins cher de chez Amazon, n'ayant pas pu trouver moi-même une petite tour.

le RAID 10

Tout l'intéret de ce NAS va résider dans le fait qu'il soit sûr. Pour faire ça, je vais les monter en RAID 10, et, en faisant ça, réduire l'espace disponible sur les 4 disques de moitié. En effet, les données seront redondées en 1/1, en plus d'être réparties sur deux disques physiques. Si un disque lache, je pourrai "reconstruire la grappe" a partir des données disponibles sur les 3autres.

Si deux disques viennent à merder en même temps, deux cas de figure se présenteront:

  1.  J'ai de la chance, et je perd deux disques dans le meme ghost
    Dans ce cas , pas de soucis: je change les deux disques, la grappe se reconstruit, et on n'en parle plus.
  2. J'ai pas de chance, et, les deux disques ne sont pas sur le même ghost
    Là, c'est la baise. La moitié des data manque, et, la reconstruction sera impossible. Foutus disques à con.

C'est donc une sacré assurance, mais, qui se fait au détriment de l'espace de stockage total disponible. (moi ça me va)

Budjet final

J'ai pu profiter d'un très sérieux bon plan, puis-ce que j'ai pu avoir les 4 disques à 15€ pièce. J'imagine que tout le monde n'a pas cette chance, mais, le monde est fait ainsi. Étant donné que la base était gratos (Carte Mere + RAM + Alim (+proc)), ça fait 60€. Du coup, j'ai investi, comme je vous le disait, dans uen caisse à 30€ et une baie SATA à grosso-modo 50€.

J'en suis donc à 140€

 

Le Système

Personellement, je suis un utilisateur exclusif de GNU/Linux (sauf quand on fait un TP Windows avec les élèves...) et je tiens à le rester. Bon, on ne va pas se le cacher, les OS pour NAS "fait maisons" sont rarement propriétaires.

Du coup, j'ai regardé un peu la NASospher, et, j'ai pu voir que les deux distros qui me faisaient le plus de l'oeil, c'était FreeNas (base freeBSD) et OpenMediVault (base Debian).

Puis-ce que je suis moi-même debian-based, j'ai opté pour OpenMediaVault, pour un premier essais. Je prévois d'essayer freenas, mais, sur un futur projet.
 

 

Qu'est-ce que ça donne?

Et bien, pour le moment, ça donne cette monstruosité faite de bric et de brocs. Enfin, ça, c'est avant que je foure tout dans une jolie petite caisse en tek Antek.
 

--> photo à venir <--

Pour le moment, j'en suis là. Je vous donnerai des updates quand j'en aurai plus à montrer.


Voilà! J'espère que ce premier article à propos du NAS vous aura donné envie de démonter des trucs pour en fabriquer d'autres!  Dans les prochains articles, je vais le terminer, faire des photos, et, on passera au STRESS TEST RAID ou je vais arracher les disques durs pour voir comment ça couine.

Hpphckng!

qrcode

Mes anciens projets, de mon ancien Blog

Salut!

Je vais faire des articles décrivant mes anciens projets. Pour ceux qui me lisent depuis peu, j'ai eu, entre 2007 et 2017, un blog plutôt bien suivi, ou je partageais mes divers bricolages. Ce blog est parti quand, il y a quelques années, j'ai décidé de recommencer sur de nouvelles bases. Finalement j'ai changé d'avis (et de nom de domaine) pour recommencer l'aventure.

Je vais donc m'efforcer de retrouver un maximum d'infos sur des choses que j'aurais bricolé pendant ces années plutot créatives.

c'est en cours, du coup je ne sais pas comment va s'organiser tout ça a la fin, je vais m'efforcer de faire quelquechose de propre.

qrcode

Une LootTable en BASH, pour vos jeux... En bash.

Salut!

Je suis un gros fan de BASH. Il ne se passe pas une journée sans que je trouve une bonne raison de scripter quelque-chose. Parfois, je me lance des petits défis un peu ridicule, comme, écrire un jeu...

C'est exactement ce genre de petit projet qui m'a amené à créer, il y'a quelque jours, un algorithme de LootTable en BASH, que voici:


#!/bin/bash
# fonction qui s'utilise comme ceci:
# loot ./itemlist.csv $player_level
function loot() {
  # déclaration d'un tableau qui va stocker les items
  declare -a lt
  # on lit la variable csv "$1"
  while read i; do
    # On parse le CSV: n=nom, c=chances, l=niveau
    IFS=',' read -r n c l <<<"$i"
    # Si le niveau du joueur est compatible avec celui de l'item
    if [[ $l -le $2 ]];then
      # On l'ajoute $c fois au tableau
      for j in `seq 0 $c`;do lt+=("$n");done
    fi
  done <<< "$1"
  # On choisi un item au hasard dans le tableau.
  echo ${lt[$RANDOM % ${#lt[@]} ]}
}

Comme vous pourrez peut-être le remarquer, sa taille est minimale, mais, ne vous y trompez pas; sa distribution est mathématiquement juste. Pour le prouver, faisons un petit test:

Alors, en premier lieu, on génère une variable qui contiens les informations sur les items qu'on souhaite lootDropper. Le format, est celui précisé en commentaire, à savoir: nom, chances, niveau requis.(c'est donc du csv...)

#!/bin/bash
test_loot=$(cat <<EOF
rien,200,1
capsule,50,1
bouteille,10,2
pièce en argent,20,2
pièce en or,5,3
gemme,5,3
EOF
)

On peut alors utiliser trivialement la fonction comme ceci: loot test_loot 10 .

Du coup, pour faire notre test, on va réaliser 100 tirages sur ce set, et analyser les résultats. et, pour ça, on va continuer a utiliser du BASH, parce que, on est velu.

#!/bin/bash

# On jette les dés 100 fois
for i in `seq 0 100`; do
# On enregistre le résultat dans /tmp/results
loot "$test_loot" 10 >> /tmp/results
done;
# On dresse les statistiques de distribution pour chaque item.
cat /tmp/results | sort | uniq -c

Ce qui nous donne un résultat qui ressemble à celui là:

      7 bouteille
     18 capsule
      2 gemme
      8 pièce en argent
      3 pièce en or
     63 rien

Et on constate que la distribution est bonne.

Voilà.

HppHckng!