Retour d'expérience suite au concours gamebuino

Bonjour Ă  tous,

Je suis lycĂ©en au LycĂ©e Alain Ă  Alençon (en TS Si spĂ© ISN) et suite Ă  la demande de Steph du discord, je vais faire mon retour d’expĂ©rience.

Donc hier, il a eu lieu un concours de programmation sur la gamebuino avec des lots Ă  gagner. Ce concours Ă©tait organisĂ© par la rĂ©gion normandie et Ă©tait ouvert Ă  tous ceux Ă  qui le lycĂ©e avait prĂȘtĂ© une gamebuino. Le principal problĂšme de ce concours Ă©tait le manque d’informations que nous donnait notre professeur d’ISN, on nous as dit “il va y a avoir un concours de programmations sur la gamebuino” mais pas grand-chose de plus et la derniĂšre semaine on a appris que c’était pour le vendredi qui venait alors que les STI2D SIN ont Ă©tĂ© un peu plus au courant que nous mais c’était pas non plus super clair. En tant qu’élĂšve en spĂ© ISN j’avoue ĂȘtre un peu dĂ©savantagĂ© puisqu’on fait trĂšs trĂšs peu d’arduino (juste un peu en SI mais vraiment pas grand chose), on fait du python mais je n’ai pas mis longtemps Ă  dĂ©cider dans quel language j’allais utiliser puisqu’il y a moins de tuto et de maniĂšre gĂ©nĂ©rale le python est moins bien pris en charge que le langage arduino.

J’ai commencĂ© mardi Ă  programmer une animation de l’eau qui sert de background, ça fonctionnait puis j’ai essayĂ© de programmer le personnage principal (un surfer) mais l’eau Ă©tait mis au dessus du surfer, jicehel m’a bien aidĂ© Ă  optimiser mon programme et rĂ©gler mon problĂšme de plan. Une fois ceci fait, j’ai programmĂ© l’ennemi 1 qui est une mouette, un pigeon bref on sait pas trop et j’ai repris la façon de faire l’animation de l’eau de jicehel, je l’ai donc adaptĂ©. Au niveau temporel, nous sommes jeudi (mercredi j’avais beaucoup trop de travail scolaire : masse de contrĂŽle avant les vacances vive la terminale s) soit un jour avant le programme et je n’avais pas grand chose en soi. Un problĂšme de taille s’est dressĂ© devant moi, les collisions, je me suis dit au dĂ©but qu’il fallait faire une condition, si x_player = x_oiseau alors fonction “fin du jeu” mais ça ne fonctionne Ă©videmment pas comme ça, j’ai demandĂ© de l’aide sur discord aprĂšs avoir essayĂ© de rechercher des tutos, regarder dans d’autres programmes ect.
RayTro du discord m’a bien aidĂ© Ă  trouver la solution notamment avec la fonction “gb.collide.rectRect” avec ça je n’ai pas mis de temps Ă  finir ce systĂšme de collision.
Je me suis donc penchĂ© sur l’écran titre, je fais une condition si “debut = 1” alors le jeu commence, “debut = 1” si le bouton a Ă©tĂ© pressĂ©, mais j’ai passĂ© plus d’une heure Ă  rĂ©gler ce problĂšme car ça ne fonctionnait pas et vu de la simplicitĂ© de la chose je me voyais pas redemander au discord, je n’ai finalement fait et overflow du discord m’a corrigĂ© en disant que dans une condition il fallait mettre deux signes ==, chose que je savais et que j’ai expĂ©rimentĂ©e avant mais la fatigue commençait Ă  s’accumuler (ça faisait plus de 5h que je programmais).
AprĂšs ce problĂšme rĂ©solu, c’était presque une mince Ă  faire que de finir ce jeu. J’ai programmĂ© un deuxiĂšme ennemi (un surfer avec un t-shirt diffĂ©rent), fait ces collisions, et ajouter un Ă©cran de fin. Il Ă©tait tard, j’ai essayĂ© de mettre le jeu sur la carte SD mais la gamebuino me faisait une erreur quand je scrollais jusqu’au jeu du solitaire, je n’ai pas insistĂ© plus d’une demi-heure et je suis aller me coucher, heureux d’avoir fait un jeu qui est jouable.

Le lendemain, je fais mes cours de la matinĂ©e puis Ă  14h je vais donc au foyer du lycĂ©e. Il y avait un journaliste de tendance ouest et deux journalistes pour une web TV de CanopĂ©, je suis passĂ© aux micros des deux :slight_smile:, j’ai attendu 1h, et pendant ce temps des sti2d prĂ©sentait Ă  tous les Ă©lĂšves de seconde en quoi consistait la gamebuino. Je passe devant le jury et j’ai Ă©tĂ© agrĂ©ablement surpris de l’ambiance dĂ©tendue des jurĂ©s (pourtant il y avait du beau monde), j’ai prĂ©sentĂ© mon projet avec mon habituel sens de l’humour et mon air dĂ©contractĂ©.
Je me suis dit que j’avais aucun regret, c’était une trĂšs bonne expĂ©rience, j’ai produit exactement l’idĂ©e que je me faisais du jeu au dĂ©part.

16h, c’est la remise des prix, un peu stressĂ©, fatiguĂ©, mais heureux. On nous fait un discours de remerciement , et on nous distribue des petits goodies de la rĂ©gion (un crayon, un jouet antistress, un dĂ©doubleur jack, une petite enceinte bluetooth, une clĂ© usb 8GB et un badge). On nous explique que l’intĂ©rĂȘt du badge est virtuel puisque la normandie essaie de mettre en place des choses pour mettre en valeur les Ă©lĂšves avec des compĂ©tences, chose que j’approuve complĂštement, puisque avec parcoursup c’est les notes qui priment et laisser une chance Ă  des Ă©lĂšves moyens sur le papier mais passionnĂ©, d’intĂ©grer des bonnes Ă©coles c’est formidable.
Vient enfin la remise des prix, personnellement je m’attendais Ă  ĂȘtre soit 3e, soit pas dans le podium avec ce que j’ai entendu sur les autres participants. Un jurĂ© appelle le 3e, je me suis dit, que ce n’était pas grave, que j’avais bien participĂ© et lĂ  2e, j’entends mon nom, je remercie le jury et lĂąche mon plus beau dab. Ensuite vient le premier, qui selon ce que les autres m’ont dit Ă©tait clairement au-dessus de nous. On fait notre photo de groupe, puis on retourne en classe. Le lot pour le 3e Ă©tait une souris vertical, pour le 2e et le 1er, une tablette Samsung et nous remportons tout les 3 une gamebuino.

J’aimerais donc remercier toute la communautĂ© Gamebuino qui m’a permis de gagner ce trophĂ©e et d’acquĂ©rir de l’expĂ©rience, maintenant je peux dire qu’est-ce que j’ai trouvĂ© bien, qu’est-ce que j’ai trouvĂ© moins bien sur la console en elle-mĂȘme.

Points positifs :

  • Une superbe communautĂ©, j’ai dĂ©jĂ  cherchĂ© de l’aide dans d’autres projets de programmation, jamais j’ai Ă©tĂ© aussi bien aidĂ©, la plupart du temps les gens sont hautains avec les dĂ©butants soit ils rĂ©pondent Ă  cĂŽtĂ©.
  • Une console avec des belles finitions, elle est vraiment trĂšs belle et agrĂ©able Ă  jouer
  • Un concept vraiment gĂ©nial, ça m’a donnĂ© envie de faire encore plus de programmations
  • Des jeux excellents crĂ©Ă©s par la communautĂ©

Points négatifs :

  • L’écran est vraiment trop petit, que ce soit en rĂ©solution ou en taille mais ça j’ai surĂȘment pas besoin de le prĂ©ciser, j’imagine que ça a Ă©tĂ© beaucoup critiquĂ© avant moi.
  • Il faut aller plus loin dans le concept de programmation python, c’est pas forcĂ©ment adaptĂ© au fonctionnement de la machine mais plus de tuto pythons, plus d’explications python ect.
  • Le prix de la console, Ă©galement je sais que ça a Ă©tĂ© souvent dit, mais un particulier aura difficilement du mal Ă  se payer une console portable comme celle-ci Ă  100e, oui c’est fait en france, oui c’est vraiment trĂšs qualitatif mais ça rebutera beaucoup beaucoup de monde, aprĂšs vous visez le marchĂ© de l’éducation donc le prix est surĂȘment moins contraignant.
  • Pas assez de tutos, mon ressenti c’est que comme je n’ai pas Ă©tĂ© aidĂ© par mon professeur et qu’il faut se dĂ©brouiller par soi mĂȘme et bien parfois on est perdu dans la savane du code. Une idĂ©e d’amĂ©lioration est au lieu de faire des tutos pour faire un jeu de A Ă  Z comme le pong ect, une idĂ©e serait de dĂ©couper tout ça. Je m’explique, il y a la liste de toutes les fonctions ici : https://gamebuino.com/fr/academy/reference
    on peut aller encore plus loin en faisant une page en français et en expliquant dans quelle situation utilisĂ© telle ou telle fonction (comme un exemple mais avec un contexte plus fort que juste un code),on pourrait aussi faire des tutos “comment dĂ©placer son personnage” “comment gĂ©rer ses collisions” “comment ajouter un ennemi” “comment ajouter un score” un peu dans le mĂȘme style que le tuto pour ajouter une image. Ce serait une bonne chose pour Ă©viter de rester bloquer aux choses les plus basiques et dĂšs le dĂ©part, demander Ă  la communautĂ©.

Ce fĂ»t une belle expĂ©rience et j’essaierai de poster les interviews dĂšs qu’ils seront sortis, pour le moment on a juste un tweet : https://twitter.com/canope_61/status/1208051636427542529

Merci Ă  vous tous et Ă  la rĂ©gion d’avoir organisĂ© quelques choses comme ça, Ă  plus grande Ă©chelle ça pourrait ĂȘtre super de faire des gamejam gamebuino

7 Likes

Salut @Wabfall,

Merci d’avoir pris la peine de nous partager ton expĂ©rience.
J’ai nĂ©anmoins quelques questions :

Comment as-tu entendu parler de la Gamebuino ?
Comment ton lycĂ©e en est-il venu Ă  prĂȘter une Gamebuino Ă  certains Ă©lĂšves ?
Quels Ă©taient les critĂšres pour qu’ils accordent leur prĂȘt ?
Quand et comment la Gamebuino est-elle arrivée dans ton lycée ?
Par quel hasard la RĂ©gion Normandie s’est-elle intĂ©ressĂ©e Ă  la Gamebuino ?
Y a-t-il un projet pédagogique sérieux derriÚre ce financement ?
Comment les profs se sont-ils investis autour de la Gamebuino ?
Comment ont-ils pris connaissance de son existence ?
Avez-vous rencontré @Aurelien_Rodot (son créateur) ?
Quel est le langage de programmation abordé par les profs avec la Gamebuino ?

Maintenant, pour répondre à tes points négatifs


Concernant l’écran

L’écran de la META est certes assez petit
 mais il est nĂ©anmoins capable d’afficher 160x128 pixels ! Les dĂ©veloppeurs de la bibliothĂšque officielle ont fait le choix de mettre en avant une rĂ©solution 4 fois moindre pour des questions d’occupation mĂ©moire
 L’API gb.display gĂšre, en effet, un tampon en mĂ©moire (on appelle ça un framebuffer) qui n’autorise, par dĂ©faut, qu’une rĂ©solution de 80x64 pixels, oĂč chaque pixel peut ĂȘtre encodĂ© avec 16 bits de profondeur de couleurs, donc sur un espace colorimĂ©trique RGB565, c’est-Ă -dire 5 bits pour le rouge, 6 bits pour le vert et 5 bits pour le bleu. Ce qui fait 5+6+5 = 16 bits. Par consĂ©quent, le framebuffer de gb.display occupe un espace en RAM correspondant Ă  :

80 x 64 x 16 = 81 920 bits = 10 240 octets = 10 ko

Tu te rends bien compte qu’il est impossible d’hĂ©berger en RAM un framebuffer de 160x128 pixels avec une profondeur de couleurs de 16 bits. Cela nĂ©cessiterait 4 fois plus de mĂ©moire, soit 40 ko. Or la META n’en a que 32 en tout et pour tout !

Il est nĂ©anmoins possible d’exploiter une rĂ©solution de 160x128 pixels :

  1. soit avec 16 couleurs indexées (par une palette) en utilisant gb.display :
    chaque couleur est alors codĂ©e par un index (un rang dans la palette utilisĂ©e) qui peut prendre des valeurs entre 0 et 15 (16 couleurs au total). Cet index peut alors ĂȘtre encodĂ© sur 4 bits (nĂ©cessaires pour coder des valeurs entre 0 et 15). Autrement dit, le framebuffer pĂšse alors : 160 x 128 x 4 = 81 920 bits = 10 ko
    On obtient donc le mĂȘme poids en RAM qu’en divisant la rĂ©solution par 4 (80x64) mais avec toute les couleurs offertes par RGB565 (codĂ©es sur 16 bits donc).

  2. soit en laissant complĂštement de cĂŽtĂ© toutes les fonctions que t’apportent gb.display et en utilisant des fonctions de bas niveau avec l’API gb.tft qui vont te permettre de gĂ©rer un framebuffer par toi mĂȘme (mais c’est un peu plus laborieux). Du coup, en Ă©tant astucieux, tu peux construire ton affichage par Ă©tapes, avec un framebuffer plus petit, en dĂ©coupant l’écran en une succession de bandes (par exemple 160x8 pixels = 2,5 ko). Et te dĂ©brouiller pour envoyer cette succession de petits tampons suffisamment rapidement vers l’écran pour que ton oeil ait l’impression que tout s’est construit d’une seule traite.
    Si cette technique t’intĂ©resse, je te suggĂšre d’étudier en dĂ©tail l’article d’Andy sur le sujet :
    High Resolution without gb.display

Pour ce qui est de Python

Un portage du projet d’Adafruit portant le nom de CircuitPython a Ă©tĂ© implĂ©mentĂ© pour la META, mais reste intimement liĂ© Ă  la bibliothĂšque officielle Gamebuino-Meta, qui occupe du mĂȘme coup pas mal d’espace en RAM (Ă  cause, entre autres, du framebuffer dont je viens te parler). Faire cohabiter cette bibliothĂšque officielle, ainsi que toutes les ressources internes nĂ©cessaires au bon fonctionnement d’un interprĂ©teur Python dans 32 ko de RAM reste une prouesse technique que l’on doit Ă  @Sorunome ! Mais tu te rends compte du mĂȘme coup, que l’espace en RAM qu’il te reste pour ton propre programme est fortement amoindri
 Il n’est donc pas aisĂ© de coder en Python avec la META. Je me suis moi-mĂȘme confrontĂ© Ă  des difficultĂ©s lorsque j’ai Ă©crit mon tuto sur la programmation du jeu Snake. Je voulais, au dĂ©part, proposer une implĂ©mentation orientĂ©e-objets. Mais j’ai dĂ» y renoncer car la couche objet de CircuitPython Ă©tait trop gourmande. Donc, coder des jeux en Python avec la META, c’est possible
 mais ça n’est clairement pas la meilleure plateforme qui existe pour cela, si c’est ton objectif. Tu peux jeter un oeil sur les produits d’Adafruit
 qui sont parfaitement taillĂ©s pour fonctionner Ă  merveille avec CircuitPython.

Néanmoins, la META reste une super-plateforme de développement avec laquelle tu peux vraiment réaliser des jeux complets et bien léchés, si tu codes en C/C++.

Pour ce qui est des tutos

J’ai dĂ©couvert la META il y a tout juste 1 an, et j’ai tout de suite Ă©tĂ© sĂ©duit par le projet pĂ©dagogique qui Ă©tait mis en avant pour soutenir son financement. Je n’avais jamais fait de C++ Ă  ce moment là
 mais je me suis tout de suite attelĂ© Ă  l’apprentissage de ce langage sur la META en rĂ©digeant moi-mĂȘme des tutos pour partager mes avancĂ©es, mes choix d’implĂ©mentation, mes astuces, etc. Mon intention Ă©tait de venir prĂȘter main forte au Staff pour dĂ©velopper leur AcadĂ©mie. J’étais alors trĂšs enthousiaste, comme toi ! Mais devant le peu de retours me parvenant de la CommunautĂ©, j’ai vite dĂ©chanté  et je me suis lassĂ©. À quoi bon me casser le c** si ça n’intĂ©resse personne (ou presque) !.. RĂ©diger un tuto prend Ă©normĂ©ment de temps (bien plus qu’il n’en faut pour coder son projet, que ce soit un jeu complet ou un simple exercice). Le rendre disponible en français ET en anglais en prend encore davantage. J’attendais de Gamebuino qu’ils catalysent la production de contenus pĂ©dagogiques en donnant des coups de projecteurs sur les travaux rĂ©alisĂ©s par les producteurs de contenus bĂ©nĂ©voles (comme moi, mais je ne suis pas le seul). J’attendais de Gamebuino qu’ils prennent le temps d’animer leur CommunautĂ© en publiant rĂ©guliĂšrement des actualitĂ©s, des tutos, etc. Mais au lieu de ça, le vent a tourné  et je me suis retrouvĂ© comme un c** Ă  espĂ©rer quelque-chose qui n’arriverait plus
 Je suis profondĂ©ment déçu par toutes ces promesses non tenues
 par ce silence mĂ©prisant de la part du Staff, que nous avons maintes fois sollicité  sans rĂ©ponse.

Toujours est-il que
 je suis toujours lĂ , et toujours disposĂ© Ă  apporter mon aide Ă  la CommunautĂ© quand elle se manifeste
 mais certainement plus Ă  pondre des tutos dont tout le monde se fout. Et c’est bien dommage, parce-qu’en 1 an, j’ai dĂ©veloppĂ© mon expĂ©rience sur la META en faisant des tas de choses (je suis loin d’avoir publiĂ© tout ce que j’ai pu faire). Les choses auraient pu ĂȘtre diffĂ©rentes
 je trouve que c’est un beau gĂąchis.

Le Staff aurait certes dĂ» multiplier ses efforts pour animer correctement sa CommunautĂ© et ne pas l’abandonner comme il l’a fait
 mais la CommunautĂ© avait elle-mĂȘme un rĂŽle important Ă  jouer en exprimant ses attentes, et en prenant la peine de faire un retour consistant sur les contenus pĂ©dagogiques publiĂ©s, face aux efforts de certains
 qui ne sont, aprĂšs tout, que de simples bĂ©nĂ©voles.

2 Likes

Je suis d’accord avec tes propos.
J’ai beaucoup appris et progressĂ© avec tes tutos et tes conseils sur le forum.
Je dĂ©veloppe actuellement un jeu de type SIMCITY que je m’apprĂȘte Ă  publier bientĂŽt

je me pose la question de l’intĂ©rĂȘt de publier une version en dĂ©veloppement

En tout cas, je te souhaite de bonnes fĂȘtes de fin d’annĂ©e
 :crazy_face::sparkler::tada::christmas_tree:

2 Likes

Merci @LYSANDRE pour ton soutien.

Comme je l’ai exprimĂ© ci-dessus, et comme tu l’as compris, c’est important pour nous, contributeurs, de savoir que nos efforts ont portĂ© leurs fruits. C’est toujours trĂšs gratifiant d’apprendre que l’on est parvenu Ă  Ă©clairer le chemin de ceux qui ont des difficultĂ©s Ă  y voir clair.

Comme dit l’adage : seul on va plus vite, ensemble on va plus loin !

Concernant ton projet SimCity, c’est une trĂšs bonne nouvelle. J’imagine que tu t’es inspirĂ© de la toute premiĂšre version (celle de 1989, sortie sur Amiga, Commodore 64 et ZX Spectrum) ? Publier une version de dĂ©veloppement peut avoir tout son intĂ©rĂȘt si tu ressens le besoin de recueillir l’avis et les conseils de la communautĂ© pour peaufiner ton jeu avant sa sortie officielle. Cela permet d’engager la discussion. D’ailleurs ce serait prĂ©fĂ©rable d’ouvrir un post spĂ©cifique pour ne pas biaiser le sujet central de celui-ci :wink:

Mais encore faut-il que la CommunautĂ© prenne la peine de rĂ©pondre Ă  ton appel
 Je suppose que tu peux compter sur les plus “fidĂšles”, mais pour le reste


Encore merci pour ton petit mot, et je te souhaite Ă©galement de trĂšs bonne fĂȘtes.

Merci @Wabfall pou ton retour. Pour la taille de l’écran, franchement, c’est suffisant pour faire des jeux. Ca oblige Ă  rĂ©flĂ©chir, c’est sĂ»r mais ça suffit et prendre un cran avec une rĂ©solution plus importante augmenterait les prix. AprĂšs on peut avoir des lots de bons Ă©crans moins chers mais on est bien aprĂšs la date de conception de la META, c’est donc normal.
Steph a repris pas mal de points que je partage et je ne m’étendrais donc pas plus sur le sujet, je pense depuis longtemps qu’il y a eu une erreur dans l’usage des fonds suite au financement. Maintenant, c’est fait. Il faut aller de l’avant. Peut ĂȘtre concevoir une console d’apprentissage un peu moins jolie et peut ĂȘtre Ă  finir de monter soit mĂȘme mais qui coĂ»te moins cher, voir ouvrir le hardware en open source, mĂȘme si ce sera la porte ouverte aux versions chinoises ou autre, mais technologiquement, il y a eu des avancĂ©es depuis, c’est donc maintenant qu’il faut la faire vivre.
On peut faire plein de choses sympa et j’espùre que sa version Sim City verra le jour.
En tous cas, c’est une bonne console pour apprendre Ă  programmer. Elle a l’avantage de la couleur et de la quantitĂ© de mĂ©moire par rapport Ă  la Arduboy, mais elle a l’inconvĂ©nient du prix. Sinon pour programmer tu as la console Pip basĂ©e su une Raspberry qui pourrait ĂȘtre intĂ©ressante (le kickstarter est fini mais la console est en cours de finalisation je crois avec pas mal de retard, tu peux avoir plus d’infos ici: https://www.minimachines.net/actu/pip-rasberry-pi-56020 par exemple c’est encore plus cher que la META mais l’écran est plus grand etc
 en fait c’est un vrai micro ordinateur trĂšs portable avec des connexions un objectif etc
 mais c’est un autre concept que la META qui a lavantage de rendre le dĂ©veloppement plus simple.
J’espĂšre que tu as encore plein d’idĂ©es de programmes et on t’aidera Ă  les rĂ©aliser si besoin.

1 Like

Je sais qu’on sort du sujet initial, mais je tiens Ă  saluer le travail de JicĂ©hel, Steph et Sorunome pour les possesseurs de Gamebuino.

Je n’osais pas trop le dire sur le forum non plus parce que je ne voulais pas mettre trop de messages nĂ©gatifs qui pourraient rebuter des gens qui voudraient se lancer dans l’aventure gamebuino, mais je suis moi aussi extrĂȘmement déçu du manque d’implication de la sociĂ©tĂ©-mĂšre. Surtout compte tenu du prix du bazar (la pokitto fait la mĂȘme chose pour moins cher, mĂȘme si moins jolie).

A titre perso, je ne m’estime pas flouĂ©, je suis dĂ©v professionnel, je continuerai de dĂ©velopper pour cette machine bien sympa mĂȘme sans communautĂ© derriĂšre, mais j’aurais Ă©tĂ© dĂ©butant, sans savoir oĂč aller, j’aurais eu les boules.

Bon, bref, comme dit plus haut, il faut aller de l’avant. Il y a Ă©normĂ©ment de choses qui peuvent ĂȘtre faites avec la gamebuino, mĂȘme avec les limitations techniques :wink: A titre personnel, c’est mĂȘme ça qui m’éclate ! J’ai hĂąte de voir les prochaines crĂ©ations ! Et mĂȘmes les crĂ©ations de dĂ©butants, on a tous fait un premier pas !

2 Likes

Merci @Alban pour ton message sympathique.

Tu as bien raison, il faut aller de l’avant ! Et il faut donc qu’on poursuive nos efforts pour accompagner les dĂ©butants qui doivent se sentir paumĂ©s dans cette jungle du C++ :joy: Je l’ai moi-mĂȘme Ă©tĂ© (et le suis encore parfois !), et c’est important de pouvoir compter sur l’aide des “anciens”, ou plutĂŽt des “initiĂ©s”.

La META est un outil pĂ©dagogique formidable avec des ressources insoupçonnĂ©es, mĂȘme sous fortes contraintes. Et, comme toi, c’est prĂ©cisĂ©ment ce qui m’éclate. Et, de surcroĂźt, c’est ce qui m’a attirĂ© pour apprendre le C++. On est tous trĂšs contents de notre petite console, qui reste un objet singulier au milieu de la concurrence. Elle a sa touche ! Et j’ai pas du tout envie de l’oublier au fond d’un tiroir moi non plus
 Donc, je continuerai aussi de faire plein de choses avec !

1 Like