Útil: Eliminar tablas de un schema

La siguiente consulta permite generar el conjunto de sentencias drop para eliminar todas las tablas del schema donde estemos posicionados.

select 'drop table '||table_name||' cascade constraints;' from user_tables;

 

Integración de Gradle-Hibernate-MySQL

A continuación reblogueo un super tutorial para la integración de Gradle + Hibernate + MySQL. No se presentan dudas preliminares y deja claro cada paso realizado.

Código limpio

Navegando por internet, encontré un libro compartido que me parece bastante bueno considerarlo como principios de buenas prácticas para el desarrollo de software. El autor hace hincapié que el objetivo de su obra no es convertirnos en un excelente programador sino más bien, pretende dar a conocer las los procesos del pensamiento de los buenos programadores y los trucos, técnicas y herramientas que emplean.

Resumen

Cada año, se invierten innumerables horas y se pierden numerosos recursos debido a código mal escrito, ralentizando el desarrollo, disminuyendo la productividad, generando graves fallos e incluso pudiendo acabar con la organización o empresa.El reconocido experto de software Robert C. Martin, junto con sus colegas de Object Mentor, nos presentan sus óptimas técnicas y metodologías ágiles para limpiar el código sobre la marcha y crearlo de forma correcta, de este modo mejorará como programador. Esta obra se divide en tres partes. La primera describe los principios, patrones y prácticas para crear código limpio. La segunda incluye varios casos de estudio cuya complejidad va aumentando. Cada ejemplo es un ejercicio de limpieza y transformación de código con problemas. La tercera parte del libro contiene una lista de heurística y síntomas de código erróneo (smells) confeccionada al crear los casos prácticos. El resultado es una base de conocimientos que describe cómo pensamos cuando creamos, leemos y limpiamos código.Imprescindible para cualquier desarrollador, ingeniero de software, director de proyectos, jefe de equipo o analista de sistemas interesado en crear código de mejor calidad.¡El libro que todo programador debe leer!

by Luis B. Gutiérrez G.

Queue’s en java 7

De acuerdo a las especificaciones de Java 7, las colas/Queues se definen como colecciones diseñadas para contener elementos antes de su procesamiento y por lo tanto proveen operaciones de inserción, extracción e inspección para su manejo. Cada una de estas operaciones existe en dos formas: una lanza una excepción si la operación falla, mientras que la otra devuelve un valor especial (null o false, dependiendo de la operación). Esta última forma de implementación está diseñada para cuando el fallo es normal, como es el caso de la inserción de un elemento cuando la cola ha alcanzado su capacidad máxima.

La siguiente tabla, muestra los métodos a utilizar para las operaciones de inserción, extracción e inspección, en contraste a la forma de implementación que se requiera utilizar.

Throws exception Returns special value
Insert add(e) offer(e)
Remove remove() poll()
Examine element() peek()

Por lo general, las colas ordenan los elementos como FIFO (primero en entrar, primero en salir) pero no siempre es así. Sin embargo, sea cual sea el ordenamiento utilizado, siempre el elemento ubicado a la cabeza de la cola es el elemento que es recuperado y eliminado por medio del método remove() o pool(). Mientras que por otro lado, en una cola FIFO todos los nuevos deben ser agregados al final de la cola, siempre y cuando no viole la capacidad de restriccion de la cola.

Las implementaciones de colas generalmente no permiten la inserción de elementos nulos, aunque algunas implementaciones, como LinkedList, no lo prohíben. Aún en las implementaciones que lo permiten, los valores null no debe ser insertados, debido a que null también se utiliza como un valor de retorno especial por el método de inspección (element() o peek()) para indicar que la cola no contiene elementos.

En resumen, se puede concluir que la interfaz Queue proporciona tres tipos de operaciones para el manejo de colas con dos formas de implementación cada una, la primera lanza excepciones, mientras que en la segunda devuelve un valor especial (null o false). La segunda forma de implementación es util para los casos donde es normal que ocurra la excepción y que por lo general se sugiere utilizar al momento de agregar/insertar el elemento cuando se ha delimitado la cola. Las desarrolladores que decidan implementar una solución derivada de esta interfaz, tienen total libertad de implementar la forma de ordenamiento que quieran al momento de agregar los elementos (con la única sugerencia de evitar agregar elementos con valores null), sin embargo las operaciones derivadas de eliminar (Remove) e inspeccionar (Examine) deben trabajar focalizados en el elemento que se encuentra ubicado a la cabeza de la cola.

Referencias

http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html

by Luis B. Gutiérrez G.

Virtualenv

De acuerdo al sitio oficial de virtualenv, los desarrolladores lo definen como una herramienta que permite aislar los ambientes python. Esto busca resolver el problema de dependencias entre diferentes aplicaciones, donde por ejemplo: Si la aplicación appA requiere la versión 1.0 de libFoo y la aplicación appB requiere de la versión 2.0, esto podría generar un conflicto/quiebre en los servicios de los sistemas. Por lo tanto con virtualenv es posible crear un ambiente con sus propios directorios de instalación, que de por sí, no comparten librerías con otros ambientes de virtualenv.
Si no cuenta con virtualenv, puedes instalarlo con la herramienta pip que se encuentra en el directorio Scripts de la instalación de Python.

> pip install virtualenv

Creación de ambiente virtual

El comando básico a ejecutar para la creacion de un ambiente virtual es el siguiente:

> virtualenv ENV

Donde ENV es un directorio del sistema de archivos donde será creado el ambiente virtual y cuyos efectos son:

  • Se crean los subdirectorios lib e include dentro del directorio ENV, este incluye las librerías de soporte para el nuevo ambiente.
  • Se crea la carpeta de ejecutables bin
  • Los packages pip y setuptools son instalados para permitir la fácil instalación de otros packages dentro del ambiente.

Cabe señalar que por defecto virtualenv hereda los recursos desde Python27\Lib\site-packages, esto es efectivo cuando se tiene control global al directorio. Sin embargo, si requiere de aislamiento total, es necesario que consideres ejecutar la siguiente sentencia de comando.

> virtualenv –no-site-packages ENV

Activar y desactivar virtualenv

Una vez creado el ambiente virtual, se debe activar el ambiente por medio de un script denominado activate, de acuerdo a la documentación de virtualenv, la ubicación de este script puede variar dependiendo de la plataforma utilizada, en caso de sistemas Posix este reside en /ENV/bin. Sin embargo en sistemas Windows este se encuentra en /ENV/Scripts.
Para efectos de esta experimentación, se ha configurado el ambiente sobre plataforma Windows y la forma de activar el virtualenv es por medio de script activate, que como resultado tras su ejecución se puede comprobar un cambio en el prompt del shell.

> \path\to\env\Scripts\activate

Para desactivar solo debe ejecutar el script deactivate ubicado en el mismo directorio que activate.

(env)> \path\to\env\Scripts\deactivate

Finalmente para poder instalar cualquier package de python dentro del ambiente, solo se requiere activarlo y luego ejecutar el siguiente comando

(env)> pip install [package]

Referencias

https://virtualenv.pypa.io/en/latest/installation.html
https://virtualenv.pypa.io/en/latest/userguide.html

by Luis B. Gutiérrez G.

Manejo de argumentos por línea-comando en python

El propósito de la presente entrada es desarrollar un script básico en Python para el manejo de argumentos por línea-comando. Para esto se utilizará los módulos sys y getopt.

De acuerdo a las especificaciones de Python 2.7.10, estos módulos tienen el siguiente propósito:

sys: Provee acceso a algunas variables usadas o mantenidas por el intérprete y a funciones que interactúan fuertemente con el intérprete.

getopt: Permite a los scripts de línea-comando analizar los argumentos recibidos en sys.argv. Es compatible con las mismas convenciones que la función getopt() de Unix (Incluyendo los significados especiales de los argumentos con la forma ‘-’ y ‘–’)

Para comprender en detalle el uso del módulo, se utilizará el script que se aprecia a continuación.

import sys
import getopt


#Metodo de ayuda, que define como usar el programa
def usage():
	print "Paramtool"
	print
	print "Uso: paramtool.py -m mensaje_ejemplo"
	print "-m --mensaje - recibe el mensaje que sera mostrado por pantalla"
	print
	print
	print "Ejemplo: "
	print "paramtool.py -m hola_mundo"
	sys.exit(0)


# Muestra el mensaje recibido por parametro
def mensaje(msg):
	print msg
	sys.exit(0)


# Metodo principal que maneja el uso del programa
def main():
	try:
	opts, args = getopt.getopt(sys.argv[1:],"hm:m", ["help","mensaje="])
	except getopt.GetoptError as err:
	print str(err)
	usage()

	for o,a in opts:
		if o in ("-h","--help"):
			usage()
		elif o in ("-m", "--mensaje"):
			mensaje(a)
		else:
			assert False,"Unhandled Option"


if __name__ == "__main__":
	main()
  1. Primero que todo, vale decir que cuando arranca el script, este ejecuta la instrucción principal ubicado en la línea 41 (L41).
  2. La L1 y L2 corresponden a la importación de los módulos mínimos necesarios para la creación de un script con manejo de argumentos por línea-comando.
  3. El método ayuda(), permite desplegar por consola un mensaje de múltiples líneas, con la finalidad de mostrar al usuario como utilizar el script o aplicación.
  4. Por otra parte el método mensaje(), solo muestra por pantalla el valor del parámetro recibido y sale del script.
  5. El método main(), es el método que maneja los argumentos y uso del programa. La L27 muestra un ejemplo de implementación del módulo getopt, quien recibe tres parámetros: El primero (sys.argv[1:]) es el encargado de pasar los argumentos recibidos desde la línea-comando. El segundo (“h:m”) corresponden a los caracteres que serán recibidos como argumento de la forma ‘-v’ y las combinaciones que se pueden realizar con ellos. El tercero ([“help”,”mensaje=”]) corresponden a los argumentos verbales que son de la forma ‘–verbose’, pero si esta seguido por un = indica que viene seguido por un valor.

Referencias

https://docs.python.org/2/library/sys.html
https://docs.python.org/3.1/library/getopt.html

by Luis B. Gutiérrez G.

Instalación de apache tomcat 7 sobre CentOS 6

tomcatEl siguiente procedimiento esta enfocado en resolver la instalación de un servidor tomcat versión 7 sobre plataforma Linux-CentOS 6 para un ambiente de desarrollo, donde se considerarn las configuraciones básicas en el sistema operativo para el despliegue automático del servicio.

Descarga de recursos

Previo a los pasos de instalación del servidor tomcat, es necesario descargar los recursos de software necesarios, estos son:

  • Repositorio epel
  • Servidor apache tomcat 7

Los siguientes pasos asumen que se encuentra instalado algún programa para la descarga de los recursos desde internet como wget/curl y que la máquina tiene configurada la variable de entorno (http_proxy) referente al proxy en caso de ser necesario.

  • Lo primero que debe hacer, es acceder al directorio temporal del sistema, para que se descarguen en él, cada uno de los recursos

# cd /tmp

  • Luego se procede a descargar los recursos, tal como se indican a continuación:

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# wget http://apache.spinellicreations.com/tomcat/tomcat-7/v7.0.62/bin/apache-tomcat-7.0.62.tar.gz

  • Ya descargados los recursos, se procede a realizar a actualizar la lista de repositorios para agregar a epel, este permitirá disponer de las últimas actualizaciones de software para el sistema. El comando a ejecutar para su actualización es el siguiente:

# rpm -Uvh epel-release-6*.rpm

Instalación del servidor

Para instalar el servidor de aplicaciones tomcat 7, se requiere descomprimir el recursos descargado y dejarlo en la ruta de instalación definida por el equipo de instalación, para este caso se utilizará el directorio “/usr/local/tomcat7”.

# tar xzf apache-tomcat-7.0.62.tar.gz

# mv apache-tomcat-7.0.59 /usr/local/tomcat7

  • Para probar manualmente que la instalación del servidor es correcta, se procede a ejecutar el siguiente script:

# cd /usr/local/tomcat7

# ./bin/startup.sh

  • Acceder a ruta donde se encuentran todos los script de arranque de sistema.Para permitir que tomcat pueda arrancar junto al sistema operativo (CentOS 6 y equivalentes) es necesario realizar el siguiente procedimiento:

# cd /etc/int.d/

  • Crear el script de arranque utilizando algún editor de texto como vi o nano. El script se encuentra disponible en el anexo A1.
  • Otorgar permisos de ejecución al script creado.

# chmod o+x  tomcat

  • Agregar script a chkconfig para crearlo como servicio.

# chkconfig –add tomcat

# ls -l /etc/rc3.d/

  • Realizar pruebas de los servicios creados.

# service tomcat start

# service tomcat restart

# service tomcat stop

Configuración del firewall

  • Agregar las reglas necesarias en el firewall iptables para habilitar los puertos 80 y 8080

# vi /etc/sysconfig/iptables

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT

  • Crear las credenciales de autenticación, para configurar el despliegue de aplicaciones en el servidor tomcat 7, para ello es necesario modificar el archivo tomcat-users.xml con algun editor de texto como “vi” y copiar la configuracion disponible en el anexo A2.

# vi /usr/local/tomcat7/conf/tomcat-users.xml

Anexos

[Read more…]

Amenazas de seguridad 2013 – 2014

El siguiente video realizado por la empresa Symantec, presenta la brecha de ciber-delitos acontecidos durante los años 2013 y 2014, cuyas cifras son impactantes. De ellas destaca:

  • Aumento de 91% en las campañas de ataques dirigidos en 2013
  • En 2013, las fugas de datos aumentaron 62%
  • Se expusieron más de 552 millones de identidades como resultado de las fugas de datos en 2013
  • Se descubrieron 23 vulnerabilidades de Día Cero (zero-day)
  • El 38% de los usuarios móviles fueron víctimas del cibercrimen en los pasados 12 meses
  • El volumen de spam disminuyó y representó el 66% de todo el correo electrónico
  • 1 de cada 392 correos electrónicos es un mensaje fraudulento o phishing
  • Los ataques basados en la web crecieron un 23
  • 1 de cada 8 sitios web legítimos tiene vulnerabilidades críticas

A continuación el video-resumen de los informes symantec 2014.

Fuente: www.symantec.com

Bienvenido

Lo último que uno sabe es por donde empezar
Blaise Pascal


Hola, si estas leyendo esta entrada quiero darte la bienvenida a este blog, cuyo propósito consiste en difundir y compartir el conocimiento teórico-práctico relativos a la ingeniería de software, seguridad de la información y temas que considero de interés personal y profesional.

Los compromisos que considero importantes para dar vida a este blog, son:

  1. Publicación de 3 entradas mensuales
  2. Publicaciones re-publicadas desde otros sitios
  3. Respeto de propiedad intelectual

Esperando que el tiempo esté de mi parte para poder cumplir con los compromisos establecidos, te dejo a rienda suelta para que bucees por los contenidos de este sitio.

Se despide Atte.

Luis B. Gutiérrez G.