Tuesday, May 20, 2014

Mapas de Calor en Delphi

Un mapa de calor o "Heatmap" es un mapa que cambia de color por zonas dependiendo de un dato, es muy usado para estadísticas de producción en regiones geográficas.

Por ejemplo si queremos un mapa que nos mida las ventas por país como éste:

o como éste


Tenemos algunas maneras interesantes de hacerlas:

Lo primero es dibujar o importar el mapa, el mapa por lo general está definido en formato svg el cual es un formato de coordenadas, que se ve como ésto:

<svg height="210" width="500">
  <polygon points="200,10 250,190 160,210" style="fill:lime;stroke:purple;stroke-width:1" />
  Sorry, your browser does not support inline SVG.
</svg> 

pero claro ése es un triángulo, su mapa se verá como ésto:


perdonen, éste es solo un segmento del mapa, pero se debe incluir en nuestro programa cada segmento a estudiar y formar el mapa con la unión de todos ellos.



En nuestro programa creamos un objeto TPATH y en TPath.data insertamos los puntos vistos que forman nuestra región, crearemos un objeto para cada región que forma nuestro mapa.




Una vez completada la inserción de todas las regiones ( y debidamente identificadas ) podemos manipular su color con un simple case.




begin

FireDAC.Connected := True;
try
FDQuerySelect.Open;
FDQuerySelect.First;
while(not FDQuerySelect.EOF)do 
begin
Case (FDQuerySelect.FieldByName(‘MType’).AsInteger) of
1 : Pathlist[FDQuerySelect.index].fill.color := Green;
0 : Pathlist[FDQuerySelect.index].fill.color := Red;
else 
Pathlist[FDQuerySelect.index].fill.color := Blue; 

end;
FDQuerySelect.Next;

end;

Form.Redraw;

end;

Éste es tan sólo un ejemplo de lo que podemos hacer con Delphi, los reto a hacer lo mismo con Live Bindings



Monday, May 19, 2014

El Mercadeo en la programación moderna


En el mundo de hoy como ingenieros nos enfrentamos a una competencia globalizada, ya no existe la ventaja de ser locales en este campo de batalla mundial, el avance de las telecomunicaciones e internet han contribuido a que nuestra competencia pueda proveer sus servicios a mejor precio y con mejor infraestructura que nosotros como si estuviera aqui!

Se necesita mantener una visión de mercadeo de nuestras habilidades para descubrir la manera de llegar al usuario global, poder hacer aplicaciones para mejorar la vida de las personas sin importar donde estén y de ésta manera vender nuestro trabajo.

Debemos abrir nuestras mentes no solo al hacer por hacer, sino obtener una visión de negocio, nos gusta pensar en nosotros mismos como artistas, pero estamos en un mundo donde nuestras herramientas no pueden ser perfectas para todos.

La creación de herramientas computacionales que se ajustan a la manera de trabajar de todas las empresas es un sueño, hay tantas maneras de trabajar como empresas y un sistema que se ajuste a todas es una locura.

La era del software a la medida llegó a su fin hace mas de 15 años atrás, estamos en una era donde se utilizan herramientas que se complementan entre ellas para llegar a soluciones económicamente rentables.

Hay que volver a la raíz de la ingeniería y disolver los grandes problemas en problemas pequeños.

Debemos mercadear soluciones a un problema simple, que se puedan combinar para solucionar problemas complejos.


Raúl Morales Víquez raul.morales.víquez@hotmail.com / http://informatica-raulmorales.blogspot.com
Consultor en informática e Instructor, certificado en Seguridad Informática, Graduado en la Universidad Latina de Costa Rica con más de 10 años de experiencia en diversas áreas de cultura organizacional en empresas multinacionales.

Cuáles son sus temas favoritos?

Cuáles son sus problemas en el día a día?
Han tenido alguna situación que se arregló de una manera que no los dejó satisfechos?

Por favor hagan sus preguntas a raul.morales.viquez@hotmail.com


Tuesday, May 6, 2014

Cómo hacer una aplicación multilenguaje en Delphi

Lo primero que necesitamos para éste ejercicio es un objeto Tlang el cual incluiremos en la aplicación que deseemos tenga posibilidad multilenguaje.

Una vez finalizado y funcionando el programa, vamos a agregar un control que nos permita elegir el lenguaje que deseemos, puede ser parecido a éste:

TLang1.jpg

Una vez hecho ésto le damos doble click al componente TLang y él traerá a enfoque la siguiente ventana:

TLang2.jpg

La ventana solicita el código del lenguaje en la parte superior y a continuación lista todas las etiquetas del programa que hicimos, a la derecha de cada una podemos colocar nuestra traducción de cada una.

ADVERTENCIA
Sólo las etiquetas que traduzcamos manualmente y que tengan la propiedad "AutoTranslate" activada se traducirán cuando se cambie el idioma.

El lenguaje cambia cuando se actualiza la propiedad "lang" del control TLang como en éste ejemplo:
Lang1.Lang := ListBox1.Selected.Text;


Friday, May 2, 2014

Como trabajo con JSON en Delphi?

Para trabajar en JSON se utiliza el objeto TJSONObject, de la siguiente manera:

Si uno está generando la información a enviar puede usar el siguiente método:

var
  LJSONObject: TJSONObject;
 
begin
  LJSONObject:= TJSONObject.Create;
  LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hola'),
                                       TJSONString.Create('Mundo')));

Rápido y sencillo verdad?
Pero digamos que tenemos que utilizar un header predefinido como éste:

const
  GJSONString =
'{'+
    '"glossary": {'+
        '"title": "example glossary",'+
  '"GlossDiv": {'+
            '"title": "S",'+
   '"GlossList": {'+
                '"GlossEntry": {'+
                   ' "ID": "SGML",'+
     '"SortAs": "SGML",'+
     '"GlossTerm": "Standard Generalized Markup Language",'+
     '"Acronym": "SGML",'+
     '"Abbrev": "ISO 8879:1986",'+
     '"GlossDef": {'+
                        '"para": "A meta-markup language, used to create markup languages such as DocBook.",'+
      '"GlossSeeAlso": ["GML", "XML"]'+
                    '},'+
     '"GlossSee": "markup"'+
                '}'+
            '}'+
        '}'+
    '}'+
'}';

Entonces se utiliza la funcion parser del objeto TJSONObject de ésta manera:

procedure ConsumeJsonBytes;
var
  LJSONObject: TJSONObject;
 
begin
  LJSONObject := nil;
  try
    LJSONObject := TJsonObject.Create;
    { convert String to JSON }
    LJSONObject.Parse(BytesOf(GJSONString), 0);
 
    { output the JSON to console as String }
    Writeln(LJSONObject.ToString);
  finally
    LJSONObject.Free;
  end;
end;

Produciendo el objeto deseado.


Tuesday, April 22, 2014

Solución de Modelado de Datos

Cuánto tiempo de verdad le dedicamos al modelado de nuestro software?

Recuerdo mis clases de "Estructura de Datos" y de UML, en ése tiempo trabajaba como programador y mi jefe me decía que no había tiempo para hacer ésa documentación (utilizaba la metodología de prototipos).

La realidad de ése tiempo es que si querías hacer un proyecto "barato" tenías que tener un producto listo ¡ya!...

¿Qué ha cambiado?

Las empresas que invierten en productos baratos quedan casadas con el programador al igual que uno queda casado con un mecánico barato... " Yo ya le había visto eso de los frenos pero sólo le arreglé la llanta".
La realidad es que la búsqueda de la calidad no es un lujo, es una necesidad, las empresas que creen poder perder clientes, los pierden!, recuperar clientes no es un asunto sencillo y poder crear resultados es un proceso.

¿Qué debemos utilizar para modelar nuestros diagramas?

El modelado del software es un asunto delicado, es un mapa que seguirán nuestros colegas y que de estar incorrecto influirá en la calidad del software y el costo del proyecto.

Se debe escoger una herramienta que permita el crear los diagramas y de ser posible el hacer ingeniería inversa sobre lo que ya tenemos.

Por eso me gusta usar el E/R studio de embarcadero, tiene la facilidad del Erwin con una robustez que no he visto en otros sistemas.

La posibilidad de manejar grupos grandes de diseñadores gracias al CONNECT, de una manera fácil y hasta cierto punto entretenida (se parece un poco a una red social), facilita la comunicación y la creatividad.

Asimismo permite importar modelos hechos en otras herramientas como Erwin y Powerdesigner.

Por favor no duden en enviar sus preguntas a raul.morales.viquez@hotmail.com
o comentar aqui.

Wednesday, April 9, 2014

Metadatos o ¿Como sé que estoy guardando?

Nuestra era es llamada "La era de la información" y con mucha razón, ahora se guarda una cantidad enorme de información sobre empresas y personas en intentos elaborados de predecir que pasará en nuestro entorno y aprovechar esas situaciones a nuestro favor.

Pero ¿como sabemos que guardamos?, ¿Que sistemas lo utilizan?, ¿Para qué utilizamos esa información?

Hay miles de empresas que sufren problemas de espacio para bases de datos y estudios en como normalizar las bases de datos para reducir la redundancia en las tablas, pero la verdad es que sin un diseño unificado de la base de datos a nivel de empresa la realidad es que las bases de datos y sus contenidos son repetidos una y otra vez.
Al no saber que tenemos en éste momento o para que lo utilizamos, muchas veces  los administradores eliminan datos útiles simplemente porque no saben si son usados o si van a ser accesados en el futuro.

Para evitar éstas situaciones se ha implementado a nivel mundial un sistema de documentación integral, se llama "metadatos".

Los metadatos describen otros datos, identificando los aspectos importantes que la empresa o persona desee, utilizando valores como "tema", "responsable", "sistema", etc.

Existen varios tipos de metadatos:

  • Catalogación: porque pueden describir contenidos a nivel individual (como una página web) como en colecciones.
  • Estandarización: pueden describir el estándar utilizado para tipos de datos, modelos, columnas, reportes, etc.
  • Búsqueda de recursos: su aplicación facilita el trabajo de los motores de búsqueda.
  • Firmas digitales: formatos como RDF permiten codificar las firmas digitales, requisito fundamental a la hora de crear una web de confianza. 
  • Clasificación de contenidos: permiten establecer los contenidos que los usuarios desean ver.
  • Otras aplicaciones: marcados de políticas y preferencias de privacidad y los derechos relativos a la propiedad intelectual. 
Las librerías de metadatos le permiten a la empresa tener una catalogación de temas y directrices de importancia para la consulta de sus empleados que evitan doble trabajo y errores en procesos clave desde un simple reporte a una migración de bases de datos.

Ningún software de arquitectura de datos viene sin la opción de creación e inserción de metadatos, ¿lo está utilizando usted hoy en día?

Fuentes:
http://en.wikipedia.org/wiki/Metadata
http://www.bn.gov.ar/descargas/catalogadores/ponencias/251109_10a.pdf

Exploring the Differences between Red-Teaming and Blue-Teaming in Cybersecurity: Why Red-Teaming is Sexier; but Blue-Teaming is More Crucial

When it comes to cybersecurity, there are two teams that often get confused: redteams and blueteams. Redteams are the hackers, the ones w...