sábado, 26 de julio de 2014

Tips and Trick that I use with Google


At first Google just made search, without many option to search. Today Google has too many option. Since the simplest search option, that is, the clicking option, to the more complex options, that is, actually programs to do some work.

Here you will find, some tricks that are very useful and in certain way should be intuitive, but I guess intuition is something very hard to define.

Search by etymology of the words


For restaurants the "tip calculator"


Using Google as a calculator instead of open any calculator in your PC


Searching in range using ".." between two numbers


Holidays Date


Get all the pages that has a link to a specific website (very useful to SEO)


Convert currency and units


Search the definition of a word adding the command "define:" in front of the word  you want to define


Set a timer by writing "set time for" subsequently the amount of time


Discovery a band by writing "Songs by" and  then the name of the band


Discovery a book by writing "Books by" and  then the name of an author


Know the sunrise and the sunset in a city

Compare food for diet

Plane information by the flight number


Searching for the exact phrase putting all the terms in quotation mark


Adding the command "intitle:" infront of you terms, google will search only the titles that have some of those terms

Doing more the want search at the time using "or"


Searching a specific type of file adding the command "filetype:" infront of the type file like pdf or gif (for animated images)


If you don't remember the part of the phrase you are searching you can use "*"


Exclude some words to the search by adding the minus sign (-) follow by the word you want to exclude

Cheap flights using "origin" to "destination"


Translate for a language to another


You can look up movie release dates in a jiffy.


You can use it like TV Guide and look up the schedules of all your favorite shows.


It’ll give you info about almost any company.



Get the time of  a City


No too useful but interesting are the next ones:

  • Type in “Google 1998″ for a retro version of the search engine.

  • If you search for “Google gravity” and hit "I'm feeling lucky" then you'll get a rather literal definition of gravity.
  • Ask Google to "do a barrel roll" and it'll do a barrel roll
  • If you Google "zerg rush", you'll have to protect your search results from being eaten by Google's o's. Yes, this is a thing.
  • If you hit 'I'm feeling lucky' without actually typing anything into the search box, you'll get a catalogue of all the Google doodles — all the way back to 1998

Those are my trick on Google, please if you know others, tell me I will be pleasure to add here. :)

martes, 22 de julio de 2014

How to extract rar and zip files with double click on Windows

This is a feature that I always liked in Ubuntu and Mac OS, that is, the option of doing double click to a zip file and the file extract automatically. If you are using windows, or you are a windows user, may be you don't see the difference. But is very annoying that you want to extract a file and you need to choose wich file you will extract. It's true that sometimes you want that, but I think, the most common action is extract all files.

So, How I can do that?


First, Open regedit: To do that you need to press the buttons:

"Windows + r"

and write regedit. Will be something like this:


Then press Ok button.



Second; Go to: HKEY_CLASSES_ROOT\WinRAR\shell\open\command
 and change the (Default) value from "C:\Program Files\WinRAR\WinRAR.exe" "%1"
to "C:\Program Files\WinRAR\WinRAR.exe" x "%1"

and  if you have ZIP files associated with WinRAR too, change the corresponding value under
HKEY_CLASSES_ROOT\WinRAR.ZIP\shell\open\command too.

The result will be something like this:


To edit the (Default) value you need to make double click to the register file.
(Obviously for 32-bit WinRAR the path will be different.)

My computer is 64 bit, so if your computer is 32-bit please comment with the path of winrar and I can update the post for future user of windows 32-bit .




domingo, 1 de junio de 2014

Monografía sobre la traducción automática

Introducción


La traducción automática, con sus siglas en español TA y en inglés MT de Machine Translation,  es el proceso mediante un software traduce de un lenguaje natural (como el Español) a otro  lenguaje (como el Portugués) con o sin ayuda un ser humano.
Cuando se trata de finalizar una traducción, se verifica si la traducción, humana o automática está bien confeccionada, el significado del idioma origen se debe restaurar totalmente en el idioma destino. Para que se considere una traducción completa.  Esta tarea parece algo sencillo, pero es un proceso muy complejo. Como hemos visto en el seminario, la traducción no es una mera sustitución de una palabra por otra. Un traductor debe interpretar y analizar todos los elementos del texto y saber cómo influyen unos a los otros. Debe intentar mantener los atributos del texto y el estilo del escritor, entre muchas otras problemáticas.
Tanto la traducción humana como la automática tienen sus desafíos. Dos traductores traduciendo los mismos textos en el mismo lenguaje origen, al mismo lenguaje destino, de una forma independiente, lo más probable es que generen resultados distintos. Y en muchos casos requerirán revisiones para que tenga una buena producción y así conseguir la satisfacción del cliente final.
En nuestra monografía solo nos enfocaremos en las traducciones automáticas realizadas por computadoras. Y dentro de estas en dos tipos: La traducción por reglas y la traducción estadística.

Desarrollo

La traducción automática ha pasado por varias fases, desde la simple idea de una sustitución simple de las palabras atómicas de un lenguaje natural por las de otro. Por medio de un corpus lingüístico, u otros recursos lingüísticos, se pueden aportar nuevas ideas y extraer nuevo conocimiento, de forma manual o automática. También se puede gestionar las diferentes excepciones como las frases idiomáticas y demás.
En la actualidad la tendencia es a integrar todo tipo de metodologías: lingüísticas, estadísticas, u otras, a la base de datos de un corpus.
Según su aproximación, los sistemas de traducción automática se pueden clasificar entre dos grandes grupos: los que se basan en reglas lingüísticas por una parte, y los que utilizan corpus con textos alineados por otra.

Lenguaje intermedio

La traducción automática a partir de un lenguaje intermedio, según la literatura actual, es un caso particular de la traducción automática basada en reglas. Desde mi punto de vista, podría tomarse desde cualquier aproximación, ya que en los métodos estadísticos, su pueden realizar aproximaciones desde el texto original, o  desde mi punto de vista, podría aplicarse siempre a partir de una fase del lenguaje basado en reglas, como el caso del lenguaje intermedio.  La idea es que cualquier método, de traducción automática se puede parar en una fase de su procesamiento, y a partir de ahí aplicarle un método estadístico.
El lenguaje intermedio proviene de procesar  el lenguaje original, por ejemplo un texto que debe ser traducido, es transformado a un lenguaje intermedio, como UNL, cuya estructura es independiente a la del lenguaje original y a la del lenguaje final. El texto en el lenguaje final se obtiene a partir de la representación del texto en el lenguaje intermedio. En general a esta lengua intermedia se la llama “interlingua”.
Los sistemas interlingua son un caso particular de los sistemas de transferencia en los que se lleva a cabo un análisis mucho más profundo de cada frase, obteniéndose una representación formal interlingua del significado mismo de la frase. Aunque teóricamente se trataría del mejor enfoque,  estos sistemas están en fase de laboratorio o se utilizan para aplicaciones muy restringidas debido a los problemas prácticos que presentan el diseño y la implementación de una interlingua eficaz.

Traducción automática basada en reglas


Traducir es un arte de talento y mucha dedicación. No es solo sustituir una palabra por otra, sino que también  hay que identificar las palabras de la frase y la influencia que tienen unas sobre las otras.  Los lenguajes humanos constan de estructuras lingüísticas, como la morfología (la forma en que se construyen las palabras a partir de pequeñas unidades provistas de significado), sintaxis (la estructura de una frase) y semántica (el significado). Esta información ayuda con las ambigüedades de los textos. Ya que hasta el texto más simple puede estar plagado de ambigüedades muy complejas. También hay que considerar cuestiones de estilo y de discurso o pragmáticas.
La traducción automática basada en reglas, como el propio nombre indica, se basa en muchas reglas lingüísticas integradas y en diccionarios bilingües para cada par de idiomas. Esta consiste en realizar transformaciones a partir del idioma original, reemplazando las palabras por su equivalente más apropiado.  A este tipo de transformaciones del texto original se puede llamar por predicción de texto, transfer, etc.
Las reglas pueden ser desde el trabajo lógico con las palabras, como una propiedad sencilla que es la cantidad de palabras de una oración. Hasta un procesamiento lógico del contenido de la frase como: “Los niños y los hombres de edad media pueden ganar el premio.” Definiendo que “de edad media” se refiere a los hombres.
Algunas reglas comunes para el inglés desde el español son:
  •  Oraciones cortas (no más de 20)
  •  Evitar la coordinación múltiple de oraciones
  •  Insertar determinantes siempre que sea posible
  •  Insertar that, wich, in order to en oraciones subordinadas siempre que sea posible
  •  Evitar pronombres o expresiones anafóricas (it, them,…)
  •  Reescribir when, while, befor y after seguido de –ing.
  •  Reescribir if, where, When seguido de participio pasado.
  •  Evitar el uso de verbos frasales
  • Repetir el nombre/sustantivo cuando vaya modificado por dos o más adjetivos.
  • Repetición de preposiciones en la coordinación de sintagmas proposiciones.
  • Reescribir compuestos nominales de más de tres nombres.
En general, en una primera fase se analizará un texto, normalmente creando una representación simbólica interna. Dependiendo de la abstracción de esta representación, también podemos encontrar diferentes grados: desde los directos, que básicamente hacen traducciones palabras por palabras, hasta interlingua, que utiliza una representación intermedia completa.
Se analiza sintácticamente el texto y crea esta representación transitoria a partir de la cual se genera el texto en el idioma de destino. Este proceso requiere léxicos amplios con información morfológica, sintáctica y semántica, además de grandes conjuntos de reglas. Se utiliza esos conjuntos de reglas complejas y, a continuación, transfiere la estructura gramatical del idioma de origen al idioma de destino.
Las traducciones se construyen con diccionarios enormes y reglas lingüísticas sofisticadas. Los usuarios pueden mejorar la calidad de la traducción instantánea añadiendo su terminología al proceso de traducción. Para ello crean diccionarios definidos por el usuario que invalidan la configuración predeterminada del sistema o extienden la misma.
En la mayoría de los casos, hay dos pasos: una inversión inicial que aumenta de forma significativa la calidad con un costo limitado, y una inversión acumulable que aumenta la calidad de forma incremental. Aunque la TA basada en reglas proporciona a las empresas el umbral de calidad que necesitan e incluso más, el proceso de mejora de calidad puede ser largo y costoso.

Traducción automática estadística


El objetivo de la traducción automática estadística es generar traducciones a partir de métodos estadísticos basados en corpus de texto bilingües, como por ejemplo las actas del parlamento europeo, que se encuentran traducidas en todos los idiomas oficiales de la UE. Estés también tienen, en lo general, un formato de escritura. Si la existencia de estos corpus fuese mayor, se podrían conseguir resultados excelentes al traducir textos de ámbitos similares.
Los sistemas actuales son incapaces de producir resultados de la misma calidad que un traductor humano, particularmente cuando el texto a traducir usa lenguaje coloquial o familiar.
En esta dirección, recientemente están cobrando especial interés las técnicas estadísticas de traducción asistida basadas en una aproximación interactiva predictiva, en la que el computador y el traductor humano trabajan en estrecha colaboración mutua. Tomando como base el texto fuente a traducir, el sistema ofrece sugerencias sobre posibles traducciones a la lengua destino. Si alguna de estas sugerencias es aceptable, el usuario la selecciona y, en caso contrario, corrige lo necesario hasta obtener un fragmento correcto. A partir de este fragmento, el sistema produce mejores predicciones. El proceso continua de esta manera hasta obtener una traducción completamente aceptable.
La traducción automática estadística utiliza modelos de traducción estadísticos cuyos parámetros emanan del análisis de corpus monolingües y bilingües. La creación de modelos de traducción estadísticos es un proceso rápido, pero la tecnología depende enormemente de los corpus multilingües existentes. Se necesitan un mínimo de 2 millones de palabras para un dominio específico y más incluso para el idioma en general. Teóricamente es posible alcanzar el umbral de calidad, pero la mayoría de las compañías no tienen cantidades tan grandes de corpus multilingües para crear los modelos de traducción necesarios. Además, la traducción automática estadística consume mucha CPU y requiere una configuración de hardware amplia para ejecutar los modelos de traducción que permiten obtener niveles de rendimiento promedio.
La traducción automática a partir de corpus lingüístico se basa en el análisis de muestra reales con sus respectivas traducciones. En ellos se encuentran las métodos estadísticos y los basados en ejemplos.
Google translate usa SYSTRAN, aunque se encuentra desarrollando un método de estadística para sus traducciones automáticas.  Recientemente han mejorado sus capacidades traductoras al añadir 200 billones de palabras de las Naciones Unidas, que permitirán entrenar el sistema.
Según la literatura existe un método de traducción automática denominado, basada en ejemplos desde mi punto de vista, este método también es un método estadístico, ya que la traducción automática basada en ejemplos, se caracteriza por el uso de un corpus bilingüe como principal fuente de conocimiento en tiempo real. Es esencial una traducción por analogía y puede ser interpretada como una implementación del razonamiento por casos base empleado en el aprendizaje automático, que este aprendizaje automático podría ser estadístico o no.
Formalizando conceptos, la traducción automática estadística, a veces denominadas como Stat MT o SMT (Statistical Machine Translation), segund la literatura, es el paradigma de traducción automática donde se generan traducciones basadas en modelos estadísticos y de teoría de la información cuyo parámetros se obtienen del análisis de corpues de texto bilingües. Yo me atrevería a extender esta definición con la siguiente definición, es el paradigma de traducción automática donde se genera traducciones basadas en modelos estadísticos y de teoría de la información cuyos parámetros se obtienen de recursos externos. Con esta definición, incluimos los métodos de aprendizaje automático basados en modelos estadísticos como métodos de traducción automática de estadísticas. Donde los métodos de aprendizaje automático se podrían manipular para aproximar reglas del idioma y crear nuevos.
De manera básica un documento se traduce con la probabilidad de p (e| f ) donde e es una cadena de lengua nativa (por ejemplo Alemán)  sea la traducción de una cadena f en una lengua diferente (por ejemplo francés). Donde los parámetros se calculan con diferentes métodos de estimación de parámetros.

Ventajas de los métodos estadísticos sobre la traducción tradicional son:


  • Hay mucho lenguaje natural en formato legible para maquinas
  • Generalmente, los sistemas SMT no están adaptados a ningún par específico de idiomas.


Comparativa de la TA basada en reglas y la  TA estadística


Entre lenguas romance la calidad de traducción es mayor, sin embargo los resultados son peores cuanto más tipológicamente alejadas sean las lenguas entre sí, como es el caso de la traducción entre español e alemán. Desde mi punto de vista debería ser igual para la TA basada en estadística pero  al parecer características más complejas necesitan más ejemplos.
Otro factor muy influyente es el grado de especialización de los sistemas de traducción, que mejoran en la medida en que se adecuan al tipo de texto y vocabulario que se vaya a traducir. Un sistema que se especialice en la traducción de partes meteorológicos conseguirá altas cotas de calidad incluso para traducir textos entre lenguas tipológicamente muy dispares, pero será inservible para abordar temas más amplios como por ejemplo, crónicas deportivas o financieras.
Lo interesante es que, hay métodos estadísticos que realizan traducciones sin reparar en cuestiones gramaticales.
Sin embargo la traducción automática basada en corpus lingüístico se basa en el análisis de muestras reales con sus respectivas traducciones.
La TA basada en reglas proporciona una buena calidad fuera del dominio o ámbito concreto y es previsible por naturaleza. La personalización basada en diccionarios garantiza una calidad mejorada y la conformidad con la terminología corporativa. Pero a los resultados de la traducción les puede faltar la fluidez que esperan los lectores. En términos de inversión, el ciclo de personalización necesario para llegar al umbral de calidad puede ser largo y costoso. El rendimiento es alto incluso con hardware estándar.
La TA estadística proporciona una buena calidad cuando se dispone de corpus grandes y cualificados. La traducción es fluida, lo que significa que se lee bien y, por lo tanto, cumple con las expectativas del usuario. Sin embargo, la traducción no es ni previsible ni coherente. El entrenamiento a partir de corpus buenos es automático y más barato. Pero el entrenamiento sobre corpus del lenguaje general, es decir, sobre textos que no son del dominio especificado, es deficiente. Además, la TA estadística requiere un hardware determinado para crear y administrar modelos de traducción grandes.

Traducción automática basada en reglas
Traducción automática estadística
Desarrollo de reglas manual
Desarrollo de reglas interno al modelo estadístico
Calidad coherente y previsible
Calidad de traducción imprevisible
Reglas que será empleadas en la teoría
No se puede sacar conocimiento para la teoria
En fase de desarrollo son más costosos y requieren más tiempo
Más baratos y poco tiempo de desarrollo
Capacidad de procesamiento aceptable
Alta capacidad de procesamiento necesaria
Buena traducción en cualquier dominio
Mala traducción en cualquier dominio
Se conoce las reglas gramaticales
No se conoce ninguna regla gramatical
Capacidad de almacenamiento aceptable
Alta capacidad de almacenamiento
Coherencia entre versiones
Incoherente entre versiones
Verificación de las reglas con los corpus
-
Falta de fluidez
Buena fluidez
Mal manejo de las excepciones
Buena para tratar las excepciones
Costo elevado de personalización
Costo bajo para personalización


miércoles, 21 de mayo de 2014

Una guia practica de como fui realizando mi tesis usando Protege y Ontologias parte 3

En este articulo ya empezamos con la modelacion de las actividades y la forma de razonamiento. Supongamos que tenemos estos ejemplos para intentar generalizar las actividades.

Propuestas:
(1) Vamos al cine el sábado
(2) Vamos de vacaciones
(3) Vamos a pescar
(4) Vamos dar un paseo por el campus
(5) Vamos al restaurante de mariscos

Respuestas:
· Mañana me voy a Barcelona
· No tengo tiempo
· Estoy ocupado
· Tengo mucho que hacer
· Quería ver esta película desde hace mucho
· No sé pescar
· No tengo caña de pescar
· No tengo dinero
· Tengo sólo 5 euros
· Tengo alergia a mariscos.
· Mi médico me prohíbe el pescado
· Mi hermana ha venido a verme
· Hará mal tiempo
· Tengo que prepararme al examen
· Tengo que examinarme dentro de 2 días

Abrimos Protege, Creamos una nueva ontologia y la denominamos upper-dialogontology.


Tenemos que modelar los diálogos, por lo tanto tenemos que de alguna manera describir las restricciones, luego hemos creado estas clases:



Tenemos una clase RestrictedClass que dentro están definidas Action, Agent y Location; Esto se debe a las restricciones, ya que como Action y Location va a tener requisitos que Agent debe cumplir para poder aceptar la invitación. O sea:

Mauricio: ¿Vamos al cine?
Cristina: No tengo tiempo

Como sabemos el cine (un Place) tiene unos requisitos: tener dinero, tener tiempo, etc. Lo que quiere decir que para ir al cine se necesitan x horas libres, se necesita t cantidad de dinero, etc. Luego en este caso Cristina, tiene la propiedad de tiempo 0, ya que no tiene tiempo, luego no podría ir al cine. Luego la propiedad tener dinero, o hasMoney tiene que tener como dominio las clases restrictivas, estas son Action, Location o Agent. Ya que al cine se va a hacer una Acción, en este caso ver una película. 

Un razonamiento que puede ponerse activo es que, Si voy al cine necesito dinero, por lo cuál ya el lugar (Location) me da las restricciones que necesito. ¿Para que se los pongo a Action? Pues para ver una pelicula en 3D, hacen falta gafas de 3D. Luego la accion tambien requiere sus restricciones.

Tenemos la clase Object que son objetos que se debe tener para realizar una actividad en un lugar, si el agente no tiene el objeto requerido para realizar la acción, no podrá realizarla, luego si se modela que no lo tiene entonces la respuesta seria no. En este caso esta propiedad es hasObject dominio restrictedClass y Imagen o Rango (Range) Object.
 Por ejemplo:

Mauricio: ¿Vamos a jugar tenis?
Abel: No tengo raqueta de tenis

Podemos interpretar que la respuesta de Abel es rechazar la oferta porque no cumple el requisito para ir a jugar tenis que es, tener una raqueta de tenis.

Tenemos la clase Location que es los lugares donde se realizaran las actividades, estos Location tendrán una propiedad defaultAction, que dirá la acción que se realiza generalmente en ese lugar.Claro está que un lugar puede tener varios defaultAction, o sea, que las actividades comunes que se podrían realizar en un lugar sean varias.

Tenemos la clase Food para modelar Alimentos y algunas consecuencias. Como alergia.

En OWL se asume que las clases se solapan. Por lo que, no se puede asumir que una instancia no es miembro de una clase en particular porque no se lo ha especificado que pertenece a esta clase. Para separar un grupo de clases es necesario hacerlos disjuntas unas con las otras.

Para hacerlo bastaría con seleccionar la clase y seleccionar la opción Disjoint with. Y después selecciona las clases que son disjuntas. Por ejemplo: Las clases  Day, Object, Response, RestrictedClass son disjuntas dos a dos, o sea, todas contra todas, ya que un objeto nunca va ser un Dia, una respuesta o un RestrictedClass.

Luego después de especificar la disjuncion entres las clases principales, también se debería especificar entre las clases que pertenecen a un mismo subconjunto y así sucesivamente.

Por ultimo falta especificar la clase enumerativa (enumarated classes), estas clases son las que tienen un conjunto de individuos y solo ese conjunto de individuos. El caso mas clásico es la clase fin de semana (Weekend) que solo contiene a los individuos: Viernes, Sábado y Domingo.

Para especificar una clase enumerativa en Protege, se define usando el editor "Class Description View" y se escribe los individuos separados por comas y entre corchetes. Por ejemplo: {Viernes, Sábado, Domingo}. Los individuos deben ser creados primero en la ontologia. Las clases enumerativas describen en esta manera las clases anónimas. 

En principio estas son las únicas clases que harían falta, al continuar el paso vamos viendo si hacen falta nuevas o no. En el proximo articulo empezaremos definiendo las propiedades.

Una guia practica de como fui realizando mi tesis usando Protege y Ontologias parte 2


¿Porque usar OWL en vez de ProLog u otra herramienta?

Conceptos complejos pueden ser construidos desde definiciones mas simples. Además, el modelo lógico permite el uso de un razonador que puede chequear si las declaraciones y definiciones en la ontologia son mutuamente consistentes y puede también reconocer cuales conceptos encajan en cuales definiciones. El razonador puede por lo tanto ayudar al mantenimiento de la jerarquía correcta. Esto es particularmente útil cuando se manejan casos donde las clases puede tener mas de una clase padre. También las ontologias proveen el consenso de conceptos, y la base de conocimiento publica. Lo que permite ser reutilizado con mayor facilidad.

Componentes OWL

Los componentes de OWL son: Los individuos (o instancias), Propiedades (o atributos) y Clases.
Todos los conceptos son muy parecido a los conceptos de cualquier lenguaje de programación orientado a objetos. Una diferencia importante es que OWL, no usa UNA (Unique Name Assumption), lo que quiere decir, que si dos representaciones tienen nombre diferentes pueden referirse al mismo individuo. En OWL se debe especificar concretamente si un individuo es igual a otro o si un individuo es diferente a otro. De lo contrario podrían ser el mismo, o podrían ser diferentes.

Un individuo no es mas que una instancia de una clase, ejemplos serian: Mareike, Estela, Cristina. Estas serian instancias de la clase Agent. Que representará las clases que hacen propuestas.

Las propiedades en OWL son relaciones binarias de Cosas (Cosa o Thing es la clase mas genérica), por ejemplo: Mareike isA Agent, otra propiedad es: Estela hasTime 10. 

Las clases en OWL, son interpretadas como un conjunto que contiene individuos. Estas son descritas usando descripciones formales para especificar precisamente los miembros de la clase. Las clases son organizadas en taxonomías, como orientado a objetos, las subclases especializan las superclases. Por ejemplo: Las clases Agent y Person, Person es una subclase de Agent, luego todas las personas son agentes. Ser Persona implica que eres un Agente. Una de las mejores características de OWL-DL es que la relación entre subclases y superclases pueden ser calculadas automáticamente por un razonador.

En OWL las clases son especificadas por unas condiciones que debe satisfacer una instancia para que pertenezca a la clase. Como formular esta descripción lo explicaré en el siguiente articulo.

Una guia practica de como fui realizando mi tesis usando Protege y Ontologias parte 1

Introducción

En este articulo intentaré no ir profundizar mucho sobre mi tema de tesis en sí, sino de ver como se implementan las cosas en protege, y porque he tomado esa decisión.

El tema de mi tesis es modelar propuestas de actividades y respuesta de la misma, desde un punto vista de oraciones muy simples (lo cuál puede ser ambiguo lo que se define como simple). Pero el objetivo, es modelar una conversación entre dos personas, el cual la primera persona invita a la segunda persona y la segunda persona responde a esta propuesta. Debo desarrollar una base de conocimiento con sentido común, ya que las respuestas, no deben estar explícitamente si se ha aceptado o no la propuesta. Supongamos la siguiente propuesta:

Mauricio: ¿Vamos al cine el Sábado?
Estela: ¿Mañana me voy a Barcelona?

En esta pequeña conversación, podemos deducir que Estela rechazo la invitación, lo que no esta explícitamente, que Estela no puede ir al cine. Luego el sentido común en este caso es que, si Estela va hacia otro lugar, diferente al sitio que esta ahora, entonces no podrá ir al cine, ya que Barcelona queda muy lejos de Madrid.

Luego la forma de asumir el razonamiento en este caso es el siguiente:

Estela esta en una localización "Madrid", que se asume que sea la misma que Mauricio (lo cuál no tiene porque ser cierto, pero como sabemos tan poco de esa conversación, tenemos que asumir valores), o al menos Mauricio está cerca para que la invitación sea aceptable. El cine también, se supone, por sentido común que esta relativamente cerca de donde esta Estela y de donde esta Mauricio. Ademas, se asume que en el cine se va ir a ver una película, porque nuestro sentido común nos dice que al cine, se va a ver una película. Ademas, asumimos que Estela y Mauricio deben tener una cantidad "D" de dinero para entrar al cine, y deben tener un tiempo "T" para ir al cine. Ademas, como yo estoy en Madrid, asumo que Estela no va poder ir, ya que ella va a Barcelona que esta categorizada como lejos (lejos lo podemos definir como el tiempo de dezplasamiento de un lado a otro, y trabajar con esa definicion) de Madrid, lo que implica que no va ir. Todo este razonamiento, lo tenemos en nuestro cerebro, tenemos un sentido común, y este nos da respuesta de que Estela rechazo la oferta.

Como podemos observar las respuestas de Estela pueden ser:

-No tengo dinero
-No tengo tiempo
-Estoy ocupada
-Tengo mucho que hacer
-No puedo gastar dinero, estoy ahorrando
-Me encanta el cine
-Hace tiempo quiero ir al cine
-Voy a llevar mis gafas 3D.

Estas respuestas se compararían con la modelacion de ¿Estela tiene tiempo mayor o igual del que necesita ir al cine?¿Estela tiene más dinero del que se necesita para ir al cine? etc, etc.

También podemos ver que la respuesta puede o no tener sentido, asumiremos que la respuesta no tiene sentido cuando no encontramos un camino que indique que no se puede o que se pueda realizar la operación.

Por ejemplo: Si Estela responde, "Me da asco los mariscos", esta respuesta no significaría nada, ya que el cine no tiene una relación directa con el marisco. Por lo menos que nosotros sepamos, porque si nosotros modelamos que la película es sobre mariscos, probablemente haga mas sentido. Por lo cual, cuando un suceso no esta modelado en nuestra ontologia, pues diremos que no tiene sentido, ya que nuestro base de conocimiento no lo contempla y por lo tanto no puede responder la pregunta. Sin embargo en el sistema que realizaré sobre esta ontologia, cuando no se sepa como hacer la relación, el sistema sea capaz de preguntar al usuario sobre preguntas claves para que pueda responder a la pregunta. También dando la opción de rechazar totalmente nueva información sobre la actividad. Y decir que no tiene sentido.

Agregaremos unas clases iniciales con una jerarquía, para ir hablando de otras cosas, poco a poco modificaremos estas clases y la jerarquía, según vayamos analisandolo. Las primeras clases son:

Clases

Agente (Persona, Grupo, Institución, etc.): Que puede realizar una invitación.
Action (ver película, pescar, caminar, etc): Actividad que se pretende realizar
Place (Cine, Campus, Hospital, Lake, etc): Lugar donde se realizará la actividad

... Algunas clases las iremos agregando así vaya pasando el tiempo y aumentando las casos, por ahora parece lo que hace falta

Propiedades o métodos

hasTime: el tiempo que requiere la institución para que puedas realizar la actividad, ir al cine requiere de 3h, tambien modelará el tiempo que tiene el agente Estela tiene 5h libres.
hasMoney: Dinero que le hace falta a la institución (al cine hace falta que se lleve 5 euros), dinero que tiene el agente.
isNear (opposite function isFar)
defaultAction : Lo que se supone que se haga en un lugar (En cine es pescar, en un Campus caminar, relajar, etc)
doingAction : Lo que se va realizar en el lugar, porque puede ser que vamos al cine a hablar con alguien, en vez de ir a ver una película.

Modo de razonamiento:

Si agente.hasMoney >= place.hasMoney and agente.hasTime >= place.hasTime and agente.place isNear Barcelona and ...

Si se cumplen todas las restricciones es porque la respuesta será sí, si una sola no se cumple sera no. Si hay alguna propiedad que no se puede encontrar en Agente y que tiene Place como requerimiento, entonces la respuesta es "según el sentido común", se le dará un valor a Estela con esa propiedad o sencillamente sin sentido la respuesta. Ahora si Place no tiene la propiedad de Estela, no importa, ya que no es un requerimiento para ir al lugar. Ademas falta modelar, si dos propiedades implican otra tercera.
Por ejemplo: "Vuelvo temprano de Barcelona", esta frase indica que estará cerca desde temprano, y que estará antes cerca antes de la actividad del cine empiece y por lo tanto podrá ir. Volver temprano-> estar cerca antes que la actividad comience. Ya que volver tarde -> estar cerca pero después de la actividad.

De manera general es como se irán resolviendo las cuestiones, ahora iré modelando estas clases explicándola desde Protege y viendo que cuestiones tenemos que preguntarnos en cada paso. Ademas de después especificar esta manera de razonar desde SPARQL o desde Reglas o desde la propia especificación que hace que el razonador se de cuenta por si solo.

domingo, 18 de mayo de 2014

El Empleo

Un hombre, en su rutina matutina camino al trabajo, se encuentra inmerso en un mundo donde el uso de las personas como objetos es parte de la vida cotidiana. Revelador de la alineación que sufrimos en la sociedad moderna y del escaso espíritu crítico para con aquello que nos viene impuesto, sometiéndonos a fuerza de costumbre a casi todas las reglas. La animación es muy sencilla.
En Portugal, por ejemplo, un asalariado de cada cinco tiene ya un contrato llamado “recibo verde”. Aunque trabaje desde hace años en la misma oficina o la misma fábrica, con horarios fijos, su patrón es un simple cliente al que factura un servicio y quien puede, de la noche a la mañana, sin ninguna indemnización, romper el contrato.
En realidad la conclusión es bastante deprimente dado el panorama actual de degradación constante del mundo laboral, y una no sabe bien si echarse a reír o a llorar.Como sucede hoy, cuando vemos de nuevo aquellas inolvidables escenas de Modern Times, por poner un ejemplo. Significará que algo han aprendido, o tal vez todavía no, quién sabe…
El corto se puede ver aquí:



fuentes:
https://www.facebook.com/photo.php?v=643595152376859&set=vb.139188202817559&type=2&theater
 http://babel36.wordpress.com/2010/04/10/el-empleo-de-santiago-brou-grasso/

martes, 11 de marzo de 2014

Tutorial básico de django south



South es una app de django que permite modificar la estructura de la base de datos de una aplicación django cuando cambiamos el modelo (models.py).

El comando syncdb sólo crea nuevas tablas, pero no modifica tablas existentes, así que si en el modelo de una aplicación renombramos un campo de una tabla existente syncdb no realizará ese cambio en la base de datos. A este tipo de cambios en la base de datos se les denomina “migración del esquema” y es de lo que se encarga South.

Instalación

  1. pip install south
  2. Agregar “south” a INSTALLED_APPS
  3. Ejecutar syncdb antes de crear nuestros propios modelos. Está será la última (y única) vez, que necesitamos ejecutar este comando
  4. manage.py syncdb

Usar south en un una app nueva

  1. Crear la aplicación, y empezar a rellenar el models.py
  2. Crear el script de migración inicial
  3. python manage.py schemamigration app_name --initial
  4. Hacer los cambios en la bbdd

    python manage.py migrate app_name

Usar south en una app ya creada


python manage.py convert_to_south app_name

En el caso de que haya otros desarrolladores en el equipo y cada cual esté usando su propia instancia de la base de datos, el resto de desarrolladores ejecutará:

python manage.py migrate app_name --fake


Migración de modelos

  1. Modificamos el models.py de nuestra aplicación
  2. Crear un nuevo script de migración
  3. python manage.py schemamigration app_name --auto
  4. Aplicar la migración a la bbdd

    python manage.py migrate app_name

Como funciona

    Se puede decir que South funciona en varios niveles de abstracción disintos.
  • Añade una tabla en la base de datos que mantiene el estado actual de la base de datos. Es decir, guarda que migraciones se han aplicado.
  • Crea un directorio en la applicación, donde guarda para cada migración un fichero (script) con la información necesaria para realizarla
  • Añade varios comandos al manage.py

Los ficheros de migración generados en deben subirse al repositorio para que el resto de los desarrolladores pueda también realizar la migración.

Referencias

domingo, 9 de marzo de 2014

Usando Flatpages

Flatpages

A menudo tendrás una aplicación Web impulsada por bases de datos ya funcionando, pero necesitarás agregar un par de páginas estáticas, tales como una página Acerca de o una página de Política de Privacidad. Sería posible usar un servidor Web estándar como por ejemplo Apache para servir esos archivos como archivos HTML planos, pero eso introduce un nivel extra de complejidad en tu aplicación, porque entonces tienes que preocuparte de la configuración de Apache, tienes que preparar el acceso para que tu equipo pueda editar esos archivos, y no puedes sacar provecho del sistema de plantillas de Django para darle estilo a las páginas.
La solución a este problema es la aplicación flatpages de Django, la cual reside en el paquete django.contrib.flatpages. Esta aplicación te permite manejar esas páginas aisladas mediante el sitio de administración de Django, y te permite especificar plantillas para las mismas usando el sistema de plantillas de Django. Detrás de escena usa modelos Django, lo que significa que almacena las páginas en una base de datos, de la misma manera que el resto de tus datos, y puedes acceder a las flatpages con la API de bases de datos estándar de Django.
Las flatpages son identificadas por su URL y su sitio. Cuando creas una flatpage, especificas con cual URL está asociada, junto con en cuál(es) sitio(s) está (para más información acerca de sitios, consulta la sección “Sites”).

Usar flatpages

Para instalar la aplicación flatpages, sigue estos pasos:
  1. Agrega 'django.contrib.flatpages' a tu INSTALLED_APPSdjango.contrib.flatpages depende de django.contrib.sites, asi que asegúrate de que ambos paquetes se encuentren enINSTALLED_APPS.
  2. Agrega 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' a tu variable de configuración MIDDLEWARE_CLASSES.
  3. Ejecuta el comando manage.py syncdb para instalar las dos tables necesarias en tu base de datos.
La aplicación flatpages crea dos tablas en tu base de datos: django_flatpage y django_flatpage_sitesdjango_flatpage simplemente mantiene una correspondencia entre URLs y títulos más contenido de texto.django_flatpage_sites es una tabla muchos a muchos que asocia una flatpage con uno o más sitios.
La aplicación incluye un único modelo FlatPage, definido en django/contrib/flatpages/models.py. El mismo se ve así:
from django.db import models
from django.contrib.sites.models import Site

class FlatPage(models.Model):
    url = models.CharField(maxlength=100)
    title = models.CharField(maxlength=200)
    content = models.TextField()
    enable_comments = models.BooleanField()
    template_name = models.CharField(maxlength=70, blank=True)
    registration_required = models.BooleanField()
    sites = models.ManyToManyField(Site)
Examinemos cada uno de los campos:
  • url: La URL donde reside esta flatpage, excluyendo el nombre del dominio pero incluyendo la barra (/) inicial (por ej. /about/contact/).
  • title: El título de la flatpage. El framework no usa esto para nada en especial. Es tu responsabilidad visualizarlo en tu plantilla.
    content: El contenido de la flatpage (por ej. el HTML de la página). El framework no usa esto para nada en especial. Es tu responsabilidad visualizarlo en tu plantilla.
  • enable_comments: Indica si deben activarse los comentarios e esta flatpage. El framework no usa esto para nada en especial. Puedes comprobar este valor en tu plantilla y mostrar un formulario de comentario si es necesario.
  • template_name: El nombre de la plantilla a usarse para renderizar esta flatpage. Es opcional; si no se indica o si esta plantilla no existe, el framework usará la plantilla flatpages/default.html.
  • registration_required: Indica si se requerirá registro para ver esta flatpage. Esto se integra con el framework de autenticación/usuarios de Django.
  • sites: Los sitios en los cuales reside esta flatpage. Esto se integra con el framework sites de Django, el cual se trata en la sección “Sites” en este capítulo.
Puedes crear flatpages ya sea a través de la interfaz de administración de Django o a través de la API de base de datos de Django. Para más información, examina la sección “Agregar, modificar y eliminar flatpages”.
Una vez que has creado flatpages, FlatpageFallbackMiddleware se encarga de todo el trabajo. Cada vez que cualquier aplicación Django lanza un error, este middleware verifica como último recurso la base de datos de flatpages en búsqueda de la URL que se ha requerido. Específicamente busca una flatpage con la URL en cuestión y con un identificador de sitio que coincida con la variable de configuración SITE_ID.
Si encuentra una coincidencia, carga la plantilla de la flatpage, o flatpages/default.html si la flatpage no ha especificado una plantilla personalizada. Le pasa a dicha plantilla una única variable de contexto: flatpage, la cual es el objeto flatpage. Usa RequestContext para renderizar la plantilla.
Si FlatpageFallbackMiddleware no encuentra una coincidencia, el proceso de la petición continúa normalmente.
Nota
Este middleware sólo se activa para errores 404 (página no encontrada) – no para errores 500 (error en servidor) u otras respuestas de error. Nota también que el orden de MIDDLEWARE_CLASSES es relevante. Generalmente, puedes colocar el FlatpageFallbackMiddleware cerca o en el final de la lista, debido a que se trata de una opción de último recurso.

Agregar, modificar y eliminar flatpages

Puedes agregar, cambiar y eliminar flatpages de dos maneras:

Vía la interfaz de administración

Si has activado la interfaz automática de administración de Django, deberías ver una sección “Flatpages” en la página de índice de la aplicación admin. Edita las flatpages como lo harías con cualquier otro objeto en el sistema.

Vía la API Python

Como ya se describió, las flatpages se representan mediante un modelo Django estándar que reside en django/contrib/flatpages/models.py. Por lo tanto puede acceder a objetos flatpage mediante la API de base de datos Django, por ejemplo:
>>> from django.contrib.flatpages.models import FlatPage
>>> from django.contrib.sites.models import Site
>>> fp = FlatPage(
...     url='/about/',
...     title='About',
...     content='<p>About this site...</p>',
...     enable_comments=False,
...     template_name='',
...     registration_required=False,
... )
>>> fp.save()
>>> fp.sites.add(Site.objects.get(id=1))
>>> FlatPage.objects.get(url='/about/')
<FlatPage: /about/ -- About>

Usar plantillas de flatpages

Por omisión, las flatpages son renderizadas vía la plantilla flatpages/default.html, pero puedes cambiar eso para cualquier flatpage con el campo template_name en el objeto FlatPage.
Es tu responsabilidad el crear la plantilla flatpages/default.html. En tu directorio de plantillas, crea un directorio flatpages que contenga un archivo default.html.
A las plantillas de flatpages se les pasa una única variable de contexto: flatpage, la cual es el objeto flatpage.
Este es un ejemplo de una plantilla flatpages/default.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
    "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>


fuentes:

http://django-book.mkaufmann.com.ar/chapter14.html#flatpages

viernes, 7 de marzo de 2014

Como trabajar sin conexion en Google Chrome


Hoy trabajando con un amigo, vi que desconecto su conexión wifi para probar una pagina que había descargado para su maquina. Y le comente que los navegadores tienen esa opción. Para trabajar "sin conexión". Bueno, mejor rectifico lo que le dije con este post, Firefox y IExplorer tienen. Chrome no lo tiene, y lo siento para los seguidores de Safari pero no indague sobre Safaris ;) .

Bueno para Chrome hay una manera, aunque parece un poco "tricky", explicare primero para IE y para Firefox ya que son un pastel comido :) . Empecemos por orden de calidad :P :

FireFox - se hace click en el botón FireFox y después seleccionamos Desarrollador Web ( o en ingles, Web developer, o en frances, Dévelopement web ) y despues seleccionas en Trabajar sin conexion (o en ingles, "Work Offline", o en frances 'Travailler hors connexion' ) .

Internet Explorer- Seleccionamos 'Herramientas' y después "Trabajar sin conexión"

En Chrome no hay un botón de "trabajar sin conexión" pero podemos conseguir el mismo objetivo con un poco de magia.

Una forma efectiva y menos dolorosa que desconectarse y volverse a conectarse de la red, es crear un servidor proxy que apunte a tu propria PC. Pero el secreto esta en hacerlo desde chrome solamente, ya que de esta manera evitarías que otros programas que usen internet se desconecten y demás.

Hay muchas extensiones disponibles para Chrome, pero muchas están diseñadas para cosas privadas y simplemente redireccionar el trafico sobre internet, para proveer un poco de anonimato. La extensión que voy a usar aquí se llama: "Quick & Dirty Proxy Flipper", para descargarlo e instalarlo haga click aquí.

Una vez instalado, aparecerá el icono del servidor proxy.






Selecciona http://localhost:8080 a no ser que seas un desarrollador y estés corriendo algún servidor en esa dirección. De esa manera ya estarás offline, también es importante tener en cuenta de que Chrome tiene una memoria Cache y algunas cosas parecerán tener acceso a internet, pero en realidad no es asi.


Para volver a la normalidad basta con ir a la extensión y seleccionar la opción system.


Espero que les haya ayudado ;)

miércoles, 5 de febrero de 2014

Installing LaTeX on Mac OS X

Previously, I wrote a tutorial on how to install LaTeX on Windows. This time, I’ll do the same thing for Mac OS X. I’m using OS X 10.7 (Lion), but I’m sure this guide still holds for Mountain Lion, Leopard or earlier versions of OS X. The scope of this tutorial is to show you how to install the complete LaTeX package, including my favorite free editor (Texmaker). The installation will be a lot shorter than that for Windows users :)

Installing MacTeX


The governing LaTeX distribution for Mac OS X is MacTeX. This distribution is actually an all-in-one package as it not only contains the LaTeX distribution, but also several editors and other useful stuff. So let’s cut to the case: head over to the MacTeX website (or here). If you follow the link you can immediately download it. Note that this download is about 2 GB and thus may take a while to be downloaded (depending on your internet connection).

Once you’ve downloaded the distribution, install it by double-clicking the .dmg file. The rest will speak for itself, as the installation procedure is just the same as any other Mac software.

Now, open your Applications folder and search for a folder called TeX. This contains everything you need, as can be seen here. TeXShop and TeXworks are both open source LaTeX editors, released under the GPL. If you want to use one of these, you can start right away. Personally I prefer another editor: Texmaker. It will be shown in the next section how to install this one (which is no rocket science ;)). Furthermore in the TeX folder we see BibDesk, a handy tool for maintaining references for BibTeX. We also see LaTeXit, a great tool that can be used to add LaTeX equations to Powerpoint for instance.

Installing Texmaker


As I said before, you already get two LaTeX editors with the MacTeX installation. However, I’m used to Texmaker so I’ll show you how to install this editor as del (this one is really easy). Head over to the Texmaker website. Next, go to the download section in the menu on the right and download Texmaker. You probably need the 64 bit version, depending on your Mac hardware. Once you downloaded the file, drag and drop it to the Applications folder and your ready to LaTeX!
Anything else?

That’s it? Yes! However, for the control freaks among us there is an extra distribution for MacTeX called MaxTeXtras. You can find it here. This download contains several editors (like Texmaker), utilities, tools and demos you might find handy. Have fun!

source