viernes, 13 de diciembre de 2013

Installing pygame on OS X with a Homebrew Python 2.7 install

Solved this surprisingly quickly today thanks in part to this post by Basti am. His post was mostly correct but some parts have changed, so I’m going to document how I got it working. Note that this method will miss out PNG, SCRAP, and PORTMIDI support. Good luck getting those working!
  1. Install Python via Homebrew:
    brew install python
  2. Install pip (because one package manager isn’t enough, right Python?):
    easy_install pip
  3. Install numpy with pip:
    pip install numpy
  4. Install the pre-requesites for pygame with Homebrew:
    brew install sdl sdl_ttf sdl_image sdl_mixer
  5. Download the pygame source. (in my case was: pygame_version) It’s one of the top links. Extract it somewhere and go to that directory in a terminal.
  6. Run python config.py.
  7. Fix the Setup file to point to your Homebrew SDL libraries, not OS X ones (which are missing stuff). Change the lines starting SDL, FONT, IMAGE, and MIXER to read:
    SDL = -I/usr/local/include/SDL -L/usr/local/lib -lSDL
    FONT = -lSDL_ttf
    IMAGE = -lSDL_image
    MIXER = -lSDL_mixer

    Below those definitions are lines commented out that enable/disable features. Remove the # to uncomment the ones you want.
  8. Run python setup.py install.
  9. Success!














source: http://jalada.co.uk/2011/06/17/installing-pygame-on-os-x-with-a-homebrew-python-2-7-install.html



lunes, 28 de octubre de 2013

Downloading an Entire Web Site with wget



If you ever need to download an entire Web site, perhaps for off-line viewing, wget can do the job—for example:

$ wget \
     --recursive \
     --no-clobber \
     --page-requisites \
     --html-extension \
     --convert-links \
     --restrict-file-names=windows \
     --domains website.org \
     --no-parent \
         www.website.org/tutorials/html/





This command downloads the Web site www.website.org/tutorials/html/.

The options are:

--recursive: download the entire Web site.

--domains website.org: don't follow links outside website.org.

--no-parent: don't follow links outside the directory tutorials/html/.

--page-requisites: get all the elements that compose the page (images, CSS and so on).

--html-extension: save files with the .html extension.

--convert-links: convert links so that they work locally, off-line.

--restrict-file-names=windows: modify filenames so that they will work in Windows as well.

--no-clobber: don't overwrite any existing files (used in case the download is interrupted and
resumed).


source: http://www.linuxjournal.com/content/downloading-entire-web-site-wget

lunes, 21 de octubre de 2013

Instalar Python, NumPy, SciPy y matplotlib en Mac OS X con dobleclicks


En este post esta como instalar Python, NUmPy, SciPy y matplot en Lion, pero incluye muchas lineas de comando y modificar tu .bash_profile y tratando con problemas de compiladores y demas. Eso es lo que se llama generalmente compilarlo por ti mismo (CIY method). La forma mas sencilla, es un metodo que generalmente se llama el metodo del doble click, o sea, que todo se hace con clicks.

El metodo CIY se usa mas para usuarios avanzados, que quieran tener una instalacion muy personalizada.

Hasta hace poco el metodo CIY era la unica forma de tener todo funcionando en Lion, pero los programadores de NumPy, SciPy, and matplotlib han hecho un DMG para hacer el proceso mucho mas sencillo. Una vez que conoces Python, se van a ver en la necesidad de instalar otros paquetes, yo les sugiero pip.

Instalar Python

Vas a la pagina de Python y descargas el paquete llamado Python 2.7.2 Mac OS X 64-bit/32-bit x86-64/i386 Installer. Double-click al archivo dmg descargado para instalarlo.

Instalar NumPy

Vas a la pagina NumPy y descargas el paquete denominado numpy-1.6.1-py2.7-python.org-macosx10.6.dmg. Double-click al archivo dmg descargado para instalarlo. 

Instalar SciPy

Vas a la pagina SciPy y descargas el paquete denominado scipy-0.10.1-py2.7-python.org-macosx10.6.dmg. Double-click al archivo dmg descargado para instalarlo. 

Install matplotlib

Vas a la pagina matplotlib y descargas el paquete denominado matplotlib-1.2.0-py2.7-python.org-macosx10.6.dmg.Double-click al archivo dmg descargado para instalarlo. Felicidades! Ya debe estar funcionado. Cuando queiras actualizarlos, visita a la pagina y descargate la ultima version de esos archivos. Probemos en una terminal con Python a ver si funciona.

import numpy
import scipy
import matplotlib
Las instrucciones pueden tener ya un tiempo, si no le funciona chequee en  “Install Python” los nuevos terminos.

fuente: http://penandpants.com/2012/03/01/install-python-2/

lunes, 14 de octubre de 2013

Razonamiento del sentido Comun (Reasoning Common Sense)


Unas observaciones, de la excelente presentacion de CYC en Google Tech 2006 denominada 
"Computers versus Common Sense".

enlace http://www.youtube.com/watch?v=gAtn-4fhuWA 


La conferencia fue hecha en el 2006, por lo cual hay puntos señalados que no tienen validez en la actualidad, como que Google no te da respuestas concretas a algunas de tus pregunta. Ya que actualmente, pones en Google “President of Cuba” y Google te muestra una tarjeta con el nombre del presidente de Cuba.
Otro punto es que, según el ejemplo que dio del perro y la madre, que dice:

El perro de mi mama murió.

Y el programa le preguntó: háblame mas sobre su madre; porque era lo único que sabía.
Pues la razón que pase eso, a mi manera de ver, es que, el programa que recibe la pregunta, si desconoce un concepto, debería preguntárselo al usuario y así, el programa tener el concepto del usuario. Y poder inferir conocimiento.
Por ejemplo:
Si el software no sabe que es dog, el preguntaría:
Perdóname, no se lo que es dog.¿Me podrías definirlo?

De esa manera podría crear definiciones de cosas con los usuarios, uno a uno y de esa manera para un usuario tendrías una definición, sin embargo podrías usar esa misma definición para la definición general, cogiendo lo común que cada uno dice o al menos la unión. O podría ser como un nCaptcha. De esa manera estamos enseñando a las maquinas hacer y saber las cosas.
Dicho lo anterior, el principal problema parece venir de que no se sabe trabajar con lo desconocido, y eso es lo que la maquina debe saber preguntar. Como saber sobre lo desconocido.
Si usas un sistema estático, creo que resultaría sencillo, porque al final, si tienes el conocimiento representado con un numero finito de propiedades, pp1, pp2, ... ,ppN, entonces las preguntas serian de acuerdo a esas propiedades. Digo sistema estático a un sistema donde la cantidad de propiedades que se trabajan son fijas y son las mismas.
Por ejemplo:

Dime la descripción, dime el nombre, etc.


Todas estas preguntas es sobre lo desconocido. Como es estático, se podría hacer un estudio mas detallado de cuales propiedades depende una de otras, cuales preguntar primero, etc.

Ahora si se trabaja con un sistema dinámico, o sea, que la cantidad de propiedades no es fija, sino que ira variando. Entonces se debería preguntar por las mas frecuentes, por las propiedades que aparezcan en todos los objetos, o por lo menos en los que mas, y así de alguna manera puedes terminar clasificándolo en una categoría. Por ejemplo:
Una clase podría ser los objetos que tienen descripción, en este sentido todo lo que existe en el mundo tiene una descripción, una definición y un nombre, a eso se le denomina objeto, ahora si además de eso tiene una propiedad tamaño, entonces se puede decir que es medible, y de la propiedad tamaño debería existir un conjunto de reglas que podamos inferir solo desde esa propiedad. La idea aquí, es que dada una propiedad se infiera todo el conocimiento de ella independiente del objeto (como si fueran estructuras algebraicas). De esa manera, si el usuario especifica que ese concepto tiene esa propiedad, ya puedes inferir conocimiento.

¿Que mas pasa la propiedad tamaño? Es que tamaño puede ser que se modifique, puede ser fija, puede cambiar en la instancia o puede tener varios tamaños. Luego se irán haciendo clustering, de acuerdo a sus propiedades sin valores (a su clase). Pero la clase también se puede definir por instancias, por ejemplo:

Tengo clase persona. Y la instancia de la edad es menor que 15 años se considera un niño y no un adolescente. Entonces ahí se tiene una clase niño que depende de los valores de la instancia. Pero creo que esta forma de clasificar (por valores de instancias) seria el ultimo a tomar en cuenta.
Se empieza hablar sobre las construcciones de las base de datos y los errores que tienen la gente a introducir datos, es verdad, que a la hora de concebir el modelo debería concebirse la semántica, como se expone en el video, si esta la fecha de contratación y esta la fecha de nacimiento, es real que debería haber entre ellos una diferencia de al menos 18 años (edad a la cual se permite trabajar) , para así evitar errores. La idea principal es que deberían haber relaciones verificables entre los datos como la expuesta anteriormente. Pero si algo no cumple con el patrón (la edad es menor que 18 años) también debería poder agregarse, pero con el objetivo de que sea como excepción warning de la regla, ya que, podría darse que alguien muy talentoso que tuviera solo 15 años y pudiera trabajar en la empresa, sin embargo podría ser también un error, entonces el usuario que entra los datos, se le avisa que algo parece no estar bien, en este caso la fecha de nacimiento con la fecha en que empezó a trabajar, si el operador decide insertar los datos igualmente, este dato pasaría a tener un warning diciendo que es una excepción de la regla.

Se habla también del completamiento de contenido por el conocimiento, como el ejemplo del niño y la mama. Creo q seria incorrecto ese completamiento. Ya que podría tener otra interpretación diferente a la “que se cree que será el sentido comun”. Porque lo que significa evidente para ti, no tiene porque ser claro para mi. Los ejemplos que pone son muy sencillos, y al parecer, la única respuesta es esa, pero puede ser que no. Que después de tanto conocimiento la respuesta sea mucho mas completa y compleja. Y no resultaría evidente.(18:10)

Se habla también del completamiento de información de las base de datos, lo mismo que hicieron con lo de rellenar o ver si tenia datos inválidos.

Algunas de las estrategias es que Cycs tiene muchas micro definiciones.
Se habla también que la cantidad de conceptos no es muy importante, principalmente porque hay algunas definiciones (pocas), que abarcan mucho conocimiento, que funcionan como axiomas (34:36).
Hay una regla que creo que se asume muy bien, que dice: “Si dos objetos no se sabe su relación taxonómica entonces se consideran disjuntos”. Porque al final una clase puede ser tan especifica como se quiera, se habla de clases y de instancias de clases pero al final son lo mismo, lo que las clases son instancias sin valores. (video en 35:30)
Si existen dos clases que no se conocen (dos taxones, dos ramas de la taxonomía), entonces se asume que son disjuntas. Y en realidad lo son, porque en su nivel de especificidad se hacen diferentes. Pero que pasa si una es una instancia de la otra.? No pasa nada porque también se puede ver como subconjunto pero también como diferentes grupos como lo son clases y lo son las instancias.
Open CYC es una ontología abierta. Y podemos usarla tanto para investigación como para comercialización.

Estas son unas notas, perdonen si no todas las ideas estan muy esclarecidas y si el cambio de las mismas sea muy brusco.

miércoles, 2 de octubre de 2013

Una forma rapida de dar semantica a tu web

RDF (Resource Description Framework) es la forma de dar semantica a tu pagina. Con RDF se puede describir cualquier concepto, relacion o objeto del universo.

Hay tres cosas principales en las que se basa RDF, sujeto, predicado y objeto.

Sujeto: Es lo que se quiere describir.
Predicado: Generalmente se refiera a un atributo de lo que estas describiendo.
Objeto: Es lo que estas referenciando con el Predicado.

Jorge le gustan las manzanas.

Jorge - es el sujeto, lo que se esta describiendo
le gustan - es el predicado un atributo de Mauricio
las manzanas: es el objeto al cual se le aplica el predicado

Usando esta simple idea podemos definir cualquier cosa.

RDF usa URI (es igual que URL pero en vez de ser una local, la URI referencia a un recurso, de facto, una URL es un tipo de URI) para especificar sujetos y predicados.

Un ejemplo de URI:

http://www.ejemplo.org/uris/largas/son/muy/pesadas/de/escribir


Como podemos ver que las URI son muy largas, y pueden ser muy pesadas, por eso en RDF hay las CURI (Compacta URI). CURI es la forma de escribir mas corto la URI.

un ejemplo de una CURI es:

 foaf:name

http://xmlns.com/foaf/0.1/name

Como podemos ver foaf:name es la abreviación de la uri http://xmlns.com/foaf/0.1/name , donde foaf  equivale a http://xmlns.com/foaf/0.1/ y lo que viene despues, en este caso, name, equivale a agregar a la URI, en este caso name.

Ahora no debemos preocuparnos que significa esa URI, ya que despues lo explicare.

RDF es un concepto no es una syntaxis, entonces debemos aprender a como escribir afirmaciones.

Recordemos que en RDF todo es SUJETO, PREDICADO, OBJETO.

Una afirmacion en RDF es una tripleta, si cojemos el ejemplo anterior, podemos darnos cuenta que hicimos una afirmacion en forma de tripleta. Entonces en RDF lo escribir de la siguiente manera:

@prefix pref: <http://ejemplo.org/vocabulary#> .
<#jorge> pref:gustan <#manzanas> .

El "@prefix" nos especifica quien va ser nuestra CURI pref que en este caso es <http://ejemplo.org/vocabulary#> . En la siguiente linea esta definida la tripleta, empezando con el sujeto <#jorge> , los signos de mayor y menor es para especificar que es una URI. El predicado es pref:gustan, que es tambien una URI y el objeto es <#manzanas> que tambien es una URI. Y al final de la tripleta hay un punto para indicar el final de la afirmacion. Pueden escribir cuantas tripletas quieran, mientras mas tripletas haya con un sujeto, mas informacion hay de ese sujeto.

Si nos fijamos pref apunta a algo que dice vocabulary, en español, vocabulario.
Un vocabulario, define que es lo que una tripleta realmente significa. Sin un vocabulario, la tripleta no tendria un concepto global para todos. Un famoso vocabulario se llama Friend of a Friend, también conocido como foaf.  (Si esto no queda claro, siga leyendo entendera mejor con el ejemplo)

foaf tiene muchas relaciones entre personas definidas y tiene muchos conceptos para definir personas. foaf sera el primer vocabulario que vamos a usar en este articulo.

Usando foaf es muy facil describir personas en la Web, todo lo que se necesita es una URI que hable sobre una persona y un URI para usar el predicado que nos convenga. Vamos hacer un ejemplo, especificando que Jorge es una persona y el nombre completo de Jorge.

Lo primero que vamos hacer es especificar que vamos a usar el vocabulario foaf . En nuestro HTML, hacemos esto usando nuestro atributo xmlns . Y lo especificamos de la siguiente manera xmlns:foaf="http://xmlns.com/foaf/0.1".

Tambien vamos a necesitar dos atributos RDF, about property . El primer atributo es about y se usa para especificar el sujeto. De la siguiente forma about="#jorge". El segundo atributo es property y se usa para especificar el predicado. De la siguiente manera property="foaf:name". Finalmente para asignar el valor, nosotros lo ponemos entre las etiquetas que tienen esos atributos. A seguir pongo el ejemplo completo:

<body xmlns:foaf="http://xmlns.com/foaf/0.1">
    <span   about="#jorge" property="foaf:name">
    Jorge McDreaming 
    </span>
<body>


Si ahora quisieran cambiar el nombre completo en iniciales JM no hay que cambiar nada, solamente la entrada del nombre y los datos estarian actualizados.
En tripleta seria

@prefix foaf: <http://xmlns.com/foaf/0.1> .
<#jorge> foaf:name "Jorge McDreaming" .

Pero tenemos que definir que Jorge es una persona, para eso debemos agregar typeof="foaf:Person" . type sirve para especificar un tipo, un tipo es la clase que debe pertenecer el sujeto, que es una relacion especial del sujeto. El tipo que estamos especificando en este caso es Persona.

<body xmlns:foaf="http://xmlns.com/foaf/0.1">
    <span   about="#jorge" property="foaf:name" typeof="foaf:Person">
    Jorge McDreaming 
    </span>
<body>

Ahora queremos definir una relacion entre esas dos personas. La relacion sera conoce, queremos especificar que Jorge conoce a Sheldon. Primero mostraremos como quedaran las afirmaciones que Jorge y Sheldon son personas.


<body xmlns:foaf="http://xmlns.com/foaf/0.1">

    <span   about="#jorge" property="foaf:name" typeof="foaf:Person">
    Jorge McDreaming 
    </span>

    <span   about="#sheldon" property="foaf:name" typeof="foaf:Person">
    Sheldon Cooper 
    </span>

<body>

Finalmente para espcificar que Jorge y Sheldon son amigos, usamos el atributo rel y el atributo resource. Tambien usamos un vocabulario que tiene foaf que es knows conocer. Luego quedaria especificado todo de la siguiente manera:

<body xmlns:foaf="http://xmlns.com/foaf/0.1">

    <span   about="#jorge" property="foaf:name" typeof="foaf:Person">
    Jorge McDreaming 
    </span>

    <span   about="#sheldon" property="foaf:name" typeof="foaf:Person">
    Sheldon Cooper 
    </span>
    
    <span about="#jorge" rel="foaf:knows" resource="#sheldon">
    Jorge conoce a Sheldon
    </span>   

<body>

Con esto ya tenemos las ideas basicas y podemos crear cualquier semantica compleja.

Asi es como una web semantica es construida, una tripleta atras de otra. Una tripleta relacionado con otra y asi. 

martes, 27 de agosto de 2013

El poema de amor de Neil Hilborn, enfermo de trastorno obsesivo compulsivo



Amor y trastorno obsesivo compulsivo

Neil Hilborn declara su amor obsesivo compulsivo a una chica.

26 de agosto de 2013. Estandarte.com
Qué: El poema de amor de Neil Hilborn, enfermo de trastorno obsesivo compulsivo
El poema de amor compuesto y recitado por Neil Hilborn, enfermo con trastorno obsesivo compulsivo, se ha convertido en todo un éxito gracias a la red. Hilborn participó en la final del concurso 2013 Rustbelt Regional Poetry Slam (Wisconsin, Estados Unidos), el pasado junio, con un poema en el que cuenta su amor hacia una chica, traspasado en todos sus aspectos por su trastorno obsesivo compulsivo. El resultado es el siguiente:

La primera vez que la vi…
Todo en mi cabeza se silenció
Todos los ticks, las imágenes constantes desaparecieron.
Cuando tienes trastorno obsesivo compulsivo en realidad no tienes momentos callados.
Inclusive en la cama estoy pensando:
¿Cerré las puertas? Sí
¿Me lavé las manos? Sí
¿Cerré las puertas? Sí
¿Me lavé las manos? Sí
Pero cuando la vi, la única cosa en la que pude pensar fue en la curva de la horquilla de sus labios.
O la pestaña en su mejilla–
La pestaña en su mejilla–
La pestaña en su mejilla.
Sabía que debía hablar con ella
La invité a salir seis veces en treinta segundos.
Ella dijo que sí después de la tercera,
pero ninguna de las veces que pregunté se sintió bien así que tenía que seguir haciéndolo.
En nuestra primera cita,
pasé más tiempo organizando mi comida por colores de lo que pasé comiéndola o hablando con ella.
Pero le encantó.
Le encantaba que tuviera que besarla para despedirme 16 veces, o 24 si era miércoles.
Le encantaba que me tomaba todo el tiempo caminar hacia casa porque había muchas grietas en la banqueta.
Cuando nos mudamos juntos ella dijo que se sentía segura,
como si nadie nos fuera a robar porque definitivamente había cerrado la puerta 18 veces,
Yo siempre veía su boca cuando hablaba–
Cuando hablaba–
Cuando hablaba–
Cuando hablaba–
Cuando hablaba;
Cuando me dijo que me amaba, su boca se curveaba hacia arriba en los bordes.
En la noche ella se acostaba en la cama y me veía apagar todas las luces, y
prenderlas, y apagarlas, y prenderlas, y apagarlas, y
prenderlas, y apagarlas, y prenderlas, y apagarlas, y
prenderlas, y apagarlas, y prenderlas, y apagarlas, y
prenderlas, y apagarlas, y prenderlas, y apagarlas, y
prenderlas, y apagarlas, y prenderlas, y apagarlas.
Ella cerraba los ojos y se imaginaba que los días y las noches pasaban frente a ella.
Algunas mañanas empezaba a besarla para despedirme y ella sólo se iba porque estaba haciéndola llegar tarde al trabajo.

Cuando me detenía en las grietas de la banqueta ella seguía caminando.
Cuando me decía que me amaba su boca era una línea recta.
Me dijo que estaba tomando mucho de su tiempo.
La semana pasada empezó a dormir en casa de su madre.
Me dijo que nunca debió dejarme apegarme tanto a ella; que todo esto fue un error,
pero… ¡¿Cómo podría ser un error que no tenga que lavarme las manos después de tocarla?!
El amor no es un error y me está matando que ella pueda salirse de esto y yo no.
No puedo–
No puedo salir y encontrar a alguien nuevo porque siempre pienso en ella.
Usualmente, cuando me obsesiono con algo, veo gérmenes escabulléndose en mi piel.
Me veo a mí mismo siendo atropellado por una infinita línea de coches.
Y ella fue la primera cosa hermosa en la que alguna vez me he estancado.
Quiero despertar todas las mañanas pensando en la manera en la que agarra el volante.
Cómo mueve las manijas de la regadera como si estuviera abriendo una caja fuerte.
En cómo sopla las velas–
cómo sopla las velas–
cómo sopla las velas–
cómo sopla las velas–
cómo sopla…
Ahora sólo pienso en quién más está besándola.
No puedo respirar porque él sólo la besa una vez­– ¡No le importa si es perfecto!
La quiero de regreso tanto que…
Dejo la puerta sin cerrar.
Dejo las luces prendidas.
Neil Hilborn ha contado que el poema fue compuesto en 2011 y que, si bien es cierto que la mayoría de los tics que se ven durante su exposición son intencionales, algunos también son reales, provocados por su trastorno obsesivo compulsivo. Sea como fuere, lo cierto es que bien podría ejemplificar una interesante unión de enfermedad y creación artística. Si a esa simbiosis la pasamos por el tamiz de una interpretación en un festival de poetry slam, el resultado es muy atractivo, un caramelo para las redes sociales, que no paran de extenderlo y reproducirlo por cualquier rincón del planeta en estos momentos…

fuente:http://www.estandarte.com/noticias/varios/el-poema-de-amor-de-neil-hilborn-con-trastorno-obsesivo-compulsivo_2000.html?utm_source=twitterfeed&utm_medium=twitter&utm_campaign=Feed%3A+estandarte+%28Estandarte+-+Pasi%C3%B3n+por+leer.+Pasi%C3%B3n+por+escribir.%29

domingo, 23 de junio de 2013

Diez formas de pensar como un matemático


¿Cómo piensa alguien que esté muy metido en las matemáticas? ¿Qué técnicas utiliza para analizar convenientemente las situaciones que se encuentra en sus quehaceres diarios? ¿Hay alguna manera de que cualquier persona pueda llegar a comprender las matemáticas en profundidad? Quizás no, pero lo que sí se puede hacer es seguir algunos consejos sencillos para facilitar esa comprensión y, en su caso, el aprendizaje de las mismas.

Consejos los hay de todo tipo, y seguro que muchos de vosotros habéis seguido algunos que os han dado vuestros profesores o vuestros familiares. Y estoy convencido de que también vosotros mismos habéis dado consejos “matemáticos” en alguna ocasión. Los que aparecen en esta entrada forman parte de un pequeño manual publicado por Kevin Houston, matemático de la Universidad de Leeds, y bajo mi punto de vista forman una lista bastante interesante de ideas para mejorar el aprendizaje y la comprensión de las matemáticas. En lo que sigue podréis leer una traducción de lo más importante que Kevin Houston comenta de cada uno de dichos consejos (en algunos quizás meta algún comentario mío), y al final de este artículo encontraréis el enlace a su manual

Consejo 1: Pregúntate todo

Una de las cosas más bellas de las matemáticas es que pueden ser comprobadas, que no tienes que fiarte de la palabra de nadie. Si alguien dice que algo es cierto, tú puedes pedirle que lo demuestre. O mejor, puedes intentar probarlo tú mismo.
Tu reacción ante un enunciado debería ser desconfiar de él e intentar encontrar un ejemplo que muestre que es falso. Aunque al final dicho enunciado resulte ser cierto, el trabajo mental que conlleva esta búsqueda será beneficioso para ti.

Consejo 2: Escribe con palabras

Se entiende que hablamos de escribir las matemáticas con palabras. ¿Cómo nos puede ayudar esto? Las frases son los ladrillos de los argumentos, y las matemáticas (de alto nivel principalmente) tratan de argumentos en forma de demostraciones (¡no solamente de obtener la respuesta numérica correcta!).
Escribir con palabras en vez de con símbolos te obliga a comprender muy bien el tema del que estás hablando y a pensar muy cuidadosamente tus argumentos. Si no puedes escribirlo bien en una frase quizás es porque no lo has comprendido a la perfección.

Consejo 3: ¿Qué ocurre con el recíproco?

Los enunciados tipo A \rightarrow B aparecen continuamente en matemáticas. Podemos traducirlo como “Si A es cierto, entonces Bes cierto”. El recíproco de A \rightarrow B es B \rightarrow A.
Ante un enunciado tipo A \rightarrow B, un buen matemático se preguntará si el recíproco también es cierto por la sencilla razón de que no tiene por qué serlo. Ahí va un ejemplo:
El recíproco de la expresión (cierta) siguiente

Si nací en Madrid, entonces nací en España

es

Si nací en España, entonces nací en Madrid

enunciado que, claramente, no tiene por qué ser cierto.
Por tanto, plantéate si el recíproco es cierto o no, ya no solamente por la propia veracidad o falsedad del recíproco en el caso que estés estudiando, sino porque ese esfuerzo que realizarás te ayudará a mejorar tus habilidades matemáticas.

Consejo 4: Usa el contrarrecíproco

El contrarrecíproco de un enunciado tipo A \rightarrow B es
no \; B \rightarrow no \; A
Por ejemplo, el contrarrecíproco de

Si nací en Madrid, entonces nací en España

es

Si no nací en España, entonces no nací en Madrid

Para mucha gente es sorprendente que sea así, pero la realidad es que la veracidad o falsedad del contrarrecíproco es la misma que la del enunciado inicial. Esto es, ambas sentencias son equivalentes: si una es falsa la otra también, y si una es verdadera también lo es la otra.
Esto debería aprenderse correctamente, ya que el contrarrecíproco se utiliza con bastante frecuencia tanto en las demostraciones matemáticas como en nuestro razonamiento diario.

Consejo 5: Considera casos extremos

Los resultados obtenidos al aplicar un teorema a los casos triviales y extremos de las hipótesis puede ayudar a su comprensión: ¿qué pasaría si cierto número es 0 ó 1? ¿O si consideramos la función trivial f(x) \equiv 0? ¿Qué ocurriría si tomamos el conjunto vacío? ¿Y la sucesión \{1 ,1,1, \ldots \}? ¿Qué obtenemos con un círculo o una recta?
Por ejemplo, utilizando un “caso extremo” es sencillo mostrar que el siguiente resultado es falso:
Teorema“: Dados a,b,c,d números enteros, si ab=cd y a=c, entonces b=d.

Consejo 6: Crea tus propios ejemplos

Un matemático crea sus propios ejemplos, tanto ejemplos estándar como ejemplos extremos, e incluso no-ejemplos.
Veamos uno. El método utilizado para calcular los máximos y mínimos de una función de una variable es bastante conocido. Vamos a quedarnos con el método simplificado:
Dada una función f(x), calculamos su derivada, f^\prime (x), la igualamos a cero y resolvemos la ecuación resultante. Los puntos obtenidos son los posibles máximos y mínimos del problema.
Después calculamos la segunda derivada, f^{\prime \prime} (x), y sustituyendo dichos puntos en ella los clasificamos comomáximos, si el valor obtenido al sustituir es negativo, o mínimos, si el valor obtenido al sustituir es positivo.
Con este procedimiento podemos calcular los máximos y los mínimos de una función dada siguiendo estos pasos. Ahora, ¿y si nos piden lo contrario? Es decir, ¿y si nos piden crear una función que, por ejemplo, tenga un máximo en x=1 y un mínimo en x=3? Esto es mucho más complicado que lo anterior, pero por contra nos permite aprender mucho más sobre matemáticas.
Por tanto, dado un método para resolver un cierto tipo de ejercicios es interesante revertir el proceso y crear nuevos problemas yendo del final al principio.

Consejo 7: ¿Dónde se usan las hipótesis?

A menudo comprender la demostración de un resultado es muy complicado. Esto es algo esperado, ya que en muchas ocasiones en las demostraciones no se entra en dar una idea sobre el enunciado del teorema en cuestión o en cómo se descubrió dicha demostración. En definitiva, comprender las demostraciones es una de las cosas más difíciles a las que puede enfrentarse alguien en matemáticas.
Por ello es importante tener alguna idea sobre cómo comenzar a entender una demostración. Y analizar las hipótesis del teorema es un buen comienzo. Investigar dónde se utilizan las hipótesis de nuestro teorema puede ser de gran ayuda a la hora de comprender la demostración. Y encontrar “hipótesis ocultas” (por ejemplo, viendo si dentro de la demostración se usa algún otro resultado que tenga sus propias hipótesis) también puede ser interesante. Además, si encontramos algún resultado que se utilice varias veces a la hora de demostrar teoremas quizás eso indique que el resultado es muy importante o muy útil, por lo que posiblemente nos convenga aprenderlo bien.

Consejo 8: Comienza por el lado complicado

Éste es un consejo interesante a la hora de probar que una igualdad es cierta. Para ello, generalmente es mejor comenzar por el “lado difícil” de la misma y realizar operaciones en él para simplificarlo y así intentar llegar a la expresión que tenemos al otro lado.
Por ejemplo, para demostrar que tg(x)+cotg(x)=2 \; cosec(2x), \; \forall x \in \mathbb{R} tales que x \ne {{n \pi} \over 2}, \; \forall n \in \mathbb{Z}, es mucho mejor comenzar por la parte “más complicada”, la que tiene “más cosas”, la de la izquierda, y realizar operaciones en ella hasta obtener la de la derecha (os lo dejo como ejercicio; si queréis intentarlo no miréis el documento original de Kevin Houston, ya que allí está la solución)
Partir de la igualdad completa y realizar operaciones o reordenaciones en ella puede no ser lo más adecuado, ya que corremos el riesgo de caer en razonamiento circulares o incluso de suponer como cierto lo que queremos demostrar sin darnos cuenta de que lo estamos haciendo.

Consejo 9: Pregúntate qué ocurriría si…

A los buenos matemáticos les gusta preguntarse “¿qué pasaría si…?”. Por ejemplo, “¿qué ocurriría si elimino cierta hipótesis?”.Pensar en esto quizás nos ayude a ver mejor por qué cierto resultado es cierto o por qué una definición es como es. Y hasta podríamos encontrar un nuevo teorema debilitando las hipótesis si encontramos alguna que no sea necesaria.
Otro ejemplo. con frecuencia los objetos matemáticos son conjuntos de elementos que cumplen ciertas condiciones. Y a partir de ciertos conjuntos podemos construir otros conjuntos nuevos. Pues es interesante preguntarse si estos conjuntos nuevos “heredan” las propiedades de los antiguos. Por ejemplo, “si A y B son conjuntos finitos, ¿también lo es su producto cartesianoA \times B?”. “si A y B son conjuntos compactos, ¿también lo es su unión?”.

Consejo 10: ¡Habla!

Cuando Sir Christopher Zeeman fundó el Instituto de Matemáticas de la Universidad de Warwick, una de sus ideas clave para fomentar una atmósfera matemática fue que hubiera pizarras en los pasillos (además de en las clases), para facilitar que la gente pudiera hablar con los demás y explicar su trabajo en cualquier momento (el instituto Isaac Newton de Cambridge tiene pizarras en los baños y hasta en el ascensor…que sólo recorre dos plantas).
Son muchas las ventajas de comunicar tu trabajo a otros. Por un lado, al explicarlo te fuerzas a pensar con claridadY por otro lado, puedes aprender de los demás, ya que ellos pueden sugerirte ideas para resolver un problema o avanzar en él o, por otra parte, pueden encontrar errores en tus razonamientos.

Como decía al principio, interesante lista de consejos para pensar “como un matemático”. Creo que todos son muy acertados y muy necesarios para que nuestra mente se acostumbre a pensar de forma matemática. De todas formas, seguro que hay más ideas interesantes que no aparecen en esta lista. Los comentarios son vuestros para plasmarlas.
Aquí tenéis el enlace al manual de Kevin Houston: 10 Ways to Think Line a Mathematician.
Por cierto, la portada del manual incluye varias demostraciones visuales interesantes. Echad un ojo:
Las entendéis todas, ¿verdad?


Fuente: http://gaussianos.com/diez-formas-de-pensar-como-un-matematico/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+gaussianos+%28Gaussianos%29

viernes, 26 de abril de 2013

Si haces lo que siempre has hecho, nunca llegarás más allá de donde siempre has llegado

Saber es acordarse (Aristóteles)

No llores por haber perdido el Sol, pues las lágrimas no te dejarán ver las estrellas

Muchas veces me moria pensando que no iba verte. Pero moria la muerte cada vez que te veia. E.Galeano.

Si haces lo que siempre has hecho, nunca llegarás más allá de donde siempre has llegado

Pierde un minuto en tu vida y no tu vida en un minuto

Si quieres que tus sueños se cumplan... ¡Despierta!

Rectificar es de sabios equivocados

El que teme sufrir, sufre de temor (Proverbio chino)

Piensa en mí cuando estés triste, porque en la tristeza se piensa en lo que más se ha querido

Si trabajas para vivir, no te mates trabajando

El beso es un te quiero con un te echaré de menos...

No abras los labios si no estás seguro de que lo que vas a decir es más hermoso que el silencio (Proverbio árabe)

Las únicas personas normales son las que uno no conoce bien

Quién da consejos se arriesga a recibirlos

Si estas triste ríe, llorar es demasiado fácil

No por mucho filosofar te entiende más gente

Aprende a decir lo que sientes a la persona que te lo hizo sentir

Si te caes siete veces, levántate ocho

Quien hace puede equivocarse. Quien nada hace ya esta equivocado

Las cosas más importantes de la vida, no son cosas

Un amigo es alguien, con quien se puede no hacer nada y disfrutar de ello

La amistad divide las penas y multiplica las alegrías

Hay dos maneras de vivir feliz: siendo tonto o haciéndose el tonto

El amor es algo difícil de explicar, fácil de sentir e imposible de olvidar

La vida es así y hay que aprender a vivirla

Tal vez para el MUNDO no eres nada, pero para ALGUIEN quizás eres el mundo.

¿Por qué amamos a quien nos ignora e ignoramos a quien nos ama?

No intentes ser tu mismo, porque serás otro.

Si no quieres que nadie se entere, no lo hagas

El mundo es una ostra (Bienvenida Pérez)

No me arrepiento de las cosas que he hecho, sino de las que no hice

Visto lo visto, todo el mundo es listo

El amor no muere, sólo agoniza por el olvido

La vida es demasiado seria para tomarla en serio

La mente busca, el corazón encuentra

No podemos evitar las pasiones, pero si vencerlas

El autentico amigo es el que sabe todo sobre ti y sigue siendo tu amigo

El joven conoce las reglas, pero el viejo las excepciones

Todas hieren, la última mata

El que busca la verdad corre el riesgo de encontrarla.

Una conclusión es cuando te cansas de pensar.

Si no quieres que nadie se entere, no lo hagas.

La ignorancia es temporal, la estupidez es para siempre

Los amigos van y vienen, los enemigos se acumulan

Un pesimista es un optimista con experiencia...

Daría todo lo que sé por saber la mitad de lo que ignoro.

Recuerda siempre que eres único... Exactamente igual que todos los demás.

probando insignia de instagram


Instagram

miércoles, 24 de abril de 2013

Cuentas en Android Parte II


Antes de leer este post es convenietne haber leido el anterior Cuentas en Android Parte I

6. Implementacion del Account manager
6.1 Introduccion

La implementacion de un Account Manager es muy inusual ya que para verlo funcionar tienes que tener al menos 3 archivos.
  1. La activity que utiliza el account manager
  2. El Servicio que debe extender la clase AbstractAccountAuthenticator
  3. El Authenticator (XML, como se va ver la creacion de una cuenta)
  4. The preference file (XML, la configuracion de la cuenta) - Opcional
  5. Las clases que interactuan con el servicio - Opcional

6.2 La actividad principal
La actividad que utiliza account manager coje una instancia de la misma e invoca sus metodos. La mayoria estan explicados aqui.

6.2 El Servicio

El servicio es una de las mas importantes piezas para interactuar con el account manager. Esta es usada cuando el usuario puede crear una cuenta explicitamente, "sin usar una applicacion para eso", sino usando el proprio sistema operativo Android. Quiero decir, cuando el usuario hace click en Configuraciones->; Cuentas y Sincornizacion ->; Crear nueva cuenta (Settings ->; Account and Sync ->; Creates a new accounts), el sistema le monstrara la lista de cuentas que puede crear explicitamente. Si una applicacion puede crear una cuenta, es de esperar que el usuario la pueda crear sin esa aplicacion (de forma explicita).

Cuando el usuario hace click en algun elemento, el account manager vinculara un servicio, el cual debe retornar una implementacion de AbstractAccountAuthenticator. Ademas, el sistema ira invocar un metodo addAccount de tal servicio. Este metodo debe lanzar una actividad que permita el usuario introducir sus credenciales (nombre de usuario, contraseña, etc) y finalmente retornar la respuesta apropriada al account Manager. Aqui hay un buen ejemplo de su implementacion:

Este servicio sera declarado en el fichero AndroidManifest de una manera especial:

android:exported="true" android:process=":auth">



android:resource="@xml/authenticator" />

fuente

El codigo anterior asocia el servicio con el fichero xml que le denominamos authenticator. Este debe ser guardado en xml folder.

6.3 El Authenticator
El authenticator assigna una coleccion de parametros:
  • Account type: El tipo de cuenta. Esta debe ser la misma que cuando la cuenta es creada explicitamente. De lo contrario un error, aparentemente sin sentido saldra. 
  • Icons: Los iconos que apareceran en el account manager
  • Label: El texto de descripcion.
  • AccountPreferences: La localizacion del fichero XML el cual indica la configuracion (preference) que aparecera una vez la cuenta ha sido creada. 
  • etc.
He aqui un ejemplo del fichero xml:

android:accountType="fm.last.android.account"
android:icon="@drawable/icon"
android:smallIcon="@drawable/icon"
android:label="@string/app_name"
android:accountPreferences="@xml/account_preferences"/>
fuente

6.4 Preference file
El siguiente archivo preference es un archivo xml comun y corriente de preference
He aqui un ejemplo:


   

    android:key="account_settings"
                                    android:title="Account Settings"
                                    android:summary="Sync frequency, notifications, etc.">
        android:action="fm.last.android.activity.Preferences.ACCOUNT_SETUP"
                    android:targetPackage="fm.last.android"
                    android:targetClass="fm.last.android.activity.Preferences" />
    




fuente

6.5 El Service helper classes
El service helper classes son usados para ayudar un especifico metodo de la clase. Por ejemplo, el usuario puede desear crear una clase especifica que permita al usuario crear una cuenta, cuando el metodo addAccount del servicio sea llamado.

Para este especifico caso, hay una clase especifica llamada AccountAuthenticatorActivity la provee google que hace la autenticacion un poco mas facil. He aqui el codigo.

Lo que hace esta clase es permitir al usuario, asignar el resultado de la autenticacion, poniendo el nombre de usuario y el tipo de cuenta, cuando este termina lo devuelve al account manager. El uso de esta clase no es obligatorio. Se puede crear cualquier actividad como un AccountAuthenticatorActivity. Vease el ejemplo siguiente.

Cuentas en Android Parte I


Por padron, Android incorpora un Account manager, el cual es usado para guardar las credenciales de los usuarios y sincronizar los datos con el servidor (de ser necesario).

Account manager es un servicio centralizado por android (En vez de tener una cuenta por cada servicio que tienes, es mejor tener una sola que te de acceso a todos los servicios. Un ejemplo es Google, con las credenciales de google puedes acceder a Youtube, Gmail, Google+ usando las mismas credenciales, esa es la idea de servicio centralizado). Cuando se crea una cuenta, de tu empresa o de otra cualquier aplicacion puede cojer la lista de cuentas y con el usuario utilizar su auth tokens asociado.

Basicamente se tiene una lista de las cuentas, cada uno identificada por:

Account name: El nombre del usuario para login. Ejemplo: titusfx
Account type: El tipo de cuenta. Por ejemplo: com.google

Todas las cuentas deben ser unica. Esto es por, dado un dispositivo, no pueden haber dos cuentas con el mismo nombre y el mismo tipo de cuenta.

Por cada cuenta, hay un conjunto de datos relacionados:

Password: La contraseña de la cuenta. Esta puede ser vacio ("").
AuthTokens: La cadena usada por el servidor para identificar el usuario, en ves de usar la contraseña. Normalmente el auth token es temporal y expirara despues de un tiempo. Todos los auth tokens tienen un tipo llamado AuthTokenType. Esto es porque una cuenta puede usar varios servicios, y por cada servicio debe haber un auth token diferente. Por ejemplo, una cuenta de Google puede ser usada para Gmail y Youtube. El authTokenType de Gmail es "mail" y el the youtube es "youtube". Más informacion. 

UserDatas: Ademas se puede salvar informacion adicional con un par de cadena a estilo de diccionario ( par llave/valor ). Por si se quiere guardar informacion adicional que es utilizada por las applicaciones.

3. Permisos

Hay varios permisos que son requeridos para interactuar con el account manager:

android.permission.GET_ACCOUNTS 

Este permiso es utilizado para tener acceso a la lista de cuentas y chequear si una cuenta especifica  tiene una especifica caracteristica(feature). (Los features no seran debatidos en este post.) 

android.permission.USE_CREDENTIALS 

Este permiso es para utilizar e invalidar auth tokens. 

android.permission.AUTHENTICATE_ACCOUNTS 

Este permiso es utilizado para modificar la informacion relacionada con la cuenta, tal como la contraseña, los datos del usuario, los auth tokens, etc. Es usado para crear cuentas y acceder a la contraseña.
android.permission.MANAGE_ACCOUNTS 

Este permiso es utilizado para adicionar or eliminar cuentas. Este puede ser necesario cuando la aplicacion utiliza alguna caracteristica avanzada de la aplicacion como actualizar credenciales o editar propiedades.

4. Manejando informacion con account manager

4.1 Account manager

Una aplicacion no puede crear un nuevo account manager pero puede coger el existente pasando el context de la aplicacion.

AccountManager accountManager = AccountManager.get(Context);


4.2 Accounts (Cuentas)

4.2.1 Agregar una nueva cuenta

La manera mas facil de adicionar una cuenta es utilizando el metodo:

boolean addAccountExplicitly(Account account, String password, Bundle userdata) 

Note que la clase Account puede ser facilmente contruida con:

Account account = new Account(userName, accountType)

Ambos parametros son Cadenas, uno es el nombre del usuario y el otro el tipo de cuenta.

4.2.2 Acceder a una cuenta

Una aplicacion puede cojer informacion acerca de todas las cuentas del systema. Hay dos metodos principales:


Account[] getAccount() 


Account[] getAccountsByType(String type)


El primero devuelve todas las cuentas del account manager y la segunda, solamente devuelve las cuentas que encajan con un especifico tipo de cuenta.

Todas las cuentas tienen dos tipos:

name: Accesible usando account.name
type: Accesible usando account.type

Luego, una forma facil de acceder a una cuenta de tipo "com.jiahaoliuliu" que el nombre del usuario es "jiahaoliuliu":


Account[] accounts = accountManager.getAccountsByType("com.jiahaoliuliu");

Account myAccount = null;

for (Account account : accounts) 

{

    if (account.name.equalsIgnoreCase("jiahaoliuliu")) 

    {

        myAccount = account;
        break;

    }

}




4.2.3 Eliminar una cuenta
Las cuentas pueden ser eliminadas por:

AccountManagerFuture removeAccount(Account account, AccountManagerCallback callback, Handler handler)

Note que, por cada cuenta, puede existir una configuracion que la prevenga de ser eliminada. Lo que no garantiza que siempre se pueda eliminar la cuenta.

4.3 Contraseña

La contraseña es una informacion sencible no deberia ser guardada de la manera que es. uno de los grandes problemas de seguridad es guardar las contraseñas como texto plano sin ningun tipo de encriptacion. Verifique la seccion de seguridad en la segunda parte de este post.

4.3.1 Assignar la contraseña

Dado una cuenta, la contraseña puede ser asignada de dos maneras:

Cuando una cuenta es creada por la primera vez, usando el metodo:

boolean addAccountExplicitly (Account account, String password, Bundle userdata)

Después que la cuenta fue creada

void setPassword(Account account, String password)

4.3.2 Acceder a la contraseña

Se puede acceder la contraseña por el metodo:

String getPassword(Account)

4.3.3 Limpiar la contraseña

Hay un metodo especifico para limpiar el password.

void clearPassword(Account)

El metodo siguiente tiene el mismo efecto:

setPassword(Account, null)

4.4 Auth tokens

Como se ha explicado anteriormente, una cuenta puede tener un conjunto de auth tokens, cada uno para un servicio especifico que se identifica por authTokenType.


4.4.1 Asignar un auth token

Para asignar un auth token, se puede usar el siguiente modo:

void setAuthToken(Account account, String authTokenType, String authType) 

4.4.2 Acceder a un auth token

Hay varias maneras de acceder a los auth tokens. La manera mas facil es la siguiente:

AccountManagerFuture getAuthToken(Account account, String authTokenType, boolean notifyAuthFailure, AccountManagerCallback callback, Handler handler) 

Aqui hay un buen ejemplo de como usarlo

4.4.3 Invalidar un auth token

Normalmente los auth tokens tienen un tiempo de expiracion, es una buena practica invalidar un auth token una ves que esta ya no es valida. Para hacerlo se usa el siguiente metodo:

void invalidateAuthToken(String accountType, String authToken)

Note que para usarlo debe entrar el authToken completamente.


4.5 Informacion del usuario

Ademas la aplicacion puede introducir cualquier informacion extra relacionada con la cuenta pasando. Es un diccionario de llave/valor donde todos son cadenas.


4.5.1 Asignar la informacion del usuaio

Como la contraseña, la informacion del usuario pueden ser introducidas cuando la cuenta empieza a ser creada o despues de ser creada.

boolean addAccountExplicitly(Account account, String password, Bundle userData) 

despues de ser creada:

void setUserData(Account account, String key, String value)


4.5.2 Acceder a la informacion del usuario
Solo hay un metodo para acceder a la informacion del usuairo.

String getUserData(Account account, String key) 


4.6 Un account updated listener

El account manager ofrece la posibilidad de adicionar un account update listener para actuar cuando una cuenta es actualizada. El evento (listener) sera aplicado a la instancia actual del AccountManager.

void addOnAccountsUpdatedListener(OnAccountsUpdateListener listener, Handler handler, boolean updateImmediately) 


void removeOnAccountsUpdatedListener(OnAccountsUpdatedListener listener) 

Es importante notar que mientras una instancia de Account manager empieza ser escuchada, este no va ser recogida por el account manager, ni el context usado para devolverlo. Para evitar fuga de memoria, es importante eliminar el listener si este no esta siendo usado. Por ejemplo onDestroy().

5. Conclusion Parcial

El account manager es muy util para tener todas las cuentas centralizadas en un solo lugar, pero esto tiene sus inconvenientes.

jueves, 11 de abril de 2013

Android y SharePreferences


Para leer los datos basta con usar SharedPreferences:

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

prefs.getString("keystring","defvalue");// En el caso de que sea un String
prefs.getBoolean("keystring", true);// En el caso de que sea un bool


El segundo parametro de getBoolean y de getString es el valor por defecto, en caso de que no tenga valor o no exista.

A tomar en cuenta:
Varias app pueden proveer las preferencias del usuario desde su Configuracion (Preference Activity). Por esto android provee las Preferences.
Preferences son tipicamente un par de nombre calor. Pueden ser grabadas como "Share Preferences" atraves de varias actividades de una app (Actualmente no puede ser compartida entre procesos). O puede ser informacion especifica que una actividad necesita guardar.
  1. Shared Preferences: Pueden ser usadas por todos los componentes (actividades, servicios, etc) de una app.
  2. Activity handled preferences: Estas pueden ser solamente usadas por Activity y no puede ser usada por otro componente de la app.

Shared Preferences:
Se apoya en el metodo getSharedPreferences de la clase Context . La informacion es grabada en un fichero por defecto(1) o puede ser especificado el nombre del fichero(2).

(1) Manera Recomendada coje el archivo por defecto:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) Coje la informacion especificando el nombre del archivo:

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE es el modo de operando por defecto de las preferences. Esto significa que el fichero creado sera accedido solamente por la app que lo creo. Los otros dos modos son  MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE. En MODE_WORLD_READABLE otra aplicacion puede leer los datos pero no puede modificarlos. En este caso MODE_WORLD_WRITEABLE las otras app pueden modificarlo tambien.

Para Guardar valores en la configuracion tenemos que usar SharedPreference.Editor.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // entero a ser guardado
editor.commit();

Editor tambien tiene metodos como remove() y clear() para borrar los valores del archivo de configuracion.

Activity Preferences:

El shared preferences puede ser usado por otros componentes de la aplicacion. Pero si no se necesita compartir las preferences con otros componentes y se quiere que sea privado. Se trabaja congetPreferences() y getSharedPreferences() con el nombre de la clase de la activity 

Para cojer las preferenes seria:

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
El codigo para guardar valores es el mismo que con shared preferences.
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // // entero a ser guardado
editor.commit();

CURIOSIDADES DE NUESTRO CUERPO

1. Si te pica la garganta, ráscate el oído:
Al presionar los nervios de la oreja, se genera un reflejo inmediato en la garganta que produce espasmos y alivia la molestia.

2.Para escuchar mejor usa solo un lado del oído:
Si estás en una discoteca y no oyes bien lo que te dicen, gira tu cabeza y usa sólo tu oí­do derecho, ya que éste distingue mejor las conversaciones, mientras el izquierdo identifica mejor las canciones que suenan bajo.

3. Para aguantar las ganas de ir al baño piensa en sexo:
Cuando no resistes las ganas de orinar y no tienes un baño cerca, piensa en
sexo. Eso entretiene a tu cerebro y el estrés disminuye.

4.Toser mientras te vacunan reduce el dolor:
Un grupo de científicos alemanes, descubrieron que si toses al momento que te inyectan, se aumenta la presión en el pecho y en la espina dorsal, lo que inhibe los conductores de dolor de la médula.

5. Si tienes la nariz tupida:
Presiona tu paladar y la parte superior de la nariz. Toca el paladar con la lengua fuertemente y con un dedo sujeta la nariz bajo el entrecejo. Esto permite que las secreciones se muevan y puedas respirar.

6.Cuando tengas acidez duerme sobre tu lado izquierdo:
Esto permite crear un ángulo entre el estómago y el esófago, para que los ácidos no puedan pasar a la garganta.

7.Cuando te duela una muela frota un hielo en tu mano:
Debes pasar el trozo de hielo por la zona en forma de "v" que se produce entre el dedo pulgar y el í­ndice por la parte contraria a la palma. Esto reduce en un 50% el dolor, ya que este sector está conectado a los receptores de dolor de la cara.

8. Cuando te quemes, presiona la herida con un dedo:
Luego de limpiarla zona afectada, haz presión con la mano en la quemadura, ya que esto permite volver a la temperatura inicial y evita la aparición de ampollas. (para pequeñas quemaduras)

9. Cuando estés ebrio:
Apoya la mano sobre una mesa o superficie estable. Si haces esto, tu cerebro recobrará la sensación de equilibrio y evitarás que todo gire a tu alrededor.

10.Al correr, respira cuando apoyes el pie izquierdo:
Esto evitará que sientas picor en el pecho, ya que si respiras cuando apoyas el pie derecho, causas presión en el hígado.

11.Si te sangra la nariz, haz presión con tu dedo:
Si te echas para atrás puedes ahogarte con tu sangre, así­ que lo mejor es apretar con tu dedo el lado de la nariz en que tienes la hemorragia.

12.Para controlar los latidos cardiacos cuando estés nervioso:
Pon el dedo pulgar en tu boca y sopla, esto ayudará a que tu corazón deje de latir tan rápido a partir de la respiración.

13.Para aliviar el dolor de cabeza cuando tomas agua muy helada:
Al beber algo muy congelado, el paladar se enfría y el cerebro lo interpreta. Por eso debes colocar tu lengua sobre el paladar para que vuelva a su temperatura normal.

14.Previene la falta de visión cuando estás frente al PC:
Cuando pones tu vista en un objeto cercano como un computador, la vista se cansa y falla. Para ello, cierra tus ojos, contrae el cuerpo y aguanta la respiración por un momento. Luego relaja todo. Santo remedio.

15. Despierta a tus manos y pies dormidos moviendo tu cabeza:
Cuando se te duerma un brazo o la mano, gira tu cabeza de un lado a otro y verás como la sensación pasa en menos de 1 minuto, ya que las extremidades superiores se duermen, por presión en el cuello. En tanto, si es una pierna o un pie, solo camina unos segundos.

16.Fácil método para aguantar la respiración bajo el agua:
Antes de sumergirte, haz muchas respiraciones rápidas y fuertes para lograr que el ácido de la sangre desaparezca, pues éste es el que causa la sensación de ahogo.

17. Memoriza los textos en la noche:
Cualquier cosa que leas antes de dormir, la recordarás con más facilidad..


fuente: https://www.facebook.com/photo.php?fbid=435377283210729&set=a.271448989603560.66555.269366793145113&type=1

jueves, 14 de marzo de 2013

GESTION DE PROCESOS parte 4

Otras definiciones de mi bibliografia que he retocado y no hay necesidad de debatirlas.


DEFINICIÓN DE PROCESO II

Un proceso se representa normalmente en forma de diagrama o esquema, que describe en forma gráfica el modo en que las personas desempeñan su trabajo.

Ejemplo de proceso de una empresa industrial:

  •   Diseñar y desarrollar nuevos productos
  •   Fabricar productos
  •   Comprar materiales
  •   Gestionar el acopio y los recursos (Logística)
  •   Entregar los productos
  •   Tratar las reclamaciones de los clientes
  •   Facturar los pedidos
  •   Gestionar los Recursos Humanos
  •   Gestionar el mantenimiento
  •   Gestionar la voz del cliente


Segun mi bibliografia, recomienda para describir un proceso el siguiente orden:

  •  Definirlo, especificar de qué se trata, sus límites y responsable. Definir su misión y objetivos.
  • Identificar quién es el beneficiario (cliente) del proceso, describir sus expectativas y sus necesidades como "salidas" del proceso, e identificar los estándares de calidad aceptables para nuestros clientes.



  • Relacionar las actividades que se incluyen en el proceso, sus elementos, diagrama, secuencia, "entradas" y requisitos de calidad
  • Especificar el método de evaluación y de revisión que adoptaremos para introducir mejoras en el proceso, lo que incluye determinar indicadores del proceso. 



  1. Símbolos para representar gráficamente un proceso: 













Curso ITIL online parte 3

Apéndice: de ITIL v2 a ITIL v3

La version ITILv2 a ITILv3 cambia ya que v2 usa los conceptos de Provision y Soporte al Servicio, en cuanto v3 usa los conceptos de Ciclo de Vida de los Servicios, que se compone en cinco fases que se retroalimentan entre ellas.

  • Estrategia del Servicio: cuyo proposito es definir que servicios se prestara, a que clientes y en que mercados.
    En este espacio cubren la definición de, servicio que se usara con el cliente, por ejemplo: la empresa dara el servicio de lavar ropa (¿Que es Lavar ropa? ¿Que es lo que incluye el concepto de Lavar ropa?¿Se incluye el detergente al servicio o se paga aparte? es especificacion detallada del servicio que se va a brindar. Ahi se incluyen primera especificacion hacia el cliente, el posible contrato, etc.). A que clientes (¿A quien le hace falta?) y en que mercados(¿A que sectores?¿A que paises o regiones?). Esta definicion de "Estrategia del Servicio" es una caso particular de la historia del arte del servicio que se quiere brindar.
  • Diseño del Servicio: responsable de desarrollar nuevos servicios o modificar los ya existentes, asegurando que cumplen los requisitos de los clientes y se adecuan a la estrategia predefinida.(Esta definicion, se refiere de alguna manera, a las posibles especificaciones tecnicas, ya que si brindamos un servicio a un cliente, y este cliente quiere mejoras o añadir funcionalidades al servicio que le brindamos, tenemos que ver como modificar o crear nuevos servicios. Ademas que estos tienen nuevas estrategias economicas entre otras).
  • Transicion del Servicio: Encargado de la puesta en operación de los servicios previamente diseñados.
  • Operacion del Servicio: responsable de todas las tareas operativas y de mantenimiento del servicio, incluida la atencion al cliente.
  • Mejora Continua del Servicio: apartir de los datos y experiencias acumulados propone mecanismos de mejora del servicio. 

Operacion del Servicio entonces guarda la informacion y hace que esta sea continua(continua se refiere a que sea una informacion con fechas periodicas), para despues hacerla llegar a Mejora Continua del Servicio para asi construir mejoras. (Si nos fijamos no hay nadie que vele, porque estos servicios se hagan bien.)

Otra definicion de funcion:

Funcion es una unidad especializada en la realizacion de una cierta actividad y que es la responsable de su resultado.

Un ejemplo de funcion en ITILv2, Centro de Servicios (es servir de punto de contacto entre los los usuarios y la Gestión de Servicios TI.) .

Diagrama de Centro de Servicios (solo procesos y funciones):



A continuacion pondre el significado de este diagrama tal y cual como aparece en la pagina original. Ya que es su diagrama de procesos y funciones.


Estrategia del Servicio
  • Gestión del Portfolio de Servicios: este proceso encargado de la definición de la cartera o Portfolio de Servicios, incluyendo el Catálogo de Servicios prestados, los servicios retirados y los servicios en preparación, es propio de ITILv3.
Diseño del Servicio
  • Gestión del Catálogo de Servicios: anteriormente un subproceso de la Gestión de Niveles de Servicio, es un nuevo proceso en ITIL v3 responsable del diseño de un Catálogo de Servicios enfocado a las necesidades de los clientes.
  • Gestión de los Proveedores: su principal objetivo es obtener de los proveedores un alto nivel de calidad en su servicio a un precio asequible y adecuado al mercado. En ITIL v2 formaba parte de la Gestión de Niveles de Servicio de los proveedores.
  • Gestión de la Seguridad TI: en ITIL v2 se trataba por separado en un libro específico al respecto
Transición del Servicio
  • Gestión del Conocimiento: este proceso se hallaba subdividido en varios procesos en ITIL v2, como, por ejemplo, mediante la base de datos de errores conocidos en la Gestión de Problemas. En ITIL v3 se ha convertido en un proceso por derecho propio.
  • Validación y Pruebas del Servicio: Este proceso se desgaja en ITIL v3 de la Gestión de Versiones o Gestión del despliegue del Servicio para asegurar que se realizan todas las pruebas para validar el servicio como «adecuado en uso y propósito».
  • Gestión de la Configuración y Activos del Servicio: Amplía la Gestión de la Configuración de ITIL v2 para incorporar activos no TI.
  • Evaluación: exclusivo de ITIL v3, este proceso genérico se ocupa de verificar la relación calidad/precio, el rendimiento y otros parámetros de interés asociados al servicio.
Operación del Servicio
  • Gestión de Peticiones: se desgaja en ITIL v3 de la Gestión de Incidencias, encargándose de gestionar las peticiones de cambio solicitadas por los clientes.
  • Gestión de Eventos: nueva, como tal, en ITIL v3 es la encargada de monitorizar el rendimiento de la infraestructura TI para la prevención de errores o interrupciones en el servicio.
  • Gestión de Accesos: es un nuevo proceso en ITIL v3. En ITIL v2 formaba parte de la Gestión de la Seguridad y se encarga de gestionar los permisos de acceso a los diferentes usuarios de un servicio.
  • Además del Centro de Servicios ITIL v3 introduce nuevas funciones:
  • Gestión de Operaciones TI: responsable del mantenimiento de la infraestructura TI.
  • Gestión Técnica: responsable del soporte técnico a todos los agentes implicados en la Gestión del Servicio.
  • Gestión de Aplicaciones: responsable de la gestión de las aplicaciones de software durante todo su ciclo de vida.
Mejora Continua del Servicio
Sus actividades estaban subsumidas por la Gestión de Niveles de Servicio enITIL v2.
  • Proceso de Mejora CSI: establece los protocolos de monitorización, seguimiento y generación de informes y es, en particular, la responsable de generar los Planes de Mejora del Servicio (SIP).
  • Informes de servicio: genera los informes sobre rendimiento, resultado y calidad de los servicios ofrecidos.