Participar en proyectos de software libre

........

Moderator
Hola!

¿Sabéis si hay alguna página donde encontrar proyectos de software libre en los que poder colaborar?

Gracias, :)
 

Hijitusolvidosupass

I WANT CHAFLA BACK
Hola!

¿Sabéis si hay alguna página donde encontrar proyectos de software libre en los que poder colaborar?

Gracias, :)
Participar en proyectos de software libre no es tan fácil, lamentablemente. Normalmente el sitio de referencia es github y normalmente requiere sentirte cómodo con git y entender cómo funcionan los forks y las pull requests. No es nada especial y no cuesta entenderlo, pero hay que tenerlo en cuenta.

Luego, la mayoría de proyectos de software libre medianamente interesantes tienen su política especial para PR. No aceptan cualquier tipo de aportación y desde luego, no en cualquier formato: Tienes que seguir su guía de estilo y documentar y hacer tests en los casos que aplica.

Esos mismos proyectos, suelen tener una lista de "Issues" con tags. Algunos marcan las tags con niveles de dificultad. Te recomiendo que busques ese tipo de proyectos y que agarres las que tengan nivel de dificultad fácil. Y si es posible, las que tengan que ver con documentar y/o crear tests, al menos hasta que te hagas al código del proyecto: Suelen ser muy grandes y es poco realista esperar hacer una aportación significativa sin experienca previa en él.

Dicho esto, no te recomiendo colaborar en proyectos de C++ a menos que tengas encima unos cuantos años de experiencia profesional con una versión moderna del lenguaje (C++11 en adelante). C++ es un lenguaje con una comunidad muy experta y con una curva de aprendizaje nada amigable para gente que recién empieza. Y en general, suelen seguir guías de estilo muy rígidas que son difíciles de agarrar sin haber estado en la industria un par de años.

Python es otra cosa. Para python léete el PEP8 (la guía de estilo más utilizada) e interiorízala. Un ejemplo de un proyecto que uso día a día: Scrapy. Una librería para hacer crawlers de páginas webs. TIenen un tag ("easy") con el marcan tareas fáciles: https://github.com/scrapy/scrapy/labels/easy.
 

Hijitusolvidosupass

I WANT CHAFLA BACK
Si estás empezando te recomiendo mejor algo del tipo Free Code Camp o algo así, para ayudar a ONGs. Lo digo básicamente porque es raro que los proyectos de cierta entidad admitan commits a la ligera.
Y sigue el consejo de HDP. Al menos hasta que tengas suficiente soltura con git(hub) y que te sientas cómoda con las rarezas de la comunidad de software libre (que son muchas).
 

Vaina Loca

New member
Oh baby, usas scrapy?

Yo no tengo ni papa de JS pero estoy esperando que alguien le meta mano a esta maravilla, y la ponga en serio: https://github.com/martinsbalodis/web-scraper-chrome-extension

Le faltan muchísimas cosas, pero he conseguido scrapear datasets enormes con esa movida, aunque hay una cosa que no entiendo, y es cómo guarda los datos en CouchDB. No aparecen en la BD hasta que no terminó el trabajo, y eso me parece extraño. No sé si es que CouchDB funciona así, o qué carallo hace.

Es lo único que he encontrado que me permite scrapear rápido cuando una web te bloquea el scraper de mil maneras. La extensión esta, lo que hace literalmente es cargar las urls con chrome directamente. Se lo traga TODO.

La putada es que le faltan mil funciones, necesitas GUI sí o sí (tampoco es un drama con los precios de cloud que hay ahora, te pillas una vm por dos duros) y es más lento.


Ah, y para empezar guay con python recomiendo "automate the boring stuff with python". Es cremita.
 
Última edición:

Hijitusolvidosupass

I WANT CHAFLA BACK
Oh baby, usas scrapy?

Yo no tengo ni papa de JS pero estoy esperando que alguien le meta mano a esta maravilla, y la ponga en serio: https://github.com/martinsbalodis/web-scraper-chrome-extension

Le faltan muchísimas cosas, pero he conseguido scrapear datasets enormes con esa movida, aunque hay una cosa que no entiendo, y es cómo guarda los datos en CouchDB. No aparecen en la BD hasta que no terminó el trabajo, y eso me parece extraño. No sé si es que CouchDB funciona así, o qué carallo hace.

Es lo único que he encontrado que me permite scrapear rápido cuando una web te bloquea el scraper de mil maneras. La extensión esta, lo que hace literalmente es cargar las urls con chrome directamente. Se lo traga TODO.

La putada es que le faltan mil funciones, necesitas GUI sí o sí (tampoco es un drama con los precios de cloud que hay ahora, te pillas una vm por dos duros) y es más lento.

De hecho, actualmente estoy scrapeando Badoo y ni me han bloqueado ni nada.


Ah, y para empezar guay con python recomiendo "automate the boring stuff with python". Es cremita.
Creo que no merece la pena, más que nada porque dentro de poco (cruzo dedos) Google va a sacar una versión de chrome headless: https://www.chromestatus.com/features/5678767817097216 que básicamente hace lo que tú estás pidiendo: Ser capaz de correr Chrome sobre una URL de manera programada sin tener que usar una GUI. Seguramente muchas tareas de scrapping y end to end testing se muevan ahora a eso y se alejen de ese tipo de soluciones. De hecho, el principal desarrollador de PhantomJS ya anunció que dejará de mantener el proyecto como resultado de eso: https://groups.google.com/forum/#!topic/phantomjs/9aI5d-LDuNE. Lo interesante va a ser poder usar eso junto con Selenium (por ejemplo) para hacer este tipo de tareas. Sé que no es una solución para ahora, pero te en cuanto salga será LA solución :D (al menos hasta que te encuentres con los típicos tests contra bots). Yo ya me estoy preparando mi framework para trabajar con él con las versiones inestables. Promete promete.

Sobre ChouchDB: Seguramente sea porque no cierra la transacción hasta el final. Es decir, no hace el COMMIT de los cambios hasta que termina con todo. Así que todo lo que agregó previamente no es visible mientras va corriendo. Seguramente si te pones a mirar las conecciones abiertas y qué hacen, eso te baste.

Ése tutorial sobre Python mola mucho. De hecho, es mejor consejo que lo de empezar a colaborar en software libre. No sé si es el caso de la autora del hilo, no conozco su background, pero últimamente se puso de moda decirle a gente que recién empieza a programar que un buen modo de aprender es hacer colaboraciones en proyectos libres y es un consejo horrible. No se me ocurre un mejor modo de asustar a alguien que recién empieza y conseguir que no quiera saber nada sobre programación.

P.D.: Si te vas a poner en serio con tu idea de una web de contactos definitivamente y necesitas alguien que te dé una mano en el lado técnico, me encantaría participar.
 

Vaina Loca

New member
Creo que no merece la pena, más que nada porque dentro de poco (cruzo dedos) Google va a sacar una versión de chrome headless: https://www.chromestatus.com/features/5678767817097216 que básicamente hace lo que tú estás pidiendo: Ser capaz de correr Chrome sobre una URL de manera programada sin tener que usar una GUI. Seguramente muchas tareas de scrapping y end to end testing se muevan ahora a eso y se alejen de ese tipo de soluciones. De hecho, el principal desarrollador de PhantomJS ya anunció que dejará de mantener el proyecto como resultado de eso: https://groups.google.com/forum/#!topic/phantomjs/9aI5d-LDuNE. Lo interesante va a ser poder usar eso junto con Selenium (por ejemplo) para hacer este tipo de tareas. Sé que no es una solución para ahora, pero te en cuanto salga será LA solución :D (al menos hasta que te encuentres con los típicos tests contra bots). Yo ya me estoy preparando mi framework para trabajar con él con las versiones inestables. Promete promete.

Sobre ChouchDB: Seguramente sea porque no cierra la transacción hasta el final. Es decir, no hace el COMMIT de los cambios hasta que termina con todo. Así que todo lo que agregó previamente no es visible mientras va corriendo. Seguramente si te pones a mirar las conecciones abiertas y qué hacen, eso te baste.

Ése tutorial sobre Python mola mucho. De hecho, es mejor consejo que lo de empezar a colaborar en software libre. No sé si es el caso de la autora del hilo, no conozco su background, pero últimamente se puso de moda decirle a gente que recién empieza a programar que un buen modo de aprender es hacer colaboraciones en proyectos libres y es un consejo horrible. No se me ocurre un mejor modo de asustar a alguien que recién empieza y conseguir que no quiera saber nada sobre programación.

P.D.: Si te vas a poner en serio con tu idea de una web de contactos definitivamente y necesitas alguien que te dé una mano en el lado técnico, me encantaría participar.
Buah chaval, no sabía eso. Los test contra bots, a ver, si pones un delay random en X milisegundos, tampoco creo que se maten. Sería peor el remedio que la enfermedad.

Buf puede ser la caña, le voy a echar un ojo a eso.

En cuanto a la web, de momento sólo estoy recogiendo mucho datos, para hacer análisis, publicarlos, hacer PR, recoger lo sembrado en listas de mailing, etc. Para que te hagas una idea, una vez publiqué una chorrada en menéame y pillé como 200 correos o así. No diría que eso valida la idea pero no va por mal camino, aunque eso no quita que tenga algo de miedo de ir justo en dirección contraria a la que va todo el mundo.

En cuanto al stack no lo tengo muy claro aún. Yo sólo soy un noob con python y R, asi que ya me contarás. Pensado un poco en el schema y leyendo mucho, de momento sólo tengo claro que usaré PostgreSQL lo más probable. La idea era no matarse a reinventar la rueda, pero paso de usar los CMS que hay para este tipo de webs, asi que estaba pensando en montarlo sobre MyBB, que no está pensado para esto, pero es muy fácil de modificar en todos los sentidos (el sistema de plantillas es para bebés, y se modifica con el rabo, le puedes dar el aspecto que quieras) y está más cerca de lo que yo quiero hacer que un CMS que copie a Badoo. Realmente sólo habría que cambiar el frontend, y añadir unas cuantas funcionalidades (nada demasiado chungo, básicamente dotar a los perfiles de un sistema similar al de badoo, y permisos de privacidad para los usuarios).

De todas formas usar el CMS de un foro para esto es algo que no sé. Supongo que estoy contagiado con el rollito startapil de pillar a unos fulanos a picar código con una nosql, nodejs y tal pascual, pero es que va a ser bootstrapped y tiene que ser lo más fácil de mantener posible.

Realmente un LAMP no tiene complicación, no preveo un tráfico brutal donde PHP sea un problema, he descartado MySQL por motivos de sobra conocidos

Lo único que veo más complicado es el backoffice, que requeriría de montar un data warehouse y tal y no sé. Yo sólo he tocado estas movidas con ERPs y temas así, no sé qué me puedo encontrar con una app corriento 24/7 con peña leyendo y escribiendo en la BD, cómo montar ese tinglao, pero ya se me ocurrirá algo.


Por cierto, he descubierto cloud en españa en condiciones, mira esto: https://clouding.io/

Me han dicho que van a tener snapshots para verano, pero bueno yo ya los estoy probando.
 
Última edición:

........

Moderator
Muchas gracias por toda la info! Le he echado un ojo a Free Code Camp y es realmente muy interesante. Voy a registrarme y a hacer el curso completo ahora que tengo tiempo, :)
 

Vaina Loca

New member
Muchas gracias por toda la info! Le he echado un ojo a Free Code Camp y es realmente muy interesante. Voy a registrarme y a hacer el curso completo ahora que tengo tiempo, :)
Lo que aprendes ahi es javascript. Centrate primero en python. Busca algo similat en python y centrate en dominarlo.
 

Hijitusolvidosupass

I WANT CHAFLA BACK
Buah chaval, no sabía eso. Los test contra bots, a ver, si pones un delay random en X milisegundos, tampoco creo que se maten. Sería peor el remedio que la enfermedad.

Buf puede ser la caña, le voy a echar un ojo a eso.

En cuanto a la web, de momento sólo estoy recogiendo mucho datos, para hacer análisis, publicarlos, hacer PR, recoger lo sembrado en listas de mailing, etc. Para que te hagas una idea, una vez publiqué una chorrada en menéame y pillé como 200 correos o así. No diría que eso valida la idea pero no va por mal camino, aunque eso no quita que tenga algo de miedo de ir justo en dirección contraria a la que va todo el mundo.

En cuanto al stack no lo tengo muy claro aún. Yo sólo soy un noob con python y R, asi que ya me contarás. Pensado un poco en el schema y leyendo mucho, de momento sólo tengo claro que usaré PostgreSQL lo más probable. La idea era no matarse a reinventar la rueda, pero paso de usar los CMS que hay para este tipo de webs, asi que estaba pensando en montarlo sobre MyBB, que no está pensado para esto, pero es muy fácil de modificar en todos los sentidos (el sistema de plantillas es para bebés, y se modifica con el rabo, le puedes dar el aspecto que quieras) y está más cerca de lo que yo quiero hacer que un CMS que copie a Badoo. Realmente sólo habría que cambiar el frontend, y añadir unas cuantas funcionalidades (nada demasiado chungo, básicamente dotar a los perfiles de un sistema similar al de badoo, y permisos de privacidad para los usuarios).

De todas formas usar el CMS de un foro para esto es algo que no sé. Supongo que estoy contagiado con el rollito startapil de pillar a unos fulanos a picar código con una nosql, nodejs y tal pascual, pero es que va a ser bootstrapped y tiene que ser lo más fácil de mantener posible.

Realmente un LAMP no tiene complicación, no preveo un tráfico brutal donde PHP sea un problema, he descartado MySQL por motivos de sobra conocidos

Lo único que veo más complicado es el backoffice, que requeriría de montar un data warehouse y tal y no sé. Yo sólo he tocado estas movidas con ERPs y temas así, no sé qué me puedo encontrar con una app corriento 24/7 con peña leyendo y escribiendo en la BD, cómo montar ese tinglao, pero ya se me ocurrirá algo.


Por cierto, he descubierto cloud en españa en condiciones, mira esto: https://clouding.io/

Me han dicho que van a tener snapshots para verano, pero bueno yo ya los estoy probando.
PostgreSQL me sorprendió muchísimo. Lo empecé a usar hará un año cuando empecé a currar en Sortable y superó mis expectativas por mucho: Con un solo servidor estamos haciendo reportes bastante complejos sobre 9 millones de rows de información por día en menos de un segundo. Mucho respeto. El único problema que le veo es que convertirlo en cluster es un dolor de huevos, pero al mismo tiempo... Si necesitas más de un servidor de PostgreSQL para ser eficiente seguramente es porque ya es momento de pasarse a NoSQL. En fin, que me parece una sabia elección. Te molará.

Personalmente, creo que te saldrá lo mismo (en cuanto a tiempo y dinero) modificar un sistema de foros que hacer la web desde el principio. En principio, una página de contactos no tiene muchos requisitos (y lo interesante de tu propuesta está en el modelo y en estudio del panorama y no en que sea una solución compleja) así que su desarrollo no debería llevar mucho a alguien con mediana experiencia. Por otra parte, modificar cosas MyBB puede ser un dolor de huevos porque a menudo vienen con una carga técnica que no te interesa y a la que tienes que esquivar durante el desarrollo.

Dicho esto, en mi experiencia, PHP y nodeJS tienen un problema: Si no te haces con alguien que sabe (y que sabe bien) acabas contrayendo una cantidad de deuda técnica importante. En general lo msimo para cualquier lenguaje de programación de tipado débil. Puede ser muy doloroso. Si usas cosas como hints en PHP 7 o Typescript en lugar de Javascript ya es otro cantar, pero aún así... casi mejor irte de entrada a soluciones con tipado más estricto. Aunque bueno, también es cierto que para hacer PoC rápidas, son quizá la mejor elección.

El backoffice es más complejo y depende de qué tareas tengas que hacer con él. En general, la práctica más extendida es que no sea la misma base de datos que la que usa la aplicación si no que la segunda sea una versión agregada de la primera y así te evitas el lío de tener que coordinar dos proyectos paralelos leyendo y escribiendo en la misma base de datos al mismo tiempo.

Por cierto, ayer le eché un ojo a ése clouding y parece interesante. La usaré en alguno de mis proyectos españoles. Me alegra que por fin salgan ese tipo de empresas en el país, sueño con poder tener la cultura de startups que hay en el resto de Europa en España :). Ojala les vaya bien.

Muchas gracias por toda la info! Le he echado un ojo a Free Code Camp y es realmente muy interesante. Voy a registrarme y a hacer el curso completo ahora que tengo tiempo,
Lo bueno de Free Code Camp es que está bien enfocado En vez de tirarte ejercicios tontos centra el curso en desarrollar proyectos de dificultad incremental y que son parecidos a cosas que harías en la industria normalmente. Y ése me parece un modo mucho más efectivo de mejorar en el área que, por ejemplo, colaborar en software libre. No necesitas la página en sí mientras te concentres en ese modelo: Agarra un proyecto que te interese y hazlo. Por ejemplo, si no me falla la memoria eres vegetariana. Busca por Internet cómo usar Flask y sqlalchemy y crea una página web simple, desde el principio, donde publicar recetas vegetarianas. O invierte 100 euros, consíguete una RaspberryPI y un disco USB y créate un sistema de backups que comprima a diario tu carpeta, la envíe a la RaspberryPI y la guarde por fecha en el disco USB. Puedes crearte un pequeño servidor ahí que te permita consultar desde tu computadora las últimas backups y su contenido. O mejor, lee sobre la API de Blender para Python y haz una versión en 3D de Space Invaders.

Pero yo me enfocaría en eso: Un proyecto de complejidad intermedia (es decir que puedas hacer y que se parezca más a algo real que una tarea de clase) e intentar hacerlo. Ya sea con cosas como Free Code Camp o por tu cuenta. Aprendes muchísimo en el proceso.
 

Hijitusolvidosupass

I WANT CHAFLA BACK
Se te ocurre alguna forma de scrapear muy rápido, y sin dejarse un pastizal en proxys? Suponiendo que la web no tiene anti-bot. Bueno, básicamente quiero scrapear todo menéame y no quiero esperar 20 horas xD
¿Otra que hacerlo en paralelo? No sabría decirte. Suponiendo que quieras scrapear las páginas de la web (llámemosle Y al número) principal de menéame, lo que yo haría es empezar X servidores, darles X/Y páginas a cada uno, guardar todo en S3 (por ejemplo) y luego hacer un merge. Lo mismo si tenes un solo servidor pero con muchos cores, podes empezar uno con 16 procesadores, darle 16 procesos al mismo tiempo y partir la carga de ese modo. Pero en ese caso la tarjeta de red del servidor se te convierte en un embudo. Si no hay sistema anti-bot, con esa solución no necesitarías proxy.

Al margen de paralelizar (o si no hay manera de paralelizar)... No creo que haya mucha solución la verdad :(. En estos casos yo simplemente meto más recursos y no me como la cabeza.
 

Vaina Loca

New member
¿Otra que hacerlo en paralelo? No sabría decirte. Suponiendo que quieras scrapear las páginas de la web (llámemosle Y al número) principal de menéame, lo que yo haría es empezar X servidores, darles X/Y páginas a cada uno, guardar todo en S3 (por ejemplo) y luego hacer un merge. Lo mismo si tenes un solo servidor pero con muchos cores, podes empezar uno con 16 procesadores, darle 16 procesos al mismo tiempo y partir la carga de ese modo. Pero en ese caso la tarjeta de red del servidor se te convierte en un embudo. Si no hay sistema anti-bot, con esa solución no necesitarías proxy.

Al margen de paralelizar (o si no hay manera de paralelizar)... No creo que haya mucha solución la verdad :(. En estos casos yo simplemente meto más recursos y no me como la cabeza.



Porque te lo paga el curro, yo lo tengo que pagar de mi bolsillo xD

Puff no sé cómo voy a hacer.
 

Hijitusolvidosupass

I WANT CHAFLA BACK
Porque te lo paga el curro, yo lo tengo que pagar de mi bolsillo xD

Puff no sé cómo voy a hacer.
Fair enough xD. Si no puedes meter más servidores, me temo que no hay más vuelta que esperar.

Para proyectos personales normalmente pongo en paralelo un par de RaspberryPi que tengo en casa, si te sirve. Pero volvemos al problema del cuello de botella en la red.
 

Vaina Loca

New member
Fair enough xD. Si no puedes meter más servidores, me temo que no hay más vuelta que esperar.

Para proyectos personales normalmente pongo en paralelo un par de RaspberryPi que tengo en casa, si te sirve. Pero volvemos al problema del cuello de botella en la red.



Ya que estamos en esta movida, sueles usar rotación de proxys? Lo hacéis en local o lo contratáis a algún servicio? Yo he probado algunos (como shader.io) pero son bastante careiros. Mi objetivo es ahorrar xD, si fallan de vez en cuando no pasa na, que hago la petición de nuevo.

Hasta ahora he venido usando P2P Proxies, que cobran a 3 pavos el GB. Me arruino, pero menos que pagando 1 pavo por cada proxy xD
 
Arriba