Thursday, June 26, 2014

Programando para Móbiles

¿Porqué compilar en lenguaje nativo es mejor?

El compilar en lenguaje nativo contrario al ejecutar tecnologías híbridas como el html5 tiene muchas ventajas para el desarrollador serio:

La aplicación es más rápida tanto de instalar como de ejecutar

Las aplicaciones nativas no traen tanto bagaje de gráficos extras ni máquinas virtuales que provocan grandes pausas de latencia en los teléfonos que no son aparatos diseñados para tener capacidad de procesamiento.

En un tiempo donde la transmisión de datos sigue siendo un recurso premium no podemos darnos el lujo de obligar a nuestros clientes a bajar una gran cantidad de datos simplemente por una mala planificación y/o mala decisión a la hora de elegir una herramienta para trabajar.

La aplicación es más segura

Una aplicación compilada en lenguaje nativo está encapsulada, así que sus datos están protegidos, no se puede decir lo mismo de html5 por lo cual sus aplicaciones son muy reducidas.

El uso de herramientas personales esta restringido
Un desarrollador de aplicaciones móviles es obligado a utilizar las herramientas que vienen con el framework, y rara vez éste les permite crear sus componentes propios.

El soporte a gráficos es limitado

Los frameworks para desarrollo no nativo tienen un soporte de gráficos muy limitado debido a las diferencias tan marcadas de manejo entre las diferentes plataformas, y no permiten un buen uso de 3d

In-eficiencia del código

Los framework de programación móvil orientadas a Web dependen de librerias de traducción de código que no son eficientes lo que dificulta la correcta ejecución del diseño original de la app.


Como solicitar permisos de uso de funciones en el teléfono desde mi aplicación Delphi

Un aspecto muy importante en el desarrollo de aplicaciones para teléfono que utilicen las capacidades de hacer llamadas, leer y enviar mensajes de texto o accesar bluetooth, es el de solicitar el permiso al dueño del teléfono para hacerlo.

En nuestras aplicaciones Delphi logramos ésto entrando en las opciones de nuestro proyecto


 Dentro de nuestro cuadro de opciones vamos a elegir la opción "Uses Permisions"("Utilizar Permisos") y dentro del cuadro que se muestra elegimos el perfil que deseemos. recordemos que nuestra aplicación Delphi es compilable en lenguaje nativo en Android y en IOS.


Una vez hecho ésto escojemos las opciones que necesitamos


Ahora cuando nuestra aplicación se instale en el teléfono, solicitará el permiso para utilizar los recursos que necesita.

ADVERTENCIA
Este proceso NO es opcional.
Los recursos del teléfono están protegidos por defecto y no permitirán que un programa sin permisos los utilice, Delphi agrega por defecto las solicitudes de sus unidades nativas pero cualquier programa que utilice API's debe revisar que todas las solicitudes de permisos estén agregadas

Thursday, June 12, 2014

¿Qué es un botnet?

Creo que a las personas que les interesa la seguridad de la información han escuchado los conceptos de:

Ataque de Negación de Servicio (DOS - Denial of Service)
Ataque distribuido de Negación de Servicio (DDOS - Distributed Denial of Service)
Ataque de pitufos (Smurf Attack)
Ataque de zombies (Zombie attack)

Estos tipos de ataque tienen rasgos muy interesantes en común, todos implican una o varias computadoras enviando suficientes solicitudes al sistema "víctima" (para llamarlo de algún modo), de manera que éste colapse y no pueda cumplir su función.

Una de las maneras más sencillas de desarrollar un ataque efectivo es el de tener un número de computadoras que podamos utilizar para el mismo y que no sean posibles de rastrear.

El término "botnet" aparece cuando ingenieros crean un código que permite que varias computadoras hagan una tarea en común aprovechando el poder de procesamiento de cada una como si fueran una sola y como toda buena idea, alguien encontró una manera de corromperla.

Existen varios virus que obtienen control de la computadora, crean puertos de comunicación adicionales y reciben órdenes de personas que no son los dueños legítimos, ésta computadora se ha convertido en un bot.

Uno de los virus más conocidos por su facilidad de uso y su infectabilidad es el ZEUS, incluso en el mercado negro se venden los servicios de botnets creadas con esfuerzo y paciencia para efectuar los ataques descritos.

F-Secure ha liberado una página web que le permite saber si está infectado por ZEUS:
http://campaigns.f-secure.com/en_global/zeus/ols/

Le recomiendo una visita ya que el servicio es gratuito

Conección a un Mainframe IBM usando SNA en Delphi

El mainframe IBM es una máquina utilizada en empresas que requieren un procesamiento rápido y poderoso, Instituciones financieras y de gobierno son algunos ejemplos.

Las nuevas tecnologías han dejado de lado la conexión directa a éstos gigantes de la industria en un mundo donde la multitud de tecnologías han buscado el cambio y la renovación antes que el soporte a tecnologías robustas que ahora son llamadas "legacy".

¿Cómo podemos utilizar un lenguaje moderno como delphi para conectarnos de manera segura a un mainframe que todavía utiliza SNA?


Delphi necesita una herramienta para conectarse ya que no posee una conexión directa, pero la diversidad de opciones que soporta le permite utilizar una de éstas opciones:

Un emulador de terminal como Rumba http://www.microfocus.com/products/terminal-emulator/index.aspx

Otra opción es utilizar el Microsoft Host Integration Server (HIS) para convertir la conexión SNA a un servicio Web consumible como SOAP

y exite la opción también de escribir sus propios componentes COM como los descritos para VB en éste documento de ibm
ftp://public.dhe.ibm.com/software/cics/ccl/cclhaq00.pdf

Tuesday, June 10, 2014

¿Como Optimizar SQL de manera visual?

Uno de los retos del día a día es optimizar los SQL que deben ejecutarse en nuestras bases de datos.

Muchos preguntarán el porqué de ésto, tomando en cuenta las capacidades procesales de las máquinas de hoy en día pero la respuesta es justamente que la capacidad de procesamiento es costosa, y debemos llegar a un punto de equilibrio muy por debajo del techo de la capacidad promedio de procesamiento si deseamos estar preparados para las "horas pico"

Los motores de bases de datos actuales nos permiten hacer búsquedas muy específicas y aunque nos parezcan ínfimas las velocidades de búsqueda, la cantidad de éstas es simplemente inmensa y una diferencia de 0.1 segundo entre una búsqueda y otra es una ventaja enorme.

Optimizar sentencias pequeñas no presenta problema, pero que tal una de ésta categoría?

SELECT C.Phone_Number, C.Honorific, C.First_Name, C.Last_Name,
C.Suffix, C.Address_ID, A.Address_ID, A.Street_Address_Line1,
A.Street_Address_Line2, A.City_Name, A.State_Abbreviation,
A.ZIP_Code, OD.Deferred_Shipment_Date, OD.Item_Count,
ODT.Text, OT.Text, P.Product_Description, S.Shipment_Date
FROM Orders O, Order_Details OD, Products P, Customers C, Shipments S,
Addresses A, Code_Translations ODT, Code_Translations OT
WHERE UPPER(C.Last_Name) LIKE :Last_Name||'%'
AND UPPER(C.First_Name) LIKE :First_Name||'%'
AND OD.Order_ID = O.Order_ID
AND O.Customer_ID = C.Customer_ID
AND OD.Product_ID = P.Product_ID(+)
AND OD.Shipment_ID = S.Shipment_ID(+)
AND S.Address_ID = A.Address_ID(+)
AND O.Status_Code = OT.Code
AND OT.Code_Type = 'ORDER_STATUS'
AND OD.Status_Code = ODT.Code
AND ODT.Code_Type = 'ORDER_DETAIL_STATUS'
AND O.Order_Date > :Now - 366
ORDER BY C.Customer_ID, O.Order_ID DESC, S.Shipment_ID, OD.Order_Detail_ID;

Por eso hoy voy a mostrar un método muy usado, VST

Para empezar vamos a clasificar las partes de la consulta de la siguiente manera, vamos a crear un diagrama de tipo autómata en la que:
Las tablas usadas en la consulta serán los nodos.
Los Joins serán las líneas de conexión entre los nodos
y los filtros nos guiarán con la ruta a seguir.

De ésta manera la consulta anterior se reclasificaría así:

Tablas
Orders O,
Order_Details OD,
Products P,
Customers C,
Shipments S,
Addresses A,
Code_Translations ODT,
Code_Translations OT


Joins
OD.Order_ID = O.Order_ID
O.Customer_ID = C.Customer_ID
OD.Product_ID = P.Product_ID(+)
OD.Shipment_ID = S.Shipment_ID(+)
S.Address_ID = A.Address_ID(+)
O.Status_Code = OT.Code
OD.Status_Code = ODT.Code

Filtros
WHERE UPPER(C.Last_Name) LIKE :Last_Name||'%'
AND UPPER(C.First_Name) LIKE :First_Name||'%'
AND OT.Code_Type = 'ORDER_STATUS'
AND O.Order_Date > :Now – 366
AND ODT.Code_Type = 'ORDER_DETAIL_STATUS'

y armamos el diagrama de la siguiente manera

Para que quede un diagrama como éste

El siguiente paso es ordenarlo para que nos permita determinar la ruta más discriminatoria y por lo tanto la que va a acelerar nuestra consulta:


Aquí podemos definir que la ruta mas restrictiva es ésta:


Por lo tanto nuestra consulta debe empezar por efectuar los joins a las tablas OD, O y C antes de continuar con las demás para considerarla optimizada.

 

Monday, June 9, 2014

Problemas conectando su aplicación a Oracle? tal vez no sea su culpa

Hoy en día existen muchas empresas que mantienen licencias de bases de datos por más tiempo del recomendado, es una práctica común ya que si la base de datos cumple con su función no es necesaria su actualización.

Oracle tiene sus pequeños detalles y fui recordado de uno de ellos hace poco.

Oracle no acepta conexiones de programas que tengan los siguientes caracteres en el nombre del programa o en el nombre de los folders que lo contienen: <:/\|?*()%&'$@^~#">



Eso basado en los siguientes drivers de conexión:

Oracle Net Services - Version: 8.1.7.0 to 10.2.0.1

Oracle Data Provider for .NET - Version: 8.1.7.0 to 10.2.0.1

Oracle Objects for OLE - Version: 8.1.7.0 to 10.2.0.1

Oracle Provider for OLE DB - Version: 8.1.7.0 to 10.2.0.1

Oracle ODBC Driver - Version: 8.1.7.0 to 10.2.0.1



Así que si tratan a conectarse a Oracle y sus drivers de conexión están entre las versiones mencionadas y su programa está en un subdirectorio tal como "c:\program files (x86)", no van a poder conectarse, les dará un error como éste : ORA-12154: TNS:could not resolve the connect identifier specified o éste ORA-6413: Connection not open.


De modo que lo único que pueden hacer es reinstalar el programa que necesitan conectar a la base de datos en un subdirectorio sin ésos caracteres.


en WindowsX aún así dependiendo del tipo de programa instalará lo que pueda dentro de "c:\program files (x86)", pero si todas las referencias apuntan al otro directorio deberían poder mover lo que tengan en Program Files (x86) al directorio que crearon.

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...