[PYTHON] C'est bon de participer pour la première fois! Un kit de démarrage hackason que vous souhaitez préparer "avant" de participer au hackason!

Aperçu

Jusqu'à présent, je suis ingénieur back-end, mais j'ai participé à des hackathons environ 7 ou 8 fois. Parmi eux, je voudrais présenter les choses qui ont été utiles en utilisant diverses technologies et produits. Ce que je pense est important pour se développer chez Hackason

À cet égard, je voudrais présenter principalement les produits qui peuvent les réaliser. Enfin, je voudrais vous présenter quelques petits mais importants conseils pour participer au hackathon. Veuillez noter que cela vise à participer au hackathon et à rendre le produit aussi rapide que possible, et qu'il y a des problèmes de sécurité.

Qu'est-ce qu'un hackason?

Hackathon (en anglais: hackathon, également connu sous le nom de hack day, hackfest, codefest) est un événement pour les projets liés aux logiciels dans lequel programmeurs, graphistes, concepteurs d'interfaces utilisateur et chefs de projet dans le domaine du développement de logiciels travaillent de manière intensive. Il y a des cas où nous travaillons individuellement, travaillons en groupe et travaillons sur un seul objectif dans son ensemble.

Référence: Hackason

La plupart des pirates informatiques sont des événements où des équipes sont formées et des applications pour smartphone et des services Web sont créés en un court laps de temps d'environ 8 à 24 heures. Ceux que j'ai vus sont Hack Day, teamLab Hack-Day, SPAJAM, Fish Casson, etc.

Chat (mou)

image.png

https://slack.com/

C'est un outil de chat que je n'ai pas mentionné. Je pense que vous avez généralement l'image de l'utiliser en entreprise ou en équipe avec des personnes éloignées. Y a-t-il des avantages aux hackathons en face à face? En parlant de ça

  1. Confirmer et partager les progrès lors de la préparation du hackathon
  2. Livraison facile des matériaux

Par exemple, dans quels cas est-ce utile? En d'autres termes, il est utile pour partager les informations nécessaires pour vous connecter au serveur de développement, et pour partager le lien lorsque vous en êtes techniquement accro et le recherchez à la main. De plus, si vous développez une application, vous pouvez remplacer les images et transmettre suffisamment de documents pour le site s'ils sont légers. Il est également utile lors de la transmission de données réelles lors d'une présentation. D'un autre côté, ce n'est pas le cas quand vous dites "Dois-je être relâché?" Il y a d'autres travaux de chat et Facebook Messenger, vous n'avez donc pas besoin d'être particulier à ce sujet. ** L'important est de minimiser les coûts de communication et les coûts de livraison du matériel. ** **

Serveur partagé (Docker)

image.png

Inutile de dire que c'est un Docker bien connu. Il est souvent pratique d'avoir un serveur partagé, il est donc souvent créé. Récemment, il y a un Dockerfile que les membres ont utilisé dans l'environnement partagé, alors collez-le.

Dockerfile


FROM ubuntu:16.04

RUN apt-get update && apt-get -y upgrade && apt-get install -y build-essential libssl-dev libreadline-dev zlib1g-dev language-pack-ja
RUN apt-get -y install openssh-server ufw curl
RUN mkdir /var/run/sshd

#Paramètres pour un utilisateur--d'ici--
#Enregistrement de l'utilisateur(kotauchisunsun,password)
RUN useradd -m kotauchisunsun && echo "kotauchisunsun:password" | chpasswd && gpasswd -a kotauchisunsun sudo
RUN mkdir -p /home/kotauchisunsun/.ssh; chown kotauchisunsun /home/kotauchisunsun/.ssh; chmod 700 /home/kotauchisunsun/.ssh

#Enregistrement de la clé SSH de l'utilisateur
ADD ./authorized_keys /home/kotauchisunsun/.ssh/authorized_keys
RUN chown kotauchisunsun /home/kotauchisunsun/.ssh/authorized_keys; chmod 600 /home/kotauchisunsun/.ssh/authorized_keys
#Paramètres pour un utilisateur--Jusque là--

CMD /usr/sbin/sshd -D && tail -f /dev/null

Référence: Minimum requis pour créer un conteneur docker qui peut ssh

Si vous créez ce Dockerfile et authorised_keys et private_key pour ssh, cela fonctionnera. Dans le Dockerfile ci-dessus, un utilisateur nommé kotauchisunsun est ajouté, le mot de passe est enregistré comme mot de passe et l'autorité sudo est donnée. Si vous copiez et collez la partie "# 1 user setting" pour les membres qui participent au hackathon, changez le nom et augmentez-le, tout le monde pourra ssh. Si vous le divisez en "utiliser uniquement pour les hackathons", il est prudent de coller la clé privée sur slack, etc. .. Si vous abandonnez tout le serveur une fois terminé, le serveur du vaisseau mère ne sera pas affecté. Même si la clé privée est divulguée, il est difficile d'être attaqué en peu de temps par Hackason, et même si cela devient un tremplin pour une attaque, il est facile d'arrêter le service. La raison pour laquelle le Dockerfile lui-même n'est pas tellement créé est que les types de produits et de bibliothèques créés pour chaque hackathon sont assez différents, nous ne préparons donc que des conteneurs de base et laissons le reste aux membres de l'équipe.

$ docker build -t sshd_image . 
$ docker run --privileged -d -p 2222:22 sshd_image

Cela démarrera Docker et exécutera ssh sur le port 2222. Il y a un point qui me donne l'impression que ** Il n'y a que 22 ports pour ssh à transmettre. ** Cela contredira l'histoire précédente. Il n'y a aucun moyen pour le serveur sur Docker de recevoir une requête d'une IP globale, même s'il dit "il vaut mieux construire avec des microservices". Par conséquent, il existe de nombreuses incertitudes lors du fonctionnement sans savoir combien de serveurs se présenteront comme Hackason. Alors, y a-t-il un moyen d'ajouter la redirection de port plus tard dans Docker? (Référence). Cependant, cette méthode est une méthode de falsification du serveur du vaisseau mère sur lequel le docker fonctionne, et si possible, c'est une méthode que je ne veux pas faire. Dans la section suivante, nous allons vous présenter comment résoudre ce problème ** "Je veux fonctionner avec docker, mais je veux augmenter le nombre de ports à publier après le démarrage du conteneur" **.

Dois-je également prendre la peine de réparer sshd avec ce contenu avec Docker? On dit qu'il y en a. Le temps est la chose la plus précieuse dans un hackathon. Par conséquent, ** "Oh, j'ai eu une erreur ssh. Autorisation refusée. Oh, je comprends. J'ai fait une erreur dans l'autorité de authorised_keys. Je le fais souvent. Chmod 600." Je n'ai pas le temps de le faire **. Si vous passez du temps dans un endroit aussi ennuyeux, il est plus pratique d'utiliser un produit stable.

Redirection de port (ngrok)

image.png https://ngrok.com/

En un mot, c'est un service qui ouvre le port globalement. ** ** Par exemple, si vous souhaitez publier le port 80 de localhost dans Docker, téléchargez simplement le binaire du site officiel ci-dessus et tapez la commande suivante, et le port sera publié avec https.

$ ./ngrok http 80
ngrok by @inconshreveable                                                                                                                                                                                       (Ctrl+C to quit)

Session Status                online
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://2c8b91ae.ngrok.io -> localhost:80
Forwarding                    https://2c8b91ae.ngrok.io -> localhost:80

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

Seulement ça! Maintenant, lorsque vous accédez à https://2c8b91ae.ngrok.io, vous pouvez faire voler l'accès au port 80 de localhost dans Docker. Vous pouvez désormais acheminer autant de ports que vous le souhaitez dans Docker dans le monde! Aucune inscription d'utilisateur requise! ** ** ngrok lui-même a diverses restrictions dans le plan gratuit, mais cela n'a pas tellement d'importance pour une utilisation dans les hackathons. Cependant, une chose à noter est que le domaine du plan gratuit change de manière aléatoire à chaque démarrage. Par conséquent, il est nécessaire d'implémenter une fonction qui peut changer le domaine du client, ou de maintenir le processus en cours d'exécution afin que le domaine de ngrok une fois démarré côté serveur ne change pas.

Serveur statique (python)

image.png

Si vous souhaitez créer une application Web, un serveur statique est nécessaire pour stocker les images et les fichiers js. Même si ce que vous souhaitez créer n'est pas une application Web, il peut être pratique d'avoir un serveur sur lequel vous pouvez facilement voir l'état actuel de l'interface utilisateur avec un navigateur de smartphone au cas où le concepteur voudrait vérifier l'interface utilisateur sur un smartphone. En général, nginx est stable et rapide lors de la maintenance de fichiers statiques, mais personnellement, il est difficile à introduire. Donc je,

$ python3 -m http.server

Je vais me lever avec. Cela exposera le répertoire exécuté tel qu'il est sur le port 8000. Par conséquent, si vous placez html, css et js dans le même répertoire, vous pouvez les voir immédiatement. Si vous transférez le port avec ngrok plus tôt, il n'y a aucun problème à le voir.

Transfert de fichiers (Cyberduck)

image.png

https://cyberduck.io/index.ja.html?l=ja

Un client scp GUI qui s'exécute à la fois sur Mac et Windows. En fait, c'est aussi la raison pour laquelle ssh fonctionnait dans l'environnement partagé plus tôt, et je pense qu'il est pratique pour les concepteurs de pouvoir transférer des fichiers en utilisant l'interface graphique avec Cyberduck. Cela a également un mérite du côté du développement, et si un ingénieur prend la peine de mettre les données en production, cela prendra du temps et le concepteur devra également "attendre". Cela réduira l'efficacité du développement de produits. Par conséquent, il peut être avantageux pour les deux concepteurs de leur permettre de se déployer par eux-mêmes.

Architecte Hackason BE

** Micro service recommandé pour 1 serveur par personne **

Faire. Il y a trois raisons

** 1. Coûteux à combiner le code ** ** 2. Vous pouvez tirer le meilleur parti de votre force personnelle et de votre environnement ** ** 3. Lorsque le développement devient difficile, il est facile de dégraisser la fonction **

En tant qu'expérience personnelle, la partie combinée du code prend souvent le plus de temps. Chez Hackerson, j'attache une grande importance à «l'écriture de code de travail», et dans de nombreux cas, la division des classes et la structure du programme sont à mi-chemin, et le code n'est pas aussi beau que l'écriture au travail. Par conséquent, plusieurs personnes touchent le même code source ou l'interface de la fonction est modifiée sans autorisation en raison d'un manque de fonctions et des conflits se produisent fréquemment. Des conflits et des corrections se produisent chaque fois que quelqu'un touche le code lors d'un hackathon, ce qui ralentit le développement. De plus, si le code reste bloqué en raison de l'extraction de github et qu'il faut du temps pour le récupérer, le produit ne fonctionnera pas du tout pendant longtemps et il peut être mentalement acculé. Par conséquent, "** Évitez la fusion de code si possible " " Même si vous effectuez une fusion de code, faites attention à la conception de l'interface de classe et à la granularité de la division des fonctions, et évitez de toucher le même code source * * "C'est ma stratégie personnelle. Avec l'approche «éviter de fusionner du code si possible» dont j'ai parlé plus tôt, comment combiner fonctionnellement dans un état de développement multijoueur? Il devient. Ma solution personnelle est ** mieux combinée en tant que microservice **. Je pense qu'il est plus facile de construire avec la soi-disant API REST. Créer une API REST au niveau du produit réel est assez difficile. Récupération de la validation des variables et gestion correcte des erreurs. Il y a de nombreux points à considérer, tels que l'ingéniosité pour créer une API avec état. Cependant, dans le cas de Hackason, c'est une prémisse majeure que cela fonctionne, de sorte que ce côté peut être complètement ignoré. Personnellement, je pense que le plus simple est de diviser les points d'entrée de POST et d'URL, et d'utiliser json comme corps. L'idée est **. Dans la plupart des langages de programmation, vous pouvez demander http et créer json. Du côté du serveur, http peut être reçu normalement, et l'analyse de json est également un langage standard, vous n'avez donc pas à y penser beaucoup. En raison des caractéristiques des hackers, ils sont souvent «techniquement contestés». Par exemple, les nouveaux gadgets, les bibliothèques d'apprentissage automatique et d'autres défis sont intéressants, mais ils restent souvent bloqués dans l'environnement. Il est vraiment difficile de rester coincé dans cet environnement et le produit peut ne pas fonctionner du tout. Si un grand nombre de personnes utilisent un environnement de développement partagé et que chaque personne commence à installer la bibliothèque à sa guise, ce qui fonctionnait peut ne pas fonctionner. ** Par conséquent, il est facile de créer quelque chose qui fonctionne comme un produit en assemblant un serveur et une fonction par personne. ** Cela a plusieurs avantages, et comme le serveur est configuré par chaque individu, il est facile de créer dans un environnement de développement qui est facile pour les individus et d'exécuter le produit, de sorte que la vitesse de développement est facile. De plus, si vous effectuez un micro-service et que vous associez les modules de manière lâche, lorsqu'une fonction ne fonctionne pas et qu'il n'y a pas d'aide, le module ** est séparé au niveau du serveur et dégraissé pour en faire un produit. Vous pouvez éviter "le produit ne fonctionne pas" **. Mais ce ne sont vraiment que côté serveur. Le partage de code est essentiel pour le développement iOS et Android. En fait, c'est aussi un problème personnel, et si vous créez une application pour smartphone avec un grand nombre de personnes dans ** Hackason, vous verrez souvent l'enfer (en particulier autour de l'interface graphique). ** Par conséquent, dans le cas des applications pour smartphone, il existe une section où l'un des développeurs qui connectent les fonctions finales a besoin de beaucoup de puissance.

Conseils de hackason petits mais importants

Assurez-vous d'installer l'environnement de développement, les bibliothèques et d'exécuter le didacticiel à l'avance.

Si vous créez un environnement de développement ou installez une bibliothèque lors d'un hackathon, peu importe le temps dont vous disposez, cela ne suffira pas. Faisons-le d'abord. En outre, une fois que vous avez créé l'exemple de code et que vous vous êtes assuré qu'il fonctionne, vous pouvez vous concentrer sur la création.

Le matériel Gadget permet à plusieurs personnes de déplacer la même chose

Le matériel de démarrage récent est intéressant, et les produits qui utilisent un tel matériel ressemblent à "Hackason". Cependant, si un tel matériel est adopté comme produit Hackason, le produit sera moribond s'il ne fonctionne pas bien. Par conséquent, permettons à quelques personnes de se déplacer, pas à une seule personne.

Assurez-vous de préparer 3 ou 4 pièces de rechange pour le travail électronique

Je n'ai moi-même jamais fait de travail électronique chez Hackason, mais les pièces sont cassées. Il est (apparemment) bon d'en préparer plus d'un.

Abandonnez "l'apprentissage" de l'apprentissage automatique

Le hackason dure une journée au plus long et environ 5 heures au plus court. Dans de telles circonstances, l'apprentissage automatique et le réglage des paramètres sont sans espoir. Utilisez autant que possible ceux existants.

Apportez une prise électrique et une connexion Wi-Fi portable

Les hackers sont de plus en plus répandus, mais pas autant. Ce ne sont pas seulement les participants mais aussi les opérateurs. Par conséquent, la direction a également peu de savoir-faire et le nombre de sources d'énergie sur le site du hackathon est insuffisant. Le wifi tombe en panne et le développement ne se poursuit pas. C'est aussi une bonne affaire. Par conséquent, afin de se développer en douceur, nous voulons au moins une prise de courant. Si vous avez également un Wifi portable, il sera à sécurité intégrée.

Je pense que nous allons commencer petit et pivoter

Lorsque je fabrique un produit chez Hackason, je veux vraiment faire quelque chose d'extraordinaire, mais c'est assez difficile. Par conséquent, je pense qu'il est plus facile de restreindre le concept et de simplement viser à percer une fonction. Cependant, sa fonction ne fonctionne souvent pas bien. Par conséquent, il est conseillé de considérer les 2e et 3e plans dans une certaine mesure afin que le basculement puisse être effectué.

Évitez les hackers qui créent des équipes le jour même

** Ceci est mon opinion personnelle, mais je pense que le hackathon que l'équipe construit sur la journée a un fort facteur de chance, et même si vous êtes habitué au hackathon, ce sera difficile. ** Non recommandé, en particulier pour les débutants et les nouveaux participants. Que vous attribuiez une tâche à l'autre partie ou que vous receviez une tâche de l'autre partie, vous ne pouvez pas déterminer le point de détérioration de la qualité du produit final à moins que les capacités de chacun ne soient claires. Par conséquent, dans le cas d'une équipe pressée, les membres peuvent s'abstenir les uns des autres et le produit peut ne pas avoir beaucoup de fonction, ou les opinions les uns des autres peuvent entrer en conflit et le démarrage du produit peut ne pas commencer du tout. Personnellement, j'ai besoin d'environ 3 ou 4 membres principaux qui sont proches et peuvent échanger des opinions franchement, et si je garde l'ingénieur d'application, l'ingénieur backend et le concepteur, je peux profiter du hackathon en toute confiance. Je vais.

Même si je vois un produit qui ne fonctionne pas, il ne touche pas mon cœur

Évitez "J'ai essayé de le faire, mais ce n'était pas terminé." Selon la forme du hackathon, une fois le concours terminé, certains produits seront exposés et appréciés par le grand public. À quoi s'attend le grand public qui vient à un tel événement? Peut-être que beaucoup de gens veulent expérimenter "Je peux faire quelque chose comme ça en peu de temps! C'est incroyable!" "Je n'ai jamais vu un tel service!" Si le produit ne fonctionne pas dans un tel cas, cela donnera une sensation très décevante. Je pense que c'est probablement le cas des hackers et des juges. ** Passons au moins assez à la démonstration. ** est mon opinion personnelle.

Résumé

J'ai parlé de problèmes techniques dans cet article, mais il existe d'autres savoir-faire en matière de hackason que vous devriez connaître dans une certaine mesure. Vous n'êtes pas obligé de le garder, mais si vous le savez, vous pouvez profiter du hackathon. ** La meilleure façon d'apprendre est de participer à un hackathon. Profitons du hackathon! Hackons le temps! !! ** **

Recommended Posts

C'est bon de participer pour la première fois! Un kit de démarrage hackason que vous souhaitez préparer "avant" de participer au hackason!
Enregistrer une tâche dans cron pour la première fois
Lorsque vous voulez plt.save dans l'instruction for
Je souhaite créer une base de données de déjeuners [EP1] Django pour la première fois
Je souhaite créer une base de données de déjeuner [EP1-4] Django pour la première fois
Je veux créer un Dockerfile pour le moment.
Notez que vous souhaitez décorer manuellement les paramètres passés dans le formulaire du modèle Django élément par élément
[Salut Py (Partie 1)] Je veux faire quelque chose pour le moment, alors commencez par fixer un objectif.
[Pour les débutants chez AtCoder] Parlez de la quantité de calcul que vous voulez connaître approximativement
Pour la première fois dans Numpy, je vais le mettre à jour de temps en temps
Une note utile lors de l'utilisation de Python après une longue période
MongoDB avec Python pour la première fois
Jusqu'à ce que vous gagniez la médaille d'argent (top 3%) dans le concours auquel vous avez participé dans un délai d'un mois pour la première fois en science des données!
Gérez CSV avec l'élément que vous souhaitez analyser dans le nom du fichier
Affichons un template simple idéal pour le premier Django
Comment utiliser MkDocs pour la première fois
Essayez de publier sur Qiita pour la première fois
Comment trouver le premier élément qui correspond aux critères de la liste Python
Notez ce que vous voulez faire à l'avenir avec Razpai
Je veux déplacer le sélénium pour le moment [pour mac]
Résumé des points d'achoppement à Django pour la première fois
Mettre le processus en veille pendant un certain temps (secondes) ou plus en Python
Code dont j'aurais aimé me souvenir lors de ma première participation à AtCoder (Réflexion 1 pour la prochaine fois)
Paramètres d'exécution d'un test à chaque fois que vous enregistrez un fichier dans l'éditeur à l'aide de watchmedo (chien de garde)
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django
"Curly and Bazaar" que seuls ceux qui travaillent dans une entreprise solide veulent lire
Comment résoudre le problème qui se passe mal à chaque fois que vous mettez sous tension Linux
Ce que j'ai appris en écrivant une Pull Request Python pour la première fois de ma vie
Si vous êtes novice en programmation, pourquoi ne pas créer un "jeu" pour le moment? L'histoire