miércoles, abril 29, 2009

Introducción a .NET.

¿Que es .NET?

.Net es la nueva plataforma de desarrollo que ha lanzado al mercado MicroSoft, y en la que ha estado trabajado durante los últimos años. Sin duda alguna va a ser uno de los entornos de desarrollo que reinen durante los proximos años.

¿Entonces .NET es un lenguaje de programación?, No. Es mucho más que eso, Microsoft .NET es un conjunto de tecnologías de software , compuesto de varios lenguajes de programación que se ejecutan bajo el .NET Framework. Es además un entorno completamente orientado a objetos y que es capaz de ejecutarse bajo cualquier plataforma.

Vamos por partes. Podriamos dividir el entorno .NET en las siguientes partes:

  • .NET Framework, que es el entorno de trabajo de la plataforma .NET y que la engloba completamente. Toda la plataforma .NET forma parte de .NET framework.
  • Lenguajes .NET. Destacan C# y VB.NET,y recientemente J#, aunque existen más lenguajes y con toda seguridad surgirán nuevos.
  • El Common Runtime Language CRL, que es el motor de ejecución común a todos los lenguajes .NET.
  • MSIL, Microsoft Intermedial language, es el lenguaje intermedio al que compilan las apliaciones (Asemmblies) .NET. Este lenguaje intermedio es interpretado por el CRL en tiempo de ejecución.
  • CLS, common Language Specification, que engloban las pautas que deben cumplir los lenguajes .NET. Es está característica la que va a permitir a otras compañias producir lenguajes compatibles con .NET.
  • ADO.NET, es la nueva interfaz de bases de datos. No se trata de una evolución de ADO, sino que se trata de una interfaz completamente nueva.
  • ASP.NET, es la nueva tecnología para páginas web dinámicas completamente integrada dentro del entorno .NET. Representa una autentica revolución en el desarrollo Web (Internet e Intranet).
  • Biblioteca de clases .NET, es el conjunto de clases que componen el .NET framework y que nos permiten realizar casi cualquier tarea de una manera facil y rápida.

Domotica y el fantastico protocolo X10


  • SEGURIDAD Y FACILIDAD AL ALCANCE DE TU VOZ

protocolo x10: Lo que quiero decir es de verdad funcion XD, ya he instalado una serie de dispositivos PLC liksys de la manufactura de cisco una de las empresas mas grande del mundo en el area de redes y telecomunicaciones.


Bueno basicamente domotica es la unión de las palabras domus (que significa casa en latin) y tica (de automática, palabra en griego, 'que funciona por sí sola'). Se entiende por domótica al conjunto de sistemas capaces de automatizar una casa o apartamento, aportando servicios de gestión energética, seguridad, bienestar y comunicación, y que pueden estar integrados por medio de redes interiores y exteriores de comunicación, cableadas o inalámbricas, y cuyo control goza de cierta ubicuidad, desde dentro y fuera del hogar. Se podría definir como la integración de la tecnología en el diseño inteligente de un recinto.


En pocas palabras puedes dar ordenes a tu casa por comando de Voz, abriendo una paginas web en tu computador o simplemente haciendo unna llamada, instalando dispositivos de alto rendimiendo, ademas por su uso de PLC que te permite formar una red por medio de tu cableado electrico dando super velocidades

  
Que puedo hacer ?


  • Apagado general de todas las luces de la vivienda

  • Automatización del apagado/ encendido en cada punto de luz

  • Regulación de la iluminación según el nivel de luminosidad ambiente

  • Automatización de todos los distintos sistemas/ instalaciones / equipos dotándolos de control eficiente y de fácil manejo

  • Integración del portero al teléfono, o del videoportero al televisor

  • Control vía Internet

  • Gestión Multimedia y del ocio electrónicos

Qué utilidades puede tener la casa domótica en nuestro despertar?


  • Con la instalación domótica el individuo de la casa puede programas sus mandos de forma que cada mañana se realicen unas operaciones concretas, que le ayudarán a comenzar el día.
  • Se puede programar por ejemplo, que a primera hora se encienda la radio para irnos despertándonos con ese sonido, y que progresivamente vayan subiéndose las persianas, que el baño se vaya preparando para darnos nuestra primera ducha del día, y que en la cocina, por ejemplo, se prepare el café y las tostadas.
  • Los aparatos podrán ir poniéndose en marcha según a la hora que los hayamos programado, así, dejando un intervalo de tiempo entre cada uno, podremos comenzar la rutina diaria con todos nuestros elementos imprescindibles preparados.
  • El aparato que suele utilizarse para encender y apagar luces, y conectar o desconectar la radio y televisión, es el programador X-10 (es más sencillo porque no requiere obras en su instalación domótica, pero cualquier otro serviría).
  • Asimismo, los encendidos y apagados de calefacción también se pueden controlar introduciendo una programación horaria, para que se active a una hora concreta.

¿Y por la noche?

Edificios bajo control domótico

Lo más útil es programar la bajada de persianas, el riego automático del jardín, y apagar el resto de aparatos eléctricos (radio, TV, equipo de música, ...). También se pueden activar las alarmas de seguridad que conectan con los centros de control en caso de detectar intrusos en el hogar.

Por la noche es de gran interés la instalación eléctrica que se activa al detectar calor humano. De esta forma, tenemos las luces apagadas y si precisamos ir al baño, las luces se van encendiendo progresivamente (habitación, pasillo, baño...), sin necesidad de ir activando con el mando una a una. Con este método se ahorra energía, porque solo se enciende la luz de la habitación donde nos encontramos.

Asimismo, destaca la opción de tener conectado un control que detecta posibles anomalías en nuestro cuerpo durante la noche, activándose y conectándose con emergencias (por teleasistencia), para conseguir ayuda.


Domotica ayuda a enfermos!!

Bueno por aqui les dejo alguito que les podria interesar o motivar en algol como lo hiso conmigo


Una de las principales acciones consiste en tener al usuario localizado a través de un chip, que se le implanta en la ropa y los zapatos ("porque el enfermo de alzheimer u otra enfermedad parecida que se desnuda no suele descalzarse") o como brazalete ergonómico.Esta tecnología no sólo localiza la situación exacta, como otros del mercado, sino que tiene una precisión de 40 centímetros y discrimina en tres dimensiones qué se encuentra realizando en cada instante. "Sabemos las 24 horas si está sentado en una mesa, tumbado, caído en el suelo o delante de una puerta. Permite actuar con inmediatez ante emergencias porque detecta cualquier comportamiento extraño", indica el presidente

La domótica ofrece al usuario una mejor calidad de vida, con menor gasto tanto de dinero (al ahorrar energía en la realización de tareas) como de tiempo (ya que su utilización es sencilla y ágil).

Los mecanismos para utilizar los sistemas integrados en la vivienda son de fácil utilización, pasando desde una pantalla táctil, a mensajes de voz o a través de Internet. Otra de sus ventajas es que nos ofrece mayor seguridad en caso de accidentes o incidentes dentro del hogar, ya que si hubiera un incendio o fuga de gas en el domicilio, el sistema nos avisaría telefónicamente para cortar el suministro afectado.

Las personas con discapacidad o personas mayores con problemas de movilidad dan la bienvenida a la vivienda domótica, ya que les ayuda en una gran parte de sus tareas cotidianas.

En personas con problemas degenerativos el hogar inteligente les brinda la opción de poder ir usando sus opciones de forma progresiva, a medida que vayan perdiendo su movilidad o autonomía, y de esta forma, su vida podrá seguir de forma autónoma con estos apoyos.

En el caso de personas con discapacidad lo esencial que les ofrece la domótica son los sistemas de control de entorno cuya finalidad es controlar elementos del entorno doméstico y laboral.

Una persona con movilidad reducida o con otras discapacidades puede encender sus aparatos electrónicos bien por voz, bien por mandos a distancia, o pueden realizar llamadas de emergencia o activar sus servicios de alarma si lo necesitan. En casos de movilidad reducida severa incluso hay aparatos habilitados para levantarse de la cama, acceder a la ducha, mandos para abrir puertas, etc.

Equipo de control del entorno

Todos los mecanismos y componentes, tecnologías e interfaces necesarios para poner a punto un edificio domótico se basan en lo que se llama "diseño para todos", que es en conclusión, un tipo de diseño y desarrollo tecnológico que permite que las diversas ayudas y mandos de la nueva instalación puedan ser utilizados por todo tipo de personas, tanto con discapacidad como sin ella, independientemente de sus cualidades o limitaciones.





Incrementar rendimiento de BBDD con "Particionado de Tablas"

Con la aparición de la versión 5.1 de MySQL, se incluyó en éste el particionado de tablas (algo que en PostgreSQL ya existía hace tiempo enlace) por lo que me he animado a escribir sobre el tema.
El particionado de tablas es una técnica que se usa para reducir la cantidad de lecturas físicas a la base de datos cuando ejecutamos consultas, existen dos principales modalidades de particionado:

  • Horizontal: Esta modalidad consiste en tener varias tablas con las mismas columnas en cada una de ellas y distribuir la cantidad de registros en estas tablas (generalmente se particiona separando la data por años, meses, etc). Ej: Tenemos tres tablas registro2001, registro2002 y registro2003 y en cada tabla guardamos los registros de los años correspondientes, esto nos garantiza un incremento considerable cuando realicemos consultas sobre las tablas ya que la data estará distribuida en tres partes y ya sabríamos dependiendo del año en cual tabla buscar.

  • Vertical: Esta modalidad generalmente la aplicamos en nuestros diseños de BBDD sin darnos cuenta, por ejemplo cuando tenemos una columna de tipo BLOB con una fotografía o un texto muy largo que no leemos frecuentemente y decidimos ponerla en otra tabla referenciandola con la clave foránea.

Ahora bien, el particionado horizontal es el que vamos a comentar, ya que el problema radica en como hacer para que nuestras aplicaciones sepan en que tabla guardar el registro dependiendo del año (porque obviamente no le vamos a agregar esas condiciones a nuestra aplicación), esto se logra agregando una serie de sentencias y condiciones en la definición de las tablas.
En los siguientes enlaces se muestra como hacerlo: MySQL y PostgreSQL
En el ejemplo mostrado de MySQL se puede observar la gran diferencia con dos tablas que tienen exactamente la misma data (8 millones de registros) una sin particionar y la otra particionada por años, al realizar una consulta filtrando por la columna en la cual se basó el particionado se obtuvieron los siguientes resultados:
  • Tabla sin particionado: 38.30 segundos
  • Tabla con particionado: 0.34 segundos
¡Asombroso nooo!

jueves, abril 23, 2009

¿Java, PHP o .Net (VB.Net/C#)?

Hoy en día estos 3 son considerados como "Los Grandes" y yo pienso que hay razón en decirlo, aprender uno de estos es una de las cosas que debemos hacer si queremos estar al día por unos 5 años más en el mundo del desarrollo de software, ahora bien, siempre nos planteamos la pregunta ¿cuál de ellos?, a lo que respondo como siempre lo hago: "depende!".
En mi opinión, sería ideal conocerlos todos y enfocarnos en uno o dos, ya que pienso que todos tienen sus ventajas, desventajas y propósitos diferentes:

  • PHP: Está diseñado para la programación web, en lo que es definitivamente uno de los lenguajes más utilizados en su área (por no decir el más utilizado), es rápido, versátil, multiplataforma, libre, gratis.

  • Java: es un lenguaje de propósito general (desktop, web, movil, etc), bien tipado, robusto, excelentes IDEs, muchísimos framewors, multiplataforma, gratis, libre.

  • .NET (VB.Net / C#):Multipropósito, no es multiplataforma (aunque el proyecto MONO está bastante avanzado, lo que nos permite usar C# u otros lenguajes en otras plataforma), bastantes frameworks, pocos IDEs la mayoría propietarios.

Cualquiera por el que se inclinen sumará bastantes puntos en su currículo y además garantizará su valor en el mercado actual, aunque viendo las características de cada uno, pienso que java lleva una ventaja significativa. Veamos un ejemplo:

Tenemos que desarrollar una aplicación web que gestione una agenda de contactos para ser usada por el departamento de ventas, por lo que decidimos -debido a la sencillez- del asunto usar PHP, realizamos el software y el personal del departamento antes mencionado empieza a utilizarlo. Con el pasar del tiempo la empresa crece, se crean nuevos departamentos e ingresa más personal, por lo que la demanda de la aplicación aumenta y sale un nuevo requerimiento: “El nuevo departamento de RRHH necesita acceder a la aplicación desde una interfaz Desktop (no veo la razón del porque esto, pero creanme que me ha pasado)”.

Viendo este requerimiento, y con la decisión que tomamos anteriormente nos vemos en la necesidad de realizar una nueva aplicación desktop que se conecte a la BBDD.

Si la opción seleccionada anteriormente hubiese sido Java o .Net, y asumiendo que la arquitectura de la aplicación está hecha en capas (como debe ser), la parte de la lógica de negocios la tuviéramos aislada de la presentación web, así como el acceso a los datos, por lo que sólo nos tocaría construir las nueva interfaz desktop. ;)

Metodologías ágiles de desarrollo

Siempre ha sido un dilema qué metodología seleccionar para comenzar un proyecto de desarrollo de software, ya que son tantas la variedades que es una ardua tarea seleccionar la apropiada, y en la mayoría de los casos después de iniciado el proyecto nos damos cuenta que no seleccionamos la adecuada. Desde hace muchos años he oído hablar de UML, casos de uso, diagramas de secuencias, RUP, etc, etc y es importante mencionar que una cosa es la metodología(s) para el seguimiento/realización del proyecto y otra cosa es la metodología(s) y/o arquitectura de la aplicación/producto a realizar porque al principio solemos confundir esto.

Al inicio de mi carrera, cometí los errores que todos cometemos como por ejemplo desarrollar sobre la marcha sin ninguna metodología de seguimiento y control, sin las herramientas necesarias para ello, con el tiempo uno empieza a indagar y sobretodo a “googlear” y empieza a seleccionar metodologías o esquemas de trabajo que formalizan todo este proceso de seguimiento, pero son ¿adecuadas estás técnicas que seleccionamos?.

El desarrollo de software moderno implica rapidez y precisión, por lo que ciertas metodologías están quedando atrás en esta carrera (RUP, EUP, RAD, etc.), ya que implican un grado tan estricto de cumplimiento de actividades que finalmente toma más tiempo realizar actividades de la gestión del proyecto que del proyecto como tal. En este sentido han surgido otros mecanismos, metodologías, patrones, etc. denominados “ágiles” (AUP, XP, Scrum, etc.) en donde los pincipios básicos estan expuestos sobre el siguiente manifiesto.

Si decidimos utilizar una metodología ágil o las estamos usando desde hace poco, recomiendo seguir al pie de la letra los pasos o procedimientos de dicha metodología y cuando se tenga un nivel de uso más elevado empezar a optimizar estos procedimientos o pasos para ir ajustandolos a nuestras necesidades y así evitaremos un posible desastre en el proyecto.

Mi experiencia con los DBMS

Hace algunos años empecé a trabajar con DBMS, como mucho de ustedes empecé mi mundo en la informática bajo plataformas propietarias, lo que a mi modo de ver me limitó mucho el aprendizaje, en aquellos años desarrollaba en lenguaje Basic con un IDE de Microsoft por lo que el primer "DBMS" (si se puede llamar DBMS) que utilicé fue el que ofrecen en el paquete de ofimática Office llamado Access, con el paso de los años y los requerimientos de los desarrollos, me ví en la necesidad de empezar a utilizar otros manejadores (gracias a dios!) como por ejemplo MySQL, PostgreSQL, SQL Server y Oracle, pero siempre alguien y hasta uno mismo en determinado momento se pregunta: ¿Cuál es mejor?

Primero que nada, pienso que este tipo de preguntas están relacionadas al modelo de negocios al que nos han llevado las empresas que venden software propietario, porque particularmente pienso que cada software puede ser muy bueno en determinados casos y muy malo para otros, pero de todos modos aqui expondré unas características que he observado en cada uno de ellos (ojo: es mi humilde opinión)

  • MySQL: primero que nada es Sofware Libre, por tanto es gratis, ya esto supone una gran ventaja para la gran mayoría, por otro lado es multiplataforma lo que nos permite utilizarlo en un sistema operativo libre y ahorrarnos muchísimo dinero en costos de licencia para servidores. Muy bueno en los casos de alojar páginas web con CMS y todo ese tipo de casos, ya que es excelente al manejar data que cambia con poca frecuencia, ya que fue destinado para realizar muchas consultas más no para inserciones y/o actualizaciones, en su versión 5 se incluyeron disparadores y procedimientos almacenados pero aún no están completamente bien implementados, administración sencilla.
  • PostgreSQL: al igual que MySQL es libre y multiplataforma. Muy estable, en sus últimas versiones han mejorado el rendimiento, ya que anteriormente comparado con MySQL las pruebas arrojaban un mejor rendimiento de MySQL, full soporte de disparadores y procedimientos, administración sencilla.
  • SQL Server: Es propietario y sólo puede ejecutarse en plataformas Windows, las licencias se venden tomando en cuenta cantidad de procesadores, cantidad de estaciones a conectar, etc. el hecho de estar disponible sólo para Windows no sólo nos incrementa los gastos sino que nos deja a merced de la poca estabilidad que nos ofrece este SO, administración sencilla, lo he utilizado para pequeñas cosas pero sinceramente teniendo MySQL y PostgreSQL no veo porque pagar por ese producto.
  • Oracle: Es propietario y multiplataforma, no sé muy bien como funciona el licenciamiento. Muy estable y extensible, compleja administración.
En definitiva pienso que si vamos a montar una página web CMS, foro, chat, etc... elegiría MySQL y para sistemas medianamente importantes, críticos, etc usaría PostgreSQL ¿y ustedes que opinan?