Si nos paramos a pensar dos de las grandes tecnología de desarrollo, .NET y J2EE, tienen como pilar fundamental, la orientación a objetos. Muchas de los entes, y demás cosillas, que nos encontramos en los frameworks de trabajo son objetos y existe un diseño orientado a objetos ( que en muchos casos cuesta más de un disgusto en la carrera). Incluso los más avanzados (arquitectos y otras criaturas del mundo del desarrollo) aplican diseño de patrones para manejar dichos objetos.
Es decir, tenemos un diseño O.O. digamos unas cuantas clases, que durante la ejecució de nuestro programa, se van a instanciar en objetos concretos, que contendrán y manipularan información, información que se perderá si no lo almacenamos en algún sitio. Normalmente, este sitio será la bbdd, y necesitaremos de un gestor de bbdd, que guardará la información en tablas, quizá siguiendo algún esquema del modelo relacional. Pero claro, nuestro objeto en memoria, a veces complejo, necesitará ir a filas concretas de tablas concretas.
Hemos oido que una capa de acceso a datos, una dll, con las funciones concretas para acceder a los datos podría ayudar a establecer un mapa, entre los objetos relacionales de la bbdd y los objetos del entorno de ejecución. Esta historia nos suena (funciones del tipo GetAmigo_by_Nombre(), que seguramente ejecutarán comandos de la bbdd, igual hasta sentencias sql,.... ). Ahora bien,...
Existen mecanismos que podrían reducir el gap que se produce entre las entidades que manejarían nuestro negocio y la información que almacenamos. El concepto es el de persistencia nativa. Hoy voy a recomendaros el motor DB40, http://www.db4o.com.

Ilustración 1. Desde db40.com
Db4O nos independiza del motor de bbdd, es en sí mismo un motor de bbdd, en realidad permite almacenar objetos de manera nativa:
ObjectContainer db = Db4o.openFile("ElFicheroAmigos.yap");
Amigo a = new Amigo("Pepe", "Calle la patata");
db.set(engine);
db.commit();
db.close();
Por supuesto, un amigo, puede tener una clase dirección, e incluso una lista de juegos preferidos. Todo sólo haciendo un simple using. Con un delegado podemos crear predicados así a pelo, y podremos recuperar amigos de esta manera.
IList<Student> students = db.Query<Student>(delegate(Amigo el_amigo){
return el_amigo.Age < 20
&& el_amigo.TieneAmigas;
}
);
Sí así recuperaríamos la lista de amigos de menos de 20 que tienen amigas, siempre que TieneAmigas sea de tipo bool claro. Toda una lista de objetos en un abrir y cerrar de ojos, ni linq, ni nada de nada. Más fácil parece imposible.
Aún quedan muchas cosas por descubrir sobre este motor, con el que ando trabajando. Claro siempre hay detractores, esto es experimental,… ya veremos el tiempo de programación que ahorra.
El día que empecé con lo del scorm y lo del pfdf, no
sabía que iba a llegar. Pero al final llegó!
Llegó el último día en Albacete,
que alguno tenía que ser. Después de casi un mes de despedidas, llegó el día.
Sí ya sé que muchos no os lo creíais pero al final todo llega.
El caso es que sólo me queda despedirme de mi etapa en Symbiait, a la que dejo justo en su
nacimiento, y por supuesto de mi etapa en el famoso i3a de Albacete, ese
edificio con el que los primeros días das envidia a los compañeros del
informática de la carrera, por eso de que te dan una tarjeta para abrir las
puertas.
Gracias a todos, porque sobre todo me lo he pasado bien, muy
bien. Creo que me llevo un buen recuerdo de todos vosotros. Que sepáis que
después de todo incluso me caéis bien.
Dejamos el lado oscuro de la sala del louise,
desde aquí hemos sido los amos vigilando el cogote de los demás. Por ello un
saludo a Sebas y Aurelio, que me han acompañado desde el principio.
Quería despedirme de aquellos que me ayudaron desde el
principio en mi andadura por los pasillos y salas del i3a Vicente,
Raúl (… pero gañán…), Paz, Fernando, José Carlos, Pedrito y los
condensadores (ánimo con tu blog, que yo prometo seguirte) , Luis y, sobre
todo, Teresa!
En fin sólo queda despedirme de aquellos que son del grupo
louise y que han compartido el trabajo conmigo Gayud,
Victor, Hector, Jesús, Habib, Richard y Alicia. Seguro que echan el
jaleo que armamos todos los días en su laboratorio.
Bueno un recuerdo para Raúl, Miguel
Jimenez, Javi, Pedro, Ramón y Aurelio
que empezaron conmigo el camino de .NET.
Y finalmente desearle mucha suerte a los que empiezan nuevos, y a los que
emprenden aventura con Symbiait, seguro que todo va ir muy bien, un abrazo para
Magán, Miguel, Thempra, Jonás, JD, Fernando, Nacho y
Sebas. Que os sea leve.
Genéricos C#: Clases, métodos,
delegados, predicados,...
Una de las
mejoras de .NetFramework que encontramos en .net son los tipos genéricos.
Nosotros podemos definir nuestras propias clases, ahora pensemos en que
necesitemos clases que van a contener atributos de los que no conocemos sus
tipos hasta que no los creamos. Una clase genérica o parametrizada podría
permitirme este tipo de diseño. Es muy útil para crear contenedores de datos y
por esto el .netframework ofrece todo un repertorio de clases genéricas como
listas, diccionarios,...
Así por
ejemplo tenemos la posibilidad de crear listas de cualquier cosa:
Puedo hacer
List<int> numerosPrimitiva = new
List<int>();
y también
List<Enemigo> listaNegra = new
List<Enemigo>();
Las listas
son una clase genérica (que encapsula arrays y algo más, así como muchas cosas
para manipular arrays). De la misma forma podemos crear estructuras del mismo
tipo. Como he dicho antes, muy útiles para generar contenedores de datos. Por
ejemplo para los que empezáis a estudiar las estructuras de datos ( un montón
de créditos ) una manera elegante de crear un Nodo de información podría ser
una clase genérica:
//Nodo de árbol binario
public class
Nodo<T>
{
public T dato;
public Nodo<T> hijoIzquierdo;
public Nodo<T>
hijoDerecho;
public Nodo(T _dato)
{
dato =
_dato;
}
}
Y ahora
podríamos hacer cosas como Nodo<int> = new Nodo<int>(5), y con el mismo código podemos hacer Nodo<Amigo> nodo= new
Nodo<Amigo>(new Amigo()); Pero claro, además si hacemos algo como public Class Enemigo : Amigo {...}, pudríamos hacer Nodo<Amigo> nodo = new
Nodo<Amigo>(new Enemigo()); Vamos que incluso haciendo uso de clases abstractas
puedo no sólo generalizar lo que va a contener mi clase genérica sino que
además puedo hacer que lo que contenga sea también genérico.
Con las
clases genéricas conseguimos evitar dos problemas, que el compilador tenga que
hacer boxing de elementos al tipo Object, en nuestro caso deberíamos
implementar fuciones de conversión del dato desde un Object, public Nodo
(Object obj) {…} y de Object a cualquier otro tipo, mejorando así el
rendimiento y el segundo problema que evitamos es el de seguridad, dado que una
vez que nuestro dato sea Object, no hay manera de saber en tiempo de
compilación qué contiene dicho dato, o por lo menos no es tarea del compilador.
Después de unas semanas de "vacaciones" retomo mi rutina periodísca con una opinión que pretende abrir debate, así que espero que aparzcan más post que sigan la discusión.
Con los frios del invierno introduciremos los fundamentos de WPF para novatos como yo, para llegar a silverligth. Lo más nuevo para trabajar en el nivel de presentación. Microsoft nos da herramientas para facilitarnos el trabajo en el desarrollo de aplicaciones a todos los niveles, acceso a datos, negocio,... Faltaban cosas para el nivel de presentación de nuestros sistemas de información (vale,... ya sé que tenemos los diseñadores de Forms del Visual Studio, pero...)
Aquí lo tenemos se llama WPF, y nos permitirá centrarnos en todos los aspectos de diseño gráfico de la aplicación. Y con el añadido de contar con una herramienta Silverligth (y otras más de diseño gráfico Expresion,...) que permitiría un trabajo avanzado con gráficos. Claro muchos opinarán que Flash ya ofrecía algo así,...
Sin embargo, y esa es mi opinión, Flash tiene como lenguaje Action Script, mientras que WPF tiene como code-behind C#,VB,C++,... o sea cualquier lenguaje que tira del .NETFRAMEWORK con todas las posibilidades que este framework ofrece,... Esto significa que no hay que aprender una nueva manera de programar, sino que podemos usar todo nuestro sistema con una nueva interfaz gráfica que lo hará más bonito y que separará claramente el lenguaje gráfico del código de nuestro sistema.
De esta manera haciendo uso de WPF y las herramientas asociadas, desde los primeros conceptos de programación podremos hacer programas más vistos, con interfaces gráficas, todo lo originales que queramos,...
El Hola Mundo será otra cosa.
Todos queremos ver qué es eso de WPF, WCF, WWF, y todo esto,... también lo del linq,... que por cierto ya estaba inventado, no es nuevo y ya lo comentaremso entero. El caso es que o bien instalamos las extensiones de visual studio 2005 o bien la beta 2 de orcas (Standar, Profesional, Team,...)
El caso es que si intentamos instalarlo produce un error, muchas veces justo al intentar instalar el componente Web Designer,...
Después de intentarlo unas cuantas veces, al final logré instalarlo, para ello, lo que hice fue desinstalar todo lo que tuviese que ver que el .net framework, desde el SQL SERVER EXPRESS, el sql management express,... y todo lo que tenga que ver con MS OFFICCE 2007, incluido el propio office 2007.
Aunque según lo que pude ver en Thinking.net (página muy recomendable, donde comentaban este problema) no hace falta desinstalarlo todo, proponen desinstalar el Designer (para los que trabajan con sharepoint), el componente que microsoft que pasa de word a pdf ó psx, el livewriter,... y por supuesto el .netframework y la documentación del msdn 2005.
Como he dicho antes, yo desistalé todo lo que tiene que ver con el visual estudio express que tenía, (Framework, vs, MSDE (sqlexpres), MSDN 2005 (documentacion), MSXML, y algunos paquetes de idioma, que aún no sé para que sirven. Había desistalado el designer, pero se vé que se quedan algunos componentes del office 2007, así que desistalé el office 2007 y el livewriter. Y al fin, YA TENGO EL ORCAS. Ahora vamos con las W...
Good Luck!
Pretendo vivir en la frotera entre Tech y Develoment. Así que inicio un pequeño viaje por el mundo de las aplicaciones web, con tecnología asp.net. Pero nada más iniciar el viaje me topo con las distintas formas de guardar información de o para los usuarios en aplicaciones web (de esto hablaremos en post sucesivos en una explicación más formal). Resulta que en realidad si entendemos que toda aplicación es un flujo de información, ésta es fundamental para el usuario, que no sabe del trasiego entre su navegador y el servidor. De la manera que tratemos cómo resolver el problema de la información en un medio donde el servidor cada vez que devuelve una petición al navegador (ya como formato html, para no complicar la cosa...) pues va y la olvida. Si hacemos otra petición, tenemos que recuperar tódo lo que mostrábamos y devolverselo (y en muchas ocasiones en realidad la mayoría de la información no cambia, parece un engorro). El caso es que este es el pequeño gran problema de la navegación web, un dialogo entre los tontos navegador y servidor, que puede dejar frito al mejor Hardware Servidor.
Así que para ver hasta donde llegan tus aplicaciones web, pues lo mejor es que uses una herramienta que simula peticiones al servidor. MS Web Application Stress Tool es una pequeña herramienta que simula miles de peticiones a un servidor y te muestra resultados, por ejemplo el tiempo de respuesta. Así cuando aprendamos cómo hacer aplicaciones ASP.NET, podremos optimizarlas, para que muchos cuando tengamos muchos usuarios no muera.
La virtualización está de moda, si queremos probar un nuevo tipo de servidor, o alguna nueva Beta de cualquier producto nuevo, nos ofrecen máquinas virtuales con el producto ya instalado y listo para probar.
De alguna manera Virtualizar significa poder ejecutar varios y distintos sistemas operativos a la vez, usando una máquina como anfitrión. Pero cómo nos podemos crear este tipo de máquinas. Hasta ahora el producto estrella era VMWARE (versiones de la 5 en adelante), sin embargo micrososf también a sacado el su producto, Microsoft Virtual PC Server. Con estos productos tenemos la opción de crear máquinas virtuales con las características que queramos (siempre que no superemos las características del ordenador anfitrion). No sólo aprovechamos mejor los recursos de nuestra máquina, dado que podemos optimizar el rendimiento de nuestra cpu, valor no siempre utilizado al 100%, sino manejar la seguridad de las máquinas virtuales desde el propio software de virtualización. Además cabe destacar la gran cantidad de máquinas vmware linux que podemos encontrar en http://www.vmware.com/vmtn/appliances/directory/cat/45, la comunidad vmware.
Pero debemos mencionar un nuevo producto de virtualización, versatil y gratuito VIRTUALBOX, de la empresa alemana innotek. Como decímos hoy por hoy es ofrece más posibilidades que el producto de microsoft dado que permite trabajar con máquinas virtuales guest de tipo linux, windows y macos. Y a pesar de que no existe una versión para vista, fuenciona en este sistema operativo, incluso permite instalar un vista como sistema invitado.
En www.virtualbox.org os podeís bajar el software y un completo manual de usuario. Cuenta con una comunidad de foros para que la gente pueda preguntar sus dudas.
En siguientes post comentaremos más posibilidades que nos da la virtualización de sistemas y sus posibilidades en entornos empresariales.
Al principio fue el nombre, de dominio, claro. Eso ocurría en el reino de Torto, un viejo pc con un Windows 2003 Server r2, para los que no leyeron el post anterior. En nuetro camino hacia una instalación de Sharepoint y su configuración, necesitamos adquirir muchos conceptos propios del campo que mircrosoft denomina Tech.
En concreto Sharepoint, necesita de una infraestructura de red para su existencia, vamos uno o varios servidores que soporten las aplicaciones que Sharepoint supone, aplicaciones web se entiende. Pero no quiero adelantar nada de lo que Sharepoint es porque antes que la modernidad estaba la edad media así que vamos a ver algunos conceptos Tech que me han llevado a una curiosa situación, el estudiar el concepto del Dominio según Microsoft.
Al principio no es que fuera un nombre, al principio fue un cable que conecto una máquina con otra, y un invento (hub, switch ,…) que a modo de ladrón de corriente, me conectaba no sólo una máquina con otra, sino dos, o tres o más máquina,… así, se hizo una net. Ahora bien, todo esto estaba muy bien, pero para qué queríamos la red, es decir, tenemos una tecnología que seguro sirve para algo. La clave estaba en almacenar ficheros con registros que en ocasiones tienen sentido (y en otras muchas veces, no), en algunas máquinas y, claro, desde otras máquinas poder consultar estos ficheros. Además había que evitar al curioso que quiere saber para qué vale eso de ordenadores en red, y al curioso que quiere saber qué hay en esos ficheros. Al mismo tiempo los hijos del primer hub se multiplicaron y los ordenadores no paraban de conectarse a la red, de manera que en poco el sistema para saber quién es quién en la red (el ordenador uno es el número 1, el ordenador dos es el número 2, …, anda una impresora!) dejo de ser lógico para ser caótico.
Ahora sí, el DOMINIO fue una idea que se le ocurrió a un becario de la universidad de Berkeley, pero esto no lo sabe nadie. El caso es que este ser inteligente dijo vamos a ponerles nombre en cristiano (cristiano americano, por lo que los de la península y los de Bilbao no nos enteramos mucho así que interpretamos, que es otra opción), las máquinas dejaban de llamarse 1, 2, 3,… para convertirse en títulos de nobleza, Servidor de la UCLA para datos de Alumnos.edu (edu debió ser el becario), pero claro había que agrupar ordenadores y poner nombres más cortitos porque si no uno al final no se enteraba si estaba accediendo al fichero que yo quería en el ordenador que yo quería o ese fichero era el de configuración de una impresora. El caso es que se agrupó y ahí nació el Dominio. Dominio como concepto, porque luego cada cual hizo de dominio lo que quiso. Con este concepto surgieron enseguida otros conceptos (por eso de fomentar la investigación y reunirse en congresos en donde dan cafés de catering algunos un poco aguados y fríos) y surgió el concepto de DIRECTORIO, que era el almacén de la información que queríamos compartir. Y los grupos de investigación inventaron los servidores de nombres de dominio (DNS) un sistema de nombrar a todos los ordenadores por nombres sin que todos tengamos que saber el número que identifica un nombre (esto es porque como lo del becario no gustaba, se hizo pero se dejaron los numeritos de cada ordenador…) .
Microsoft estaba hecha un lio, así que cogió todo y dijo: Sea Active Directory, y así fue, que implementa el concepto de dominio, que permite, por tanto, hacer que los ordenadores se sumen al dominio o se hagan miembros o vasallos o cualquier relación de membresía, para poder compartir información entre ellos, que un único administrador diga quién y para qué se puede conectar un ordenador y que un guardia nos diga quién inicia sesión y quién no. Bueno pues esto es Active Directory. Un almacén de datos que permite centralizar la manera de acceder a información que está distribuida (bueno y también servicios), este almacén es el directorio, y la información que guardamos es de usuarios, grupos y máquinas, y por supuesto controlamos los recursos de esas máquinas (servicios e información). Todo queda muy organizadito en una base de datos de objetos (usuarios, grupos y máquinas) jerárquica, es decir, y se puede agrupar de manera lógica en Unidades organizativas (ejemplo: si mi dominio es basoa.org, podría tener dos divisiones o unidades organizativas basoa.org/tesoreros, basoa.org/comerciantes, y organizar usuarios y grupos que pertenezcan a esas dos unidades).
Claro a cada uno de los miembros de un dominio va a tener un nombre, y como Microsoft se había metido en el berenjenal del DNS (elegante pero berenjenal) pues se dijo, yo le doy un nombre, el que me salga, a cada uno de los objetos de mi directorio (SID) y luego voy creando sistemas de nombrado que para cada nombre del esquema de cada sistema me de mi SID, que de ese si controlo. El caso es que yo puedo tener un usuario que se llama adimen, del dominio basoa.org, pues podré llamarlo como adimen@basoa.org caso de la nomenclatura DNS, y el mismo llamarse basoa /adimen caso de la nomenclatura NETBios esto es legal. Un único id, el SID, y varios sistemas de nombrado y localización (DNS, NETBios,…) . Para darle un nombre al dominio ( baso.org) usaremos el esquema de DNS, que ya hemos comentado y un servidor de DNS que nos proporciona Windows. Hala ya lo tenemos todo.
Bueno la cosa no es tan sencilla, puesto que dentro de un dominio podemos hacer agrupaciones distintas a las de las unidades organizativas, los subdominios, a lo que Microsoft ha llamado árboles (por ejemplo en lugar de las unidades organizativas tesoreros y comerciantes podemos tener subdominios de basoa.org, tesoreros.basoa.org y comerciantes.basoa.org), estableciendo restricciones a los objetos (usuarios, grupos y máquinas) de un subdominio para acceder a otro, a esto se le llama relaciones (y las hay de muchos tipos, de yo confío en ti, pero tú en mi no, todos confiamos en todos, si yo confío en ti, tú confías en él, yo confío en él,… menudo culebrón). También podemos establecer relaciones de confianza (a todo,esto se llaman trust) entre dominios distintos. A este concepto se le llama bosque. Por ejemplo podemos establecer relaciones entre basoa.org y el domino ohiana.org (son dos dominios distintos pero podemos hacer que los usuarios de uno accedan a los recursos de otro, si establecemos algún tipo de relación, en este caso los dos dominios, formarían un bosque.)
Claro el concepto de dominio supone agrupar ordenadores bajo un nombre, pero quién controla todo eso. La información está distribuida, es decir, los recursos y servicios que nos da cada máquina se distribuye en el domino, la máquina que tiene el recurso la comparte (o no) con los ordenadores del dominio, pero hay un ordenador que controla qué máquina es miembro del dominio y qué maquina no lo es, y qué usuarios tienen acceso a qué máquinas y de qué manera, y qué recursos pueden compartir y cuáles no. Esta máquina es el Controlador de dominio. Así un administrador desde una máquina puede implementar toda la política de una empresa, como una combinación de máquinas que tenemos, servicios y recursos que esas máquinas ofrecen, usuarios que acceden a esas máquinas y permisos que les podemos conceder, de manera individual o por grupos.
¿Cómo se hace todo esto? Pues aparentemente fácil, necesitamos un Windows 2003 server y hacer que esa máquina sea un Controlador de Dominio, para lo caul necesitamos un servidor dns (aunque la herramienta que nos ayuda a instalar AD, en nuestro dns, que sí que no viene por defecto, ni el dns y el ad), y una partición aparte para guardar todos archivos relativos al dns. Para llegar a todo ello, sólo tenemos que ejecutar la herramienta en línea de comandos DCPROMO y seguir el wizard que nos guía, pero MUCHO CUIDADO, porque una vez que hemos dicho que una máquina sea controladora de un dominio, no lo podemos cambiar y la única salida que tenemos es formaterarla.
En los siguientes post, voy a contar mis aventuras para montar una estructura de dominio, con máquinas que pertenecen a ese dominio y usuarios que pertenecen a esas máquinas, y maneras de compartir recursos y servicios. Así describiremos algunos servicios interesantes y necesarios, y quizá podamos compartir algún truco que nos facilite el camino hacia una estructura de Sharepoint.
Quizás aún no tenga ninguna experiencia de todos aquellos seres que habitan bajo la protección del universo Microsoft Tech Net. Sin embargo un cierto espíritu aventurero me obliga a adentrarme en el misterioso bosque de los conceptos Tech. Así intentaremos conquistar el producto más completo de MS desde WNT, Sharepoint.
Pero antes de desvelar los misterios de esa montaña mágica, quizás deberíamos ponernos en situación y saber que requeriremos muchos conocimientos tech que vamos a ir desvelando post a post, acercándonos a las cuevas de los administradores de sistemas, fascinantes personajes dedicados a velar por nuestro trabajo, o mejor dicho, porque este transcienda de nuestro trabajo y transcienda quizás en algún dvd o site, y no un alma inconsistente de ceros y unos en nuestros humildes y débiles discos duros. Los administradores pueden ser nuestros guías en el viaje a través de dicho bosque, usuarios, grupos, dominios, dns, iis, ... y todo el laberinto de pestañas avanzadas y acertijos con los que estos pequeños seres se entretienen en su escondida pero fascinante vida.
Para ello nuestro bosque de robles Basoa (un humilde linksys, el ente 1), teje una net para tres grandes reinos que comparten bosque. La diosa Eguzki, domina el gran reino Sun, gran reino que tiene por vasallos otros dos grandes reinos el del dios Lurra y Mari. Otro de los grandes reinos el de torta, venerable cuidador y legislador de todo lo que en el Basoa acontece, en este reino viven los personajes CD, AD y DNS. Otros personajes se acercan a este bosque para compartir experiencias, historias y comerciar con todos estos personajes que vamos a ir describiendo, es ejemplo el viajero basajuan que se encargará de recoger historias para contároslas al reino de los mortales.
Así con todo, iremos explicando la historia del basoa empezando por principio, y al principio, no fue torta, porque hubo más cosas que suponen retornar a remotos y arcaicos tiempos que son parte de leyenda y no de Sistema. En nuestro camino hacia el sharepoint, vamos a cruzar por el reino de Torta: controlador de dominio y servicios de dns y AD, para qué sirve, qué dudamos, qué pertenece a la leyenda y qué sabemos que es real. Seguidamente pasaremos al concepto de granja, puesto que Sharepoint puede vivir en grandes granjas y serán Lurra y Mari quienes nos introduzcan en el concepto, para dar paso a una pregunta que personalemte me inquieta, es lo mismo cluster nlb y arquitectura de granja, y qué es una granja de sharepoint. A partir de ahí vamos a ir avanzar hacia sharepoint, los wss3.0 y el Moss, daremos un paseo por las opiniones de grandes gurús.
Sharepoint supone un fascinante camino que emprendemos con este post. Hay muchos caminos que llevan a Sharepoint y cada skill, arquitectos, developers, i-workers y demás fauna, les van a interesar diferentes aspectos del mismo.