Segunda oportunidad en examen  
Entrar   |   Registro ]
Inicio   |   Eventos   |   Foros   |   Galerías   |   Recursos   |   Directorio   |   Planeta  



Gente de la Comunidad TJ.NET


En una aplicación donde usas ADO.NET Entity Framework como acceso a datos, en el paso donde se agrega una entidad nueva en el proyecto y se usa autenticación de SQL Server, siempre se nos pregunta si almacenaremos la información de conexión en el archivo de configuración o si la pasaremos por medio de la aplicación:

click para ver más grande

Esta es la mejor práctica, seleccionar "No, exclude sensitive data from the connection string. I will set it in my application" que palabras más, palabras menos, significa algo así como "No, excluir datos sensibles de la cadena de conexión. La asignaré desde mi aplicación". Y es que en un mundo ideal tu aplicación se ejecutará desde un entorno donde la máquina pertenezca a un directorio activo (Active Directory) con todas las credenciales dadas desde Windows para evitar errores y malentendidos. Pero en el mundo real esto no siempre es así y quizás en la misma PC donde se ejecutará la aplicación varios usuarios con distintos tipos de perfil usarán la aplicación por lo que debes pedir sus nombres de usuario y contraseña de SQL Server para acceder al programa. Entonces ¿cómo cambiamos los datos de la cadena de conexión?

Supongamos que tenemos una forma de Login con dos cajas de texto para el usuario y contraseña y estos se leen en unas variables sUser y sPass respectivamente, vamos a tener esto:

 

NorthwindEntities ne = new NorthwindEntities();

SqlConnectionStringBuilder sb =
new SqlConnectionStringBuilder(
((EntityConnection)ne.Connection).StoreConnection.ConnectionString
);
sb.IntegratedSecurity = false;
sb.UserID = sUser;
sb.Password = sPass;

((EntityConnection)ne.Connection).StoreConnection.ConnectionString = sb.ConnectionString;

 

NorthwindEntities es como nombramos el modelo de datos desde el Entity Data Model Wizard. Y aquí inicializamos la conexión auxiliándonos de la clase SqlConnectionStringBuilder para mayor comodidad. Después de eso, simplemente lo asignamos por medio del ConnectionString. Toma en cuenta los castings de los que hacemos uso con (EntityConnection) para poder tener acceso a la propiedad StoreConnection que es donde la propiedad ConnectionString está disponible y que podemos actualizar.

Basado en ADO.NET Entity Framework: Modify EntityConnection connection string values at runtime



Gracias a una invitación de Jesús Bosch de la Universitat Oberta de Catalunya tuve el privilegio de presentarles este tema. Desgraciadamente una metida de pata mía impidió que la plática fuera en vivo, pero aquí lo que pude rescatar de esa memorable mañana de sábado lluvioso.

 

ADO.NET Entity Framework en pocos pasos from Gabriel Flores on Vimeo.

Presentación para la UOC.

http://uoc.dotnetclubs.com

 



Ya tenemos la fecha de cuando se libera a mercado nuestro producto favorito. Sera el próximo 12 de Mayo del 2010 cuando Microsoft realice el lanzamiento de SharePoint 2010 y Office 2010, en esta dirección podrás encontrar los detalles.

Si SharePoint 2007 fue popular ahora SharePoint 2010 será arrasador.



[Actualización, 10 de Marzo] El curso si se va a llevar a cabo el día 20 de Marzo en el Cesun Universidad, Campus Morelos, de 9am a 6pm en Av. Cucapah *Sur # 20100* Fracc. El Lago.

Los interesados en asistir por favor pongan su comentario en el post de @stanmx sobre el curso, ya que a esas personas Stan les hará llegar la información de pago del curso, recuerden que ese dinero es para la compra de comida y bebidas para el curso, por lo tanto es importante que quienes deseen ir paguen cuanto antes para comprar las cosas con anticipación, cualquier duda sobre el pago Stan les puede ayudar.

Adicionalmente la gente de TekPub fue amable de regalarnos una subscripción a la serie de video de Ruby On Rails, la cual cuenta con 10 videos de 1 hora aproximadamente, cubriendo diferentes aspectos de RoR.
La subscripción se le regalara, en una mecánica por definir, a alguno de los asistentes de curso.

[Actualización, 8 Marzo] Es muy probable que el curso se lleve a cabo el día 20 de Marzo en el Cesun Universidad, Campus Morelos. En cuanto este confirmado se les hará saber.

Después de un par de meses de que @stanmx me estuviese dando lata comentara sobre su interés de un curso de Ruby On Rails, decidimos hacer el ejercicio de ver si había interés entre los desarrolladores de la ciudad, y el ejercicio fue bueno, actualmente hay alrededor de 12 personas que levantaron la mano.

Entrando en detalles del curso, actualmente estamos viendo quien nos puede facilitar un espacio para al menos unas 15 personas, de preferencia que tenga acceso a Internet y que podamos hacer uso de un proyector, obviamente también buscamos un lugar donde nos puedan abrir un sábado y estar ahí entre 10 y 12 horas.

El curso no es gratuito, pero tampoco es lucrativo, se pide una cooperación de $250.00 pesos, lo que incluye el curso y bebidas/alimentos/botanas durante la realización del mismo.

Pre-requisitos para el curso
Contestando a preguntas directas que me han realizado, sobre que se necesita a para poder atender el curso, aquí les dejo la siguiente información.

  • Llevar su propia computadora, de preferencia laptop
  • Conocer por lo menos lo básico de algún lenguaje de programación
  • Preinstalar Ruby on Rails - esto para evitar perder tiempo con las instalaciones y entrar de lleno al curso desde el primer minuto -
  • Sentirse cómodo utilizando la consola de comandos :)

Observaciones
Ruby On Rails puede hacer uso de diversos motores de base de datos, pero por cuestiones de simplicidad vamos a hacer uso del motor de SQLite, aunque si se va a explicar como, por ejemplo, cambiar la configuración para conectarse a un MySQL.

La version de Ruby on Rails sobre la que se va a trabajar es la 2.3.5, aunque la version 3.0 Beta 1 esta disponible, vamos a irnos por la ruta de la version estable.

Si desean instalar algún administrador gráfico para SQLite y tienen instalado Firefox, pueden instalarle el addon SQLite Manager.

¿Como instalar Ruby On Rails en mi equipo?
Dependiendo del OS de nuestra laptop es como vamos a realizar la instalación, por la lista de amigos que levantaron la mano al curso puedo darme cuenta que vamos a tener OSX, Linux y Windows, así que aquí va las guías para cada OS.

RoR en Windows
Hace algunos meses escribí un post que detalla la instalación de RoR en Windows, utilizando cygwin y un editor llamado e-TextEditor. El e-TextEditor no es gratuito tiene un costo como de 40 USD y cuenta con versión de evaluación.

Otra opción de instalación es utilizar algún IDE de RoR, las posibles IDEs las menciono mas abajo en el post ya que estas son comunes sin importar el SO.

RoR en Linux
Esta guía en español y para Ubuntu es muy fácil y directa, pero fácilmente se puede adaptar para cualquier distro de Linux.

Si se sigue esta guía, es recomendable configurar gEdit para RoR, lo cual nos da un buen IDE para trabajar en Linux.

Otra opción de instalación es utilizar algún IDE de RoR, las posibles IDEs las menciono mas abajo en el post ya que estas son comunes sin importar el SO.

RoR en OSX
En OSX es necesario insertar el disco de instalación de OSX e instalar las herramientas de desarrollo.

Como IDE es posible usar TextMate, aunque no es gratuito, cuentan con versión de evaluación.

Otra opción de instalación es utilizar algún IDE de RoR, las posibles IDEs las menciono mas abajo en el post ya que estas son comunes sin importar el SO.

IDEs para RoR
Para quienes se sientan mas a gusto con un IDE completo hay 3 posibles opciones de las cuales solamente una no es gratuita, pero cuenta con versión de evaluación.

Para lo que tengan duda sobre si instalar una IDE o no, en el curso no nos vamos a enfocar a ningún IDE en particular, todos los comandos los vamos a ejecutar desde la consola, la IDE nos va a servir únicamente como un editor de texto.

El curso
El temario tentativo para el curso es el siguiente:

  1. Introducción al lenguaje Ruby
  2. Introducción a Ruby On Rails
  3. Conocer una aplicación de Rails, a través de los bloques ActiveRecord, ActionController y ActionView
  4. El Patron MVC en Rails
  5. Básico del patron ActiveRecord - CRUD -
  6. Básico de controladores: acciones, filtros, parámetros, sesiones y mensajes flash
  7. Básico de vistas: plantillas ERB, layouts, parciales y helpers
  8. Mas de ActiveRecord: Validaciones, asociaciones, agregaciones y find_by_*
  9. Rutas en Rails
  10. Pruebas con RSpec
  11. Depuración, logging y uso de la consola
  12. AJAX en rails

Fecha y lugar

De momento de desconoce, espero que se pueda confirmar en los próximos días, la fecha depende en gran medida de la disponibilidad del espacio que nos faciliten, así que estén pendientes a este blog y a

twitter

.




Reunión 33 de TJNET Inversion of Control Ing. Mario Cornejo ITT Aula Magna 24 de marzo - 6PM



En el Bytepodcast 199 se presenta una entrevista donde comentan sobre la iniciativa de "No al voto electrónico" en México, donde al ser una entrevista de una de las personas detrás de la iniciativa de rechazo, obviamente comenta todo lo malo del voto electrónico; lo que a mi en particular me pareció totalmente parcial y satanizado.

Antes de proseguir quiero aclarar que no estoy en contra o a favor de la iniciativa, todavía, aunque por ser un tema tecnológico, y esta ser el área donde me desenvuelvo profesionalmente, tiene un interés adicional; y que no tengo filiación partidista.

Primeramente voy a comentar algunos comentarios que se vierten en el podcast.

El voto es un derecho plasmado en la declaración de los derechos humanos.
Cierto tal declaración esta en el articulo 21.3 donde parafraseando indica que se debe tener derecho a la igualdad y voto secreto u otro procedimiento equivalente que garantice la libertad del voto.

Aunque cabe aclarar que esta declaración son derechos universales que cada país los integra en sus constituciones donde se convierten en derechos y obligaciones de cada ciudadano. En el caso de nuestra constitución así se expresa, donde no estoy seguro es si en la constitución se expresa la forma de ejercer el voto o no, si no es así el sistema actual, el levantar la mano o un sistema electrónico cae dentro de lo legal, de no ser así, implementar un sistema electrónico requeriría las correspondientes modificaciones a la constitución.

El voto electrónico representa incertidumbre sobre si nuestro voto fue registrado y tomado en cuenta electrónicamente.
¿Yo comenzaría preguntando cual es el nivel actual de certidumbre que como ciudadanos tenemos de que nuestros votos depositados en las urnas contaron como se debe?
Para medir un poco este nivel de certidumbre, creo que basta recordar las elecciones presidenciales del 2006, donde hubo una tremenda crisis política, precisamente por la falta de certidumbre, o ¿no recuerdan el voto x voto?

Ahora la pregunta obligada es el cuestionarnos si un sistema electrónico de votación eleva nuestro nivel de incertidumbre, si nos crea mas suspicacia que nuestro voto no fue contado correctamente, se mantiene igual o nos da mayor certidumbre.

Dentro de ciertas recomendaciones generales sobre sistemas de voto electrónico, se recomienda no únicamente registrar el voto y ya en la maquina, si no también generar un rastro tangible del voto emitido, donde este rastro tangible el votante lo puede simplemente verificar pero no llevarselo y en otros casos inclusive llevarse el comprobante.

Esta acción del rastro tangible es cuestionada en dos comentario emitidos en el podcast, por lo tanto el desarrollo de ideas lo voy a extender en esos comentarios en especifico.

Mientras tanto la cuestión es si el contar con este rastro tangible nos da mayor o menor certidumbre con respecto al sistema actual, yo no cuento con los datos que me permitan decir que si o no mejora la certidumbre y buscando en el sitio de este movimiento tampoco los encontré.

Con el sistema de boletas, cualquier ciudadano puede contar los votos, o realizar una auditoria.
Yo contestaría a eso sí, pero no. Si bien es cierto que cualquier persona que sepa contar, puede contar los votos en una urna y apuntar los valores en la sabana; esto no permite que cualquier ciudadano que no haya sido nombrado funcionario de casilla lo pueda hacer y mucho menos permite que podamos realizar una auditoria general a una elección, ¿que no recuerdan el voto x voto?

El uso de sistemas electrónicos, agrega inherentemente un nivel mas de complejidad, es cierto, ya que la auditoria es a nivel de software en los dispositivos electrónicos, lo cual obviamente requiere de un cierto nivel técnico para poderlo realizar.

Si hablamos de verificar o auditar los votos en una casilla electrónica, al final de lo jornada, es muy difícil que un funcionario de casilla pueda auditar los votos almacenados en la memoria del dispositivo, a los mas solo le queda confiar con el reporte de resultados del dispositivo. Si existe un rastro físico, es posible contar manualmente los votos como se ha hecho anteriormente e identificar cualquier discrepancia con el dispositivo, pero ¿acaso el tener un rastro físico invalida el uso de un medio electrónico?

Aparentemente y por los comentarios del podcast parece ser que así es.

Un sistema electrónico arroja resultados mas rápidos.
En el podcast se menciona que esto es una mentira, ya que si tomamos en cuenta que los sistemas no estén conectados por medio de redes de datos, por cuestiones de seguridad, estos deben ser llevados a sitios específicos para ser "descargados", y que esto es lo que toma mayor tiempo en una elección, trasladar los resultados a el lugar indicado.

Si concedemos que conectar los dispositivos implica un riesgo a la seguridad y por lo tanto no estar conectados es la opción, el único tiempo de ahorro, asumiendo que los votos en el registro electrónico concuerden con los votos del rastro físico, debe de ser tremendamente mas rápido solo "descargar" y reconfirmar los datos para entren al sistema del PREP, creo que este puede ser mas rápido que capturar la información de la sabana a mano.

Aunque este ahorro de tiempo puede o no ser significativo en la obtención expedita de los resultados de la elección.

Se vuelve a cuestionar la seguridad de un sistema electrónico de votación.
Se vuelve a remarcar la seguridad en los votos, en lo efectivo de almacenar los datos en el dispositivo, que este no tenga código malicioso que cambie votos y agregue votos. Una vez mas, un sistema de auditoria física puede minimizar este temor, pero la pregunta va en relación a que ¿si sigue siendo este sistema electrónico mas o menos confiable que el actual?

Durante mucho tiempo se conoce de detalles de urnas alteradas, robadas, con votos de mas y muchos otro detalles mas, a esto hay que agregarle "caídas" en el sistema del PREP - quien no recuerda la de 1988 -, o los cuestionamientos al sistema del PREP en el 2006, del porque cuando parecía haber tendencia por Lopez Obrador de "repente" se enfilo a la victoria de Calderón.

El PREP es otro punto de posible falla/alteración/fraude en un proceso electoral y no veo en la iniciativa del no al voto electrónico que se ataque o que se pida que se elimine, ¿porque?.

El emitir un comprobante al votante favorece el "clientelismo"
Este es otro argumento, de que si al votante se le da un documento probatorio de su voto, este se va a utilizar para "canjearlo" por algún beneficio por el voto emitido; yo hasta ahorita he mencionado de dejar un rastro físico, pero que no es entregable al votante solo puede consultarlo en el momento para asegurarse que su voto fue registrado como el lo indico en el dispositivo electrónico.

Pero vamonos un poco mas atrás en este este, vamos al momento actual, al hoy, acaso hoy en día ¿no existe el "clientelismo", el voto corporativo, el acarreo, el reparto de despensas, camisetas, gorras, sodas, sandwiches, el que te llamen a casa para que vayas a votar, el que te toquen la puerta y te lleven a votar, todo esto en favor de algún partido político?

Este es un problema mas grave que con voto en boletas o electrónico, mientras haya gente necesitada y haya quien compre el voto, seguirá ocurriendo, electrónico o no.

El "clientelismo" existió, existe y seguirá existiendo mientras nuestra educación y nuestros valores cívicos no cambien, mientras no aprendamos a respetar nuestros derechos, mientras haya gente que se deje pisotear en su dignidad, electrónico o no electrónico.

La tecnología requerida es muy cara
Esto es cierto, y esto no se puede evitar si se desea implementar el voto electrónico, aquí no hay punto de desacuerdo.

Ademas que hablar de dispositivos electrónico, implica que alguno pueda fallar o funcionar incorrectamente el día de la elección.

Dependiendo del tipo de tecnología que se use, va a requerir mantenimiento posterior si se desea utilizar en algún otro proceso electoral, si es que no se descompuso de manera irreparable y si es que no se vuelve obsoleto tan rápidamente, situación que es muy probable.

Puntos adicionales
En el podcast también mencionan que hay "muchos" investigadores-científicos que se oponen al voto electrónico, citan casos de organizaciones en países americanos y europeos que están en contra del voto electrónico, por las razones mencionadas en este post o por algunas otras.

Pero la pregunta es, ¿hay en esos países voces confiables que no están en contra y cuales son sus argumentos?, o ¿como el movimiento esta en contra solo van a citar las voces a favor?

Otra pregunta importante es, ¿que dicen nuestros investigadores, científicos y académicos en México?, donde están las cifras, los datos que nos lleven a tomar una decisión realmente INFORMADA, y no solo escuchar lo que queremos escuchar, ya sea a favor o en contra.

Como realizar criticas sin aportar nada positivo no deja nada bueno, aquí esta mi opinión sobre como creo que se debe llevar a cabo el proceso de implementar elecciones electrónicas, no tengo todas las respuestas, ni todos los detalles, pero esta es mi opinión.

Primeramente si el gobierno desea seriamente implementar el voto electrónico, este se debe de manejar a nivel de Seguridad Nacional, por tal motivo la tecnología utilizada para este fin debe ser desarrollada internamente y no comprada al exterior.

Ademas para la empresas que desea desarrollar y vender esta tecnología, que se requisito primordial que exista vinculación con al menos 1 centro de educación superior que colabore en el desarrollo de dicha tecnología.

Para poder aprobar que la tecnología se use en una elección, esta debe abrirse para auditoria para que cualquiera de los expertos técnicos en el país puedan revisarla y validarla.

Que sean mas de una empresa la que se seleccione para proveer del equipo para las elecciones, todas ellas con especificaciones de interfaces estándar para el funcionamiento y la intercomunicación de los dispositivos, interfaces definidas por el gobierno a través de grupo consultivo.

Algo que si se tiene que considerar es que quizás este tipo de tecnología no pueda ser utilizada en todos los casos, ya que debemos tener en cuenta que hoy en 2010 hay personas que no están expuesta a la tecnología y por lo tanto obligarlas a votar de esta forma representa una barrera para ellos. Simplemente hay que recordar a la persona en el cajero automático que se "avienta" mas de 10 minutos para retirar efectivo porque no sabe que opciones usar.

Por ultimo yo he mencionado durante el post el concepto de "rastro tangible" y puede ser tan simple o complicado como colocar una impresora con rollo de papel - protegido - que le muestre a la persona que emitió su voto que lo que selecciono en la pantalla es lo mismo que se imprimió, ese rollo al final de la jornada se puede contar manualmente y comparar el resultado con el reporte del dispositivo electrónico.

Ya para terminar, el motivo de este post no es convencerlos o no que el voto electrónico es la forma correcta de llevar una elección en México, es simplemente expresar otro punto de vista, a lo que a mi parecer, fueron comentarios totalmente parciales en contra durante la entrevista del podcast.

A final de cuentas cada uno de nosotros deberemos hacernos este cuestionamiento si es que el gobierno piensa ir por este rumbo y decidirnos si estamos de acuerdo o no. Por lo pronto les dejo la siguiente pregunta:

¿Estas de acuerdo con el voto electrónico?




clip_image001

Estimado lector por medio de este correo quiero extender una invitación para que asista este  Lunes 1ro de Marzo del 2010 a un WebCast de SharePoint 2010 que estaré presentando para Centro de Medios de Microsoft Latam.

En este WebCast estaremos platicando sobre las múltiples alternativas para acceso y manipulación de datos SharePoint mediante Servicios Web. SharePoint 2010 ha sido diseñado para encajar en una arquitectura orientadas a servicios y en esta sesión veremos las múltiples alternativas disponibles.

La sesión será a las 12:30 tiempo e México 10:30 tiempo del pacifico.

URL de Registro para Asistentes (Público):
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032440497&Culture=es-AR

Saludos y Gracias



En Microsoft uno de los puntos que se enorgullecen de divulgar es que ahora se soporta REST para acceso a listas y bibliotecas de documentos lo cual me parece fantástico ya que si aporta valor la alternativa de obtener acceso directo al contenido basado en un estándar y que sin tanto esfuerzo de programacion lo podamos lograr es tambien un tema a consiuderar. Este seguro que desde ya podemos ver muchas aplicaciones de esta característica en proyectos de desarrollo SharePoint.

Hagamos una breve y simple demostración de cómo consumir un servicio REST de SharePoint en una aplicacion Windows Forms.

Soporte REST en SharePoint 2010

Primeramente accedemos a nuestro sitio SharePoint 2010 y en la dirección URL hay que capturar “_vtn_bin/listdata.svc" el cual es un servicio WCF que se encarga de exponer el sitio entero en formato REST. Dependiendo del URL de nuestro sitio es el contenido que el servicio listdata.svc nos retorna.

Como puedes ver aquí tenemos en formato REST el contenido del sitio.

clip_image002

Mediante la URL indagamos y accedemos a los sub elementos de este esquema, por ejemplo si quisiéramos acceder a la lista de anuncios “Announcements” entonces modificamos el URL y capturamos subsecuentemente /_vti_bin/listdata.svc/Announcements arrojando lo siguiente:

clip_image004

El navegador lo interpreta y muestra como un Feed RSS sin embargo al ver el código fuente de esta página vemos más contenido de acuerdo a REST. Encontramos un esquema mucho mas explicito que describe y autocontiene la informacion invocada.

clip_image006

Lo único que debes de saber es que la dirección URL es sensible a mayúsculas y minúsculas de tal forma que debes de asegurarte de especificar exactamente igual el nombre de las listas y bibliotecas, no hay margen para el error aquí.

Consumiendo Servicio REST de SharePoint 2010

Debido a que REST opera via protocolo web podemos consumirlo tal como un servicio web. Desde Visual Studio 2010 creamos una aplicación de consola o Windows Forms y tenemos varias alternativas disponibles para generar un proxy que nos invoque los elementos que tenemos publicados por defecto en REST mediante el servicio listdata.svc. En esta demostración de tipo aplicación Windows Forms simplemente selecciono del menú principal la opción de Data en donde se muestra la opción de Visual Studio para agregar una conexión que apunte a diversos orígenes de datos.

clip_image007

Lo que vale la pena ver aquí es que ahora contamos con un nuevo conector hacia SharePoint.

clip_image009

A seleccionar Next simplemente se carga la ventana para hacer una referencia a un servicio WCF. Capturamos la URL de nuestro servicio listdata.svc de nuestro sitio SharePoint en cuestión y damos clic en el botón Go, para que Visual Studio descubra el contenido del servicio “el cual basado en REST obtendremos el contenido de nuestro sitio” y especificamos el namespace con el que estaremos haciendo referencia a nuestro proxy.

clip_image010

Damos clic en Ok y listo ya podemos generar instancias de nuestro proxy y realizar programáticamente invocaciones al contenido de nuestras listas. Cabe mencionar que al hacer la conexión vía Data Source de Visual Studio nos agrega una sección donde podemos arrastrar y soltar sobre nuestra lista de anuncios presentándonos las columnas y la posibilidad de mostrar los objetos sobre nuestro formulario, el proceso de vinculación lo realiza de forma automática y nos agrega el contexto de vinculación y el contexto de navegación dentro de un conjunto de datos.

clip_image011

Si tomamos nuestra lista de anuncios y la arrastramos y soltamos sobre nuestro formulario el resultado será un datagrid con su correspondiente objeto de navegación y contexto de vinculación.

clip_image013

Claro que nosotros podemos editar que columnas queremos incluir y atrapar eventos dentro del datagrid para determinar renglones nuevos o editados y programáticamente hacer algo al respecto.

Ya para terminar necesitamos realizar desde código la invocación a nuestra lista y pasarle como contexto de datos el resultado de nuestro servicio. Así mismo ocupamos también pasar el contexto de usuario para que podamos tener acceso seguro a SharePoint.

Lo que hay que hacer es:

  1. Hacer referencia a nuestro namespace RESTDemo y a System.Net usando using
  2. Instanciamos nuestro servicio generado por el proxy llamado “HomeDataContext” y pasamos como argumento dentro del constructor un objeto Uri apuntando a nuestro servicio listdata.svc.
  3. A nuestro objeto instanciado necesitamos asignarle la credenciales de usuario con las que se autentificara en SharePoint para consumir los datos.
  4. Asignamos a nuestro objeto de contexto de vinculación en su propiedad DataSource el resultado de nuestra lista.
using System.Net;
using WindowsFormsApplication9.RESTDemo;

namespace WindowsFormsApplication9
{
    public partial class Form1 : Form
    {

        private void Form1_Load(object sender, EventArgs e)
        {
            HomeDataContext dc = new HomeDataContext(new Uri("http://sp210-pdc/_vti_bin/listdata.svc"));
            dc.Credentials = CredentialCache.DefaultNetworkCredentials;
            announcementsBindingSource.DataSource = dc.Announcements;
        }
    }
}

El resultado:

image



Hace un par de días me preguntaron, que se necesita para migrar una aplicacin de ASP.NET Webforms a Mono y ejecutarla en un ambiente Linux.

Primeramente hay que conocer que según la pagina de ASP.NET Webforms de Mono, ASP.NET Webforms 2.0, ASP.NET Ajax y algunos controles 3.5 están soportados. Pero esto no es suficiente para algunas aplicaciones, ya que es posible que usen controles de 3ros. que no funcionan o funcionan correctamente en Mono, otro punto importante es que hay que recordar que los ambientes Linux son sensitivos a minúsculas/mayúsculas y si nuestra aplicaciones tiene archivos cuyos nombres están indistintos en minúsculas/mayúsculas muy probablemente vamos a tener problemas.

La opción segura para saber si nuestra aplicaciones puede funcionar o no en Mono es ejecutar MoMA, una aplicación para Windows que analiza nuestra aplicaciones ASP.NET Webforms y nos puede decir si todo esta bien o hay algo que no esta soportado en Mono.

Si nuestra aplicación no tiene ningún problema de acuerdo al reporte de MoMA, el siguiente paso es determinar si nuestra base de datos, usualmente MSSQL, server va a seguir en Windows o si también se va a migrar a MySQL o Postgresql.

Obviamente si se decide migrar la base de datos hay dos tareas importantes a realizar, la primera es convertir el esquema de MSSQL Server a la base de datos destino; la segunda tarea es que si nuestra aplicación hace uso de ADO.NET y estamos usando directamente las clases del namespace System.Data.SqlClient, vamos a tener que reemplazar esos objetos por los correspondientes a la base de datos destino.

Para MySQL hay que descargar el Connector/NET, el cual es un librería 100% .NET para conectarse a bases de datos MySQL. Si vamos a usar Postgresql, hay que descargar el Npgsql, librería 100% .NET para acceder a Postgresql.

SI ya llegamos hasta este punto y queremos publicar nuestra aplicación para que los usuarios se puedan conectar a ella; para tal efecto podemos utilizar el servidor Apache y el modulo Mod_Mono, que permite a Apache "servir" aplicaciones .NET.

Adicionalmente si vamos a desarrollar aplicaciones directamente desde Mono, una buena opción es descargar el ambiente de desarrollo llamado MonoDevelop; de esta forma vamos a poder desarrollar, modificar y depurar nuestras aplicaciones.

Sobre como instalar Mono, MySQL, Postgresql y Apache en Linux, va a depender de nuestra distribución, pero generalmente todas cuentan con un sistema de distribución de aplicaciones de donde podemos elegir tales aplicaciones para instalar. Como dato adicional, Ubuntu y SuSe son distribuciones "amigables" con Mono, por lo tanto ambas son recomendadas.http://mono-project.com/




Hace unos días me entere de la aplicación Pinta, la cual esta una alternativa sencilla para el dibujo/edición de imagines, desarrollada en Mono, usando como modelo Paint.NET.

Al ser una aplicación Mono basada en GtkSharp y Cairo, es altamente portable, y por lo tanto puede ejecutarse en Linux y OSX.

Una aplicación como esta, me es muy útil para realizar pequeños retoques a imágenes, por lo que procedí a descargarla, pero en la pagina solo existían paquetes para Suse y Ubuntu, ademas de la aplicación en un archivo zip.

Por lo tanto para poder utilizarla en OSX la única forma era ejecutarla desde la terminal, no muy amigable que digamos. Debido a esto decidí crear un Bundle para poder ejecutarla desde mi folder de Aplicaciones.

Le envié el bundle a Jonathan Pobst el Bundle, y a partir de ahora ya es posible la aplicación para OSX e instalarla como "un ciudadano de primera clase".

Pinta apenas esta en su versión 0.1 y le falta mucho camino por recorrer en Linux y OSX, pero aún así esta bastante completa para ser versión 0.1.




Desarrollo en NET: Ironruby webcasts
Feb, 07 2010 04:40 (PST)

Hace un par de semanas tuve la oportunidad de presentar dos webcast/VAN, uno para el Club de .NET de la Universitat Oberta de Catalunya y para AltNet Hispano.

Si bien ambos los puede llevar a cabo no sin algunos contratiempos, ya que en esas fechas tuvimos una tormenta en la ciudad y hubo cortes de energía, pero finalmente puede participar.

Este post tiene como finalidad el realizar una recapitulación de ambas presentaciones ya que si bien las dos fueron en relación a IronRuby el enfoque fue un poco diferente.

¿Que es IronRuby?
Bueno esta pregunta se tiene que responder primero comentado que es Ruby.

Ruby es un lenguaje dinámico bajo el paradigma de Orientado a Objetos, con sintaxis inspirada en Python, Perl y SmallTalk. Lenguaje que vio la luz publica en 1995 bajo la mano de Yukihiro "Matz" Matsumoto.

Ruby es un lenguaje moderno que cuenta con características que son estándar en lenguajes modernos, como: manejo de excepciones, iteradores y clausuras, sobre carga de operadores, recolección de basura, portable, carga dinámica de librerías, introspeccion-reflexion-metaprogramacion entre otras-; ademas de que la sintaxis esta diseñada pensando en la productividad y diversión del desarrollador y sobre todo que sea lo mas natural al lenguaje humano.

Algo importante a notar es que Ruby es un lenguaje distribuido y licenciado bajo una licencia de Software Libre.

Ahora si vamos a al origen de la pregunta, ¿Que es IronRuby?, pues IronRuby es la implementación del lenguaje Ruby como un lenguaje dinámico para .NET, llevada a cabo por Microsoft.

IronRuby ofrece un interprete de Ruby compatible con la version 1.8.6, el cual permite ejecutar aplicaciones de Ruby de manera transparente o casi transparente, ademas de permitir a los programas que se ejecutan bajo IronRuby el poder interactuar con las librerías de .NET, e inclusive incluir dentro de una aplicación de .NET funcionalidad de "scripting" con el lenguaje Ruby.

IronRuby como se menciono es desarrollado por Microsoft y esta disponible bajo una licencia de Software Libre. Aunque aun no ha alcanzado si versión 1.0 - al momento de este post están en su RC 1 -, es lo suficientemente maduro para ser utilizado para el desarrollo de aplicaciones.

¿Porque usar IronRuby?
Es una pregunta un tanto difícil de contestar sobre todo porque depende de la perspectiva y visión de cada desarrollador, por lo tanto voy a contestarla desde mi visión.

Ruby cuenta con una gran variedad de herramientas maduras para realizar pruebas de código bajo los enfoques TDD y BDD ademas de herramientas para realizar Mocking de objetos, si bien en .NET también las hay, existen algunos proyectos que intentan replicar algunas de estas en C#, pero entonces ¿para que replicarlas si las podemos usar con un poco de IronRuby?

En Ruby esta Rake, una herramienta para hacer scripts para "construir" aplicaciones o archivos de "Build", bastante poderosa y flexible, tanto así que proyectos populares de Software Libre en .NET usan esta librería para ejecutar pruebas, compilar y empaquetar estos proyectos, tal es el caso que inclusive hay una librería llamada Albacore, la cual es una compilación de tareas Rake para .NET.

Ruby es un lenguaje que favorece la creación de DSLs - Domain Specific Languages -, por ejemplo en Ruby on Rails encontramos la implementación de DLSs en diferentes puntos del Framework. Otro ejemplo muy bueno es Sinatra, un DSL para la creación de aplicaciones Web.

En la lista de IronRuby, también mencionan que es mucho mas fácil y rápido realizar aplicaciones con Ruby en comparación con su contraparte en C#, tan es así, que se han creado un par de "wrappers" para la creación de aplicaciones ASP.NET MVC totalmente en Ruby, también es posible crear aplicaciones en Silverlight con un Framework al estilo Ruby On Rails llamado IronNails.

Gracias a IronRuby es posible reutilizar la gran cantidad de librerías de Ruby, Frameworks y aplicaciones en ambientes .NET y viceversa.

Por último, otro punto a favor es la posibilidad de darle a nuestras aplicaciones .NET la posibilidad de extenderlas mediante "scripting" en el lenguaje Ruby.

Quizás puedan estar de acuerdo conmigo o no, o inclusive a la mejor me faltan mas escenario que hacen que IronRuby sea "deseable" en .NET; lo que si creo que vale la pena es darle la oportunidad y crear nuestro propio criterio. Esta discusión en la lista de IronRuby abre un abanico un poco mas amplio de posibilidades.

¿Que necesito para iniciar en IronRuby?
Lo primero que hay que hacer es descargar IronRuby de la página de http://ironruby.net, su instalación es tan sencillo como descomprimir IronRuby en nuestro disco duro y agregar esta carpeta en nuestro path.

No voy a publicar como trabajar con IronRuby ya que eso se mostró en los Webcast/VAN, en el momento que alguno de esos videos estén disponibles, pondré los enlaces en este post.

Una pregunta recurrente que me han hecho y no solo para IronRuby, sino también para Ruby es ¿Que IDE uso para *Ruby?, bueno en el mundo *Ruby es muy común el uso de editores como Emacs y VIM o editores de texto como TextMate en OSX, en Windows también es posible usar editores sencillos como Notepad2, eTextEditor o un IDE mas en forma como RubyMine de JetBrains.

Siendo RubyMine una de las IDEs disponibles enfocada al desarrollo de aplicaciones en Ruby - Debo aclarar que gracias a AltNetHispano y JetBrains me obsequiaron una licencia hace unos días, pero aun antes de esto ya había yo mencionado/recomendado RubyMine -, inclusiveRubyMine tiene soporte para IronRuby.

Hay una solicitud en Microsoft Connect para que Visual Studio 2010 incluya soporte a desarrollar aplicaciones IronRuby desde el mismo IDE.

Show me the code! Show me the code!
Después de esta larguísima introducción, ahora si ha llegado el momento de mostrar el código de ejemplo utilizado en las dos presentaciones, casi todo este código se ejecuto desde el interprete de IronRuby ir.exe

Para poder ejecutar algunos de los ejemplos es necesario instalar primeramente algunas gemas de Ruby. Una Gema es una librería que extendiende la funcionalidad base de Ruby.

Para encontrar Gemas para casi todo lo que nos podamos imaginar hay que visitar GemCutter.

El siguiente comando instalara gemas para Sinatrarb, Rails, Rspec, Cucumber, Rake y el driver de SQLServer para Ruby. Es importante actualizar nuestro path en Windows para incluir el directorio donde esta el código binario de IronRuby y el código de las gemas; asumiendo que instalamos IronRuby en C:\IronRuby ejecutamos:

set PATH=%PATH%;C:\IronRuby\bin;C:\IronRuby\lib\IronRuby\gems\1.8\bin

Para instalar las gemas ejecutamos:

igem install sinatra rake rails rspec cucumber ironruby-sqlserver --no-rdoc --no-ri

- Variables
Al ser un lenguaje dinámico, en Ruby podemos la declaración de variables se hace sin tipo.

- Métodos
La llamada a métodos puede realizarse con paréntesis o sin paréntesis para pasar parámetros.

- Clases
Al redefinir una clase no es necesario declararla por completo, solo declarando lo nuevo o lo que se modifica es suficiente. La reflexión y el manejo dinámico de las clases es muy poderoso.

- Ruby es amor, "Sintactic Sugar"
El lenguaje de Ruby en ocasiones se "siente" tan natural

- Expresiones regulares
Ruby es tan poderoso para el manejo de expresiones regulares como Perl

- Reflexion
Metaprogramacion, reflexion en Ruby es algo tan natural

- Sinatra
La siguiente aplicación de ejemplo de Sinatrarb muestra el uso de el DSL para aplicaciones Web, es importante que antes de ejecutar el ejemplo, instalemos el siguiente parche al código fuente de Sinatra para que funcione correctamente con IronRuby:


Para ejecutar la aplicación solamente iniciamos con el siguiente comando:

ir SinatraSample.rb

Y apuntamos nuestro navegador a:

http://localhost:4567 http://localhost:4567/acercade http://localhost:4567 /Mario

Para conocer mas de Sinatra pueden ver este screencast en español.

- Ruby on Rails
Ruby on Rails es el framework mas famoso en Ruby para el desarrollo de aplicaciones Web. Con IronRuby podemos crear aplicaciones bajo este Framework. Para este ejemplo se requiere de tener una base de datos en SQL Server llamada ironruby_on_rails_dev.

Hay que seguir las instrucciones en el código que se muestra, ya que es necesario realizar algunos cambios a ciertos archivos de nuestra aplicación Rails para que pueda funcionar, una vez que ejecutemos el server de Rails podemos apuntar nuestro navegador a: http://localhost:3000/posts

Nuestra aplicación de debe de mostrar en el navegador.

- Usando IronRuby para probar nuestras aplicaciones .NET
Partiendo de la idea que tenemos la siguiente clase en C# que deseamos probar, inicialmente con Rspec, definimos únicamente es esqueleto de la misma, para compilarla, desde la linea de comandos ejecutamos:

csc /target:library /out:Bowling.dll *.cs

Ahora definimos su funcionamiento con Rspec

Para ejecutar nuestras pruebas podemos ejecutar alguno de los siguientes comandos:

spec --format specdoc spec --format html > spec_bowling.html

Después de ejecutar el comando podemos ver que pruebas pasan y cuales fallan

Si implementamos nuestra clase y la compilamos de la siguiente forma y ejecutamos nuestras pruebas, ahora nuestra especificación debe pasar

csc /target:library /out:Bowling.dll *.cs spec --format specdoc

Otra herramienta para probar nuestras aplicaciones es Cucumber, para poder traerlo a nuestro escenario, hay que crear un folder llamado features y crear el siguiente documento

Dentro de feature hay que crear otro folder llamado step_definitions y dentro creamos el siguiente archivo

Ahora si podemos ejecutar alguno de los dos siguientes comandos para ejecutar nuestra prueba con Cucumber

cucumber features/bowling.feature cucumber features/bowling.feature --format html --out features.html

- Extender clases de C# desde IronRuby
La reflexion y la metaprogramacion de Ruby la podemos llevar también a las clases de C#, por ejemplo con la clase compilada de Bowling.cs, si cargamos el interprete de Ruby podemos extenderla de la siguiente forma:

- Incluyendo Ruby para darle capacidad de scripting a nuestras aplicaciones en .NET
Con IronRuby podemos hacer que nuestras aplicaciones en .NET "hablen" Ruby

Para compilar el siguiente ejemplo ejecutamos:

csc Program.cs /r:IronRuby.dll /r:Microsoft.Scripting.dll /r:Microsoft.Scripting.Core.dll

La librerías requeridas están incluidas en la instalación de IronRuby.

Conclusion Ruby es un lenguaje con muchos pequeños detalles que hacen que sea agradable programar en el, el soporte y actividad de la comunidad Ruby es mas que excelente, el contar con un Framework para el desarrollo de aplicaciones que otros lenguajes/comunidades han buscado replicar, son puntos adicionales para investigar y experimentar con Ruby.

El plus que trae IronRuby es el poder unir los dos mundos, el dinámico y estático con .NET, de una forma que no causa "fricción" el pasar de .NET a Ruby y viceversa.

Me han preguntado por ejemplos de grandes aplicaciones que se hallan desarrollado en .NET, hasta ahorita no hay una que conozca, pero estoy seguro que una vez que IronRuby alcance la versión 1.0, no tardaremos en ver aplicaciones que hagan extenso uso de Ruby.

Recursos A continuación les presento los siguientes blogs/sitios con referencia sobre Ruby e IronRuby.



]]>



]]>



Lo que sigue es una traducción de una sección del ebook gratuito Foundations of Programming de Karl Seguin.

Apuntadores

Para muchos desarrolladores, aprender sobre apuntadores en la escuela fue una experiencia dolorosa. Representan la verdaderamente real indirección que existe entre código y hardware. Muchos más desarrolladores nunca tuvieron la experiencia de aprender sobre ellos  - saltaron directamente a programar en un lenguaje que no los expone directamente. La verdad sin embargo es que cualquiera que diga que C# o Java son lenguajes sin apuntadores es simplemente un error. Como los apuntadores son el mecanismo con el cual todos los lenguajes almacenan valores en el heap, es más bien tonto no entender como son usados.

Los apuntadores representan el nexus del modelo de memoria de un sistema – esto es, los apuntadores son el mecanismo donde el stack y el heap trabajan juntos para proveer el subsistema de memoria requerido por su programa. Como discutimos anteriormente, cuando instancia un objeto new, .NET asigna un bloque de memoria al heap y regresa un apuntador al inicio de este bloque de memoria. Esto es todo lo que un apuntador es: la dirección de inicio para el bloque de memoria que contiene un objeto. La dirección no es nada más que un número único, generalmente representado en formato hexadecimal. Por lo tanto, un apuntador no es nada más que un número único que le dice a .NET donde está el objeto mismo en memoria. Esta indirección es transparente en Java o .NET, pero no en C o C++ donde se puede manipular la dirección de memoria directamente con un apuntador aritmético. En C o C++ se puede tomar un apuntador y agregar 1 a él, y así arbitrariamente cambiar a donde está apuntando (y seguramente hacer tronar el programa debido a esto).

Donde se pone interesante es donde el apuntador está realmente almacenado. Ellos en realidad siguen las mismas reglas descritas arriba: como enteros son almacenados en el stack – al menos, claro, que ellos formen parte de una referencia a un objeto y entonces estarán en el heap con el resto del objeto. Puede no ser claro aún, pero esto significa que ultimadamente, todos los objetos heap están enraizados al stack (posiblemente a través de numerosos niveles de referencias). Veamos primero este ejemplo simple:

static void Main(string[] args)

{

  int x = 5;

  string y = "codebetter.com";

}

Del código de arriba, terminaremos con 2 valores en el stack, el entero 5 y el apuntador a nuestra cadena, así como también precisamente el valor en el heap. Aquí una representación gráfica:

Cuando salimos de nuestra function main (olvidémonos del hecho de que el programa se parará), nuestro stack liberará todos los valores locales, lo que significa que tanto el valor de x como de y se perderán. Esto es significativo porque la memoria asignada en el heap todavía contiene nuestra cadena, pero hemos perdido toda referencia a ella (no hay algún apuntador apuntándola). En C o C++ esto resulta en una fuga de memoria – sin una referencia a nuestra dirección en el heap no podemos liberarla de la memoria). En C# o Java, nuestro confiable recolector de basura detectará el objeto sin referencia y lo liberará.

Veremos ejemplos más complejos, que aparte de tener más flechas apuntando, es básicamente el mismo.

public class Empleado

{

  private int _empleadoId;

  private Empleado _gerente;

  public int EmpleadoId

  {

    get { return _empleadoId; }

    set { _empleadoId = value; }

  }

  public Empleado Gerente

  {

    get { return _gerente; }

    set { _gerente = value; }

  } 

  public Empleado(int empleadoId)

  {

    _empleadoId = empleadoId;

  }

}

public class Prueba

{

  private Empleado _subordinado;

  void HacerAlgo()

  {

    Empleado jefe = new Empleado(1);
    _subordinado = new Empleado(2);

    _subordinado.Gerente = _jefe;

  }

}

Interesantemente, cuando salimos de nuestro método, la variable jefe se liberará del stack, pero el subordinado, que está definido por el alcance padre, no. Esto significa que el recolector de basura no tendrá nada que limpiar porque los dos valores del heap seguirán siendo referenciados (uno directamente del stack, y el otro indirectamente del stack a través del objeto referenciado.

Como puede ver, los apuntadores definitivamente juegan una parte importante tanto en C# como en VB.NET. Como el apuntador aritmético no está disponible en ninguno de estos lenguajes, los apuntadores son grandemente simplificados y con suerte fácilmente entendidos.

 



ponte: Regreso a las bases: Memoria
Dec, 14 2009 05:08 (PST)

Lo que sigue es una traducción de una sección del ebook gratuito Foundations of Programming de Karl Seguin.

Regreso a las bases: Memoria

Por más que se intente, los lenguajes modernos de programación no pueden abstraer completamente los aspectos fundamentales de los sistemas computacionales. Por ejemplo, podemos asumir que usted se ha encontrado con las siguientes excepciones .NET: NullReferneceException, OutOfMemoryException, StackOverflowException y ThreadAbortException. Tan importante como es para desarrolladores adopter varios patrones y técnicas de alto nivel, es igualmente importante comprender el ecosistema en el cual su programa se ejecuta. Mirando por encima de las capas proveídas por el compilar de C# (o VB.NET), el CLR y el sistema operativo, nos encontramos con la memoria. Todos los programas hacen uso extensivo de la memoria del sistema e interaccionan con ella en maravillas maneras, es difícil ser un buen programador sin comprender esta interacción fundamental.
Mucha de la confusión sobre la memoria nace del hecho de que tanto C# y VB.NET son lenguajes administrados y que el CLR provee la recolección automática de basura. Esto ha causado que muchos desarrolladores asuman erróneamente que no necesitan preocuparse por la memoria.

Asignación de Memoria

En .NET, como en muchos otros lenguajes, cada variable que se defina está almacenada en el stack  o en el heap . Estos son dos espacios separados asignados en la memoria de sistema que sirven un propósito distinto, aunque complementario. Lo que va donde está predeterminado: valores de tipos van en el stack, mientras que la referencia a tipos va en el heap. En otras palabras, todos los tipos de sistema, como char, int, long, byte, enum y cualquier estructura (ya sean definidas por.NET o por usted) van en el stack. La única excepción a esta regla son los valores de tipos que pertenecen a referencias de tipos – por ejemplo la propiedad Id de una clase User va en el heap junto con la instancia de la clase User misma.

El Stack

Aunque estamos acostumbrados al mágico colector de basura, los valores en el stack son automáticamente administrados aún en un mundo sin colector de basura (como en C). Esto es porque cuando sea que entramos a un nuevo alcance (como un método o una sentencia If) los valores son empujados al stack y cuando salen del stack los valores son liberados. Esta es la razón por la que un stack es sinónimo a LIFO - last-in first-out (último en entrar primero en salir). Puede pensarlo en este modo: cuando se crea un nuevo alcance, por ejemplo un método, un marcador es puesto en el stack y los valores son añadidos como se necesiten. Cuando se deja ese alcance, todos los valores son liberados incluyendo el marcador del método. Esto funciona en cualquier nivel de anidado.
Hasta que veamos la interacción entre el heap y el stack, la única manera real de meterse en problemas con el stack es con StackOverflowException. Esto significa que ha usado todo el espacio disponible del stack. 99.9% del tiempo, esto indica una llamada recursiva interminable (una función que se llama a sí misma ad infinitum). En teoría esto puede ser causado por un muy muy mal diseño de sistema, aunque nunca he visto una llamada  no recursiva usando todo el espacio del stack.

El Heap

La asignación de memoria en el heap no es tan simple como el stack. La mayoría de la asignación de memoria basada en el heap ocurre cuando creamos un objeto new. El compilador averigua cuanta memoria necesitaremos (lo cual no es tan difícil, aún con objetos con referencias anidadas), toma un apropiado montón de memoria y regresa el apuntador a la memoria asignada (más acerca de esto en un momento). El ejemplo más sencillo es una cadena, si cada carácter en una cadena toma 2 bytes, y creamos una nueva cadena con el valor de “Hola Mundo”, entonces el CLR necesitará asignar 22 bytes (11x2) más cualquier adicional necesitado.
Hablando de cadenas, seguramente ha oído que las cadenas son inmutables – esto es, una vez que ha sido declarada una cadena y asignado un valor, si se modifica esa cadena (cambiando el valor o concatenando otra cadena a ella), entonces una nueva cadena se crea. Esto realmente puede tener implicaciones de rendimiento negativas, y por ello la recomendación general es usar un StringBuilder para cualquier manipulación de cadenas significativa. La verdad es que cualquier objeto almacenado en el heap es inmutable con respecto a la asignación de tamaño, y cualquier cambio en el tamaño subyacente requerirá una nueva asignación. El StringBuilder, junto con algunas colecciones, parcialmente pueden sacar la vuelta a esto usando buffers internos. Una vez que el buffer se llena, la misma reasignación ocurre y algún tipo de algoritmo de crecimiento es usado para determinar el nuevo tamaño (el más simple siendo antiguoTamaño * 2). Siempre que sea posible es buena idea especificar la capacidad inicial de dichos objetos para evitar este tipo de reasignación (el constructor para tanto el StringBuilder y el  ArrayList (entre muchas otras colecciones) le permiten especificar capacidad inicial).
Recolectar basura del heap es una tarea no trivial. A diferencia del stack donde el último alcance puede simplemente liberarlo, los objetos del heap no son locales a un determinado alcance. En lugar de ello, la mayoría son referencias profundamente anidadas de otros objetos referenciados. En lenguajes como en C, cuando un programador causa que la memoria sea asignada al heap, debe asegurarse también de remover del heap cuando ha terminado con él. En lenguajes administrados, el motor en tiempo de ejecución se encarga de limpiar los recursos (.NET usa un Recolector de Basura Generacional que está brevemente descrito en la Wikipedia).
Hay muchos incidentes horribles que pueden molestar a los desarrolladores mientras trabajan con el heap. Fugas de memoria no solo son posibles sino muy comunes, la fragmentación de memoria puede causar todo tipo de caos, y varios problemas de rendimiento pueden generarse gracias a comportamiento de asignación extraño o interacción con código sin administrar (lo cual .NET hace mucho debajo del agua).



En esta serie de screencasts vemos como hacer cosas sencillas con ADO.NET Entity Framework, para un primer contacto con esta tecnología.

Introducción

Northwind y pubs

Northwind y pubs:
Para saber como tener instaladas las bases de datos de prueba Northwind y pubs, proveídas por Microsoft

Usando C# en ASP.NET con ADO.NET Entity Framework

Usando C# en ASP.NET con ADO.NET Entity Framework
Un ejemplo rápido para ver como es el contexto de uso del ADO.NET Entity Framework

 

Tareas específicas

Búsqueda en ADO.NET Entity Framework con C#
Búsqueda en ADO.NET Entity Framework con C#
Paso inicial para el resto de las tareas

Alta de registros con ADO.NET Entity Framework con C#
Alta de registros con ADO.NET Entity Framework con C#
Como agregar registros

Baja de registros con ADO.NET Entity Framework con C#

Baja de registros con ADO.NET Entity Framework con C#

Como eliminar registros

Cambios a registros en ADO.NET Entity Framework con C#
Cambios a registros en ADO.NET Entity Framework con C#
Como hacer modificaciones



]]>



Comunidad TJ.NET: Escucha Dev3Cast
Mar, 23 2007 10:30 (PST)

Escucha el podcast Dev3Cast donde encontrarás comentarios, opiniones y noticias acerca de la Comunidad de Desarrolladores .NET de Tijuana.



Comunidad TJ.NET: MSDN Media Center
Jan, 11 2006 04:13 (PST)

Microsoft MSDN Latinoamérica te ofrece los últimos recursos multimedia en español para desarrolladores: presentaciones y demostraciones en directo o diferido, vía Internet, brindadas por expertos de Microsoft, las cuales te ayudarán a mantenerte al día con información sobre los productos y tecnologías que utilizas a diario en el desarrollo de tus aplicaciones. http://www.microsoft.com/spanish/msdn/latam/mediacenter/default.asp



Ya puedes registrarte en el nuevo programa Desarrollador Cinco Estrellas 2005 de MSDN y reforzar tus conocimientos sobre la tecnología .net, revalidando las estrellas obtenidas u obteniendo nuevas estrellas, con la posibilidad adicional de recibir software de Microsoft sin cargo.


  
Sea nuestro patrocinador
Nuevas fotos


Windows 7 Launch Mexicali - SIA


Windows 7 Launch Mexicali - Audiencia


Windows 7 Launch Mexicali - Registro


Derechos reservados TJ.NET