martes, 15 de marzo de 2011

Kaspersky predice la evolución del cibercrimen

El espionaje comercial, el robo de bases de datos y los ataques a la reputación de las empresas tendrán una gran demanda en el mercado negro.

Diario Ti: Kaspersky Lab ha elaborado sus previsiones sobre cómo evolucionará el cibercrimen entre 2011 y 2020. El análisis de los principales cambios en la seguridad de la última década y las tendencias emergentes en el desarrollo de ordenadores personales, teléfonos móviles y sistemas operativos son las bases del informe.

El incremento de nuevos sistemas operativos afectará al proceso de creación de amenazas. Los ciberdelincuentes se centrarán en múltiples sistemas operativos y dispondrán de muchos dispositivos bajo control o se especializarán en ataques a empresas con plataformas basadas en Windows. La segunda opción, con toda probabilidad, será la que más interés suscite.

Dos tipos de ciberdelincuencia
El espionaje comercial, el robo de bases de datos y los ataques a la reputación de las empresas tendrán una gran demanda en el mercado negro. Hackers y CSOs se enfrentarán los unos a los otros en un campo de batalla virtual. Los organismos estatales de lucha contra la ciberdelincuencia se verán, igualmente, involucrados en el proceso y tendrán que tratar sobre todo cuestiones relacionadas con la plataforma Windows, además de las últimas versiones de los tradicionales sistemas.

El segundo grupo de ciberdelincuentes centrará sus actividades en aquellos ámbitos que afectan a nuestra cotidianeidad, como el sistema de transporte y otros servicios. Hackear y robar estos sistemas, haciendo uso libre de ellos, o el intercambio de datos personales de los usuarios serán el principal foco de atención de la nueva generación de hackers, que harán de estas actividades su medio de vida.

La evolución de Internet a convertirse en un popular medio de comunicación, entretenimiento y noticias, continuará en ascenso. La base de usuarios online se incrementará al incluir muchos dispositivos móviles inteligentes, capaces de usar la red para intercambiar o transferir información sin necesidad de intervención humana.
via : Diario Ti

domingo, 13 de marzo de 2011

Sistemas Expertos

DEFINICIONES DE LOS SISTEMAS EXPERTOS
Es un software que imita el comportamiento de un experto humano en la solución de un problema. Pueden almacenar conocimientos de expertos para un campo determinado y solucionar un problema mediante deducción lógica de conclusiones.
Son SE aquellos programas que se realizan haciendo explicito el conocimiento en ellos, que tienen información específica de un dominio concreto y que realizan una tarea relativa a este dominio.
Programas que manipulan conocimiento codificado para resolver problemas en un dominio especializado en un dominio que generalmente requiere de experiencia humana.
Programas que contienen tanto conocimiento declarativo (hechos a cerca de objetos, eventos y/o situaciones) como conocimiento de control (información a cerca de los cursos de una acción), para emular el proceso de razonamiento de los expertos humanos en un dominio en particular y/o área de experiencia.
Software que incorpora conocimiento de experto sobre un dominio de aplicación dado, de manera que es capaz de resolver problemas de relativa dificultad y apoyar la toma de decisiones inteligentes en base a un proceso de razonamiento simbólico.
Estos sistemas expertos son en lo esencial sistemas de computación basados en conocimientos cuyos componentes representan un enfoque cualitativo de la programación. Muchas personas pueden creer que un Sistema Experto (SE) es un sistema compuesto por subsistemas y a su vez estos por otros subsistemas hasta llegar a los programas, y que los SE se miden por la cantidad de programas que contienen. Sin embargo la cantidad no es lo que prima en los SE, si no la cualidad del mismo, esta cualidad está dada por la separación de las reglas que describen el problema (Base de Conocimientos), del programa de control que es quien selecciona las reglas adecuadas (Motor de inferencias).
Podemos decir que un Sistema Experto es una Base de Conocimientos (BC), una Base de Hechos (BH) y un Motor (o Máquina) de Inferencias (MI). Por otra parte estos sistemas no se miden por la cantidad de instrucciones o programas sino por la cantidad de reglas que hay contenida en su Base de Conocimientos.
¿Por qué utilizar un Sistema Experto?
1. Con la ayuda de un Sistema Experto, personas con poca experiencia pueden resolver problemas que requieren un "conocimiento formal especializado".
2. Los Sistemas Expertos pueden obtener conclusiones y resolver problemas de forma más rápida que los expertos humanos.
3. Los Sistemas Expertos razonan pero en base a un conocimiento adquirido y no tienen sitio para la subjetividad.
4. Se ha comprobado que los Sistemas Expertos tienen al menos, la misma competencia que un especialista humano.
5. El uso de Sistemas Expertos es especialmente recomendado en las siguientes situaciones:
o Cuando los expertos humanos en una determinada materia son escasos.
o En situaciones complejas, donde la subjetividad humana puede llevar a conclusiones erróneas.
o Cuando es muy elevado el volumen de datos que ha de considerarse para obtener una conclusión.
APLICACIONES
Sus principales aplicaciones se dan en las gestiones empresariales debido a que;
a) Casi todas las empresas disponen de un ordenador que realiza las funciones básicas de tratamiento de la información: contabilidad general, decisiones financieras, gestión de la tesorería, planificación, etc.
b) Este trabajo implica manejar grandes volúmenes de información y realizar operaciones numéricas para después tomar decisiones. Esto crea un terreno ideal para la implantación de los SE.
Además los SE también se aplican en la contabilidad en apartados como: Auditoria(es el campo en el que más aplicaciones de SE se esta realizando) Fiscalidad, planificación, análisis financiero y la contabilidad financiera.

viernes, 11 de marzo de 2011

Teléfono móvil y el cerebro

Las llamadas de telefonía móvil alteran la actividad cerebral

Pasar 50 minutos con un móvil pegado a la oreja es suficiente para cambiar la actividad de las células cerebrales en la parte del cerebro más próxima a la antena. Sin embargo, si eso produce algún daño o no todavía no está claro.
"Lo que mostramos es que el metabolismo de la glucosa (un signo de actividad cerebral) aumenta en el cerebro de las personas que estuvieron expuestas a un teléfono móvil en la zona próxima a la antena", señaló la Dra. Nora Volkow.

FUENTE: TELEFONÍA MÓVIL

miércoles, 2 de febrero de 2011

Google creará aplicaciones propias para Android

Diario Ti: El proceso implica además que algunos empleados de Google están siendo trasladados internamente para trabajar en el desarrollo de aplicaciones móviles para Android.

Aunque el número de aplicaciones para iOS supera con creces las disponibles para Android, difícilmente podría decirse que hay escasez en Android Market. Con todo, el número de aplicaciones desarrolladas por la propia Google es bastante limitada. Según Wall Street Journal, el número no superaría las 20 unidades y algunas estarían incorporadas en Android, mientras que otras, como Google Sky Map y Goggles son opcionales.

Asimismo, varias de las aplicaciones ofrecidas por Google también están disponibles para plataformas distintas a Android. Según las fuentes consultadas por Wall Street Journal, algunas de las aplicaciones que ahora comenzarán a ser desarrolladas serán exclusivas para Android.

La nueva ofensiva de Google para Android será desplegada en todas las oficinas internacionales de la empresa. Entre las aplicaciones de interés para la empresa figuran los juegos y servicios basados en la posición geográfica del usuario.

Según la fuente de Wall Street Journal, el proceso de contrataciones estará dirigido por Benjamin Ling, actual director de productos de búsqueda en Google. Wall Street Journal precisa que no fue posible contactar al propio Ling.

La semana pasada, Google anunció además sus planes de aumentar su plantilla, de los actuales 24.000 empleados, a 30.000.
via diario Ti

JAVACC

JavaCC (Java Compiler Compiler) es un generador de analizadores sintácticos de código abiertopara el lenguaje de programación Java. JavaCC es similar a Yacc en que genera un parser para una gramática presentada en notación BNF, con la diferencia de que la salida es en código Java. A diferencia de Yacc, JavaCC genera analizadores descendentes (top-down), lo que lo limita a la clase de gramáticas LL(K) (en particular, la recursión desde izquierda no se puede usar). El constructor de árboles que lo acompaña, JJTree, construye árboles de abajo hacia arriba (bottom-up).
JavaCC está licenciado bajo una licencia BSD.
JavaCC (Java Compiler Compiler) es una herramienta de generación automática de analizadores gramaticales basada en Java. La herramienta es propiedad de Sun Microsystems, la compañía propietaria del lenguaje Java, por lo que se ha convertido en el metacompilador más usado por los programadores en Java.
El funcionamiento de la herramienta consiste en analizar un fichero de entrada, que contiene la descripción de una gramática, y generar un conjunto de ficheros de salida, escritos en Java, que contienen la especificación de un analizador léxico y de un analizador sintáctico para la gramática especificada.
Las características más importantes de esta herramienta son las siguientes:
• Es la herramienta más utilizada en Java. Los propietarios estiman en cientos de miles el número de descargas de la herramienta y los foros de discusión congregan a miles de usuarios interesados en JavaCC.
• Se basa en una análisis sintáctico descendente recursivo.
• Por defecto JavaCC analiza gramáticas de tipo LL(1), pero permite fijar un Lookahead mayor (para analizar gramáticas LL(k)) e incluso utilizar un Lookahead adaptativo.
• Las especificaciones léxica y sintáctica de la gramática a analizar se incluyen en un mismo fichero.
• La especificación léxica se basa en expresiones regulares y la especificación sintáctica utiliza el formato EBNF.
• Junto a la herramienta principal se incluyen dos utilidades: JJTree, para crear automáticamente un generador de árboles sintácticos, y JJDoc, para generar automáticamente la documentación de la gramática en formato HTML.
• La distribución incluye numerosos ejemplos de gramáticas y existen repositorios en internet con la especificación de muchísimas gramáticas en el formato de JavaCC.
• La gestión de errores léxicos y sintácticos está basada en excepciones y contiene información muy valiosa respecto al origen del error y su posición.
• Existe un plugin para Eclipse que facilita la edición y ejecución de la herramienta dentro del desarrollo de cualquier aplicación en Java.
construir un analizador lexico con javacc
javacc
programa de practicas
manual javacc

ANTLR

¿Qué es y cómo funciona ANTLR?
ANTLR es un programa está escrito en java, por lo que se necesita alguna máquina virtual de java para poder ejecutarlo. Es software libre, lo que quiere decir que al descargarlo de la página oficial (http://www.antlr.org) obtendremos tanto los ficheros compilados *.class como el código fuente en forma de ficheros *.java.
ANTLR es un generador de analizadores. Mucha gente llama a estas herramientas compiladores de compiladores 15 , dado que ayudar a implementar compiladores es su uso más popular. Sin embargo tienen otros usos. ANTLR, por ejemplo, podría servir para implementar el intérprete de un fichero de configuración.
ANTLR es capaz de generar un analizador léxico, sintáctico o semántico en varios lenguajes (java, C++ y C# en su versión 2.7.2) a partir de unos ficheros escritos en un lenguaje propio.
Dicho lenguaje es básicamente una serie de reglas EBNF y un conjunto de construcciones auxiliares.


ANTLR genera analizadores pred-LL(k), y él mismo utiliza un analizador pred-LL(k) para leer los ficheros en los que están escritas las reglas EBNF. ANTLR admite acciones en sus reglas, además de otras prestaciones como paso de parámetros, devolución de valores o herencia de gramáticas.
Los analizadores en ANTLR
Ya mencionamos que ANTLR genera sus analizadores a partir de unos ficheros de entrada en los que se especifica el funcionamiento de dichos analizadores mediante el uso de reglas EBNF.
Para poder comprender los analizadores necesitaremos conocer la sintaxis de dichos ficheros de entrada.
Especificación de gramáticas con ANTLR
Los ficheros con los que trabaja ANTLR tienen la terminación *.g, y en adelante los llamaremos ficheros de especificación de gramáticas o, directamente, ficheros de gramáticas.
Un fichero de gramática contiene la definición de uno o varios analizadores. Cada uno de estos analizadores se traducirá a código nativo (java, C++ o C#, dependiendo de ciertas opciones) en forma de clases. Es decir, por cada analizador descrito en el fichero de gramáticas se generará una clase.
Todo fichero de gramática tiene la siguiente estructura:
header{
/* opciones de cabecera */
}
options
{
/* opciones generales a todo el fichero */
}
// A continuación la definición de el(los) analizadore(s).
Cabecera: Esta zona es opcional (puede aparecer o no). Delimitada por las partículas “header {” y “}”, en esta zona incluimos elementos en código nativo (java, C++ o C#) que deben preceder a la definición de las diferentes clases de los analizadores. Esta sección se utiliza para incluir otros ficheros (import e #include), definir el paquete al que pertenecerá la clase del analizador (package) etc.
• Opciones generales del fichero: Esta zona es opcional. Permite controlar algunos parámetros de ANTLR mediante “opciones”. Las opciones se representan como asignaciones:
nombreOpcion=valor;. Se utilizan mucho en ANTLR. La opción más importante de esta zona es la que permite elegir el lenguaje nativo en el que se generarán los analizadores (java,C++,C#). Su valor por defecto es “java”. Dado que vamos a generar reconocedores en java, no necesitaremos esta zona. En el manual de ANTLR aparecen todas las opciones que se pueden incluir en esta zona.
Tras las opciones generales del fichero vienen las definiciones de analizadores. Es muy común que en un mismo fichero se especifiquen varios analizadores (en la mayoría de los ejemplos que acompañan a ANTLR se utiliza esta técnica). Sin embargo también es posible definir cada analizador en un fichero, sobre todo cuando se trata de analizadores extensos.
Dado que nuestro lenguaje en este capítulo será muy sencillo, definiremos los tres analizadores en el mismo fichero.
En ANTLR, cada analizador tiene la siguiente estructura:
class nombreAnalizador extends tipoAnalizador; // definición del analizador
options {
/* Zona de opciones del analizador*/
}
tokens {
/* Zona de definición de tokens */
}
{
/* Zona de código nativo */
}
/* Zona de reglas */
Definición del analizador: En la primera línea definimos el nombre del analizador (nombreAnalizador) y su tipo (tipoAnalizador). El tipo puede será Lexer para analizadores léxicos, Parser para analizadores sintácticos y TreeParser para analizadores semánticos.
Zona de opciones: Esta zona es opcional, aunque casi siempre interesa utilizarla. En esta zona se definen propiedades muy importantes del analizador: se define el lookahead (k), si se va a generar un AST o no, en el caso de Parsers y TreeParsers, la importación/exportación de vocabulario, la activación/desactivación del tratamiento automático de errores etc
La zona de código nativo
No hay que olvidar que para ANTLR cualquier analizador es una instancia de una clase. En ocasiones es muy útil declarar métodos y atributos para dicha clase.
Para añadir métodos y variables a una clase de un analizador basta con escribirlos, entre la zona de opciones y la zona de reglas, entre llaves.
Flujo de caracteres
Para ANTLR el flujo caracteres es, simplemente “cualquier subclase de java.io.InputStream”.
Lo más normal es utilizar un flujo de caracteres provinentes de un fichero (con un FileInputStream) pero pueden utilizarse otras fuentes, como una cadena (StringBufferStream) o una página web (URL.openStream).
El InputStream que proporciona los caracteres al analizador léxico se le pasa como parámetro en su constructor.



Uno de los inconvenientes de utilizar las implementaciones de ASTs proporcionadas por ANTLR es que la visión que se tiene del árbol es muy reducida; cada nodo solamente tiene constancia de su primer hijo y de su “hermano”. Es decir, se trabaja con un árbol como el de la izquierda en la siguiente figura: