logo Homepage
+  NewbieContest
Username:
Password:
  Voir les messages
Pages: [1] 2 3 ... 10
1  Divers / Informatique / Re : Instragram et ses "mécanismes" le: 23 Octobre 2023 à 13:46:09
Bonjour james14000,

Si une personne t'as bloqué, c'est qu'elle souhaite que tu ne puisses plus voir son activité. Continuer malgré cela de vouloir voir ladite activité est glauque.

Nous ne t'aiderons pas à comprendre ni contourner ces restrictions.
2  Divers / Informatique / Re : Cette requête n'est pas autorisée parce que le contrôle des autorisations de cer le: 23 Octobre 2023 à 13:40:26
Bonjour james14000,

Newbie Contest est un site de passionnés de challenges informatique et logique.

Je pense que tu auras plus de chance de recevoir une réponse en demandant au support de Facebook.

3  News / News du site / Re : Giga-news_pack-6.x.txt.exe le: 24 Juillet 2022 à 19:49:06
Super nouvelles ! Content de voir que ça bouge toujours ici 

Concernant l'indice de difficulté, la formule à l'air pas mal fonctionner, mais ça pourrait être cool d'inclure une notation de l'auteur  / des beta testeurs  / de la communauté  .

Par exemple spécial stockage, je considère que son niveau devrait  être similaire à Shell, clairement pas à La revanche.

A bientot o/
4  News / News du site / Re : Re : Épreuve, soumission et confinement le: 29 Octobre 2020 à 09:55:16
Je me demande à quoi servent les beta testeurs s'ils sont même pas capables de remonter une faute d'orthographe...

Il me semble qu'ils servent à rappeler aux admins de mettre les challs validés en prod 
5  Challenges / Aide Programmation / Re : Re : Prog - Chess Master - Sans défense le: 03 Juin 2020 à 17:18:43
Bonjour !

Salut !

Alors je suis au niveau 3, et le roi est en B2. Du coup, j'ai le choix de le déplacer vers la gauche ou vers le bas pour répondre correct à l'épreuve ? Ou bien ce "ou" doit être compris comme un "et" et du coup je doit le déplacer en A1 ? (Ce cas ne revient pas souvent).

Je ne suis pas sûr de la réponse, mais logiquement on doit pouvoir forcer le roi à aller en B1, A1 ou A2. Dans le doute, tu peux toujours choisir de forcer l'angle du plateau dans ce genre de cas.

D'autre part, j'adore cette épreuve J'en profite pour exprimer toute ma gratitude à NB qui m'a tout appris en python ou presque ; j'ai choisi ce langage il y a des années pour ces challenges programmation, et ça m'a tellement servi par la suite pour coder des outils côté professionnel. J'en suis qu'au niveau 3, que je passe avec 80% de réussite, et je sais pas encore si j'atteindrai le 5, mais déjà, cette épreuve me plait beaucoup.

Courage pour la suite, selon moi si tu as passé cette étape tu as déjà fait le plus dur
6  Divers / Linux / Re : Faille sudo le: 18 Octobre 2019 à 16:37:04
J'viens de tester sur ma machine avec sudo 1.8.27.

J'obtiens juste:
Code:
$ sudo -u#4294967295 id -u
sudo: unknown user: #4294967295
sudo: unable to initialize policy plugin
$ sudo -u#-1 id -u       
sudo: unknown user: #-1
sudo: unable to initialize policy plugin

Fleme d'aller chercher pourquoi.
7  Divers / Hacking / Re : Re : Re : Quelles challenges de hacking pour pratiquer les SQL injections? le: 13 Juillet 2019 à 17:50:58
Enjoy

o0

Toi, tu vas avoir des problèmes a me piquer mon expression ! Tu vas finir les pieds dans le béton. Au fond d'une rivière !

Enjoy

The lsd

Et c'est que maitenant que tu le remarques ?  Ça fait des années que je te l'ai piquée ! 

Enjoy

The lsd
8  Divers / Hacking / Re : Quelles challenges de hacking pour pratiquer les SQL injections? le: 10 Juillet 2019 à 16:03:33
Salut,

tout comme Pech, je ne peux que te conseiller de continuer les challenges Hack de ce site, tu finiras par tomber sur les SQLi
Toutefois, si tu veux vraiment pratiquer ce sujet en particulier, tu peux aussi essayer https://redtiger.labs.overthewire.org/

Enjoy
9  Challenges / Aide Cryptographie / Re : Crypto - Une crypto moderne le: 11 Septembre 2018 à 11:25:49
Bon, vu qu'il n'y a pas beaucoup de validation, je lâche des indices  

- Il faut bien lire (hmac-sha256)-cfb, pas hmac-(sha256-cfb)
- Les clés respectent la regex: /^[a-z]{1,6}$/ , pas besoin de chercher plus loin.

Bonne chance et enjoy ! :-)
10  Général / Suggestions/Dev. du site / Re : Fonction javascript déprécié le: 06 Juillet 2018 à 10:39:48
Hello et merci de remonter cette info, mais actuellement même les dernieres version de chrome et firefox supportent encore cette fonction.
Puis dans tous les cas, le polyfill reste quand même assez simple (même si c'est une très mauvaise pratique de combler les features disparues):

Code:
if ("function" !== typeof unescape) {
  function unescape(arg) {
    return decodeURIComponent(arg);
  }
}

Mais oui, c'est toujours une bonne idée de migrer vers les nouvelles APIs du langage.  
11  Général / Général / Re : Gagner des bitcoins facilement le: 18 Juin 2018 à 15:14:44
GRACE À CETTE MÉTHODE MIRACULEUSE, VOUS AUSSI ALLONGEZ LA TAILLE DE VOTRE ÉCRAN DE 10CM EN MOINS D'UNE SEMAINE POUR 850€ SEULEMENT.
=> SACHEZ EN PLUS
12  News / News du site / Re : NC++ le: 18 Juin 2018 à 15:06:40
Bravo l'équipe ! Vivement les nouveautés ! Jor un wargame 64 bits avec aslr ! 
13  Divers / Informatique / Re : Re : Re : Re : [Projet] Création d'un compteur de likes facebook avec un raspberry pi le: 12 Mai 2018 à 00:54:02
Bien joué pour ton projet

Yep c'est le prix et la simplicité, un arduino + un shift ethernet ou wifi, ça coute plus cher que 5€ pour un pi zero. Puis faire du python c'est plus simple que du C 

La solution Pi Zero est très intéressante mais tu peux faire moins chère (ou équivalent) avec une solution type "Arduino" incluant déjà le wifi (donc pas besoin d'ajouter un shield wifi).

Tu peux utiliser un ESP32, c'est très simple à utiliser et compatible Arduino Il existe pas mal de versions différentes, tu peux faire une recherche sur les modèles ESP8266.
Si t'as pas peur des soudures et que tu sais éventuellement fabriquer un petit circuit imprimé (pour faire les choses proprement), alors t'as la possibilité d'utiliser le format compact pour moins de 4€ (livraison gratuite) voir même moins de 2€ sur ebay (du coup il faut prévoir la connectique pour l'alimentation, rien de bien méchant).
Sinon il existe pas mal de cartes de développement à base d'ESP32 (ces cartes utilisent le module compact soudé directement sur la carte de développement) pour moins de 10€ (tu peux en trouver pour moins de 5€).

Pas besoin de carte SD avec cette solution, c'est ça de moins à acheter ^^

En tout cas le Pi Zero est une très bonne solution, aussi bonne qu'une solution à base de micro contrôleur, l'approche est juste différente mais pas moins intéressante pour autant

À vrai dire je ne connais vraiment pas bien les arduino ^^ par contre linux déjà un peu plus, d'où le choix du pi zero. Je ne savais pas qu'il existait des arduino avec wifi intégré, je vais me renseigner sur le sujet merci Après je suppose qu'il est possible d'utiliser curl ou au moins openss/libressl/gnutls pour la couche TLS dessus non ? Ça doit beaucoup simplifier le call https du coup.

Je vais le pwn pour ecrire B*TE et je screen no faKe

Bonne chance. Si t'y arrives je paye tes boissons pendant une soirée entière et je te ramènes chez toi. (boire ou conduire ... y'a lovenunu qui fait sam c'cool).

Question : le boitier de NES viens d'une NES qui a wipe ?

Selon le patron, la NES fonctionne encore (à peu près). Suffit de virer l'afficheur, d'y foutre une cartouche et ça tourne.
14  Divers / Informatique / Re : Re : [Projet] Création d'un compteur de likes facebook avec un raspberry pi le: 11 Mai 2018 à 21:45:34
Woot ! gg !

Autre question, pourquoi t'es pas parti sur de l'arduino ? Prix ? Complexité ? La partie API facebook aurait été plus galère ?

Enjoy

The lsd

Yep c'est le prix et la simplicité, un arduino + un shift ethernet ou wifi, ça coute plus cher que 5€ pour un pi zero. Puis faire du python c'est plus simple que du C 
15  Divers / Informatique / [Projet] Création d'un compteur de likes facebook avec un raspberry pi le: 11 Mai 2018 à 14:47:53
Hello all,
aujourd'hui je ne viens pas vous poser une question mais vous proposer le write-up d'un petit projet que j'ai réalisé pour un pote qui tient un bar.
 
Vous avez peut-être remarqué, mais dans les bars il est de plus en plus courrant d'avoir un afficheur des "likes" facebook de la page du bar. Apparement, ça aiderait bien les clients à liker la page devant l'engin, pour voir s'il fonctionne vraiment ( Ahhhh, le social engineering   ). Par contre, ce genre d'objet coute quand même relativement cher (je vous laisser regarder les prix de smiirl, c'est quand même pas donné).

Je vous propose donc de regarder comment on a créé le notre pour un peu moins de 30€.

Je tiens à préciser que je ne connais presque rien à l'électronique ni a l'embarqué en fait. Je suis parti de rien et ai fini par le faire fonctionner juste avec quelques recherches et de la documentation. Si certains points vous semblent bizarres ou maladroits, c'est donc normal.

Le matériel

Pour le choix du matériel, ça a été vite fait. Vu qu'il va falloire communiquer avec un serveur pour récupérer le nombre de likes (et que je ne maitrise vraiment pas cette partie la des arduino, puis un shield ça coute cher), on est parti sur un raspberry pi. Et vu qu'on a vraiment pas besoin d'une grosse puissance, on a pris un raspi zero.

Pour l'affichage, on est parti sur une solution assez simple: un chainage d'afficheurs de 8x8 leds (des max7219 pour être précis).

Je mets les liens ci-dessous à titre informatif, mais je vous recommande quand même cette boutique, c'est là qu'on a acheté le matos
- Le raspi: https://www.kubii.fr/pi-zero-v13/1401-raspberry-pi-zero-v13-kubii-3272496006973.html
- L'adaptateur GPIO: https://www.kubii.fr/raspberry-pi/1603-adaptateur-gpio-2x20-male-pour-pi-zero-kubii-3272496004030.html
- Une carte microSd: https://www.kubii.fr/pi-zero-v13/1884-carte-microsd-4gb-avec-noobs-pour-pi-zero-kubii-3272496007338.html
- L'afficheur: https://www.kubii.fr/ecrans-afficheurs/1950-max7219-module-de-commande-d-affichage-a-matrice-de-points-4-en-1-pour-arduino-kubii-3272496008083.html

Préparation

Bon, on a reçu le matos, et a part un petit faux contact sur l'afficheur, tout fonctionne correctement.
On a donc installé un raspbian sur la SD, vérfié que ça fonctionne puis connecté le raspi au wifi.

Afin de travailler sur un PC plus puissant que le raspi (et surtout parce que j'avais pas de clavier a disposition en fait), j'y ai activé un serveur ssh pour prendre la main depuis mon laptop.

Après quelques recherches sur l'afficheur, on voit qu'il fonctionne avec un bus SPI. Je vous laisser aussi le lien vers la fiche technique de l'afficheur qui est très utile pour avoir la liste des commandes à disposition (sur la page 7).

Ça tombe vraiment bien: linux intégre un driver SPI, et il est même installé par défault sur raspbian, il suffit de l'activer comme décrit ici.

De plus, j'ai trouvé cette lib python luma.led_matrix qui a l'air de gérer les max7219 et intégre des outils vraiment sympa pour directement afficher des fonts ou des images dessus. Au final on ne va pas tant se servir que ça de la gestion d'images (on va juste afficher des chiffres). Pour l'installer je me suis contenté de suivre leur documentation

Le wiring

Bon, désole j'ai pas pris de photos à cette étape là   vous devrez donc vous contenter d'un schema.

Cette partie était franchement la plus facile, le bus SPI du max7219 n'utilise que 5 fils:
- le VCC: entrée 5v
- le GND: la masse
- le DIN: le bus de données
- le CS: chip select ... j'ai pas vraiment compris pourquoi il s'appel comme ça, mais en gros, quand on veut envoyer des données sur le DIN, il faut d'abord créer faire un front descendant sur cette pin, envoyer les données sur le DIN, puis faire un front montant sur lui. Heureusement grace a luma.led_matrix on aura pas à gérer ça  
- le CLK: l'horloge. Sur notre composant elle ne doit pas dépasser les 10MHz, mais de toute façon c'est le driver linux qui la gère celle là. (et luma.led_matrix qui défini la cadence)

 En suivant les indications de la documentation de luma.led_matrix, et avec cette jolie représentation des pins, le branchement est on ne peut plus facile:

https://framapic.org/J2XEKnrBc0F3/n84Ut5GwKcWB.jpg

Les premiers tests de programmation

Bon, depuis tout à l'heure je vous parle de luma.led_matrix. C'est une librairie python, et maintenant qu'il est temps de coder ... bah on va faire du python  

Tout d'abord, il va nous falloir comprendre comme ça fonctionne tout ça. En se basant sur la documentation du composant et les exemples de la librairie, j'en suis venu à cette conclusion:
- Les commandes son codées sur 2 octets: le 1er est l'addresse du registre a modifier, le second en est la valeur.

- Les registres de 0x1 à 0x8 sont ceux a utiliser pour allumer ou éteindre les leds d'un afficheur 8x8. Ils correspondent aux lignes de led: le registre 0x1 est la ligne la plus haute, le 0x8 est la ligne tout en bas. Chaque bit des valeurs de ces registres correpondent a une led. Le bit de poids faible étant la led la plus à droite de la ligne, le bit de poids celui de gauche. Par exemple, si on met 0xef dans le registre 0x1, toutes les leds SAUF celle de gauche seront allumées.

- Quand on chaine plusieurs max7219, il faut modifier le même registre plusieurs fois d'affilé pour que les instructions passent à l'afficheur suivant. Par exemple si on envoie la commande suivante: b'\x01\xff\x01\x0f', l'afficheur connecté directement au raspberry aura les 4 leds de droite de sa premiere ligne allumée, tandis que l'afficheur suivant aura toutes celles de sa premiere ligne allumée. Dans mon cas, l'afficheur connecté au raspberry est celui de droite, donc il faut envoyer les commandes en prenant en compte que le dernier afficheur est celui de droite.


Le premier test à donc été d'afficher des motifs bidons pour vérifier que tout fonctionne:
Code: (python)
#!/usr/bin/env python3
from luma.led_matrix.device import max7219
from luma.core.interface.seriunal import spi, noop
import time

# on crée le serial
serial = spi(port=0, device=0, gpio=noop())

# bon, on se sert pas directement de cette classe, mais elle permet d'initialiser correctement le serial pour gérer le chainage des 4 max7219
max7219(serial, cascaded=4)

# On calme un peu la luminosité sur les 4 max7219
serial.data(4 * b'\x0a\x00')

# On envoie des motifs bidons:
serial.data(b'\x01\xff\x01\x0f\x01\xf0\x01\x33')
serial.data(b'\x03\xff\x03\x0f\x03\xf0\x03\x33')
serial.data(b'\x05\xff\x05\x0f\x05\xf0\x05\x33')
serial.data(b'\x07\xff\x07\x0f\x07\xf0\x07\x33')
time.sleep(10)

ce qui nous donne (oui j'ai toujours pas pris de photo désolé): https://framapic.org/DiZPWdnPbUuM/YoRL7xvfja3F.jpg

L'affichage de chiffres

Bon ... on sait maitenant controler l'afficheur, il faut maitenant qu'on arrive à afficher des chiffres.
Pour ça je ne me suis pas trop embêté: j'ai trouvé une font compatible avec une grille de 8x8, et j'ai récupéré les entrées pour les chiffres. (je n'arrive pas a retourver le lien où je l'ai trouvé désolé. Si ça me revient je vous le donnerai)

Il se trouve que cette font ne s'affichait pas dans le bon sens, j'ai donc juste appliqué une rotation de -90°. Ce qui nous donne:
Code: (python)
CHARS = {
'0': [0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00],
'1': [0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00],
'2': [0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00],
'3': [0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00],
'4': [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00],
'5': [0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00],
'6': [0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00],
'7': [0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00],
'8': [0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00],
'9': [0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00],
}


Il faut ensuite créer les chaines de commandes à envoyer sur le bus SPI pour afficher ces chiffres:

Code: (python)
def buildDisplayCharCommands(char):
    """
    Cette fonction construit une liste de commandes SPI pour afficher ce nombre.
    Par exemple, pour char == '0', elle retourne:
    [
      b'\x01\x7c',
      b'\x02\xc6',
      b'\x03\xce',
      b'\x04\xde',
      b'\x05\xf6',
      b'\x06\xe6',
      b'\x07\x7c',
      b'\x08\x00',
    ]
    """
    if char not in CHARS:
        return None
    i = 1
    res = []
    for line in CHARS[char]:
        res.append(bytes([i, line]))
        i += 1
    return res

def draw(serial, chars):
    """
    Cette fonction va construire et envoyer les commandes pour afficher chaque ligne.
    Par exemple pour chars == '1234', il va executer:
    serial.data(b'\x01\x30\x01\x78\x01\x78\x01\x1c')
    serial.data(b'\x02\xc6\x02\xcc\x02\xcc\x02\x3c')
    ...
    """
    d = list(filter(None, map(buildDisplayCharCommands, chars)))
    for i in range(len(d[0])):
        cmd = b''.join(map(lambda x: x[i], d))
        serial.data(cmd)


Récupérer le nombre de likes d'une page facebook

Bon... Pour cette étape, je ne vais pas tout détailler. En effet, c'est pas facile de comprendre les documentations de facebook pour ça (il suffit de chercher "comment avoir le nombre de likes d'une page facebook via api" pour voir que tout le monde en souffre ).

En fait, c'est pas si compliqué (sauf quand on a pas de compte facebook comme moi '--):
- Il faut créer une application sur https://developers.facebook.com
- Aller sur l'explorateur de l'API graph
- À coté du champ "token", il y a un dropdown, il faut sélectionner "Token d'accès de page", puis pendant la création, selection la page sur laquelle on veut l'info.

Voilà, on a un token qui va nous permettre de récupérer l'info qu'on veut.

En python, ça donne ça:
Code: (python)
#!/usr/bin/env python3

import urllib.request
import json

def getNbLikes():
    # ici on utilise /me car le token appartient à la page où on veut récuperer les likes
    req = urllib.request.Request('https://graph.facebook.com/me?fields=fan_count', None, {
        'Authorization': 'Bearer <leToken>'
    })
    try:
        res = urllib.request.urlopen(req).read()
        data = json.loads(res.decode())
        return data['fan_count']
    except:
        return '0000'

On assemble tout

Au final, le code qui nous permet d'afficher ce qu'on veut est:
Code: (python)
#!/usr/bin/env python3

import time
import urllib.request
import json

from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop

def getNbLikes():
    req = urllib.request.Request('https://graph.facebook.com/me?fields=fan_count', None, {
        'Authorization': 'Bearer <leToken>'
    })
    try:
        res = urllib.request.urlopen(req).read()
        data = json.loads(res.decode())
        return data['fan_count']
    except:
        return '0000'
    

CHARS = {
'0': [0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00],
'1': [0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00],
'2': [0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00],
'3': [0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00],
'4': [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00],
'5': [0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00],
'6': [0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00],
'7': [0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00],
'8': [0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00],
'9': [0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00],
' ': [0, 0, 0, 0, 0, 0, 0, 0],
}

def buildDisplayCharCommands(char):
    """
    Cette fonction construit une liste de commandes SPI pour afficher ce nombre.
    Par exemple, pour char == '0', elle retourne:
    [
      b'\x01\x7c',
      b'\x02\xc6',
      b'\x03\xce',
      b'\x04\xde',
      b'\x05\xf6',
      b'\x06\xe6',
      b'\x07\x7c',
      b'\x08\x00',
    ]
    """
    if char not in CHARS:
        return None
    i = 1
    res = []
    for line in CHARS[char]:
        res.append(bytes([i, line]))
        i += 1
    return res

def draw(serial, chars):  
    """
    Cette fonction va construire et envoyer les commandes pour afficher chaque ligne.
    Par exemple pour chars == '1234', il va executer:
    serial.data(b'\x01\x30\x01\x78\x01\x78\x01\x1c')
    serial.data(b'\x02\xc6\x02\xcc\x02\xcc\x02\x3c')
    ...
    """
    d = list(filter(None, map(buildDisplayCharCommands, chars)))
    for i in range(len(d[0])):
        cmd = b''.join(map(lambda x: x[i], d))
        serial.data(cmd)
    
if __name__ == "__main__":
    try:
        # on crée le serial
        serial = spi(port=0, serial=0, gpio=noop())
        # bon, on se sert pas directement de cette classe, mais elle permet d'initialiser correctement le serial pour gérer le chainage des 4 max7219
        max7219(serial, cascaded=4)

        # On calme un peu la luminosité sur les 4 max7219
        serial.data(4 * b'\x0a\x00')

# On fetch le nombre de like toutes les 5 secondes et on l'affiche.
        while True:
            draw(serial, str(getNbLikes()))
            time.sleep(5)
    except KeyboardInterrupt:
        pass

Le petit truc de la fin

Bon, on a un afficheur qui fonctionne ... Maitenant ça serait encore mieux qu'il fonctionne directement au démarrage n'est-ce pas ? (bah oui, faut lancer le script pour que l'affichage se fasse).

Pour ça, rien de plus simple: sur le raspberry pi, on lance `crontab -e`. On ajoute à la fin du fichier:
Code:
@reboot python3 /chemin/vers/le/script.py

Et on a fini ! Et cette fois ci j'ai une photo: https://framapic.org/ZXkvfAwKkXnb/Pigw0stPonc6.jpg

EDIT: Bien sûr ce projet n'a rien d'exceptionnel, mais je me suis vraiment bien amusé et j'ai appris plein de trucs en le faisant. J'espère que vous viendrez nous présenter les votre par la suite.  
Pages: [1] 2 3 ... 10