Buscar este blog

10 abril 2014

Resaltar sintaxis GeneXus en Notepad++

Hola!

A veces uno se pasa porciones de código entre colegas o simplemente quiere utilizar alguna facilidad del Notepad++ o lo utiliza como un pequeño borrador o recordatorio, o quiere mostrar código sin tener el IDE instalado, en fin por varios motivos, uno querría ver código genexus con su sintaxis resaltada. Entonces un día me tomé el trabajo de crear la definición para resaltar la sintaxis de código GeneXus (Para los trolls: Si, en GeneXus se programa y tiene código)

Para importar:
Menú Lenguaje --> Definir Idioma ó Language --> Define your language...
Luego importar... / import... seleccionar archivo y aceptar, luego se debe reiniciar el Notepad++ para que actualice la lista de lenguajes.

*Necesitas Notepad++ versión >= 6.5.5


Con esto lograremos que se agregue en el menú lenguajes la opción para resaltar sintaxis GeneXus, también aplicará este estilo a cualquier archivo con extensión "gx".

Aquí una vista previa de como queda:


Traté de hacerlo lo mas completo posible para poder resaltar código de: Eventos, Procedimientos y Reglas.
Pueden modificar el estilo a gusto y piacere, si alguien hace otro mejor compartan.


Problemas conocidos: La librería UDL que utiliza notepad++ para el estilo de los lenguajes definidos por el usuario en su versión 2 todavía no soporta definir el color de fondo como "transparente" o para que tome el mismo color de fondo del tema, con lo cual si utilizas un tema con fondo oscuro, el texto se verá horriblemente contrastante ya que el mismo está fijo como blanco, les dejo un link con el archivo apto para estilos con fondo negro:


31 mayo 2011

Cambiar precisión de columnas decimal

No les pasó alguna vez que subestimaron el tamaño de una columna tipo decimal? y despues no sabían por qué empezaron a desbordarse por doquier!?. Bueno les hice un pequeño script t-sql que les va a solucionar la vida.

En mi caso quería cambiar todas las columnas de precisión (10,4) a (18,4) ya que en realidad SQL Server utiliza la misma cantidad de bytes (9 bytes) para almacenar cualquiera de estas dos configuraciones del tipo decimal, con lo cual en estos casos conviene utilizar la máxima precisión posible dentro de cada rango especificado en este enlace donde podrán ver la tabla que muestra la relación precisión - tamaño en bytes.

También en el enlace anterior se explica para los que no saben, que la precisión es la cantidad total de dígitos a almacenar y la escala, que es opcional, indica la cantidad de posiciones decimales.
Por ejemplo 10,2 significa 10 dígitos en total de los cuales 8 son enteros y 2 decimales.

El sript convierte todos los campos decimal de la base de datos que este en uso al momento de su ejecución a su máxima precisión para el numero de bytes actual que esta ocupando, también incrementa los lugares decimales de 2 a 4 dígitos. Se puede modificar fácilmente este script para que por ejemplo aumente todos los campos decimal a una precisión deseada o cualquier otra condición que sea necesaria, la base está... a meterle mano sin miedo (previo backup y en ambiente de testing)

-- VARIABLES
DECLARE @tblName0 NVARCHAR(150)
DECLARE @tblName NVARCHAR(150)
DECLARE @colName NVARCHAR(150)
DECLARE @colDataType NVARCHAR(50)
DECLARE @colNumericPrecision NUMERIC
DECLARE @colNumericScale NUMERIC
DECLARE @colIsNullable CHAR(3)
DECLARE @cont int
-- CURSOR
DECLARE cur_tables CURSOR FOR
select t.table_name, column_name, data_type,
numeric_precision, numeric_scale, is_nullable
from information_schema.columns c
inner join information_schema.tables t
on c.table_name=t.table_name
and table_type='BASE TABLE'
and data_type='decimal'
OPEN cur_tables
FETCH NEXT FROM cur_tables INTO @tblName, @colName, @colDataType,
@colNumericPrecision, @colNumericScale, @colIsNullable
SET @tblName0=''
SET @cont=0
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @Precision VARCHAR(2)
DECLARE @Scale VARCHAR(2)
DECLARE @Nulls VARCHAR(10)

-- Máxima precisión posible sin aumentar
-- la cantidad de bytes necesarios.
IF @colNumericPrecision <= 9
SET @Precision = '9'
ELSE IF @colNumericPrecision <= 19
SET @Precision = '19'
ELSE IF @colNumericPrecision <= 28
SET @Precision = '28'
ELSE IF @colNumericPrecision <= 38
SET @Precision = '38'
-- Incrementar a 4 decimales
IF @colNumericScale < 4
SET @Scale = '4'
ELSE
SET @Scale = CAST(@colNumericScale as VARCHAR(2))

-- ES NECESARIO CAMBIAR LA COLUMNA?
IF (@colNumericPrecision <> CAST(@Precision as NUMERIC) OR
@colNumericScale <> CAST(@Scale as NUMERIC))
BEGIN
IF @colIsNullable='YES'
SET @Nulls = 'null'
ELSE
SET @Nulls = 'not null'

EXEC('alter table ' + @tblName +
' alter column ' + @colName + ' decimal(' + @Precision + ',' + @Scale + ') ' + @Nulls)
SET @cont=@cont+1
IF @tblName<>@tblName0
BEGIN
SET @tblName0=@tblName
PRINT '--------------------'
PRINT @tblName
PRINT '--------------------'
END
PRINT char(9) + @colName + ' se ha cambiado de: ' + @colDataType +
'('+ cast(@colNumericPrecision as nvarchar(50)) + ',' +
cast(@colNumericScale as nvarchar(50)) + ')' +
' a decimal(' + @Precision + ',' + @Scale + ') '
END --IF
-- OBTENER SIGUIENTE COLUMNA A TRATAR
FETCH NEXT FROM cur_tables INTO @tblName, @colName, @colDataType,
@colNumericPrecision, @colNumericScale, @colIsNullable
END
PRINT '----------------------------------------------------------'
PRINT cast(@cont as nvarchar(10)) + ' columnas afectadas.'
CLOSE cur_tables
DEALLOCATE cur_tables

Si sos principiante aquí vimos varias cosas que te recomiendo leer antes de intentar cualquier cosa: manejo de cursores, estructuras condicionales, consultas a las vistas de información de esquema y la instrucción EXEC[UTE].
Hasta la próxima!

27 mayo 2011

Información sobre un objeto

Para los que usamos alguna vez Oracle sabemos que con el comando DESC[RIBE] obtenemos información acerca de una tabla en particular, ahora bien para SQL Server, no existe tal comando con lo cual buscando encontré un pequeño pero útil procedimiento almacenado que cumple dicha función, este es sp_help.
¿Cómo lo usamos?

exec sp_help ó simplemente sp_help

Lo interesante es que no solo brinda información sobre tablas sino que también sobre stored procedures (muy util para ver que parámetros recibe de que tipo y que resultado devuelve), vistas, triggers, funciones, y cualquier otro objeto de nuestra base de datos.

Probar sp_help sp_help
...y como es de esperar sp_help nos brindará información sobre sí mismo ya que es un procedimiento almacenado más...

Es una pavada pero a alguien le podría servir. Hasta la próxima.

11 abril 2011

Herramienta para gestión de proyectos


Quería compartir una aplicación muy piola y potente que nos permite elaborar y compartir proyectos, importar desde MS Project, exportar a diferentes formatos, integrarlo con Google Docs, y muchas cosas mas. Se trata de Gantter, aplicación web 2.0 totalmente interactiva y ágil disponible en 11 idiomas, se puede acceder mediante su sitio web o agregarlo a nuestro navegador como una extensión de Firefox o Chrome.
Ah! me olvidaba, es completamente gratuita!

17 febrero 2011

Anti-patrones de diseño


Así como existen los Patrones de diseño existen una serie de anti-patrones de diseño, los cuales nos permiten evitar ciertos errores o caminos desfavorables a la hora de diseñar, planificar e implementar un proyecto de software. A pesar de tener nombres muy graciosos estoy seguro que alguna vez te topaste con alguno de ellos:

Pollo sin cabeza (headless chicken): Se aplica al gestor, coordinador o responsable que vive en una permanente situación de pánico y medidas desesperadas.
Caballero de tres cabezas (three-headed knight): Gestor indeciso, poco firme, dubitativo.
Humo y espejos (smoke and mirrors): Mostrar cómo será una funcionalidad antes de que esté implementada.
Mala gestión (bad management): Gestionar un proyecto sin tener suficientes conocimientos sobre la materia.
Software inflado (software bloat): Permitir que las sucesivas versiones de un sistema exijan cada vez más recursos.
Fábrica de combustible (gas factory): Diseñar de manera innecesariamente compleja.
Gran bola de lodo (big ball of mud): Construir un sistema sin estructura definida.
Problema del yoyó (yo-yo problem): Construir estructuras (por ejemplo, de herencia) que son difíciles de comprender debido a su excesiva fragmentación.
Singletonitis: Abuso de la utilización del patrón singleton.
Ancla del barco (boat anchor): Retener partes del sistema que ya no tienen utilidad.
Desarrollo conducido por quien prueba (tester driven development): Permitir que un proyecto software avance a base de extraer sus nuevos requisitos de los informes de errores.
Avance del alcance (scope creep): Permitir que el alcance de un proyecto crezca sin el control adecuado.
Funcionalitis acechante (creeping featuritis): Añadir nuevas funcionalidades al sistema en detrimento de su calidad.
Obsolescencia continua (continuous obsolescence): Destinar desproporcionados esfuerzos a adaptar un sistema a nuevos entornos.
Gestión champiñón (mushroom management): Tratar a los empleados sin miramientos, sin informarles de las decisiones que les afectan (manteniéndolos cubiertos y en la oscuridad, como los champiñones).

la verdad todos estan buenos asi que mejor sigan leyendo aquí.