lunes, 26 de enero de 2015

¿Por qué teclado no está en alfabeto?

La explicación se remonta a las primeras máquinas de escribir, cuando su funcionamiento era mecánico.
Cada vez que se pulsaba una tecla, se movía un pequeño martillo que golpeaba el papel con una cinta impregnada en tinta. La rapidez de los mecanógrafos impedía que estas piezas volvieran a su posición antes de que se activaran las siguientes, lo que ocasionó el colapso del mecanismo.


Para evitarlo, Sholes creó en 1860 una máquina cuya disposición de letras estaba relacionada con su frecuencia de uso. El teclado QWERTY, como lo denominó debido a la secuencia de la primera fila de teclas, evitaba el agarrotamiento.

domingo, 25 de enero de 2015

XML Schemas y Xpath (Parte III)

Xpath

Xpath nos permite seleccionar de un documento XML elementos, atributos, texto, y todo lo relativo al propio documento. En Xpath, los elementos y propiedades se establecen en forma de árbol, como si se tratase de un sistema de archivos unix. Así pues, partiremos de un elemento raíz representado por “/”, y se bajarán niveles poniendo de nuevo “/”. Por ejemplo, para el siguiente documento XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<liga>
  <equipo nombre="Real Madrid" estadio="Santiago Bernabeu">
    <jugador extranjero="no">
      <nombre>Iker Casillas</nombre>
      <posicion>Portero</posicion>
      <edad>28</edad>
      <patrocinador marca="adidas"/>
    </jugador>
    <jugador>
      <!-- Esto es un comentario -->
      <nombre>Xabi Alonso</nombre>
      <posicion>Medio</posicion>
      <edad>27</edad>
      <patrocinador marca="nike"/>
    </jugador>
    <jugador extranjero="si">
      <nombre>Cristiano Ronaldo</nombre>
      <posicion>Delantero</posicion>
      <edad>24</edad>
      <patrocinador marca="nike"/>
    </jugador>
  </equipo>

XML Schemas y Xpath (Parte II)

Los atributos en los Schemas deben definirse al final del elemento en el que se aplican, y en la raíz del propio elemento, siguiendo la siguiente estructura:
           
(Modificado en los ejemplos)
               <xs:element name="marca" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="nombres">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="nombre" maxOccurs="unbounded"></xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="idcode"></xs:attribute>
                    </xs:complexType>
                </xs:element>

Por defecto, la aparición de los atributos no es obligatoria. Este comportamiento puede modificarse mediante:

            <xs:attribute name="idcode" use=”required”></xs:attribute>

Además, los atributos pueden limitar el tipo de contenido. Por ejemplo, el siguiente obligará a que sean valores numéricos:

            <xs:attribute name="idcode" type=”xs:integer”></xs:attribute>

En el siguiente caso, se podrá limitar a una serie de elementos:

                          <xs:attribute name="estado">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                   <xs:enumeration value="precintado"/>
                                   <xs:enumeration value="nuevo"/>
                                   <xs:enumeration value="usado"/>
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:attribute>

En este otro, se limitan los valores numéricos entre 2 rangos 18 y 30 (ambos inclusive):

                          <xs:attribute name="edad">
                            <xs:simpleType>
                              <xs:restriction base="xs:integer">
                                   <xs:minInclusive value="18"/>
                                   <xs:maxInclusive value="30"/>
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:attribute>

O limitarlo en base a un patrón:

       <xs:attribute name="dias">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:pattern value="\d{4}\D{3}"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>

Relaciones de dependencia

XML Schemas y Xpath (Parte I)


Los schemas nos permiten la validación de un documento XML respecto a una normativa que nosotros mismos fijaremos. Así pues, podremos establecer que un documento XML deberá tener una serie de elementos mínimos, unos máximos, con unos atributos determinados, o en un orden determinado.

Un documento XSD (el tipo de extensión empleado por los archivos XML Schemas) comenzará por una estructura como la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"                                         elementFormDefault="qualified">
    <xs:element name="root">
           <xs:complexType>
           </xs:complexType>
    </xs:element>
</xs:schema>

Podemos diferenciar, un primer elemento (root) el cual contendrá el resto de elementos. Esto quiere decir, que nuestro documento XML deberá poseer un primer elemento padre llamado root para validar. A este documento lo llamaremos midocumento.xsd.

El documento que se validará tendrá una estructura como la que se muestra a continuación:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="midocumento.xsd">
            (Contenido)
</root>

Como puede apreciarse, el documento XSD es enlazado en el propio elemento raíz mediante el atributo:

xsi:noNamespaceSchemaLocation="midocumento.xsd"

En el ejemplo anterior, el elemento “root” era de tipo complejo (ya que, como puede verse, posee dentro un “ComplexType”). No obstante, también existen los elementos simples. Las diferencias entre estos son:

Modelo OSI-TCP/IP (Capas)

Modelo OSI o TCP/IP

El modelo usado más comúnmente hoy en día es el modelo TCP/IP, más versátil y fiel a la realidad. Representa una infraestructura de red desde su parte física a la lógica.


Protocolos OSI
Modelo TCP/IP
Capa de aplicación

Capa de presentación
Aplicación
Capa de sesión

Capa de transporte
Transporte
Capa de red
Internet
Capa de enlace de datos
Enlace
Capa física


Modelo OSI

Capa 1: física

En la capa física se definen todos los aspectos relacionados con la utilización del medio físico para la transmisión de la información, así como la interacción física entre este y los distintos dispositivos o/y adaptadores de red.

En esta capa se regulan aspectos como:
     Especificación física de los medios de transmisión.
     Tipos de cableado, su estructuración, especificaciones físicas y las de sus conectores.
     Distribución y regulación del espectro electromagnético para transmisiones sin cables.
     La multiplexación de varias señales a través del mismo canal.

Capa 2: enlace de datos

En la capa de enlace de datos se definen todos los aspectos necesarios para el establecimiento de un enlace lógico fiable entre dos dispositivos conectados a un mismo medio de comunicación.

Los principales aspectos regulados son:
     Garantizar la fiabilidad de la transmisión a través de de un enlace físico determinado:
     La sincronización entre emisor y receptor.
     La estructuración de los datos en tramas, bloques.
     Control de errores.
     Control de flujo.
     Establecimiento de un tamaño mínimo y máximo para la trama.
     Permitir el establecimiento de un enlace lógico entre dispositivos conectados a un mismo medio de comunicación:
     La identificación unívoca de cada uno de los dispositivos conectados al medio o direccionamiento físico.
     El mecanismo de establecimiento de enlaces lógicos.
     Gestión de control de acceso al medio para impedir que las distintas transmisiones se mezclen.
     Identificación del destino de las tramas (descarte, aceptación, conmutación...).

Bloqueo e Interbloqueo en MySql

¿Qué es el modo bloqueo?

El modo bloqueo permite impedir el acceso o modificación a una tabla o una fila por otra solicitud, hasta que la tarea actual haya terminado. Cuando la tarea actual haya terminado, se continuará con la siguiente. Para habilitar el modo de bloqueo, debe usarse el engine InnoDB.

El modo de bloqueo puede ser:
   Compartido: Se permite la lectura, pero no la modificación.
     Exclusivo: No se permite leer ni modificar.

InnoDB permite además granularidad múltiple.Esto quiere decir, que podrá realizarse al mismo tiempo un bloque en un registro, y una tabla entera. Para ello se hace uso de tipos adicionales de bloqueos, como los bloqueos de intención, los cuales pueden ser de:
     Intención compartida: se hace un bloqueo compartido en tuplas individuales.
     Intención exclusiva: se hace un bloqueo de exclusivo en las tuplas.

.Un ejemplo de un bloqueo sería lo siguiente:

 LOCK TABLES real_table WRITE, insert_table WRITE;
 INSERT INTO real_table SELECT * FROM insert_table;
 TRUNCATE TABLE insert_table;

 UNLOCK TABLES;

¿Qué es un interbloqueo?