with udemy the stuff page chapter2 chapter boring automatic automatetheboringstuff automate scripting automation

scripting - udemy - ¿El mejor sistema de IT/back-office hacks?



regex automate the boring stuff (14)

Mucha gente tiene cosas que sus sistemas hacen por ellos o por sus equipos. Los enganches post-commit de control de fuente son un ejemplo estándar: tener un sistema de compilación automatizado que verifica la fuente más reciente, compila, prueba y empaqueta, es un truco de back-office que la mayoría de nosotros probablemente usemos.

¿Qué otras cosas geniales has hecho?


Difícilmente un truco, pero de vuelta en el día, en nuestro veloz VAX 11/730, nuestro proceso de un día para otro imprimía el archivo "BLAMMO.TXT" en la impresora si algo iba mal. Cada mañana, la primera parada era la impresora cuando entraba.


No contamos con personal las 24 horas, todos los días, pero tenemos procesos críticos que se ejecutan durante toda la noche. Creamos un sistema interno de alertas para notificarnos problemas serios del sistema, procesos fallidos de misión crítica, etc. Utiliza texto a voz para crear un mensaje descriptivo y luego se conecta a nuestro marcador automático para llamar a las personas adecuadas con el mensaje.


Tenemos un semáforo que muestra si nuestra creación diaria tiene éxito, ha fallado en las pruebas o simplemente no se ha desarrollado.

Además, tenemos una barra de luces que se ilumina durante unos segundos cada vez que recibimos una carga de un cliente.


Tuvimos un desarrollador en nuestro equipo que no estaba familiarizado con el concepto de un conflicto de subversión. Dedujo que si simplemente eliminaba todas esas cosas raras en su código y hacía clic en resolver que todo estaba bien (es decir, anulando todos los demás cambios en el archivo ...)

De todos modos, después de la quinta vez que ocurrió esto, y la quinta vez que tuve que explicar por qué el defecto que acabo de cerrar volvía a aparecer, escribí un guión.

Diferiría los cambios en un archivo para ver si la verificación consecutiva eliminó todos los cambios anteriores y que fueron hechos por el desarrollador sin nombre.

Luego enviaría un correo electrónico al jefe con una descripción de lo que sucedió y cuánto trabajo se perdió durante el registro.

No hubo 7a aparición.


De vuelta en mi trabajo anterior, tuvimos que auditar muchas tablas para cambios de datos (inserciones, actualizaciones y eliminaciones). Nuestro equipo de soporte tuvo que poder buscar a través de estos datos para encontrar los cambios que los usuarios hicieron.

La solución temporal que se había convertido en semipermanente era almacenar cada consulta no seleccionada. Sin embargo, este era un sistema grande, que la tabla crecería alrededor de 1,5 GB por día.

La solución que se me ocurrió fue crear un script que para todas las tablas en una lista externa, creara los disparadores apropiados que auditan cada tabla, fila, columna, antes y después, cuándo y por quién y almacenarla en nuestra nueva tabla de auditoría. Esta tabla creció aproximadamente un 10% del tamaño de la versión anterior y almacenó datos mucho más utilizables. Nos permitió crear una interfaz de usuario para buscar y ver cada cambio realizado en nuestros datos, sin requerir ningún conocimiento de SQL para nuestro equipo de soporte o usuarios comerciales.


Tuvimos un desarrollador que trabajaba en un sitio ASP clásico que no creía en el control de la fuente. El código pasó de su máquina directamente a la caja de producción. Esto conduce a problemas con cambios perdidos o la incapacidad de volver a una versión estable. Como CruiseControl.Net tiene la capacidad de monitorear un directorio, agregué un proyecto que realmente ingresaba los archivos cada vez que se copiaban a la producción. Completamente retrocedido desde la intención original de CC.Net, pero no perdimos más código.


Trabajando en una empresa de diseño web configuré nuestro servidor de desarrollo para que pudiéramos ver una copia de trabajo de un proyecto en tiempo real por un nombre de dominio secundario. Entonces, si su nombre era joe y usted estaba trabajando en project jetfuel, iría a joe.jetfuel.test-example.com y podría ver sus cambios instantáneamente sin comprometerse.

Este fue un truco simple que usó nombres de subdominio como una estructura de directorio parcial. Nuestra ruta htdocs se parecía a este htdocs/tag/project . Teníamos un script (una aplicación php a la que tendrías acceso mediante setup.test-example.com ) que crearía un nuevo nombre para ti y verificaría la versión que quisieras y llama al script de implementación para ese proyecto. Si tiene éxito, lo reenviará al nuevo subdominio. Entonces podría trabajar en esta nueva copia con un recurso compartido de samba.

Esto funcionó muy bien para nosotros, ya que siempre implementamos en la misma construcción de Linux y nuestros proyectos tenían requisitos de base de datos simples.

Nuestra razón original para hacer esto fue porque nuestros desarrolladores trabajaron en todo tipo de plataformas diferentes. Además de solucionar este problema de plataforma, esto fue increíble para ver cambios y pruebas. Contamos con todo tipo de etiquetas, desde nombres de personas, versiones de troncales, etiquetas de prueba, hasta prototipos como jquery-menu-hack.jetfuel.test-example.com

Ahora que miro hacia atrás, me pregunto cuánto más fácil hubiera sido ejecutar máquinas virtuales.


En los días de dotCom, hace unos 9 años, tuve que hackear un sistema de conmutación por error entre dos ubicaciones diferentes. Tuvimos una configuración original con un sitio web de inicio de Powerbuilder y una herramienta de administración de Powerbuilder. Los datos se almacenaron en MSSQL 7.0. Los servidores web usaron IPX para comunicarse con los Servidores SQL (no preguntes). De todos modos, fui responsable de crear un plan de conmutación por error.

Terminé pirateando algunos linux boxes y les pedí que ejecutaran nuestro DNS externo. Uno en cada ubicación. Teníamos un sitio remoto w / webserver y un servidor sql. Obtuve la replicación de transacciones SQL trabajando sobre una conexión IPX RDSI de 128k (de todas las cosas). Luego construimos una herramienta de monitoreo en nuestro sitio de producción para enviar paquetes a varias transferencias de red en sentido ascendente. Si experimentamos una interrupción de más del 20% del sitio principal, la herramienta de monitoreo ejecutó un script de Perl en el cuadro de Debian para cambiar el DNS y señalar a nuestro 2ndary. Nuestro secundario tuvo un latido con nuestro DNS principal y una estación de monitoreo. Duplicaría los registros, a menos que perdiera ambas conexiones, luego pasaría a señalar DNS a la ubicación de la copia de seguridad.

El sitio principal cerraría el servidor SQL en la ubicación principal para interrumpir la replicación. Conmutación por error automatizada de sitio a sitio utilizando la conexión IPX RDSI de 128k :)


Esto es en un nivel menor, pero estoy bastante orgulloso de un archivo make que escribí para compilar el código de mi investigación. Solo necesita tener los nombres de los archivos de origen y encabezado que pueden encargarse del resto por sí solos (aunque supone que uno no compilará ningún archivo de encabezado en los objetos, solo compilarán los archivos fuente). Las otras desventajas son el hecho de que se basa en la segunda función de expansión del programa make de GNU, por lo que no sé si funciona en otros programas make. Además, el compilador utilizado debe admitir algo similar a la característica -MM de gcc. Aquí está la esperanza de que nadie se ría de eso.

-include prereqs.mk HEADERS=$(SRC_DIR)/gs_lib.h $(SRC_DIR)/gs_structs.h SOURCES=$(SRC_DIR)/main.cpp $(SRC_DIR)/gs_lib.cpp OBJECTS=$(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SOURCES)) release: FLAGS=$(GEN_FLAGS)$(OPT_FLAGS) release: $(OBJECTS) prereqs.mk $(CXX) $(FLAGS) $(LINKER_FLAGS) $(OUTPUT_FLAG) $(EXECUTABLE) $(OBJECTS) prereqs.mk: $(SOURCES) $(HEADERS) $(CXX) $(DIR_FLAGS) $(MAKE_FLAG) $(SOURCES) | sed ''s,/([abcdefghijklmnopqrstuvwxyz_]*/).o:,/1= ///n,'' > $@ .SECONDEXPANSION: $(OBJECTS): $$($$(patsubst $(OBJ_DIR)/%.o,%,$$@)) $(CXX) $(FLAGS) $(NO_LINK_FLAG) $(OUTPUT_FLAG) $@ $(patsubst $(OBJ_DIR)/%.o,$(SRC_DIR)/%.cpp,$@)

Obviamente, dejé caer la definición de una serie de variables, pero creo que hace que la idea se transmita.

Como mis herramientas de codificación y estilo son compatibles con los requisitos de este script, me gusta usarlo. Todo lo que necesito hacer para agregar (a) una nueva pieza (s) de código fuente es agregar su nombre (s) a la variable apropiada y el resto se cuida.


No son exactamente pirateos, sino un par de elementos imprescindibles para el trabajo de desarrollo de TI:

Si está utilizando subversion, debe usar CommitMonitor. ( http://tools.tortoisesvn.net/CommitMonitor ) Le permite controlar repositorios svn para nuevos commits y luego revisar los nuevos commits. Genial si quieres estar al tanto de lo que tu equipo está haciendo. Particularmente si tienes un par de juniors que necesitan ser observados. ;)

Rsnapshot ( http://www.rsnapshot.org/ ) también es invaluable: tenemos instantáneas de respaldo completas de todo nuestro sistema de archivos cada cuatro horas, desde hace 2 años, y cada día más. ¡Es como un cubo de datos para su sistema de archivos! La tranquilidad que esto proporciona es pura dicha. :)


Poner en un gancho precompromiso que verifica el comentario de error hace referencia a un error abierto, asignado al usuario que realiza el registro. (SCMBug puede hacer esto).

¡Entonces para hacer la vida REALMENTE interesante, deletrear revise los comentarios! El comentario de confirmación y el del código. (el hechizo es mi amigo)

Ejecute el código a través de un formateador de código establecido en compayn standard; y diferirlo al original: si no está en el formato oficial de la compañía: rechazar la confirmación.

Haga una prueba de cobertura con la versión de prueba de la unidad.

Envíe por correo electrónico todos los errores / errores causados ​​al equipo de desarrollo.

Dejé FUERA el nombre del desarrollador. Ellos saben que lo hicieron.


Tenemos cuentas de Twitter para muchos proyectos que twittean cosas como mensajes de compromiso, avisos de construcciones, pruebas unitarias fallidas, implementaciones, actividad de seguimiento de errores, cualquier tipo de evento asociado con el proyecto. Ejecutar un cliente como Twitter Gwibber (que muestra una ventana emergente para cada nuevo estado) es una excelente manera de mantenerse en contacto con la actividad en los proyectos que le interesan. Usar Twitter es bueno ya que puedes aprovechar todas las aplicaciones de terceros, como los clientes de iPhone.


En el año 1993, cuando los sistemas de control de fuente eran realmente costosos y poco manejables, la compañía con la que trabajé tenía un control de fuente interno construido como scripts 4DOS. No era tan sofisticado como la mayoría de los sistemas de control de fuente actuales, por ejemplo, no tenía ramificaciones o integraciones, pero cumplía la función básica de respaldar el historial de revisiones, el proceso de pago y la resolución rudimentaria de conflictos.


Agregue la comprobación de commit-hook para archivos VRML / modelo 3D con ruta absoluta a texturas / imágenes. f:/maya/my-textures/newproject/xxxx.png simplemente no pertenece al servidor.