domingo, 20 de diciembre de 2009

Aprendiendo a usar la RAE Online

Resumen del post:

Aprender a consultar una palabra en menos de 5 segundos usando la página oficial de la RAE. Teclear

rae CualquierPalabra

para encontrar el significado de CualquierPalabra.


Torrente de datos:

RAE: Real Academia Española.
Página Oficial: http://www.rae.es
Sitio en Wikipedia: http://es.wikipedia.org/wiki/Real_Academia_Española

Función: Organismo oficial encargado de definir los términos válidos en el idioma español.

Vistazo general:

Al entrar a la página oficial de la RAE veremos un menú y dos buscadores: Diccionario de la lengua< española y Diccionario panhispánico de dudas. Para consultar un término usaremos el primero. El resto del contenido y menús no se abarca aquí y queda a su exploración.

Facilitando el acceso a la RAE

Esto solo está probado en Mozilla Firefox. Para navegadores como Chrome, Safari o Internet Explorer serán procesos similares.


Muchos de nosotros (a veces formo parte de este grupo) tenemos flojera de coger un diccionario y buscar entre sus centenas de páginas para encontrar una palabra que desconocemos, e incluso si el diccionario está cerca a veces la pereza es tan sorprendente que nos hace olvidarnos del tema antes que buscar.

Podemos usar la opción de marcadores de Mozilla Firefox para acceder a la definición oficial de una palabra en menos de 5 segundos (o 10 para los que escriben con los dedos índices como piquitos de pollo).

Recordar que el diccionario que usamos es el Diccionario de la lengua española, y no el Panhispánico de dudas.

Veámoslo explicado:

Para buscar la palabra "desertar", la tecleamos en el cuadro de búsqueda y nos llevará a esta URL:

http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=desertar

Lo que hacemos es guardarla en nuestros marcadores, haciendo click en el menú Marcadores y luego "Agregar esta página a marcadores". En seguida nos aparecerá un cuadro rápido, pero como este cuadro no nos deja manipular el marcador enteramente, simplemente le damos "Terminar".

Después vamos a Marcadores, tipeamos "Organizar marcadores" y en el cuadro de gestión de marcadores que nos aparecerá iremos a "Menú marcadores":



Nos aparecerá nuestra lista de marcadores. Buscaremos el que acabamos de agregar que aparecerá hasta abajo y lo seleccionamos. En la parte inferior veremos una zona con los datos de nuestro marcador. Hacemos click en "Mas" para ver todos.

En el cuadro de Nombre, le damos un nombre para reconocerla en el menú marcadores. Esto no es trivial para el uso que le daremos al marcador ya que no lo buscaremos ni haremos ningún click, solo sirve para reconocerlo dentro de nuestra lista de marcadores.

En la dirección, reemplazamos el texto de búsqueda por la directiva %s

esto

http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=desertar

queda así:

http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=%s

En "Etiquetas" supongo que irá la taxonomía de los marcadores, yo nunca las uso =S

La palabra clave es clave xD, es la que usaremos al momento de tipear el acceso rápido al navegar. Yo uso "rae" porque es lo más lógico y convencional, y a la vez algo simple, corto y descriptivo.

La descripción es opcional y no sé dónde podemos visualizarla; siéntanse libres de ponerla o dejar el campo en blanco. Yo suelo poner una aunque sea corta, solo por complemento.

Al final nos debe quedar algo así, pero con los datos que ustedes han puesto:



Los datos se van guardando y actualizando al momento en que se cambian, así que no hace falta presionar ningún botón "Guardar".


Hasta aquí ya tenemos todo terminado. Para probarlo, abriremos una nueva pestaña y en el cuadro de las URL ponemos ejemplos:

rae desertar
rae cangrejo
rae abducción



Herramientas

En algunas páginas podemos encontrar dos botones, uno azul y uno rojo: Conjugar y Artículo enmendado.



Conjugar nos conduce a una tabla con las conjugaciones del verbo en todos los tiempos, e incluye las diferencias de conjugación que hay entre España, Argentina y el resto de Habla Hispana.

Artículo enmendado nos lleva a la versión nueva del término. Ahora mismo estamos en la Vigésima segunda edición (22a), y lo que veremos es un avance de la 23a. Pero ojo, se llama "avance" porque será oficial, pero aún no lo es, y el término de la 22a puede que vaya a cambiar, pero aún es considerado válido.


Notas y observaciones finales.


  • Es "case insensitive", es decir, que no distingue mayúsculas de minúsculas, por lo que tipear "rae desertar", "Rae DeSertAR" y "RAE DESERTAR" conducirán al mismo resultado.


  • Presionar Ctrl+T para abrir una nueva pestaña hace más rápido el proceso. Se pueden configurar las teclas de acceso en Firefox (Zorra de fuego) por otras.


  • Toma tiempo acostumbrarse, pero con un poco de práctica haremos un buen hábito en nuestra navegación, consultando cualquier palabra en menos de 5 segundos, por lo que los pretextos para escribir como Hoygan acab... disminuyeron.


  • En lo personal, para mí da mal aspecto andar citando a la RAE cada rato para darse la razón. Cuando en una discusión veo que los users se empiezan a quotear y a citar a la RAE para hacer aclaraciones en sus argumentos, es signo de que la discusión ya terminó.




Para cerrar

Un enlace, dentro de la misma RAE, a los hábitos lingüísticos y dudas que muchos de nosotros tenemos y la contestación oficial de la RAE aclarando si son correctos o no.

Ejemplos:

¿Es correcto decir "no vino nadie" en lugar de "no vino alguien"? (doble negación)
¿Se dice "ir por alguien" o "ir a por alguien"?
¿"lo vi ayer" o "le vi ayer"?
¿"los miles de personas" o "las miles de personas"?
¿"chiquillos y chiquillas"?



Fin.

domingo, 29 de noviembre de 2009

Nota rápida: Espacios de nombres en XML

Los espacios de nombres (namespaces) sirven para definir un conjunto de palabras clave en determinada situación (en este caso, dentro de XML). Así, un nodo en XML que se defina <table> sin un espacio de nombres es un nodo cualquiera, pero si usa el espacio de nombres de HTML, indica el inicio de una tabla, y de igual forma si creamos un espacio de nombres propio y lo definimos en un archivo aparte, podemos hacer que signifique lo que queramos.

Ahora mismo estoy diseñando un portal web del que no voy a hablar porque es un proyecto confidencial, y entender lo que voy a explicar me tomó al menos 2 semanas descubrirlo por mí mismo, porque en Internet no encontré suficiente información.

El planteamiento es este: tenemos una web basada en AJAX y queremos que al presionar un botón "Action!" (que es como llamo a mis botones cuando ando testeando algo y necesito un nombre rápido, corto y preciso) aparezca en determinado lugar (ya sea una celda de una tabla, un Div o en medio de un párrafo) cierto código con formato, pongamos de ejemplo que queremos crear un <strong>Holaa!</strong>.

Lo que se les vendrá a la cabeza a algunos es crearlo con la función createElement() del DOM y anexarlo, pero hay que recordar que es un ejemplo, ya que el bloque de código que yo necesito anexar es muy largo y dinámico como para crear una función de JavScript que maneje todos los cambios. De hecho lo creo con una función en PHP que precisamente quiero reutilizar para el caso.

Tenemos ya dos condiciones iniciales: usar la función en PHP que ya dispongo en lugar adaptar una en JavaScript, y que la creación del bloque se haga al instante, sin recargar la página. Hay una tercera condición: no usar innerHTML().

¿Por qué no usar innerHTML()? Por cuatro razones:


  • No es un estándar de la W3C, y yo programo siguiendo estándares porque me parece un excelente trabajo el que están haciendo los chicos del consorcio por la red, y definitivamente pienso respetarlo.

  • No funciona en algunos agentes de usuaio. Al ser propiedad de Microsoft, es posible que haya navegadores que no lo soporten y existan problemas al momento de crear aplicaciones AJAX, y francamente no están obligados a soportarlo.

  • Dentro de poco quedará obsoleto. A pesar de que hay algunos navegadores que lo soportan además del Internet Explorer, la estandarización de la web está orillando a esta función a desaparecer; en el futuro los lenguajes basados en XML (como el mismo XML y XHTML, por ejemplo) no lo reconocerán y no darán soporte a él, delegando su uso solo a los programadores quisquillosos que por alguna noble causa insisten en programar doble código para hacer sus sitios compatibles con todos los navegadores.

  • Otorga poca flexibilidad. innerHTML() es una función que agrega una cadena de texto al código. A diferencia de hace más de una década, el código HTML de una web no es solo un texto que se va leyendo e interpretando, sino que ahora los navegadores cuentan con una interfaz llamada DOM que jerarquiza los elementos de una página web y brinda una API para acceder a ellos (DOM es la API) y manipularlos, permitiendo la creación, modificación y borrado de elementos de una manera muy organizada y práctica. innerHTML inyecta un pedazo de texto para ser leído, pero al ser un String no se anexa al DOM y no podrá ser modificado por su API. Hasta ahora no sé si vaya a necesitar modificar el DOM del bloque de código que estoy anexando pero aún así volvemos al punto uno: me manejo con estándares.



Ya que no vamos a usar innerHTML(), solo nos queda una forma de hacerlo: la correcta: usando appendChild().

Queda así:

abrimos una conexión asincrónica con el servidor y nos preparamos para intercambiar los datos. Después de leer detenidamente sobre los métodos de acceso al servidor y evaluar las necesitades del módulo que estoy programando, decido que GET es la mejor opción:

var Connection = new XMLHttpRequest();
var DatosRecibidos;
const DONE = 4;

function CrearConexion(){
var Connection = new XMLHttpRequest();
Connection.open("GET", "Respuesta.php");
Connection.onreadystatechange = ManipularDatos;
Connection.send();
}

function ManipularDatos(){
if (Connection.readyState == DONE){
DatosRecibidos = Connection.responseXML;
var ItemCell = document.getElementById("MiCelda");

//Si tiene contenido, se lo borramos
if (ItemCell.firstChild) ItemCell.removeChild(ItemCell.firstChild);

//Aquí anexamos
ItemCell.appendChild(DatosRecibidos.childNodes[0]);
}


Lo que en teoría hace esta función es justo lo que necesitamos: conecta correctamente al servidor, accede a la página que genera el bloque de código que necesitamos incluir, lo descarga y lo incluye al código fuente dinámico, es decir que ir a "Ver / Ver código fuente de esta página" no nos conduce a nada, porque nos muestra el código que se generó al cargar la página, pero no contiene el código que se ha creado dinámicamente; para eso tenemos que seleccionar el pedazo de página y con el click derecho escoger "Ver código fuente de esta selección".

Allí podremos ver el bloque de código de la página con el código anexado, pero el pedazo que agregamos estará sin formato. Podemos ver etiquetas de negrita, cursiva, subrayado, texto de colores y al voltear a la página web veremos que en efecto, el texto está formateado. Pero cuando nos ponemos a observar el código que generamos dinámicamente, por más que tenga etiquetas strong, span, div, table, tr/td, lo que se visualizará en el navegador será texto plano sin formato.

Me estuve preguntando más de 2 semanas ¿por qué? y ¿cómo resolverlo? Leí por varios lados pero no encontré nada útil, pues resulta que todos andan usando innerHTML().

Despueś de leer un manual de XML con buena información y hacer docenas de experimentos con mi código en JavaScript, caí en que era cuestión del espacio de nombres de XML.

Para poder anexar código usando appendChild() en lugar de innerHTML() debemos obtener la información con responseXML() en lugar de responseText(), como lo pueden ver en mi código, pero para que responseXML nos devuelva un objeto con la información XML transformada en DOM, la información debe ser un documento XML (es decir, NO texto plano, no HTML, sino XML) que previamente lo debimos haber especificado en PHP con header("Content-Type: text/xml");.

Al recibir información XML, el User Agent la incluyó en el DOM como información XML y ocurrió lo que hablé iniciando el post: las etiquetas table, div, td, etc. que tenía mi código no contaban con un espacio de nombres definido, por lo que para el parser eran etiquetas que yo me había inventado. Se veían en mi código fuente dinámico como si fueran de HTML pero lo cierto es que venían en calidad de visitantes... extranjeros que habían ingresado con pasaporte y VISA.

Una vez que me di cuenta de ello, me tomé unos minutos para re checar en el manual de XML que había leído la correcta inclusión de namespaces. De modo que para que un código pueda ser bien recibido y formateado, debe pasar de un simple:

<strong>Holaa!</strong>


a un estructurado:

<?xml version="1.0" encoding="UTF-8" ?>
<strong xmlns="http://www.w3.org/1999/xhtml">Holaa</strong>


Allí está el espacio de nombres indicado.


Hice este post porque no vi que esto se aclare en ningún manual, espeificación, foro o blog hasta donde consulté, y es un dolor de cabeza no tener idea de qué, quién, por qué, por dónde o por cuándo. Si alguien conoce una manera más sencilla de hacer esta transacción y que siga los estándares, no dude en postear.

sábado, 21 de febrero de 2009

my.cnf

Otro de mis recordatorios para Mai hese kú héleeeeee!"#!"#Sdadsadasdd

Este texto es un extracto de la documentación de MySQL que da una breve explicación del archivo my.cnf, el cual es el archivo de configuración de MySQL (un homónimo de my.ini en windows o algo así). Básicamente es un archivo de configuración.

Fuen....teh!

15.3. Configuración de InnoDB




¿Dónde deben especificarse las opciones en Unix? En Unix, mysqld lee las opciones en los siguientes ficheros, si existen, en el siguiente orden:

  • /etc/my.cnf Opciones globales.

  • $MYSQL_HOME/my.cnf Opciones específicas del servidor.

  • defaults-extra-file El fichero especificado con la opción --defaults-extra-file.

  • ~/.my.cnf Opciones específicas del usuario.


MYSQL_HOME representa una variable de entorno la cual contiene la ruta al directorio que hospeda al fichero específico de servidor my.cnf.

Si se desea estar seguro de que mysqld lee sus opciones únicamente desde un fichero determinado, se puede emplear --defaults-option como la primera opción en la línea de comandos cuando se inicia el servidor:

mysqld --defaults-file=ruta_a_my_cnf



"Te llevaré a donde quieras ir
a una galaxia lejos de aquí
donde ninguno te encontrará
rumbo a la inmensidad"

Mijares


Ahí lo pruebo mañana que ya tengo que dormir.