Cómo simplifiqué el proceso de trabajar en proyectos de código abierto


En este artículo, le contaré cómo intenté participar en el desarrollo de algún proyecto importante de código abierto, me odié a mí mismo, y luego automaticé la rutina y aprendí a disfrutar la vida. Detalles - debajo del corte.


¿Por qué es esto necesario?


Por lo general, los desarrolladores desean participar en la comunidad de código abierto por varias razones. Aquí hay algunos (y probablemente no todos):


  • en agradecimiento por la oportunidad de usar este y otros programas gratis
  • ganando nueva experiencia
  • para bombear tu currículum

Siempre me atrajo principalmente la oportunidad de aprender algo nuevo, de absorber las mejores prácticas en el desarrollo de software, pero todo lo demás es un apéndice no menos agradable en este proceso.


OK, estoy en el negocio, ¿por dónde empiezo?


Lo primero que debe hacer es encontrar una tarea en la que trabajar. Usted es realmente afortunado, si necesita modificar alguna biblioteca para sus necesidades de trabajo: comience una tarea, discuta con los propietarios y comience la implementación. De lo contrario, puede consultar la lista de tareas abiertas en la página del proyecto y elegir algo para usted. Encontrar el correcto no es menos importante que su implementación, y aquí no es tan simple. Incluso si es un ingeniero experimentado, puede ser útil comenzar con tareas más simples, familiarizarse con la base del código, los procesos de desarrollo aceptados y solo luego adquirir una función más grande.


¿Cómo encontrar tareas para principiantes?


Hace algún tiempo, github comenzó a mostrar tareas adecuadas para principiantes.


Puede verlos desde el anuncio en el encabezado de la página de problemas


Y aquí está nuestra página atesorada


Habiendo establecido estas "herramientas", mi día habitual comenzó a verse así: abrí la lista de proyectos en los que quería trabajar (para tenerlos a mano, los marqué todos con pequeñas estrellas), fui a la sección anterior o busqué en las etiquetas de búsqueda que necesitaba, buscando simultáneamente los que se usan en este proyecto en particular. No hace falta decir que recorrer alrededor de 40-60 repositorios me costó muchísimo y rápidamente me aburrió. En el proceso, me puse irritable, perdí la paciencia y abandoné esto. En uno de estos días, me di cuenta de que podía automatizar el proceso de búsqueda y procedí a compilar un TOR.


Requisitos


  • La tarea debe estar abierta.
  • La tarea no está asignada a nadie.
  • La tarea debe etiquetarse con simplicidad y apertura a la comunidad.
  • La tarea no debe ser demasiado antigua.

Después de eso, comencé a analizar diferentes repositorios para las etiquetas utilizadas. Resultó que hay una gran cantidad de etiquetas diferentes, algunas de las cuales son exclusivas de repositorios / organizaciones específicas. Distingue entre mayúsculas y minúsculas, compilé una lista de ~ 60 etiquetas


Desarrollo de soluciones


Como herramienta, decidí usar Kotlin, que ya me era familiar, e implementé el siguiente algoritmo: revise todos los repositorios marcados con un asterisco, obtenga todas las tareas que cumplan con los requisitos desde allí, ordene por la fecha de cambio, descarte los viejos y muéstrelos. La lista resultante está dividida por marcas de tiempo - para hoy, para ayer, para la semana pasada, para el mes y todo lo demás - gracias a esto se ha vuelto mucho más conveniente usar el programa de manera regular. Decidí que en la primera etapa, la aplicación será una utilidad de consola, por lo que la salida va solo a stdout.


Envolví el resultado en una imagen acoplable, esperando que una persona tenga más probabilidades de tener un acoplador instalado que JRE. La utilidad no almacena ningún estado, por lo que cada lanzamiento ejecutará el algoritmo completo, y el contenedor gastado se puede eliminar de forma segura del sistema.


Así es como funciona el programa:


imagen


Límite de solicitud


Una llamada a una API de terceros es un ejemplo clásico de una tarea intensiva en io, por lo que, naturalmente, se decidió comenzar a cargar datos en varias transmisiones. A través de prueba y error, conocí las limitaciones de la API de Github. En primer lugar, con una gran cantidad de subprocesos, se activó la verificación anti-abuso en el lado de Github y tuve que detenerme en 10 subprocesos de forma predeterminada, con la posibilidad de configuración a través de argumentos de entrada.


En segundo lugar, hay un límite en el número de solicitudes: no se pueden realizar más de 5000 por hora. Con esta limitación, todo es mucho más complicado, ya que al pasar varias etiquetas a una consulta de búsqueda, Github coloca un 'Y' lógico entre ellas y, dada la cantidad de etiquetas en la lista, no encontrará nada con casi un 100% de probabilidad. Ante un gran desperdicio de llamadas a la API, comencé a hacer una solicitud adicional para todas las etiquetas que están en el proyecto, tomar la intersección con mi lista y tareas de solicitud pieza por pieza solo para estas etiquetas. Al agregar 1 solicitud a cada repositorio, eliminé 50-55 solicitudes adicionales (cuantas más etiquetas admite el programa, más solicitudes adicionales) para tareas en etiquetas que no existen para el repositorio.


Sin embargo, para algunos usuarios, esta optimización puede no ser suficiente. Según una evaluación superficial, la solución actual le permite omitir 1000 repositorios (también hay una restricción estricta en el código), esperando que en promedio haya 4 etiquetas simples en cada repositorio. Nadie ha encontrado tal restricción hasta el momento, pero la idea de una solución está en la cartera de pedidos. Aquí todo es simple: almacenar el estado, almacenar en caché las respuestas, en casos especialmente difíciles, pasar por alto lentamente en segundo plano.


¿Cómo encontrar repositorios?


Si aún no es un usuario tan activo de Github, o si no utiliza la funcionalidad de estrellas, aquí hay algunos consejos para encontrar los repositorios correctos:


  • Recorre las tecnologías que usas en tus proyectos, tal vez algunas de ellas se presentan en Github
  • Usa la sección de tendencias populares
  • Utilice el repositorio de listas increíbles para los temas que le interesan.

Lanzamiento


Para comenzar, necesitarás:


  • tener docker instalado en la computadora
  • escriba un token API, puede hacerlo en la página de configuración de Github correspondiente
  • iniciar el contenedor pasando su token de acceso a través de los parámetros

    docker pull igorperikov/mighty-watcher:latest docker run -e TOKEN={} --rm igorperikov/mighty-watcher:latest 

Otras configuraciones (filtro por idioma, nivel de paralelismo, lista negra de repositorios) se pueden encontrar en la página del proyecto. Enlace al proyecto .


Si le faltan algunas etiquetas en el proyecto, cree un PR o escríbame en un mensaje personal, agregaré.

Source: https://habr.com/ru/post/473208/


All Articles