Descarga Internet Explorer 9  
Entrar   |   Registro ]
Inicio   |   Eventos   |   Foros   |   Galerías   |   Recursos   |   Directorio   |   Planeta  



Gente de la Comunidad TJ.NET


Mario Cornejo: Dev3Cast sobre NancyFx
Feb, 02 2012 12:39 (PST)

El pasado 16 de enero Gabriel Flores y yo platicamos con Miguel Ángel Jiménez sobre el web framework Nancy. Miguel nos platicó de que se trata y a grandes rasgos como es que se usa. Además hablamos un poco sobre el open source en la plataforma .Net

Pueden escuchar la platica y unirse a ella comentando en el post del dev3cast



El pasado 2 de diciembre se publicó un episodio del dev3cast podcast donde participé junto con Eber, Samuel y Gabriel. En esta ocasión hablamos sobre MongoDB, redis y como usar en proyectos de software estas tecnologías NoSQL.



dev3cast: TDD con Javascript
Feb, 01 2012 03:22 (PST)



Mario Cornejo: Iniciando con jQuery
Jan, 27 2012 05:10 (PST)

He estado pensando en escribir alguno que otro post sobre JavaScript. No digo que vaya a empezar una serie ni mucho menos (luego las dejo a medias) pero si escribir algunos post. Así que iniciamos por el principio. Lo básico de jQuery.

El ejemplo será una lista de comentarios a la cual le quisiéramos ir agregando elementos a la lista. Tenemos el siguiente HTML:

<html>
<head>
<title>Comentarios</title>
</head>
<body>
<ul id="comments">
<li>Comentario 1</li>
<li>Comentario 2</li>
</ul>
<input id="comment" type="text" />
<button id="add" >Agregar</button>
</body>
</html>

La intención es que cuando el usuario haga clic en el botón “Agregar” se agregue lo escrito en la caja de texto a la lista de comentarios.


Lo primero que debemos hacer es agregar la referencia al código de jQuery. Podemos usar una copia local o hacer uso de alguna red de distribución de contenidos (CDN).


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

con esto ya podemos hacer uso de jQuery. Así que agregamos un bloque de script a nuestra página para agregar la funcionalidad que requerimos.


<script>
$(function () {
$("#add").click(function () {
var newCommentTextBox = $("#comment");
var commentText = newCommentTextBox.val();
$("#comments").append("<li>" + commentText + "</li>");
newCommentTextBox.val('');
});
});
</script>

Lo primero que hacemos es pasar como parámetro a la función “$” de jQuery una función que queremos que se ejecute al cargarse la página. Dentro de esta función tenemos la línea $(“#add”).click(function () { que lo que hace es primero buscar al elemento con id=“add”  (en este caso el botón) después llamar el método click y pasarle la función que queremos ejecutar cuando se haga un clic en el elemento.


Dentro de la función buscamos el elemento id=“comment” (que es la caja de texto) y obtenemos su contenido con la función val(). Después agregamos un elemento más a la lista de comentarios (id="comments") con el texto que obtuvimos de la caja de texto. Por último limpiamos la caja de texto con newCommentTextBox.val('');.


Espero que este post sirva para que quienes aun no se animan a entrarle a JavaScript vean lo fácil que es, empiecen a perderle el miedo y aprovechen las ventajas que tiene.



Programación ASP.NET MVC3 con Ajax, Entity Framework, Javascript y más IT@Baja Martes 31 de enero de 2012 6PM



Al estar trabajando en un proyecto sobre ASP.NET MVC pequeño. Pensé que sería mas fácil animar a escribir pruebas, a personas que no están acostumbradas, si al escribirlas no necesitaran usar librerías externas. Como son los mocking frameworks y las librerías para las aserciones. Así que decidí escribir las pruebas unitarias usando solo las herramientas que me brinda Visual Studio. Eso significa usar msTest y escribir implementaciones falsas de las dependencias de los sistemas bajo prueba.

Llegué a pensar que eso significaría escribir mucho más código ya que tendría que proporcionar varías implementaciones que un mocking framework me ahorraría. Sin embargo he notado que la cantidad de código no es mucho más. Ya que con las mocking frameworks necesitaba hacer más setups dentro del test. Es claro que tiene sus ventajas y desventajas.

Noté que para un programador, que no esta acostumbrado a escribir pruebas unitarias, es fácil entender qué es lo que pasa cuando usamos una implementación falsa donde puede ver el código. A la vez es fácil que escriba sus implementaciones que solo le sirven para pruebas. En ocasiones cuando trataba de explicar TDD (a gente que no esta acostumbrada) usando un mocking framework, u otra librería, notaba que varios se perdían un poco tratando de entender el código de setups de moq o de NSubstitute. Con implementaciones falsas escritas por ellos mismos (o que pueden ver lo que pasa) es más fácil concentrarse en (y encontrarle más sentido a) la prueba.

El método de prueba puede centrarse en los efectos secundarios del sistema bajo prueba, en lugar de la implementación. Es decir no pruebas que realice llamadas a ciertos métodos de las dependencias sino que tenga los efectos secundarios que se espera.

Una de las desventajas es que se necesita escribir la implementación falsa para que la prueba pueda correr y eso hace que pierda un poco el flujo de lo que se esta probando. Al tener que abrir otro archivo y escribir algo de código. Además que terminas con más código que mantener.

Otra es que a pesar de tener una implementación falsa que se puede compartir. De cualquier forma se necesita algo de código en la prueba para cumplir con las precondiciones que la prueba requiere y terminas con la implementación falsa además de código de setup. Otra vez más código que quizás el mocking framework me hubiera ahorrado.



VIGENCIA DE LA CONVOCATORIALa fecha apertura de la Convocatoria es el 13 de enero de 2012 y la fecha de cierre el 20 de abril del presente año. Dentro de la misma Convocatoria se tendrán tres cortes: el primero el 13 de febrero, el segundo el 20 de marzo y el tercero el 20 de abril del presente. Cada corte considerará las Solicitudes de Apoyo que ingresen a más tardar a las 18:00 hrs. (zona centro) de la fecha establecida que cumplan con las características previstas en los Criterios de Operació



dev3cast: NancyFx
Jan, 16 2012 04:13 (PST)



Mario Cornejo: ¿Seguir usando Delphi?
Jan, 13 2012 11:22 (PST)

Aun mantengo y agrego nueva funcionalidad a una aplicación que desarrollé hace algunos años usando Delphi. Específicamente con Turbo Delphi, basado en la versión 2006 del entonces conocido como Borland Developer Studio. En realidad no se trata de una sola aplicación sino de una familia de aplicaciones para la administración de un negocio de venta al menudeo y medio mayoreo.

producto

Sigo agregando nuevas características, conforme las necesidades de la empresa, lo cual no es muy seguido. Cada vez que tengo que agregar alguna funcionalidad me pregunto ¿Debería migrar el código fuente a alguna otra tecnología?

¿Por qué cambiar?

Bueno si funciona ¿Para que cambiar? es la otra pregunta que me hago inmediatamente después de pensar en migrar. Las razones son:

  1. Mi forma personal de programar ha cambiado: al usar Delphi debo regresar a usar objetos como datasets, escribir SQL a mano (Sin ORM’s), mucho arrastrar y soltar para después modificar propiedades en el object inspector. Cuando lo que quisiera hacer es utilizar características de lenguajes y frameworks nuevos.
  2. Documentación: Ya que no es una tecnología que use todos los días, cada vez que regreso a algún proyecto y necesito agregar algo de código o modificar alguna propiedad necesito buscar documentación para saber cual es la manera Delphi de hacerlo. No quiero escribir mucho código para algo que con cambiar alguna propiedad o arrastrar un componente hubiera bastado. No es mucha la documentación que se encuentra y la mayoría de esta es vieja o trata las nuevas características que aun salen para Delphi.
  3. Precio: Otra razón para no migrar a una versión más reciente de Delphi (ahora parte de Embarcadero) es el precio de la licencia. Es más cara que una licencia de VisualStudio y siento que con VS puedo hacer más cosas que solo escribir aplicaciones de escritorio. Además de que las puedo desarrollar de una manera “moderna”.
  4. La tecnología puede llegar a ser obsoleta: Al seguir desarrollando en la versión actual corro el riesgo de no encontrar soporte, alguien que pueda ayudarme, cuando necesite realizar algo que no este soportado en la tecnología actual. Como puede ser la integración con sistemas más “modernos”.

¿Por qué seguir en Delphi?

Aun con las desventajas que tiene el mantener la aplicación en una tecnología “vieja” creo que tiene ciertas ventajas mantener el código donde esta:

  1. La aplicación funciona:Esta es la principal razón por la que sigo usando Delphi para esos proyectos. Aun no se ha presentado problemas graves por estar usando esa tecnología.
  2. Tiempo de desarrollo: Es más rápido agregar características a las aplicaciones usando la tecnología actual que reescribir todo en alguna tecnología “nueva”. Además el código no esta mal/feo es relativamente fácil de seguir o de modificar para después agregar nueva funcionalidad.
  3. Costo-Beneficio: Al final todo se reduce al costo beneficio. No estoy convencido que el costo que implica reescribir toda (o gran parte) de la aplicación tenga un beneficio que valga la pena el gasto. Si bien es posible que en un futuro sea más fácil seguir usando una tecnología moderna; por el momento no ha causado un problema seguir desarrollando en Delphi. Solo alguno que otro enojo (como programador) por no poder usar lambdas o cosas así.

Conclusión

Al no poder justificar completamente el gasto creo que seguiré desarrollando (por el momento) las aplicaciones principales en Delphi mientras me sea posible. Quizás haga proyectos pequeños, relacionados, usando alguna otra tecnología (como .Net) para ir migrando poco a poco. Pero sin descuidar que el desarrollo principal en estos proyectos es en Delphi. Aun sigo considerando también comprar la versión más reciente de Delphi aunque es lo menos probable.



ponte: dev3cast
Dec, 13 2011 07:06 (PST)

Con la Comunidad .NET Tijuana y junto con Mario Cornejo he venido participando en podcast tecnológicos para desarrolladores con temática general para cualquiera que trabaje desarrollando software. Son entrevistas y discusiones con especialistas en los temas donde se aclaran y se someten a consideración puntos de vista en episodios de aproximadamente 30 minutos para hacer más conciso lo discutido y haya menor tiempo de distracciones.  Algunos de los temas más populares en el 2011 han sido:

Cualquiera de ellos los puedes descargar o suscribirte para oirlos a tu tiempo en tu lector de RSS favorito.

 

 



CoffeCamp del año Starbucks Blvd. Salinas Sábado 17 de diciembre de 2011 9 a 12



dev3cast: mongoDB y redis
Dec, 02 2011 03:45 (PST)



dev3cast: FubuMVC
Nov, 12 2011 09:04 (PST)



dev3cast: ASP.NET vNext
Oct, 26 2011 04:19 (PST)



]]>



]]>



Comunidad TJ.NET: #cdti 2011
Aug, 11 2011 08:32 (PST)

Comunidad + Desarrollo + Tecnología + Innovación Centro de Gobierno del Estado Tijuana 13 de agosto de 2011 8AM a 6PM



]]>



Estás trabajando en tu aplicación web con Entity Framework y C# en tu máquina de desarrollo usando la versión más reciente de SQL Server 2008 feliz de la vida. Pero al momento de hacer la implementación en el servidor de producción, te encuentras con este error:

The version of SQL Server in use does not support datatype 'datetime2

Y entonces te acuerdas, en el servidor de producción tienen instalado SQL Server 2005. No hay problema, solo ubica el archivo EDMX de tu modelo y con el click derecho del mouse selecciona la opción del menú emergente "Abrir con..."

Hay que ubicar la etiqueta Schema y en el atributo ProviderManifestToken colocar 2005 en lugar de 2008. De esta manera le indicas a Entity Framework que trabaje en modo de compatibilidad de 2005 y así trata apropiadamente los tipos de dato de fecha.

<Schema Namespace="SAOModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" >

 

* Este código fuente ha sido resaltado con Source Code Highlighter.

 



A veces necesitas hacer una consulta basándote en datos que no estarás seguro tener porque simplemente es tu usuario quien los eligirá y pues, no eres adivino ¿verdad?

Vamos a basarnos en la base de datos de Northwind para el siguiente ejemplo (si no la tienes, checa el video de como obtener las bases de datos de pruebas Northwind y pubs). En esta base de datos tenemos Proveedores (Suppliers) que ofrecen Productos (Products). ¿Qué pasaría si necesitaramos saber los productos de un proveedor en específico? Si ese proveedor específico fuera Exotic Liquids el código Transact-SQL sería algo tan simple como esto:

SELECT *
FROM   products
WHERE  supplierid = (SELECT supplierid
                     FROM   suppliers
                     WHERE  companyname = 'Exotic Liquids') 

Ya se que también lo podemos poner con INNER JOIN pero estoy tratando de demostrar un punto, aguarda un poco.

Si la interfaz gráfica lo permite, y si el usuario quiere saber productos de más de un proveedor podemos hacer algo igual de sencillo usando WHERE IN. Imagínate un ListBox donde el usuario selecciona más de un proveedor de cual escoger productos, o una caja de texto con autocompletado. En este caso estamos obteniendo los productos de los proveedores que empiezan con la letra E:

SELECT *
FROM   products
WHERE  supplierid IN (SELECT supplierid
                      FROM   suppliers
                      WHERE  companyname LIKE 'E%') 

Donde usamos un campo de la tabla para que encuentre todos los valores que cumplan lo que tenemos entre paréntesis. Básico ¿no? pero ¿como hacemos para llevar esta sentencia SQL a Entity Framework?

Si estás usando Entity Framework 4.0, es muy similar a Linq2SQL, donde puedes usar el método Contains de un arreglo y podrás usar los IDs que ocupas para hacer el filtrado de elementos:

  //Si usamos Linq2SQL usar
  //NorthwindDataContext nc = new NorthwindDataContext();
  NorthwindEntities ne = new NorthwindEntities();

  int[] supplierIDs = { 1, 27 };

  var products = from p in ne.Products
          where (supplierIDs.Contains((int)p.SupplierID))
          select p;

Aquí dos cosas que aclarar, primero, se hace un cast al tipo de dato int para asegurar que los SupplierID coincidan. La otra es que habíamos quedado que no podemos saber cuales proveedores pudiera escojer el usuario, aunque aquí se forzó al proveedor con supplierID 1 y 27 (que son los de Exotic Liquids y Escargots Nouveaux, sí, ambos empiezan con E).

Entonces, ¿cómo hacerlo más dinámico usando Linq to Entities o Linq2SQL? Vaciamos en una variable la consulta, pero exclusivamente con las llaves primarias que nos interesan, y ese resultado lo convertimos a un arreglo, que sería el que finalmente usamos para la consulta final:

  //Si usamos Linq2SQL usar
  //NorthwindDataContext nc = new NorthwindDataContext();
  NorthwindEntities ne = new NorthwindEntities();

  var suppliers = from s in ne.Suppliers
          where (s.CompanyName.StartsWith("E"))
          select s.SupplierID;

  int[] supplierIDs = suppliers.ToArray();

  var products = from p in ne.Products
          where (supplierIDs.Contains((int)p.SupplierID))
          select p;

La clave aquí es usar en la consulta solo el campo que nos interesa (SupplierID) y convertir el resultado en arreglo para poder pasarlo a la segunda consulta ya que con el Contains lo tendremos resuelto. El ejemplo es con proveedores cuyo nombre empiece con E, pero puedes hacerlo aún más dinámico obteniendo ese dato de una caja de texto, un dropdownlist o lo que se te ocurra.

Consideraciones:

En Entity Framework 3.5 no podemos usar Contains, para hacerlo puedes usar el workaround propuesto por Shimmy en StackOverflow.

Puedes repasar como preparar tu ambiente de desarrollo con Entity Framework con el video Búsqueda en ADO.NET Entity Framework con C#.

La otra es que siempre son bienvenidos los comentarios para mejorar el código o ver que otras aplicaciones tendrían para esta manera de consultar datos que aunque muy común si trabajamos con Transact-SQL en Linq no es del todo clara.

Fuentes:

* El código fuente fue coloreado con Source Code Highlighter.


  
Sea nuestro patrocinador
Nuevas fotos


Windows 7 Launch Mexicali - SIA


Windows 7 Launch Mexicali - Audiencia


Windows 7 Launch Mexicali - Registro


Derechos reservados TJ.NET