¿Cuál es el programa de computadora más útil en el que has creado / participado?

La utilidad puede significar cosas diferentes para diferentes personas. A veces, la utilidad se mide por el número de usuarios que alguna vez han usado el programa o que lo están utilizando, o puede basarse en otros posibles casos de uso a los que el programa aún no se ha aplicado.

Mi programa más útil que creé solo es un sistema de visión por computadora (CV) con el potencial de ser aplicado en las siguientes áreas.

  1. Estructura del movimiento (SfM).
  2. Localización y mapeo simultáneos (SLAM).
  3. Costuras panorámicas automáticas a partir de fotos en bruto.
  4. Detección / reconocimiento de objetos.
  5. Realidad aumentada (AR).
  6. Imagenes medicas.
  7. Autos sin conductor.

Creé todo un solo módulo desde cero y los algoritmos han demostrado que funcionan extremadamente bien en la realidad, al menos bien probados en detección / reconocimiento de objetos. Actualmente lo acabo de usar en el n. ° 3, pespunte panorámico, en realidad supera a muchos otros en esta funcionalidad de pespunte panorámico. Todavía tengo que expandirlo a otras áreas de aplicación gradualmente con el tiempo.

El sistema CV del que estoy hablando se llama reconocimiento de objetos motivado biológicamente BIMOR porque los algoritmos se desarrollaron en base a mi comprensión de la corteza visual primaria (área 17 de Brodmann) a partir de las teorías de la neurociencia. En un período de 4 años desarrollé algoritmos novedosos como:

  1. Detector de región saliente: detector de características muy repetible y robusto que funciona en condiciones extremas como una imagen / marco muy ruidoso.
  2. Descriptor: Llamado M3oh, que es simple pero efectivo para hacer coincidir las regiones sobresalientes.
  3. Matcher de características: se llama FastMatcher porque es extremadamente eficiente para la búsqueda de vecinos más cercanos en puntos de datos normalizados muy grandes.

Los algoritmos son tan eficientes y efectivos que se ejecutan en tiempo real en sistemas integrados o móviles sin muchos problemas. He estado extendiendo el código usando programación paralela para usar sistemas de hardware paralelos como los procesadores multinúcleo y las unidades de procesamiento de gráficos (GPU) para acelerar aún más la velocidad de inferencia del sistema.

Para implementarlos también tuve que desarrollar una biblioteca específica llamada bimor desde cero. Desarrollar ese sistema fue bastante divertido y desafiante. Obtuve una gran cantidad de conocimiento en visión por computadora y programación de esa manera. De hecho, mis habilidades de codificación en C ++ mejoraron mucho después del proyecto.

Más tarde construí encima de bimor para construir un motor de costura panorámica llamado bimostitch (bimor + stitch) y porté el motor de puntada a Android a través del NDK (kit de desarrollador nativo) para desarrollar la aplicación de Android bimostitch panorama stitcher en Google Play. Creo que el sistema de CV que construí es más de lo que parece, simple pero de vanguardia.

También estoy desarrollando otros programas potencialmente útiles en el área del aprendizaje automático (ML), especialmente el aprendizaje profundo (DL). Actualmente estoy explorando un sistema de visión de aprendizaje profundo 3D con el potencial de ser aplicado en:

  1. Reconocimiento / detección de rostros.
  2. Autos sin conductor.
  3. Detección / reconocimiento de objetos.
  4. Imagenes medicas.
  5. Y muchos más.

Veo que el trabajo anterior es útil, no estoy seguro de cómo lo ven los demás, pero estoy orgulloso de ello.

Espero que esto ayude.

Probablemente lo más útil que creé fue parte del sistema de almacenamiento de datos para Eurogam. Esto tenía que ser capaz de almacenar una matriz de cualquier número arbitrario de dimensiones hasta 8, cualquier tamaño arbitrario de hasta 4 mil millones en cada uno, de cualquier tipo de datos (8 bits, 16 bits, 32 bits, 64 bits, flotante, todo no -tipos de flotación firmados o sin firmar). También tenía que poder volver a asignar cualquier porción de los datos almacenados en cualquier cantidad de dimensiones a una matriz de cualquier cantidad de dimensiones, tamaño y tipo de datos como antes, y luego recuperar una ventana arbitraria dentro de esa matriz de interés.

Lo llegué al punto donde podía manejar gigabytes de datos en unos segundos en una estación Sparcstation. Lo cual no era un coloso. La E / S maximizó la red de 100 megabits utilizada para el desarrollo.

La versión final estaba usando una línea de datos mucho más rápida y se ejecutó en una caja VME con mucho más empuje.

Este componente del proyecto fue probablemente el software de uso continuo más largo que he escrito. No fue el más orgulloso, ese sería mi proyecto A Level donde escribí un software para identificar radionucleótidos de las energías detectadas, pero mi proyecto A Level nunca se usó para otra cosa que no fuera identificar lo que estaba en las consecuencias de Chernobyl y los desechos de Sellafield. Fue una década demasiado tarde para ser realmente útil para los científicos, tenían un software que superó mi esfuerzo de codificación en 19798/9.

Estos dos proyectos fueron los que más aprendí y que resultaron en beneficios tangibles directos para la mayoría de las personas.

El trabajo que hice en la NASA fue lo suficientemente interesante, pero no lo consideraría útil en ningún sentido, usaría la palabra. Eran cosas simples de optimización, no características añadidas.

Eso, realmente, podría decirse de gran parte de mi carrera en los Estados Unidos. Ha habido algunas excepciones, principalmente a lo largo de las líneas de aceleraciones de x15 o más, pero esas fueron partes menores y cualquier persona con una pizca de sentido podría haberlas hecho. No reclamaré crédito por trivia. Podría haber reducido el tedio, pero no estoy dispuesto a llamarlo un aumento de la felicidad.

En cierto modo, esta es una pregunta algorítmicamente intolerante. De Verdad. También debo señalar que nosotros (donde trabajé) estábamos investigando, y la utilidad no era necesariamente evidente de inmediato.

Tenía un trabajo en el gobierno que no me permitía simplemente lanzar programas (este es un antiguo atraco de la Guerra Fría). Tienen este proceso de lanzamiento obsoleto que era anterior a comp.source. * En Usenet (si nunca tuvo la oportunidad de usar Usenet y comp.source. * U otros grupos de noticias, se perdió mucho). La NASA argumentó que este proceso lanzó código (de la era de las tarjetas perforadas) al mundo y al público estadounidense (desarrollado bajo su dinero) y distribuido por una entidad en la Univ. de Georgia nombró COSMIC (una buena idea que asumió programas perfectos libres de errores y sin soporte para el usuario, mínima documentación independiente, etc.).

No creerías cuántas estúpidas firmas se requerían para el lanzamiento. Si escucharas a algunos de estos burócratas: pensarías que te están haciendo un favor. Fue un poco más político que eso.

Ayudé a desarrollar puntos de referencia para comprar supercomputadoras y paralelizar los códigos Fortran existentes haciendo dinámica de fluidos computacional (CFD, no pudimos revelar nuevos algoritmos (debido al control de exportación)). Esto fue un insulto para CS, porque nuestros usuarios finales realmente querían el paralelismo inalcanzable sin ningún trabajo adicional (excepto los códigos desarrollados para la vectorización. Muchas de estas personas no podían molestarse en reescribir sus algoritmos.

Uno de mis últimos documentos, que recibió un gran respaldo de Knuth fue mirar programas vacíos, por ejemplo, la versión principal de C () {} y el ejecutable vacío en hardware Cray que tiene un hardware de monitoreo de rendimiento especial que no se encuentra en arquitecturas de PC. La autoridad de liberación para un programa vacío parecía estúpida, pero eso es una burocracia política para ti. Incluso tenía un programa Fortran vacío de más de 1,25 MB de tamaño. Kernighan y Plauger escribieron “No hagas nada con gracia”. ¡También hice Hello world! versiones (entonces, ¿cuánto más grande crees que es ese programa?). Este fue un documento sobre la calibración del hardware de medición y no la evaluación comparativa. Entregué el periódico en lugares muy cerrados y sorprendentes. Era un Seinfeld (nunca digo ese programa, solo uso su nombre) de papeles: un papel sobre nada. Me invitaron a darlo en Ft. Meade también.

Fundé un profesor (Sr. Cache Memory, Alan Smith) y un estudiante de posgrado y tengo algunas de mis propias ideas para la evaluación comparativa, donde desarrollé generadores de programas para probar arquitecturas a las que denominé CONTROL (etiquetas generadas y declaraciones no ejecutables) y KAOS (pruebas de indexación de memoria como hardware de dispersión-reunión; nunca terminado). Estaba tratando de hacer que el programa sea equivalente a una cinta métrica. Bill Wulf (CMU) también me organizó una visita a su firma Tartan Labs (que realizó pruebas de compilación de Ada).

Pero si hubieras hecho tu tarea, tienes que entender que de alguna manera hice mi marca no con programas sino con datos útiles: Preguntas frecuentes (cambió el idioma inglés) usando el programa cron de Unix como cómo conseguir un trabajo con la NASA por / para vagos programadores de estudiantes que tenían habilidades de investigación deficientes (esto resultaría en jerarquías de grupo de noticias Usenet para preguntas frecuentes como {comp, sci, rec, misc,…, ba, ca} .answers), el servidor netlib para referencias gráficas (ACM / SIGGRAPH), y mi base de datos sobre la literatura de computación paralela que Dave Patterson no promocionó mencionó en ISCA’90 en Seattle. Fue el hecho de que mantuve los bits, incluidas las anotaciones de varias personas, y no los puse en papel impreso. Esto fue impresionante por el momento, porque era la red fácil, y muchos vendedores y muchos sitios de computadoras, incluida mi propia agencia, no tenían idea sobre las redes de computadoras. Me di cuenta de que los bits que salieron en ARPAnet fueron útiles y no solo para archivar. Teníamos / todavía tenemos malas interfaces y por qué buscar es un problema.

He escrito mucho software, pero un programa se destaca como el más apreciado.

Primero un poco de historia: cuando las personas piensan en mantener un telescopio apuntando a una estrella, piensan que es fácil. En realidad es más difícil de lo que parece. Tiene toneladas de metal y engranajes de unos pocos pies de ancho, y necesita ajustarlos con precisión a menos de 0.5 segundos de arco, utilizando la tecnología de los años 90. El telescopio te sigue, pero es imposible hacerlo bien. La solución que la gente resolvió fue apuntar una cámara de video hacia el telescopio hacia una estrella. Luego, la imagen se mostró en una pantalla de video, se marcó su posición y el pobre astrónomo tuvo que mirar la pantalla toda la noche y presionar uno de los cuatro botones para realizar un ligero desplazamiento del telescopio. Tenían que hacer esto toda la noche, que podría durar más de 12 horas. Piense en ello como el videojuego más aburrido del mundo.

Ahora, a principios de los años 90, la tecnología había avanzado hasta el punto de que esto podría automatizarse. La pantalla de video fue reemplazada por un capturador de fotogramas. El software podría extraer la imagen de la estrella y hacer un centroide. Mi trabajo consistía en implementar esto y presionar los botones de corrección enviando comandos a un controlador de microprocesador que construyó uno de nuestros EE. De todos modos, después de algunas semanas de trabajo, finalmente pude probarlo en el telescopio y funcionó. Entonces, mi pequeño programa significaba que el astrónomo ya no tenía que pasar toda la noche mirando la pantalla y presionando los botones. Estaba muy contento

He trabajado en muchos proyectos desde entonces. Ahora, por supuesto, las cosas son diferentes. Todo requiere un gran equipo y este tipo de trabajo lo realiza un especialista en óptica adaptativa. Echo de menos los días en que una sola persona podría marcar la diferencia.

Realmente depende de cómo juzgues “útil”.

Trabajé en una serie de modificaciones significativas a un sistema de control de inventario que fue utilizado por dos compañías que se habían separado de mi empleador. Al menos una de esas compañías todavía usaba ese software diez años después.

Hice la mayor parte de la programación original para RBNB DataTurbine (Open Source DataTurbine Initiative) a principios de la década de 2000. Como puede ver en el sitio web, todavía se está utilizando.

Más recientemente, trabajé en un sistema de administración de terapia con medicamentos (MTM) (ver Aprexis). Permite a los farmacéuticos involucrarse en ayudar a los pacientes con sus medicamentos para enfermedades crónicas.

No estoy realmente seguro de lo que consideraría el más útil y hay muchos otros que no enumeré que también podrían ser candidatos.

Gracias por el A2A. Es una decisión difícil, pero voy a tener que ir con algo que todavía está en progreso: Pull Request Roulette. Hasta ahora, es solo un lugar donde puede enumerar las solicitudes de extracción de Github que desea que alguien, cualquiera se ofrezca como voluntario para revisar, o puede ir a buscar tal cosa y ser voluntario. Eventualmente, espero que haga coincidir a las personas con las solicitudes de extracción apropiadas , analizando en qué idiomas afirman tener experiencia y en qué idiomas usa cada RP. Vea su repositorio de Github para más detalles. Aprendí mucho sobre el consumo de API (anteriormente había hecho mucho más al proporcionarlas ) y probar ese consumo (todavía se necesitan muchos ajustes para las pruebas). Pero aún más, espero que sea útil para la comunidad de código abierto en general, al menos la parte que usa Github.

Escribí un par de aplicaciones de Android que usamos diariamente en la estación de bomberos de CFA en la que soy voluntario.

Una parte es un programa que tengo en Google Play que simplemente envía uno de los 3 mensajes SMS preestablecidos a un número de teléfono preestablecido. Esta aplicación podría ser útil para cualquiera [1].

Usamos enviar un mensaje SMS que dice “Sí”, “Llamar” o “No” a la segunda aplicación que se ejecuta en un teléfono Samsung Galaxy II en la estación. Cuando el teléfono en la estación recibe un SMS, busca el número de la persona que envía el SMS y, si reconoce el número, mostrará un Verde (para sí, estoy saliendo), Amarillo (para llamarme es necesario), o el rojo predeterminado porque no estoy atendiendo la llamada de incendio.

Esto nos ayuda a administrar nuestros recursos cuando recibimos una llamada de fuego. Es especialmente útil con llamadas de rescate que requieren un número suficiente de personal especializado.

El código es incómodo, ya que codifiqué los nombres y números en la aplicación en la estación en la que funciona, solo requiere mucho tiempo de mantenimiento. Simplemente no tenía la habilidad o el tiempo para integrar una base de datos en la aplicación.

Notas al pie

[1] Flash SMS – Aplicaciones de Android en Google Play

En el verano de 1989, en el curso, Composición y retórica (inglés I), en la Universidad de Texas en Austin, la profesora Suresh Patel, tenía estos terminales de caracteres verdes, conectados en red en una plataforma de igual a igual, cada estudiante creó un seudónimo e instruyó a no revelar su nombre. Se creó una primera ‘sala de chat’. El objetivo era adivinar la identidad del alias del estudiante.

Después de aprender el lenguaje c, comencé a desarrollar una herramienta para dispositivos Android, la llamé Android Multi Tool. Con la ayuda de esta herramienta, cualquiera puede rootear, flashear una nueva rom, hacer una copia de seguridad completa o incluso restaurar la copia de seguridad e instalar apk. Esto es lo mejor que he creado como principiante …