Colaboración de código en tiempo real

Trabajo tanto en casa como en la escuela con mis amigos. En la escuela, todos los puertos excepto el puerto 80 y el puerto 443 (HTTP/HTTPS) están bloqueados, por lo que es difícil configurar un "espacio de trabajo" colaborativo.

Estoy buscando un programa que cree una carpeta virtual en nuestro escritorio (como Groove) en la que podemos poner nuestro proyecto, y cuando escribimos nuestro archivo en el disco (con el editor de texto o IDE de nuestra elección), el los cambios se difundirán automáticamente en todas las computadoras.

Debe ser portátil (no se requieren derechos de administrador) y, preferiblemente, debe ser gratuito.

¿Ya se ha hecho este tipo de programa?

Esto es lo que he intentado hasta ahora:

  • Google Drive/Dropbox . La interfaz es demasiado torpe y no puedo instalar el cliente porque se requiere permiso de administrador. Además, debe anunciar a todos los demás que está cargando su copia del proyecto y luego todos los demás deben dejar de hacer lo que están haciendo y descargar el proyecto nuevamente. Es molesto y doloroso.
  • GitHub . Si bien es una opción bastante viable, mis amigos saben poco sobre cómo usar Git, y temo que se queden atrapados en un conflicto de fusión (lo que han hecho antes), forzarán el empuje y perderán todo el historial, o simplemente no cometer nada en absoluto.
  • Saras para Eclipse. Requiere que los puertos de Jabber estén abiertos para las conexiones salientes, que no lo están. Tuve que ejecutar Openfire (servidor Jabber) localmente para usar esto, pero olvidé hacer una copia de seguridad de la configuración, por lo que Openfire se perdió para siempre cuando la administración de TI decidió actualizar de Windows XP a Windows 7.
  • NppNetNote para el Bloc de notas++. Perfecto, pero solo admite colaboración uno a uno.
  • Espacio de trabajo de SharePoint . Esto se ve muy bien, pero no estoy muy seguro de cómo invitar a otros miembros.
  • Etherpad . No puede usar su propio IDE, lo que significa que debe copiar/pegar su versión de un archivo en el pad. Además, es solo para colaborar en un solo archivo.
  • Floobits . Mi amigo intentó usar esto en Sublime Text, pero requiere que te conectes a un puerto que no sea HTTP (bloqueado).
  • Almohadilla de fuego para Atom. Lamentablemente, no puede compartir una base de código completa con esto.
  • flojo _ Ciertamente puede compartir el código, pero al igual que Google Drive, el proceso de comprimir, cargar, anunciar y descargar es demasiado complicado para ser práctico.
  • nada _ Solo una persona puede codificar a la vez. Si varias personas codifican al mismo tiempo, alguien debe eventualmente solicitar la fuente de trabajo de cada colaborador y fusionar todos los archivos manualmente.
La mayoría de los codificadores preferirían no tener una fusión inmediata de todos los cambios. Eso te expone a los errores de cualquiera en cualquier momento. Es mejor sincronizar una vez al día.
@Jeff-InventorChromeOS Si la mayor parte del desarrollo se centra en un solo archivo, y necesitamos ese archivo para que todo lo demás funcione, entonces todos desarrollaríamos una sola revisión de diferentes maneras, lo que generaría un conflicto. Tomaría más tiempo juntar 3 revisiones diferentes en una sola que simplemente colaborar en vivo y saber qué están haciendo los demás con el código a medida que sucede.
@oldmud0 En ese caso, tal vez esté abordando el desarrollo desde el ángulo equivocado. ¿Es posible dividir la funcionalidad contenida en ese archivo en múltiples segmentos distintos? ¿Es grande el archivo? ¿Es solo un archivo de configuración? ¿Qué lenguaje/IDE estás usando?
@Tyzoid Estábamos usando Java, pero como hay pocas bibliotecas de juegos para él, recurrimos a Python porque mis compañeros de equipo se sienten más cómodos con él. Es difícil dividir la funcionalidad en partes más pequeñas porque entonces solo vamos a estar editando más archivos simultáneamente. He estado buscando la mejor manera de estructurar un programa o cómo construir desde cero, pero es muy difícil que cualquier proyecto despegue.
@oldmud0 ¿Cada uno de los desarrolladores del equipo tiene metas y responsabilidades claras? Es decir, uno es responsable del renderizado, otro responsable de la física, otro de la interfaz de usuario, etc. Creo que si haces eso, tendrás menos de todos pisándose los dedos de los pies.
@Tyzoid No. Todas estas partes del juego se difuminan entre sí. Por ejemplo, la persona a cargo de la interfaz de usuario depende de los cambios que realice la persona a cargo de la representación. El desarrollo no se puede hacer en paralelo aquí porque los cambios de cada persona dependen de los cambios de todas las demás personas.
¿Qué debería suceder cuando dos usuarios están editando simultáneamente el mismo archivo?
"Estoy buscando un programa que cree una carpeta virtual": eso no funcionará a nivel de sistema operativo/aplicación. Las actualizaciones/transferencias de datos ocurrirán solo al guardar, e incluso un programa que es muy tolerante con los archivos cambiados bajo sus pies, como Notepad ++, querrá descartar los cambios no guardados antes de cargar el archivo actualizado. Necesita un programa dedicado que sincronice cada pulsación de tecla.
@AleksandrDubinsky Gracias por la información, pero ¿conoce algún editor de texto que no sea web o IDE que pueda hacer esto de manera confiable ?
Lo siento, yo no.
Mencionas Saros, y parece ser exactamente lo que necesitas. Si el problema es con Jabber, ¿no puede usar una de las varias formas de conectarse a través de HTTP?
@niutech Todos están destinados al desarrollo web, no al desarrollo de escritorio. Además, el tema es discutible ahora que ya no hago codificación colaborativa, excepto con un amigo cercano. La verdad es que si no saben cómo usar Git, probablemente no sean lo suficientemente competentes para trabajar en un proyecto que requiere más de 1 persona. Así que dejé de intentarlo.

Respuestas (7)

Codenvy es un IDE de aplicación web puro que podría adaptarse a sus requisitos para la colaboración en tiempo real. Parece un IDE bastante completo que se ejecuta íntegramente en Chrome.

Según el editor:

El entorno es colaborativo y los espacios de trabajo se pueden compartir en pantalla como WebEx, colaborativos como Google Docs y bifurcados como GitHub.

(También se integra con BitBucket).

Creo que debería reconsiderar la idea de que varias personas editen en vivo un solo archivo de código. Eso puede ser excelente para enseñar o programar en pareja (es decir, trabajar en lo mismo ), pero no para trabajar en cosas diferentes. Se pisarán los dedos de los pies unos a otros en un grado terrible y no podrán hacer ningún trabajo. En esencia, tendrá los mismos conflictos de código que cuando realiza una "fusión" en un VCS, pero los tendrá constantemente . Difícilmente podrá compilar el programa en algún momento, y mucho menos probar su propio trabajo, debido al código a medio terminar de otras personas. También le resultará más difícil beneficiarse de las sugerencias del IDE, los garabatos de error, la finalización del código, etc.

El desarrollo paralelo es muy parecido a la computación paralela. El rendimiento no escala linealmente. Extendiendo la analogía, obtener un buen rendimiento en paralelo proviene de minimizar la sincronización. La mejor aceleración proviene de problemas "vergonzosamente paralelos", donde cada nodo realiza un trabajo completamente independiente. La peor aceleración proviene de algoritmos que, en cada paso, requieren datos de todos los demás nodos.

La metodología VCS es un buen enfoque. Cada persona revisa una versión del código que compila y, más o menos, funciona. Hacen cambios sin que nadie más interfiera. Con la frecuencia óptima (de una vez por semana a una vez por hora, según la rapidez con la que cambie el código), se sincronizan mediante la confirmación del código y la creación de una nueva versión del código base que compila y funciona. Otros tiran de ese cambio, tal vez hacen los ajustes necesarios y continúan trabajando. Recuerde, la sincronización es necesaria independientemente, pero mantenerla al mínimo permite que las personas se concentren en el trabajo útil.

Git resuelve muy bien los objetivos de VCS. Tirar/empujar/combinar funciona mejor que en otros VCS. Tiene una curva de aprendizaje empinada y, en general, una GUI deficiente (en Windows), pero es una herramienta muy útil para aprender. Mencionas hacer un empujón forzado y borrar el historial. Tiene razón en que esto es muy indeseable, por lo que se debe prohibir el empuje forzado en el servidor a través del interruptor de configuración.

Sin embargo, persiste el problema de cómo desarrollar características que dependen unas de otras. No desaparece ni disminuye si lo editas en vivo. Un enfoque es hacer uso de objetos simulados. Estos son objetos falsos que devuelven respuestas enlatadas (en lugar de realizar una lógica real). Se utilizan en el contexto de las pruebas unitarias, donde prueba el código que ha escrito en un caso de uso particular. Escribir una prueba unitaria que use simulacros le permite probar ese caso de uso y, por lo tanto, su código, sin tener escritas las partes dependientes. Un enfoque alternativo es simplemente escribir el código sin ninguna prueba y luego probar una vez que el código real esté disponible. Sin embargo, hacer pruebas y corregir errores al final es más difícil, especialmentepara los nuevos programadores (que cometen muchos errores pequeños y tontos que son diabólicos para que los resuelvan más adelante). Pero, escribir simulacros y pruebas unitarias implica sus propios costos de tiempo. (Estos están más que compensados ​​a largo plazo porque ayudan a cambiar el código sin que se introduzcan nuevos errores, pero a corto plazo pueden no ser una ganancia de productividad). De cualquier manera, considere la mejor manera de dividir el trabajo.

Permítanme recordarles que no nos pagan; no somos una empresa nueva. No trabajamos durante 4 horas seguidas. No tenemos tiempo para hacer que nuestro programa sea una aplicación de calidad empresarial. Sí, tienes razón, deberíamos hacer pruebas unitarias. Pero no estamos 100% equivocados. Estamos tomando el enfoque correcto y preguntando a otros cuál es la mejor manera de colaborar en tiempo real.
Lo siento, no se trata de hacerlo de calidad empresarial. Usted mismo dice que "el desarrollo no se puede hacer en paralelo". Si el desarrollo, fundamentalmente, no puede ocurrir en paralelo, no tiene sentido buscar un programa que te permita editar un archivo simultáneamente, ¿verdad? Traté de explicar una forma que permite que el desarrollo ocurra en paralelo (usando simulacros y pruebas artificiales en lugar de presionar Ejecutar).
Para aclarar, quise decir que el desarrollo no se puede hacer en paralelo con el sistema que tenemos actualmente. Actualmente, no estamos haciendo ningún desarrollo porque no nos hemos visto últimamente. (Ni siquiera somos estudiantes universitarios todavía.) Les ahorraré la diatriba que estaba a punto de decir.
@ oldmud0 Reescribí mi respuesta para que sea más respetuosa y esté mejor escrita. Espero que te quites el -1. Pruebe el desarrollo en ambos sentidos y evalúe una vez que lo sienta.
Quité mi voto negativo. Sin embargo, alguien también debe haber votado negativo, por lo que todavía hay un -1.
Voté negativamente porque este es un sitio de recomendación de software, no uno de debate de filosofía. Tu punto puede ser el más válido de todos, pero este no es el lugar para hacerlo.
@Seth Bastante justo. Aunque parece que casi nadie responde la pregunta real del OP (es decir, un clon de Dropbox que no necesita derechos de administrador y se ejecuta a través de HTTP). Ese es el problema cuando describe el "problema real" en su pregunta.
Estoy de acuerdo con esta respuesta y recomendaría leer weblogs.asp.net/alex_papadimoulis/408925. A veces, decirle a un usuario que su pregunta es fundamentalmente defectuosa es más valioso que darle la respuesta que quiere.
@Seth y otros: estamos discutiendo esta respuesta (y otras del mismo tipo) en meta .

Codeanywhere afirma en su sitio web que son una plataforma de colaboración para desarrolladores. Y tienen un editor web realmente bueno que funciona desde cualquier navegador, por lo que el firewall no es el problema. Usando Codeanywhere, puede crear DevBox, que es básicamente un pequeño vps que puede personalizar de la forma que desee y puede ejecutar prácticamente cualquier lenguaje de programación y tiene un terminal ssh integrado en el editor. Luego puede compartir su proyecto con sus amigos y colaborar incluso en tiempo real (varios usuarios editando el mismo archivo en tiempo real).

Las respuestas de los demás son muy buenas para mostrar por qué es posible que no quieras hacerlo, pero si estás decidido a colaborar (lo que creo que tiene algunos beneficios): ¿has probado c9.io ? Eso parece ser exactamente lo que estás buscando. He hecho una buena cantidad de trabajo con este IDE, y creo que este es probablemente el mejor IDE en línea que podría. Y brinda soporte de terminal casi completo, lo cual es muy útil para todo tipo de trabajo de servidor, brinda un espacio de trabajo casi idéntico a Sublis para descargar o instalar nuevos paquetes de Python o nodo. Son paquetes muy lentos. Es muy lento. En general, esto parece una muy buena opción. Especialmente para la colaboración, si desea continuar con la colaboración, ya que otros notan que podría no ser la mejor opción, esta parece ser perfecta, lo más cerca posible.

Sí; esto tiene SSH, que parece bastante útil. La versión gratuita parece un poco limitada, pero me aseguraré de pedirles a mis amigos que la prueben.
Como experimento, hice que un equipo de 8 personas usara c9.io para desarrollar un sitio web HTML+JQuery. Si bien funcionaba muy bien cuando las personas trabajaban en diferentes archivos, a menudo corrompía los archivos editados por varias personas al mismo tiempo. Eso fue hace 1 año, podrían haber mejorado.
@JZL003 ¿Ha probado usted mismo esta herramienta? ¿Cuáles son su experiencias con esto? Actualmente es solo un poco más que "mira este enlace", que es demasiado menos para una recomendación.

¿Has considerado Bitbucket ?

Usted mencionó en su pregunta que probó Github, pero quería llamar su atención sobre otra alternativa.

Bitbucket, a diferencia de Github, brinda repositorios privados gratuitos ilimitados y tiene la capacidad de deshabilitar los empujes forzados.

Bitbucket es compatible con varios sistemas de control de versiones, pero recomiendo encarecidamente a sus amigos que echen un segundo vistazo a git. Si bien puede ser algo difícil a veces, git realmente hace un mejor trabajo que cualquier otra cosa que haya probado.

Echaré un segundo vistazo a Git. Es solo cuestión de aprender. ¿Bitbucket tiene algunos botones de "conveniencia" que realizan acciones sin necesidad de tener una consola lista? (GitHub tiene su propio cliente y tiene botones para realizar solicitudes de extracción rápidas o crear/eliminar/editar un solo archivo).
El software debe ser universal, ya que se basa en el protocolo y no en el host. Dicho esto, hay muchos clientes git de código abierto disponibles para todo tipo de plataformas. git-scm.com/downloads/guis tiene una lista agradable (pero no completa).
Tanto para Github como para Bitbucket (o cualquier otro proveedor), puede usar Atlassian SourceTree para administrar su gitting. Lo encuentro muy fácil de usar y tiene botones convenientes para casi todas las acciones.

Para responder a la pregunta "Estoy buscando un programa que cree una carpeta virtual", sugiero Bittorrent Sync como una buena aplicación de sincronización de carpetas estilo Dropbox sin nube. Viene con un instalador, pero creo que también funcionará de forma portátil. AFAIK, debería transmitirse automáticamente a través de HTTP para sortear su firewall. SyncThing como una aplicación de sincronización de carpetas al estilo de Dropbox sin nube y de código abierto.

Empecé a usar ownCloud hace una semana y me sorprendió que incluso pudiera usarse en su caso cuando se amplía con algunas de las "aplicaciones ownCloud" disponibles. Como tiene los puertos 80 y 443 disponibles, puede alojar una instalación incluso en alguna máquina externa ( ownCloud también ofrece alojamiento). Los clientes de escritorio también están disponibles para múltiples plataformas (no estoy seguro de si necesitan "permiso de administrador" para instalarse, ya que aún no los he usado).

Aunque las carpetas no estarían en el escritorio de las máquinas locales (a menos que decida trabajar localmente y sincronizar directorios a través de WebDAV, que también sería una opción), podría coincidir bastante bien con sus requisitos:

ownCloud incluye un editor compatible con el plegado de código, que se puede ampliar de varias maneras (por ejemplo, lo uso con el complemento Markdown, por lo que el editor tiene incluso una vista previa en tiempo real). Incluso hay soporte para OpenDocument Text, y más. Puede compartir documentos en un grupo, por lo que es posible la colaboración. Entonces, básicamente, el trabajo podría hacerse "en línea".

Otra ventaja es ownCloud versionando sus documentos. Entonces, si algo se estropea, puede volver a una de las versiones anteriores.

Como mencionó EtherPad: incluso hay una aplicación EtherPad ownCloud disponible, que se integra con ese servicio.

Debo admitir que todavía no he usado ownCloud de manera colaborativa, por lo que no puedo decir qué tan bien funciona con varios usuarios que editan el mismo archivo al mismo tiempo, pero diría que al menos vale la pena echarle un vistazo.

Bueno, en este caso, es mejor configurar un túnel SSH y alojar SSH en mi servidor doméstico en el puerto 443, para que todos mis amigos puedan trabajar en una unidad compartida en mi servidor.