El nuevo iPhone 4 en sus dos colores.

Después de la presentación del nuevo ‘smartphone’ de Apple este lunes en la WWWDC 2010, la Red se ha ido llenando progresivamente de opiniones sobre el iPhone 4. Algunos internautas se mostraron decepcionados porque, después de la polémica con el ‘iPhone encontrado’ por Gizmodo, no había habido ninguna sorpresa, mientras que otros (en su mayoría partidarios de Android), señalaban que este terminal era más de lo mismo por parte de Apple. Desde hoyTecnología, viendo sus características, estamos convencidos de que el iPhone 4 será otro éxito a apuntar en la trayectoria de los de Cupertino.

El nuevo iPhone 4 en sus dos colores.
 
Qué nos gusta:
– La «pantalla retina» de una resolución de 960×640 píxeles de 3,5 pulgadas, tiene tal concentración de puntos de color por pulgada, que el ojo humano no es capaz de percibirlos.
– La batería, aunque todavía no se pueda reemplazar, barre a todos sus competidores de similares características en horas de conversación y standby (casi las duplica). A pesar de que de momento no podamos hacer un análisis del nuevo iPhone, por lo general, Apple suele ser bastante acertado en cuanto a sus especificaciones de duración de la batería de sus dispositivos.
– Aunque la videollamada no es nada nuevo, el sistema de Facetime se asemeja más a lo que hacemos con una webcam y el ordenador (videoconferencia) que a lo que estamos acostumbrados con el móvil (videollamada). Creo que Apple ha acertado en este aspecto, la videollamada a tenido muy poco éxito entre el público, en cambio, la conferencia vía webcam es bastante popular. Además Skype ya ha anunciado que va a incorporar Facetime para su aplicación en el iPhone.
– La cámara, uno de los puntos negros de los anteriores modelos, ha mejorado mucho gracias a la incorporación del flash LED y, sobre todo , el sensor BSI, que permitirá la grabación de vídeo en HD 720p y su posterior edición con iMovie para iPhone.
– Todas las personas que han tenido el iPhone 4 en la mano han indicado que prorciona sensación de resistente y de alta calidad en sus materiales de fabricación.
Qué no nos gusta:
– La ausencia de conexión miniusb, casi un estándar en los ‘smartphones’, mientras Apple sigue empeñada en usar su propia conexión, igual a la que lanzó con el primer iPod.
– La AppleStore es un sistema cerrado que sólo permite que las aplicaciones se puedan instalar bajo previa autorización de Apple. Nos preocupa que puedan pasar cosas como la que ocurrió hace unos días con Pulse, un lector de feeds hecho por dos universitarios estadounidenses, a los que el diario ‘The New York Times’ ha denunciado por hacer «un uso comercial» de sus contenidos.
– El iPhone 4 es uno de los pocos smartphones que no permite añadir capacidad adicional con memoria externa. Está claro que si los de Cupertino permitiesen esta nueva características, a Apple se le acabaría el modelo de venta de ofrecer dispositivos con diferentes capacidades.
– Para poder usar Facetime hay que estar conectado a una red WiFi. Aunque es comprensible que ésto sea necesario para mantener la calidad del vídeo, pero se podría adaptar al ancho de banda disponible.
En estas líneas hemos analizado los que consideramos los puntos positivos y negativos de la última creación de Steve Jobs pero, como siempre, la decisión está en manos de los usuarios ¿Cambiarán sus antiguos ‘smartphones’ por el iPhone 4 o resistirán a los cantos de sirena de este dispositivo y permanecerán fieles a su teléfono? Sólo el tiempo lo dirá.

Adicionar días/horas/minutos/segundos a fechas en Oracle

Cuando de trabajar con fechas en Oracle se trata, se debe tener en cuenta que la aritmética de fechas en Oracle trabaja en función de un día. Aunque podemos trabajar con cualquier fecha, para hacerlo más fácil realizaré la labor con la pseudo-columna SYSDATE. Si bien sabemos, SYSDATE muestra la fecha y hora actual de sistema, sumando 1 (uno) a SYSDATE se aumentará la fecha y hora actual en un día. Se pueden usar fracciones para añadir horas, minutos o segundos a la fecha:

ALTER SESSION SET nls_date_format = ‘dd-mm-yyyy hh24:mi:ss’; SELECT sysdate,        sysdate + 1,        sysdate + 1/24 FROM dual;
SYSDATE             SYSDATE+1           SYSDATE+1/24
------------------- ------------------- -------------------
18-02-2010 09:26:44 19-02-2010 09:26:44 18-02-2010 10:26:44 
SELECT sysdate,        sysdate + 1/1440,        sysdate + 1/86400 FROM dual;
SYSDATE             SYSDATE+1/1440      SYSDATE+1/86400
------------------- ------------------- -------------------
18-02-2010 09:26:44 18-02-2010 09:27:44 18-02-2010 09:26:45

Algunos ejemplos que pueden servir para aclarar el uso de fracciones, teniendo presente que 1 día = 24 horas = 1440 minutos = 86400 segundos:

Fecha y hora actual sysdate
  Dia siguiente (24 Horas adelante) sysdate + 1
  12 días delante sysdate + 12
  2 Horas adelante sysdate + 2 / 24
  120 Minutos adelante sysdate + 120 / 1440
  15 Segundos adelante sysdate + 15 / 86400
  Día siguiente a las 9 AM TRUNC(sysdate) + 1 + 9/24
  Próximo martes a las 3 PM NEXT_DAY(TRUNC(sysdate), 'TUESDAY') + 15/24
  Ultimo dia del mes a las 10:30 AM LAST_DAY(TRUNC(sysdate)) + 10/24 + 30/1440
  Próximo Martes, Jueves o Domingo a las 8:05 AM TRUNC(LEAST(NEXT_DAY(sysdate, 'TUESDAY'),  NEXT_DAY(sysdate, 'THURSDAY'),  NEXT_DAY(sysdate, 'SUNDAY'))) + 8/24 + 5/1440
Ej.
Adelantar 120 Minutos a la fecha:
 
UPDATE table_name
SET fecha=sysdate + 120 / 1440
where no_orden=num_orden;

Cómo crear un usuario y asignarle permisos en PostgreSQL

Tutorial de PostgreSQL para crear usuarios, crear bases de datos con un usuario específico como propietario y asignación de permisos a una base de datos.

Este nantoturial enseña cómo crear un usuario en el motor de base de datos PostgreSQL, así como crear bases de datos y asignación de permisos a nuevos usuarios.

PostgreSQL es unos de los motores de base de datos más robusto en el mundo de Open Source. Su flexibilidad y estabilidad le hacen una de las mejores alternativas a utilizar.

Algo muy importante en cualquier motor de base de datos son los privilegios de usuarios, veamos a continuación algunas de las opciones posibles.

Abrir un cliente de PostgreSQL

Para poder desarrollar este nanotutorial necesitamos tener disponible una sesión cliente en un servidor PostgreSQL. Para esto debemos iniciar el cliente con el siguiente comando:

psql -U postgres -h localhost -W

Abrir un cliente de PostgreSQL

Si no posees una instalación de PostgreSQL como servidor, te invitamos a que la hagas a través de este nanotutorial: Instalación de PostgreSQL Server.

Crear usuario

Para crear un usuario lo haremos con el siguiente comando:

CREATE USER nanotutoriales PASSWORD 'password';

Crear usuario

Eliminar usuario

Si deseamos eliminar un usuario debemos ejecutar el siguiente comando:

DROP USER nanotutoriales;

Eliminar usuario

ALTER ROLE

El manejo de roles en PostgreSQL permite diferentes configuraciones, entre ellas estan:

  • SUPERUSER/NOSUPERUSER. Super usuario, privilegios para crear bases de datos y usuarios.
  • CREATEDB/NOCREATEDB. Permite crear bases de datos.
  • CREATEROLE/NOCREATEROLE. Permite crear roles.
  • CREATEUSER/NOCREATEUSER. Permite crear usuarios.
  • LOGIN/NOLOGIN. Este atributo hace la diferencia entre un rol y usuario. Ya que el usuario tiene permisos para acceder a la base de datos a traves de un cliente.
  • PASSWORD. Permite alterar la contraseña.
  • VALID UNTIL. Expiración de usuarios.

Para cambiar la configuracion de un usuario o rol debemos ejecutar el siguiente comando.

ALTE ROLE <nombre del rol> WITH <opciones>

Asignar permisos de super usuario a un usuario

El permiso de super usuario es el mas alto. Con este usuario se podrán administrar todos los objetos del motor de base de datos.

Para asignar este privilegio a un rol lo hacemos con el siguiente comando:

ALTER ROLE nanotutoriales WITH SUPERUSER;

Cambiar la contraseña de un usuario

Para cambiar la contraseña de un usuario es necesario ejecutar el siguiente comando:

ALTER ROLE nanotutoriales WITH PASSWORD 'nuevopassword';

Cambiar la contraseña de un usuario

Crear una base de datos con un usuario específico como propietario

Todas las bases de datos que creamos con un usuario que tenga los privilegios CREATEDB automáticamente asignan como propietario al usuario mismo. Si lo que queremos crear es un usuario limitado, la forma de crearlo con una base de datos específica será:

CREATE DATABASE nanotutoriales_website WITH OWNER nanotutoriales;

Crear una base de datos con un usuario específico como propietario

Asignar todos los permisos a un usuario a una base de datos existente

Cuando recien hemos creado un usuario y queremos darle permisos a una base de datos existente, podemos utilizar el siguiente comando:

GRANT ALL PRIVILEGES ON DATABASE nanotutoriales_website TO nanotutoriales;

Asignar todos los permisos a un usuario a una base de datos existente

Fuente

Bases de datos relacionales vs. no relacionales: ¿qué es mejor?

Es muy común entre desarrolladores de aplicaciones encontrarse en una situación de tener que elegir si se va a usar una base de datos relacional o no relacional. La mayoría no se lo piensa demasiado y opta por la opción que más conocen y con la que más cómodos trabajan. Tampoco es una decisión catastrófica; en realidad, ya sea la base de datos relacional o no, se puede construir cualquier cosa.

Vale, entonces, ¿por  qué es importante saber en qué se diferencian y cuál deberíamos usar en cada caso? Pues porque un buen diseño de base de datos con la tecnología apropiada indudablemente aporta calidad al proyecto. Dependiendo de la naturaleza de la aplicación, interesa que la base de datos tenga unas características u otras.

Resultado de imagen para sql vs nosql

Un poco de historia

Las bases de datos relacionales o de lenguaje de consulta SQL se empezaron a usar en los años 80 y a día de hoy siguen siendo la opción más popular. En cambio, las bases de datos no relacionales o de lenguaje de consulta NoSQL solo están empezando a ser más populares en los últimos años. Entre 2012 y 2015, hubo un crecimiento importante en el uso de este tipo de bases de datos. Y aunque desde 2016 su racha se ha quedado un poco estancada, siguen siendo también muy populares.

Bases de datos relacionales

El principio de las bases de datos relacionales se basa en la organización de la información en trozos pequeños, que se relacionan entre ellos mediante la relación de identificadores.

En el ámbito informático se habla mucho de ACID, cuyas siglas vienen de las palabras en inglés: atomicidad, consistencia, aislamiento y durabilidad. Son propiedades que las bases de datos relacionales aportan a los sistemas y les permiten ser más robustos y menos vulnerables ante fallos.

La base de datos relacional más usada y conocida es MySQL junto con Oracle, seguida por SQL Server y PostgreSQL, entre otras.

Bases de datos no relacionales

Como su propio nombre indica, las bases de datos no relacionales son las que, a diferencia de las relacionales, no tienen un identificador que sirva de relación entre un conjunto de datos y otros. Como veremos, la información se organiza normalmente mediante documentos y es muy útil cuando no tenemos un esquema exacto de lo que se va a almacenar.

La indiscutible reina del reciente éxito de las bases de datos no relacionales es MongoDB seguida por RedisElasticsearch y Cassandra.

Formatos

La información puede organizarse en tablas o en documentos. Cuando organizamos información en un Excel, lo hacemos en formato tabla y, cuando los médicos hacen fichas a sus pacientes, están guardando la información en documentos. Lo habitual es que las bases de datos basadas en tablas sean bases de datos relacionales y las basadas en documentos sean no relacionales, pero esto no tiene que ser siempre así. En realidad, una tabla puede transformarse en documentos, cada uno formado por cada fila de la tabla. Solo es una cuestión de visualización.

Formatos: tabla o código

Los dos esquemas de la imagen contienen exactamente la misma información. Lo único que cambia aquí es el formato: cada documento de la figura de la derecha es una fila de la figura de la izquierda.

Se ve más claro en la tabla, ¿verdad? Lo que pasa es que a menudo en una base de datos no relacional una unidad de datos puede llegar a ser demasiado compleja como para plasmarlo en una tabla. Por ejemplo, en el documento JSON de la imagen que se muestra a continuación, al tener elementos jerárquicos, es más difícil plasmarlo en una tabla plana. Una solución sería plasmarlo en varias tablas y, por tanto, necesitar de relaciones.

[
 {
  "student_id":1,
  "age":12,
  "subjects":{
   "mathematics":{
    "scores":[7,8,7,10],
    "final_score":8
   },
   "biology":{
    "scores":[6,6,5,7],
    "final_score":6
   }
  }
 }
]

Esto explica por qué las bases de datos relacionales suelen servirse de tablas y las no relacionales de documentos JSON. En cualquier caso, a día de hoy, las bases de datos más competitivas suelen permitir, de una forma u otra, operaciones de los dos tipos. Por ejemplo, el servicio de base de datos en la nube BigQuery que ofrece Google es, en principio, una base de datos de lenguaje de consulta SQL, por lo que permite fácilmente relacionar varias tablas, pero, a su vez, permite insertar elementos jerárquicos JSON, más propios de bases de datos no relacionales.

La diferencia entre el éxito y el fracaso recae, sobre todo, en el diseño del modelo. Es decir, si se decide que el mejor enfoque es usar una base de datos relacional, no es suficiente con meter la información a lo bruto en una base de datos relacional y esperar a que se relacione sola, porque eso no va a ocurrir. De nada sirve elegir la base de datos más apropiada para nuestro sistema, si luego no se hace un buen diseño.

¿Un poco perdidos? ¡Pasemos a la acción!

Ejemplo práctico: base de datos relacional

Imaginemos que tenemos una plataforma online que ofrece cursos de idiomas. Los clientes contratan o se suscriben al idioma y al nivel que más les puede interesar, y, además, tienen la opción de elegir qué tipo de suscripción quieren: mensual, trimestral o anual. Y dependiendo de esta opción, se les aplicará un descuento u otro.

El primer diseño de base de datos que propongo es una tabla donde cada fila corresponde con un servicio contratado por un cliente. Toda la información está contenida en una sola tabla, por tanto, no es relacional.

fecha cliente idioma nivel suscripción precio descuento_% precio final
25/06/2018 Pedro Inglés Intermedio Mensual 7 0 7
25/06/2018 Pedro Chino Principiante Mensual 9 0 9
01/07/2018 Aurelia Francés Avanzado Anual 8 25 6
03/07/2018 Federico Inglés Intermedio Trimestral 7 10 6.3

Problemas que podemos encontrar con este modelo

  • No sabemos si el Pedro de la primera fila es el mismo cliente que el Pedro de la segunda fila o si son dos clientes con el mismo nombre. Sí, podríamos incluir el e-mail para que haga de identificador único, pero es una solución cogida con pinzas.
  • Si algún precio o descuento cambia, hay que modificarlo en todas las filas en las que aparece y, si no se hace correctamente, puede dar lugar a discrepancias. No tiene sentido que la información esté duplicada de esta manera.
  • Si un cliente cambia su suscripción, habría que cambiar tanto el campo de suscripción como el precio. Y también puede dar lugar a discrepancias si no se hace correctamente.
  • Al tener la columna de “precio final” se está duplicando información, ya que se puede calcular fácilmente con las columnas “precio” y “descuento_%”. Esto también puede dar lugar a discrepancias.
  • No hay manera de saber qué idiomas y niveles hay disponibles, ni cuál es su precio hasta que alguien lo contrate.

¿Cómo solucionamos todos estos problemas?

Parece que esta situación está pidiendo a gritos un diseño de base de datos relacional, donde se recoja la información en varias tablas y no solo en una.

Empezamos con la primera tabla; esta contendrá solamente la información del cliente.

cliente_id nombre_cliente
1 Pedro
2 Aurelia
3 Federico

Por otro lado tenemos la tabla contenedora de las clases disponibles. Cada una con su nivel y precio base.

programa_id idioma nivel precio
1 alemán principiante 7
2 chino principiante 9
3 francés avanzado 8
4 inglés intermedio 7

En esta tabla podemos ver todos los cursos disponibles. En el diseño principal, como nadie se había suscrito al curso de alemán, ni siquiera podíamos saber que existía.

A este precio base luego se descontará un porcentaje, según la suscripción que los clientes elijan.

suscripcion_id tipo descuento_%
1 Mensual 0
2 Trimestral 10
3 Anual 25

Y por último, tenemos la tabla que relaciona todo: a cada cliente con la clase o clases contratadas y el tipo de suscripción.

id cliente_id programa_id suscripcion_id
1 1 4 1
2 1 2 1
3 2 3 3
4 3 4 2

Pedro, que es el cliente con identificador 1, se había suscrito mensualmente (id=1) a inglés intermedio (id=4) y chino principiante (id=2). Por eso, en las dos filas en las que el identificador de cliente “client_id” es 1, el identificador de programa es 4 y 2, y el identificador de suscripción es un 1.

Fijaos también que no hemos apuntado el precio final en ningún lado. No es necesario, ya que, conociendo el precio del programa y el descuento de la suscripción elegida, se puede calcular de inmediato. Y así evitaremos duplicidad y la posibilidad de discrepancias en nuestros datos.

¡Y ya lo tenemos! No es tan difícil, ¿no?

Antes de continuar, os propongo un ejercicio: ¿cómo haríais para incluir la posibilidad de tener cupones de descuento? Pensad que estos cupones son canjeables por cada curso que se contrata y cada uno puede proporcionar un descuento diferente.

Ejemplo práctico: bases de datos no relacionales

Quizá os estéis preguntando “si las bases de datos relacionales son tan prácticas, ¿en qué situaciones es buena idea trabajar con las no relacionales?”.  Si algo tienen de malo las bases de datos relacionales, es que son como Sheldon Cooper, tienen que saber de antemano qué es y cómo es lo que van a almacenar. En cambio, las bases de datos no relacionales son más flexibles, se lo tragan todo, sin importar su estructura.

Imaginemos que hemos mandado unas máquinas al espacio para que nos reporten qué es lo que encuentran en su viaje. Obviamente, no sabemos a ciencia cierta qué se van a encontrar. De alguna forma, tienen una inteligencia artificial instalada que reconoce los objetos con los que se va encontrando y también tienen sensores instalados. Pero no sabemos bien qué miden, ya que cada máquina tiene sensores diferentes. Cada 24 horas envían un resumen de lo que han visto durante el día.

{
 "maquina_id":1,
 "timestamp":149992693000,
 "coordenadas":"75988823.567, 55375867.098, 12676444.311",
 "encontrado":[
  "roca", 
  "agua",
  "roca",
  "roca",
  "algo que parece un animal",
  "roca"
 ],
 "temperatura":{
  "min":-50,
  "max":-49
 },
 "ruido":{
  "min":72,
  "max":4549
 }
}
{
 "maquina_id":2,
 "timestamp":1499925677000,
 "coordenadas":"66635675.920, 78021134.727, 53580995.751",
 "temperatura":{
  "min":-50,
  "max":-49
 },
 "humedad":{
  "min":2%,
  "max":5%
 }
}

Cada uno de estos documentos JSON contiene la información reportada en cada envío por cada máquina. La máquina con identificador 1 está reportando datos de temperatura y ruido, mientras que la de identificador 2 reporta temperatura y humedad. No sabemos qué sensores tendrá instalados la siguiente y, mucho menos, qué y cómo reportarán las máquinas que aún no se han mandado y los ingenieros están montando.

No merece la pena ponerse a diseñar una base de datos relacional para almacenar esta información. En este caso, lo mejor es dejar a una base de datos no relacional que se trague todo lo que las máquinas reportan, tal cual.

Además, la finalidad del sistema es meramente científica y no se contempla la existencia de usuarios a los que se les deba la garantía de consistencia que ofrecen las bases de datos SQL. Simplemente, se quiere almacenar todo para un futuro análisis.

Una vez almacenados en la base de datos no relacional se podrá pedir y visualizar la información de diferentes maneras. Y si en algún momento se necesita consumir los datos de una forma más estructurada, siempre podremos procesar y volcar la información a una base de datos relacional. Pero es que, muy probablemente, no sea necesario.

¿Qué hacer para convertiros en expertos?

Espero que este post haya servido para aclarar algunos conceptos y dudas básicas sobre las diferencias entre las bases de datos relacionales y no relacionales. Pero, indudablemente, como se comprenden de verdad estas cosas es cacharreando, rompiendo y rediseñando (y volviendo a romper) aplicaciones. Solo así podréis convertiros en verdaderos expertos.

Fuente

Cómo calcular el tamaño de una base de datos en Oracle

Con el tiempo las bases de datos de Oracle crecen paulatinamente en tamaño. Dependiendo del tamaño de la organización, el factor de crecimiento puede ser tal que necesitará darse mantenimiento a intervalos periódicos para asegurar suficiente espacio disponible en el servidor y hacer que la base de datos funcione eficientemente. El tamaño de una base de datos Oracle depende de un número de factores. Además de la información, existen archivos temporales y esenciales de control que contienen la estructura de la base de datos. Todos estos son esenciales para el buen funcionamiento.

Paso 1

Incluye los tamaños de los archivos de datos en la búsqueda. El tamaño total incluye tablas, campos, procedimientos almacenados y otros objetos de la base de datos. Calcula el tamaño de la vista «dba_data_files» como sigue:

SELECT SUM(bytes)/1024/1024/1024 data_size from dba_data_files;

Paso 2

Calcula el tamaño de los archivos temporales. Estos almacenan datos durante el procesamiento pero no es permanente. Calcula el tamaño del archivo temporal como sigue:

select nvl(sum(bytes),0)/1024/1024/1024 temp_size from dba_temp_files.

Paso 3

Obtén el tamaño del redo log. Este almacena cualquier cambio en la base de datos antes de ser aplicados en los datos actuales de la base. Esto ofrece una manera de almacenar la base de datos a su estado original previo a un extracto diseñado para modificar cualquier información.

select sum(bytes)/1024/1024/1024 redo_size from sys.v_$log.

Paso 4

Extrae el tamaño del archivo de control usado por Oracle usando la vista V$CONTROLFILE. Esta vista se usa para obtener información del esquema de la base de datos y los objetos contenidos en la misma.

El extracto seleccionado para obtener el tamaño del archivo de control es:

select sum(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024 controlfile_size from v$controlfile

Paso 5

Combina los extractos seleccionados para calcular el tamaño de la base de datos. El resultado corresponde al tamaño total de la base de datos en gigabytes:

select d.data_size+T.temp_size+R.redo_size+C.controlfile_size “Database Size in GB” from ( select sum(bytes)/1024/1024/1024 data_size from dba_data_files) d, ( select nvl(sum(bytes),0)/1024/1024/1024 temp_size from dba_temp_files ) t, ( select sum(bytes)/1024/1024/1024 redo_size from sys.v_$log ) r, ( select sum(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024 controlfile_size from v$controlfile) c;

Esto presentará el tamaño total de la base de datos en el siguiente formato:

Tamaño de la base de datos en GB

Resultado:

149.58765

Notas sobre diagramas de clases y diagramas de secuencias

Diagramas de clases

¿Qué son los diagramas de clase?

Son diagramas para modelar un gráficamente la vista estática del software, en la que se muestran un conjunto de clases, interfaces y las relaciones y colaboraciones que existen entre ellos.

Para que usamos los diagramas de clases

  • Permiten realizar una visualización de las clases a utilizar.
  • Describen los objetos a modelar en el sistema.
  • Permiten mostrar las relaciones entre las clases.

Identificación de clases

  • Identificamos las clases necesitadas en las capas de modelo, vista y controlador.
  • Las clases del modelo son las que representan los datos de la aplicación.
  • Las clases del Controlador son las que representan las reglas de negocio.
  • Las clases de la vista son las que permiten la interacción con el usuario.

Clases de modelo

  • A partir de los casos de uso se identifican los conjuntos de datos que representan la información que va a manejar el sistema.
  • Incluye clases para realizar las conexiones con la base de datos.

Modelo.png

Clases de controlador

  • Son clases que dan funcionalidad al sistema. Esta funcionalidad depende directamente del detalle de los casos de uso.
  • Generalmente son clases que contienen métodos que están relacionados entre si para dar soporte a las acciones identificadas en los casos de uso.

Controlador.png

Clases de vista

  • Son clases que representan la interfaz con el usuario.
  • Pueden ser implementadas a través de HTML, JSP y servlets.

Vista.png

Diagramas de secuencias

¿Qué son los diagramas de secuencias?

Son diagramas que muestran la interacción entre los objetos de las clases como una secuencia de envío de mensajes entre ellos, ordenados en el tiempo.

Para su construcción se parte del detalle de los casos de uso. Para cada flujo normal, alternativo y excepcional de eventos en los casos de uso, se construye un diagrama de secuencia.

Secuencia.png

 

Herramientas para migraciones de bases de datos.

Existen diversos tipos de herramientas para realizar migraciones de bases de datos (Schema migration, database migration, database change management en inglés). Estas herramientas están diseñadas para administrar cambios incrementales y reversibles sobre esquemas de bases de datos relacionales.

Una migración sobre un esquema es realizada siempre que se necesite actualizar o revertir un cambio sobre un esquema de una base de datos relacional.

En este texto, mostraré las herramientas disponibles y de las más oídas para trabajar con migraciones para bases de datos.

Flyway

Herramienta desarrollada para interactuar con Java
Bases de datos soportadas:

  • Oracle
    SQL Server
    SQL Azure
    DB2
    MySQL
    MariaDB
    Google Cloud
    PostgreSQL
    Redshift
    Otras…

Herramientas de Java con las que interactua

  • Maven
    Gradle
    Ant

6 Comandos básicos

  • Migrate
    Clean
    Info
    Validate
    Baseline
    Repair

Liquibase

Herramienta desarrollada para interactuar con Java
Bases de datos soportadas

  • MySQL
    PostgreSQL
    Oracle
    SQL Server
    Sybase
    DB2
    Apache Derby
    Otras

Herramientas Java con las que interactua

  • Maven
    Ant

Muchos comandos dependiendo de lo que se quiera hacer

Datical DB

Sin interacción directa con Java
Bases de datos soportadas

  • Oracle
    DB2
    MySQL
    SQL Server
    PostgreSQL
    Otras

Muchos comandos dependiendo de lo que se quiera hacer. Similar a Liquibase.

Active Record (migrations)

Herramienta hecha con Ruby
Bases de datos soportadas

  • PostgreSQL
    MySQL

Comandos basados en definir cosas en Ruby

Ruckusing-migrations

Herramienta hecha en PHP
Bases de datos soportadas

  • PostgreSQL
    MySQL
    Sqlite

Varios comandos basados en lo que se quiera hacer.

Phinx

Herramienta hecha en PHP
Bases de datos soportadas

  • MySQL
    PostgreSQL
    SQLite
    SQL Server

Varios comandos basados en lo que se quiera hacer.

MyBatis Migrations

Framework de persistencia para Java.
Bases de datos soportadas

  • Cualquiera bajo JDBC

Configuración basada en SQL, Java y XML

Ragtime

Biblioteca para realizar migraciones de datos estructurados hecha en Clojure
Bases de datos soportadas

  • Cualquiera bajo JDBC

Configuración basada en SQL

Lobos

Biblioteca para realizar migraciones de bases de datos escrita en Clojure.
Bases de datos soportadas

  • H2
    MySQL
    PostgreSQL
    SQLite
    SQL Server

Configuración bajo clojure

Ejecución de consultas SQL en org-mode

Una de las cosas por la que me gusta usar org-mode es la posibilidad de usar código fuente de prácticamente cualquier lenguaje en él.

Particularmente hoy estuve haciendo unas pruebas sobre su uso con SQL y PostgreSQL. Para configurarlo hay que agregar las siguientes lineas a nuestro archivo .org:

1
2
3
4
5
:PROPERTIES:
:engine:   postgresql
:cmdline:  database -U user
:exports:  both
:END:

Y lo siguiente es probar que org puede realizar una conexión con la base de datos a simplemente realizando una consulta que va a depender de la estructura de la base de datos a la que queremos conectarnos. En mi caso, mi consulta de prueba sería la siguiente:

1
2
3
4
#+name my-query
#+begin_src sql
select nombre, fecha from public.videojuego limit 1;
# +end_src

La consulta se ejecuta tecleando C-c C-c y eso desplegará resultados como el que muestro a continuación:

1
2
3
4
5
6
| ┌────────┬────────────┐ |
|-------------------------|
| │ nombre │   fecha    │ |
| ├────────┼────────────┤ |
| │ Gears  │ 2015-04-16 │ |
| └────────┴────────────┘ |

Esta consulta la realicé a una de las bases de mis alumnos. Una vez entendido este pequeño ejemplo, lo utilizaré para explicar algunas cosas y manteniendo todas las herramientas que provee org-mode.

Convertir base de Datos de MSSQL SERVER A MYSQL con DBConvert for MSSQL y MySQL


Dos de los Sistemas Administradores de Bases de Datos mas populares en el mundo son sin duda  son Microsoft Sql Server y MySQL, sin duda habrá discrepancias acerca de cual es mejor que el otro, pero aquí no se pretende entrar en esa discusion, puesto que cada herramienta es realmente muy potente.

En este tutorial se pretende mostrar la utilización de dos herramientas que pueden convertir las base de datos ya se de MySQL a MSSQL y viceversa, las herramientas utilizadas son  DBConvert for MSSQL & MySQL y Full Convert Enterprise ((hacer clic en los nombres para descargar versiones trial), lo que haremos es convertir dos base de datos de SQL SERVER 2008 a MYSQL

la Base de Datos de SQL SERVER a convertir para el primer caso es hoteles y se ve en la imagen anterior las tablas y vemos los datos de la tabla habitacion, para poder comprobar luego si la conversión también contempla los datos de las tablas

Bueno ahora si empezamos por DBConvert for MSSQL & MySQL, una vez descargada la version trial ejecutamos el programa

Hacemos clic en trial sino tenemos la clave o algun crack

hacemos clic en next

verificamos que el origen (source) sea MSSQL Database y Destination sea MySQL database y hacemos clic en next

ingresamos el nombre de usuario de sql server y su contraseña si tuviera o seleccionar Windows Authentication si queremos conectarnos con el usuario del Sistema Operativo, seleccionamos la Base de Datos origen y clic en next

escrirbimos el nombre de usuario con el cual nos conectamos a MYSQL y su contraseña si tuviera y seleccionamos a la base de datos donde se migraran los datos o sino escribir el nombre de la base de datos destino para crearla

seleccionamos las tablas a comvertir , o dejamos marcadas todas y hacemos clic en siguiente

hacemos clic en commnit para empezar el proceso de conversion

puesto que tenemos el programa en version trial solo nos permite la conversion de 50 registros por tabla, si quisieramos mas tendriamos que comprar el programa, hacemos clic en aceptar

luego de terminado el proceso haacemos clic en finish

verificamos que la conversión se ha llevado a cabo

Ahora convertiremos la base de Datos SISOPTEC  e SQL SERVER 2008, como vemos en la siguiente imagen

Datos de la tabla Equipo

Ahora si jecutamos el programa si ya lo hemos descargado e instalado

como es una version trial tenemos 30 dias para probarlo

clic en new databse conversion

seleccionamos el motor de base de datos de origen, para este ejemplo SQL Server y seleccionamos los parametros de conexion(server, user, password)

Ahora elegimos el motor de base de datos de destino y los parametros necesarios para la conexion (servidor, usuario, contraseña)

si la base de datos no existe la creara

seleccionamos la tablas que queremos migrar y le damos clic en next

le damos clic en convert para iniciar el proceso de conversión

como es una version trial nos muestra mensaje que nos dice que solo convertira los 50 primeros registros de cada tabla , luego le damos clic en continue

empieza el proceso de conversión

clic en ok

ahora vemos la base de datos que acabamos de migrar , y podemos ver los datos y como vemos la version trial de este programa como solo migra los nombres de las cinco primeras columnas de las tablas

las siguientes salen con el nombre TRIAL_COLUMNS 😦

verificamos en propio mysql , en este ejemplo mediante phpmyadmin de  XAMPP y vemos que realizo la conversion, pero con las restricciones antes mencionadas

Como vemos resulta sencillo convertir base de datos entre MYSQL Y MSSQL con estos dos programas, teniendo como limitaciones las antes mencionadas, pero solo en sus versiones trial

7 Páginas Web absurdas que querrá visitar

¿Creías que ya habías visto todo lo absurdo que existe en Internet? Te retamos a comprobar gracias a estas web que lo inútil no conoce de límites.Web absurdas

El universo de Internet esta cargado de ideas, creatividad y proyectos de todo tipo. Es posible encontrar contenido interesante que nos sea de gran utilidad en nuestro día a día, aunque también hay espacio para las web absurdas para divertirse y pasar el rato. Estas páginas que vamos a recomendar no son de mucha utilidad, pero seguramente te gustará visitarlas.

¿Por qué ibas a querer entrar en alguna de estas web absurdas? El motivo es muy simple, por la curiosidad, la diversión, hacer un poco el payaso y desconectar del estrés diario y la rutina. Te sorprenderá saber lo absurdas que son algunas webs por Internet, siendo esa su seña de identidad y encanto particular. Hemos intentado extraer algunas de ellas, con el ánimo de que no te pasen para nada desapercibidas.

1. HACKERTYPER

Seguro que más de una vez te has quedado con la boca abierta al ver a los hackers que aparecen en las películas de Hollywood, tecleando a toda velocidad en una pantalla en negro con letras en color verde insertando códigos indescifrables. Pues esta es tu oportunidad de aparentar ser un programador experto que conoce a la perfección todos los entresijos de los códigos informáticos. Por supuesto que se trata de una web absurda, pero en Hackertyper podrás simular ser un interesante programador que está intentando conseguir introducirse en los sistemas más complejos.

Web absurda hackertype

Nada más entrar en la web aparece la pantalla en negro, y solo tienes que teclear para que vaya saliendo el código en verde flúor, de manera que va a parecer totalmente real. Si quieres además sorprender, solo tienes que pulsar la tecla Alt.

2. SWARM

Si te apetece realmente desconectar de todo para dejar tu mente en blanco, es posible que con esta web absurda lo consigas. Le puedes dar muchas interpretaciones, como que la energía está en movimiento y tu la centras en un solo lugar. Es algo así lo que puedes hacer, ya que aparecen como cientos de peces, larvas, gusanos o como lo quieras llamar, y donde dejes el cursor del ratón ahí será donde se concentren y vayan todos, como si estuvieras dándoles de comer.

swarm

Swarm es una experiencia que te recomendamos que pruebes si quieres dejar de pensar y solo atender a lo que ocurre mientras mueves el cursor del ratón. Es posible que incluso te ayude a relajarte, compruébalo por ti mismo.

3. THEUSELESSWEB

Si te interesa mucho este mundo de las web absurdas y no quieres estar investigando ni buscando de un lado a otro para acceder a ellas, te presentamos la web Theuselessweb que de forma aleatoria te va llevando a diferentes web que son realmente absurdas. Para ver cómo funciona, solo tienes que hacer clic en el botón que pone PLEASE, de forma inmediata aparecerás en una web absurda que seguramente te sorprenderá.

Web absurdas

Lo interesante, es que puedes probar las veces que quieras y descubrir así multitud de web absurdas, y más de una te acabará atrapando. ¿Habrá algún limite de web absurdas? Ya puedes comprobarlo.

4. CAT-BOUNCE

Si crees que ya habías visto todo lo absurdo que se puede ver en Internet, te mostramos algo más. A la mayoría nos gustan los gatitos y sabemos de sus cualidades para saltar de un lado a otro, en esta web los podrás ver rebotar sin parar de un sitio a otro. Además, haz la prueba de hacer clic en alguno de ellos y soltarlo donde quieras para que siga rebotando.

Otra de las sorpresas que incorpora la web Cat-bounce absurda es la lluvia de estos felinos. Al pulsar el botón MAKE IT RAIN comprobarás lo que sucede.

5. POINTERPOINTER

Una de las cualidades que tiene lo absurdo es que siempre es capaz de sorprender. Aunque creas que ya lo has visto todo siempre algo que jamás te habrías imaginado. Te proponemos esta web que está basada en imágenes, donde quiera que pongas el puntero del ratón habrá una imagen con un dedo que apunta justo ahí.

pointerpointer

Pointerpointer es una auténtica declaración de cómo podemos invertir nuestro tiempo en cosas totalmente inútiles, pero aún así parece que nos merece la pena.

6. RANDOMCOLOUR

Es cierto eso de que lo absurdo no conoce límites, en Internet hay muchas personas que se esfuerzan para ser originales y hacer cosas que resulten totalmente inútiles. Randomcolour es precisamente eso, color aleatorio. Al cargar la web te muestra un color y cada vez que la cargues el color será diferente apareciendo de forma aleatoria. ¿Te animas a adivinar el color que te saldrá? Una web perfecta para perder el tiempo y distraerte sin que tengas que pensar en nada más.

7. KOALASTOTHEMAX

Para terminar con esta selección de las web más absurdas de Internet, lo hacemos con koalastothemax. Es otra de animalitos y tendrás que descubrir porqué. Se trata de una idea original e inquietante porque no sabes lo que va a ocurrir con tanta división de círculos. Al principio aparece un círculo y conforme vas pasando el ratón se van dividiendo sin que parezca que haya fin. Te animamos a que pruebes a pasarlo sin parar lo más rápido que puedas a ver lo que sucede.

koalastothemax

Los círculos se van dividiendo sin parar dejando un fondo que te sorprenderá. Lo más curioso, es que los resultados serán diferentes cada vez que lo hagas. Sin duda, es una forma bastante curiosa para entretenerse sin tener que pensar absolutamente en nada.

Estas webs te garantizamos que cumplen a la perfección con ser absolutamente inútiles. Son absurdas y aunque te pueda parecer extraño, es posible que te veas entrando más de una vez en ellas una vez que las has descubierto.  Como verás puedes encontrar todo lo que te propongas en Internet, ya que es un mundo repleto de utilidades con webs que nos ayudan en nuestro día a día en multitud de tareas, y también un lugar para conocer lo más absurdo que jamás habríamos imaginado.

35 motores de Bases de Datos Open Source

Fantástico el artículo que han preparado en WebResourcesDepot en el cual nos hablan de las grandes posibilidades que tenemos a la hora de elegir un motor de base de datos en el terreno Open Source.

Como indican en el artículo, probablemente conozcáis las principales alternativas (algunas de ellas comerciales):

Como indican en ese texto, es normal que dichas opciones estén tan extendidas: están muy bien documentadas, hay una gran comunidad de usuarios detrás de todas ellas y están muy integradas con la mayoría de CMS del mercado, además de estar disponibles en las principales empresas de hosting. Pero hay todo un mundo de posibilidades que va más allá de esas opciones.

Lo demuestra el citado artículo, del que simplemente haré una adaptación y que os recomiendo visitar. Las 35 alternativas Open Source en este terreno son las siguientes, y antes de nada, permitidme que me disculpe por la traducción. No estoy familiarizado con muchos de los términos que se manejan en el artículo, así que puede que haya metido la pata en alguna descripción:

MongoDB

Es una base de datos Open Source de gran rendimiento, escalable, schema-free (creo que esto se refiere a que no es una base de datos relacional convencional, aunque no estoy del todo seguro) y orientada a documentos (esquemas de datos tipo JSON). Hay drivers preparados para usar esta base de datos desde lenguajes como PHP, Python, Perl, Ruby, JavaScript, C++ y muchos más.

 

Hypertable

Hypertable es un sistema de almacenamiento distribuido de datos de alto rendimiento diseñado para soportar aplicaciones que requieran máximo rendimiento, escalabilidad y eficiencia. Se ha diseñado y modelado a partir del proyecto BigTable de Google y se enfoca sobre todo a conjuntos de datos de gran escala.

Apache CouchDB

Como en el caso de MongoDB, este proyecto está destinado a ofrecer una base de datos orientada a documentos que se pueden consultar o indexar en modo MapReduce usando JavaScript. CouchDB ofrece una API JSON RESTful a la que se puede acceder desde cualquier entorno que soporte peticiones HTTP.

 

 

Neo4j

Es un motor de persistencia completamente transaccional en Java que almacena los datos mediante grafos, y no mediante tablas. Neo4j ofrece una escalabilidad masiva. Puede manejar grafos de varios miles de millones de nodos/relaciones/propiedades en una única máquina, y se puede escalar a lo largo de múltiples máquinas.

 

 

Riak

Riak es una base de datos ideal para aplicaciones web y combina:

  • Una tienda con un valor clave descentralizado
  • Un motor map/reduce flexible
  • Una interfaz de consultas HTTP/JSPN amigable.

Oracle Berkeley DB

Se trata de un motor de bases de datos embebidas que proporciona a los desarrolladores persistencia local, rápida y eficiente con una administración nula. Oracle Berkeley DB es una librería que se enlaza directamente en nuestras aplicaciones y permite realizar llamadas simples a funciones en lugar de enviar mensajes a un servidor remoto para mejorar el rendimiento.

Apache Cassandra

Cassandra es probablemente uno de los proyectos NoSQL más concoidos del mercado. Se trata de una base de datos distribuida de segunda generación con alta escalabilidad que está siendo usada por gigantes como Facebook (que es quien la ha desarrollado), Digg, Twitter, Cisco y más empresas. El objetivo es ofrecer un entorno consistente, tolerante a fallos y de alta disponibilidad a la hora de almacenar datos.

Memcached

Memcached es un almacen del tipo in-memory key-value para pequeñas cadenas de datos arbitrarios (textos, objetos) de resultados de llamadas a base de datos, llamadas a API, o renderizado de páginas. Está orientado a acelerar aplicaciones web dinámicas al aliviar la carga de la base de datos.

 

Firebird

Firebird -no confundir con Firefox- es una base de datos relacional que puede ser utilizada en Linux, Windows y varias plataformas UNIX, y ofrece un alto rendimiento y potente soporte de lenguajes para procedimientos almacenados y triggers.

Redis

Redis es una base de datos avanzada del tipo fast key-value  que está escrita en C y quese puede usar como memcached, por delante de una base de datos tradicional, o bien por sí sola de forma independiente. Tiene soporte para varios lenguajes de programación y se utiliza en proyectos muy populares como GitHub o Engine Yard. También hay un cliente PHP llamado Rediska que permite gestionar bases de datos Redis.

HBase

HBase es u almaceén distribuido del tipo column-oriented que puede ser también denominado como la base de datos Hadoop. El proyecto está dirigido a ofrecer tablas enormes de “miles de millones de filas, y millones de columnas”. Dispone de un gateway RESTful que soporta XML, Protobug y opciones de codificación binaria de datos.

 

 

Keyspace

Se trata de un almacén del tipo key-value con replicación consistente y que funciona sobre sistemas operativos Windows. Keyspace ofrece una alta disponibilidad al enmascarar los fallos de servidor y red y al aparecer como un único servicio de alta disponibilidad.

 

4store

4store es un motor de almacenamiento de bases de datos y de consultas que mantiene datos en formato RDF. Está escrito en ANSI C99, está diseñado para funcionar en sistemas UNIX y ofrece una plataforma de alto rendimiento, escalable y estable.

 

 

 

 

MariaDB

MariaDB es una rama compatible hacia atrás de MySQL® Database Server. Incluye soporte para la mayoría de los motores de almacenamiento Open Source, y además para el propio motor de almacenamiento Maria.

 

 

 

Drizzle

Es un fork de MySQL que se centra en ser una base de datos eficiente y estable, sobre todo optimizada para aplicaciones de Internet y que siguen la filosofía Cloud Computing.

 

 

 

 

HyperSQL

Es un motor de bases de datos relacionales SQL escrito en Java. HyperSQL ofrece un pequeño pero veloz motor de bases de datos que dispone de tablas in-memory y basadas en disco, y que soporta los modos embebido y servidor. Además, dispone de herramientas como una consola de comandos SQL y una interfaz gráfica para las consultas.

MonetDB

MonetDB es un sistema de bases de datos para aplicaciones de alto rendimiento dirigidas a la minería de datos, OAP, GIS, búsquedas XML, y recolección de información a partir de ficheros de texto y multimedia.

 

Persevere

Es un motor de almacenamiento de objetos y un servidor de aplicaciones (ejecutándose en Java/Rhino) que ofrece almacenamiento de datos dinámicos JSON para el desarrollo rápido de aplicaciones de Internet orientadas a datos y basadas en JavaScript.

 

 

 

eXist-db

eXist-db está desarrollada a través de la tecnología XML. Almacena datos CML según el modelo de datos de este estándar, y se caracteriza por un procesado eficiente y basado en índices de XQuery.

 

Otras alternativas

Fuentes

Fuentes Original

Facebook y sus problemas de bases de datos

De acuer­do al pio­ne­ro de bases de datos, Mi­chael Sto­ne­bra­ker, Fa­ce­book opera una gi­gan­tes­ca im­ple­men­ta­ción de MySQL, equi­va­len­te, según sus pa­la­bras, “a un des­tino peor que la muer­te“, y la única ma­ne­ra de salir de este pro­ble­ma es “re­es­cri­bir­lo todo de nuevo“. Cabe de­cir­se que no es un error ne­ce­sa­ria­men­te de Fa­ce­book. Sto­ne­bra­ker dice que el pre­di­ca­men­to de la red so­cial es comín a todos los inicios en la web que em­pie­zan casi de cero y que cre­cen a pro­por­cio­nes épi­cas.

Du­ran­te una en­tre­vis­ta esta se­ma­na, Sto­ne­bra­ker ex­pli­có que Fa­ce­book ha di­vi­di­do la base de datos MySQL en 4000 frag­men­tos, para poder ma­ne­jar la can­ti­dad ma­si­va de datos y que está ac­tual­men­te co­rrien­do 9000 ins­tan­cias (en me­mo­ria caché), para poder li­diar con el nú­me­ro de transac­cio­nes que la base de datos debe ser­vir. Y aun­que hay que co­rro­bo­rar estos nú­me­ros con Fa­ce­book, es evi­den­te que no hay mis­te­rios en la his­to­ria de Fa­ce­book con MySQL. SigueLeyendo…