Juegos de Mesa
En clase de juegos de video tuvimos que hacer un juego de mesa, esta tarde cuando pasaba por el CELE (Centro de Lenguas Extrangeras de la UNAM) encontré a un grupo de chicos y chicas jugando Catán y me acordé de eso.
El diseño de juegos es algo muy interesante, y aunque no estuve del todo de acuerdo en la actividad, al final fue divertido, así que les comparto mi juego en este link.
http://akami.mx/index.php/files/MCIC/Juegos+de+Video/En el paquete se incluyen instrucciones y todos los PDF necesarios para imprimirlo, este juego de mesa es un juego basado en los objetivos de milenio de la ONU http://www.un.org/spanish/millenniumgoals/, quizá tenga varios errores de diseño, y como dijo el Ivar (el amigo que me ayudó a diseñarlo) -"Se parece demasiado al Catán" - pero si alguien gusta jugarlo y honrarme con sus comentarios, bienvenido, incluso tal vez alguien pudiera quererlo mejorar, o podría ser de interés para profesores de primaria o secundaria que estén tratando de abordar estos temas.
SaludosSplines
Hace tiempo que no escribo en mi blog por exceso de holgazanería y falta de tiempo, más por lo primero que por lo otro, en esta ocasión solamente quiero compartirles este pequeño programa que hice en mi clase de Redes Neuronales y que es una aplicación interesante de los Splines, que yo generalmente había visto se utilizaban para corregir (aproximar) curvas en software asociado con graficación, sin embargo el Dr. Fernando Kuri (http://www.itam.mx/es/facultad/profesoresDetalles.php?id_profesor=198 quien imparte la cátedra en el IIMAS, nos mostró como utilizar esta teoría para interpolar datos y prepararlos para un mejor procesamiento en una red.
En el siguiente link incluyo el programa, se aceptan críticas, preguntas y recomendaciones para mejorarlo, en realidad el algoritmo medular es como mencioné de un papper del Dr. Kuri, esto es sólo la implementación de el algortimo presentado por él.
El enlace es: http://unam.akami.mx/RedesNeuronales/Splines/. En la pestaña ayuda vienen las instrucciones.
Un Saludo.
De confes e Ingeniería de Software
Hola a todos los que me leen:
En la maestría que estoy estudiando, para motivarte a decidir por una de las áreas, nos hacen ir voluntariamente a fuerzas a las conferencias de todas las áreas.
Hasta ahora para ser honesta no he puesto atención mas que a la mitad de los expositores, lamentable mi falta de concentración porque ha habído temas interesantes (que son a los que suelo poner atención), y realmente todos los expositores merecen respeto por su trayectoria.
Este viernes 5 de noviembre fue la conferencía del Área de Ingeniería de Software, a la que yo me quería ir, y ahora pues ya vi que tomaré algunas materias solamente jeje, en la cual hubo dos puntos que trataron en dos conferencias que me gustaría compartir con ustedes, ya que me hicieron reflexionar acerca del software que desarrollamos.
Una de las exposiciones fue de José Pino Correa (http://artemisa.unicauca.edu.co/~fjpino/estudios.htm) un Ingeniero de Software y empresario colombiano, con una gran trayectoria en su país, lo cual desde mi humilde opinión alabo mucho porque en los países latinoamericanos no hemos destacado mucho a nivel mundial en esos temas, y las empresas que se dedican a estos rubros gozan muchas veces de una gran desorganización, lo digo como leyenda porque me consta solamente el caso de México, sin embargo ningún país de latinnoamérica tiene la mitad de buena fama que nos inspira el ya trillado nombre de "la India".
Retomando lo de la exposición de el PhD. José Pino correa, la cual fue muy basta y debo confesar que en un momento que dejé de poner atención ya no agarré el hilo hasta el final, el punto que quizá no es el más importante, pero que a mi me pareció el más interesante es que mencionó algo como lo siguiente "El gran problema no solo de la ingeniería de software sino de muchas otras áreas es que sólo se reportan los caso de éxito"....
Ciertamente, creo que al menos en lo personal he tenido más errores que aciertos en mi trayectoria como desarrolladora, la cual es muy corta, y desde que inicié a escribir el blog por motivación de mis amigos Emir e Ivan y de mi trabajo en SFS no pensé que yo realmente pudiese aportar algo interesante a las personas, pero ahora mi perspectiva cambia, tal vez debería retroceder un poco de lo que me acuerdo y reportar mis casos de NO ÉXITO, ya que como dice Pino Correa, cuando nos equivocamos y no los reportamos permitimos que otra persona que haga las mismas suposiciones iniciales que nosotros cometa los mismos errores que nosotros ya cometimos.... así que invito a todos los que programan a compartir no solo sus aciertos y los de otros sino aquellos errores que les parezcan importantes en su carrera, pero siempre viéndolos desde el punto crítico de lo que podremos mejorar.
Otra de las cosas interesantes que se dijo en las conferencias es que "Lo que no podemos medir no lo podemos estudiar", eso lo mencionó la maestra Cecilia Pérez Colín, en su exposición acerca de "Métricas de Software"... no recuerdo la frase exacta pero es algo así =), y la verdad es que aunque no me gusta eso de documentar mucho las cosas que hago, de lo cual le hecho la culpa al tiempo jeje... nosotros mismos podemos hacer siempre una evaluación más consiente de nuestros proyectos porque a veces los dejamos pasar con sus errores y virtudes, sin siquiera mencionarlos, es por eso que Pino Correa insisten en que un proyecto de software debe ser estudiado con un método científico para que a partir de él podamos mejorar, lo cual me parece un consejo excelente.
Todo esto me recordó a que una de las cosas que más admiro de Emir, y que lo convierte en uno de los desarrolladores que conozco que más admiro, es que ha aprovechado todas sus experiencias en el campo de la programación para construir herramientas que le permiten construir el software más rápido y mejor, y aunque el a veces se desespera con sus tropiezos la verdad es que su trabajo mejora cada día y es muy superior a la de muchas personas que he tratado. Y eso de construir herramientas de software para crear software es algo que muy pocos Ingenieros hacen y que la verdad es irónico, porque como mencionó la M. en C. Guadalupe Ibarguengoitia (http://hp.fciencias.unam.mx/~gig/), "En casa del herrero asadón de palo", cosa que no aplica con el buen Emir.
Finalmente el último punto que quiero rescatar es que "Para el usuario la interfaz es el sistema", es algo que mencionó el Dr. Fernando Gamboa R., en su plática acerca de "Interfaces de usuario", experiencia que para mí ha sido una de las mas experimentadas en carne propia, "No importa que tan óptima y elegante sea tu solución, si la interfaz es mala para el usuario el software es malo", lo cual es cierto, si no pregúntenle a los usuarios de mi software jajaja...
El Dr. Gamboa dice que esto se debe a que cuando hacemos un análisis de un sistema no le preguntamos al usuario el ¿Por qué quieres hacer esto?, sino el ¿Por qué?... lo cual en lo personal me recuerda al hecho de que por esta situación muchas veces se nos va a los programadores en complacer caprichos del usuario y no en proponer soluciones óptimas.
Bueno pues ya me extendí un poco, ojalá comenten esta entrada puesto que me gustaría conocer su opinión.
Saludos!
Eso me recuerda a que pronto les contaré de las otras conferencias que me gustaron y que por desidiosa no me he dado a la tarea =)
Divide y vencerás
Aqui ando quebrando mi cabeza con un poco de algoritmos y me encontré esta animación que espero les guste. Es de algoritmos de ordenación.
Cosas de HDL
Pues a pesar de lo grandecita que estoy y de haber estado en ingenieria, la verdad es que mi conocimiento sobre hardware penosamente es muy poco, pero ahorita en una nueva etapa de mi vida recibo una nueva oportunidad, y pues a compartir. Aun estoy un poco desorganizada con esta cuestion de mis blogs, pero ya pronto espero dejar la fiaca atrás y ponerme a trabajar.
HDL significa Hardware Design Lenguaje, y como su nombre lo indica es un lenguaje para hacer especificaciones de Hardware, asi que para el que este interesado en empezarle a picar a los circuitos, pues de una vez.Les coloco aquí unos links interesantes para que se den cuenta de lo intersante que es esto:
Mini guia de como trabajar en ISE
http://webs.uvigo.es/mdgomez/SED/Guia_Inicio_ISE.pdf
Open Cores: es una pagina donde personas comparten modulos HDL usan
mucho verilog, hay recursos
http://opencores.org/
Un complemento para eclipse
http://www.sigasi.com/product?gclid=CJjy457-h6QCFcde7Aods0aWIg
Otra pagina para compartir código
http://fpgalibre.sourceforge.net
Software para simulación, los plugins se ven interesantes
http://www.icarus.com/eda/verilog/
Entity Framework con Bases de Datos anteriores a 2008
An error occurred while updating the entries. See the inner exception for details.-->System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: La conversión del tipo de datos datetime2 en datetime produjo un valor fuera de intervalo.
La razón es que estoy trabajando en una Base de Datos SQL que fue creada en SQL server 2005, así que algunos tipos de datos no son compatibles con los usados por el Entity Framework. Para resolverlo solo hay que buscar dentro del Tag Schema la propiedad ProviderManifestToken, y asignarle el valor de 2005, en lugar de 2008 Como en el ejemplo.
Entity Framework, Deletes y las Composite Keys
where documents.Id_Contract = 800;
var lista = query.ToList();
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.-->System.InvalidOperationException: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Esto se debe a que intenté borrar un elemento de una tabla que tenía las siguientes características:
1. Borrado en Cascada
2. Uno de sus decendientes tiene llaves compuestas
Es decir, en el ejemplo, la tabla documents tiene una tabla “hija” llamada Charges cuya clave primaria es una clave compuesta que consiste en el id de Documents y un id secundario, y la especificación de esta relación indica que una vez borrada Documents, se borre Charges automáticamente ( en cascada )
¿Cómo se arregló el problema?
En lugar de utilizar el borrado en cascada de la base de datos, se hizo el borrado primero de todos los hijos y luego del padre mediante un query en linq to entity,es decir:
where documents.Id_Contract = 800;
var documents = query.ToList();
int total = query.Count;
int i = 0;
while ( i < total )
{
int totalCharges = documents [0].charges.Count;
j = 0;
while ( j < totalCharges )
{
Contex.DeleteObject(documents [0].charges[0]);
j++;
}
Context.DeleteObject(documents [0]);
i++;
}
Contex.SaveChanges();
Espero esto los saque de apuros, pero si alguien tiene una mejor solución y tiene mas información sobre el porqué del error, por favor háganmelo saber, porque aun tengo mis dudas.
Un Saludo
HOW TO: Actualizar el modelo de datos en SFS Framework
ANTES DE EMPEZAR…
Como ya sabrán, cuando desarrollas software es muy difícil que en la etapa de Diseño de Base de Datos obtengas un modelo 100% correcto, por lo general, a lo largo del proceso este sufre cambios.
Uno de los problemas que enfrentamos cuando desarrollamos una aplicación en capas es que un cambio en la base de datos trae consigo un poco y a veces un mucho de “talacha” como dijeran en mi tierra, porque este cambio impacta a varias de las capas de tu desarrollo, por lo menos a la capa de Objetos de Negocio y a la capa de Acceso a Datos, así que puedes perder mucho tiempo realizándolo, además que debes tener mucho cuidado en que el cambio se lleve a cabo en todos los lugares pertinentes, porque sino esto te puede traer problemas a futuro.
Una de las ventajas del Add-in de SFSdotNet es que hacer un cambio en el modelo de base de datos se vuelve algo mucho más sencillo, y te garantiza que al menos todo el código generado (que es mucho) conserve su integridad, pero no por ser fácil deja de tener su chiste hacerlo. Es por ello que en este post haré el intento de explicar (o moriré en él) como llevarlo a cabo.
La primera recomendación es anterior a que regeneres el modelo, es muy importante que en tu servidor de versionamiento guardes una versión con el modelo COMPLETAMENTE EN BLANCO, antes de que carges por primera vez la base de datos, esta versión debes guardarla con una descripción que siempre puedas identificar, en este caso la guardamos con el nombre de Modelo Limpio, esta es una buena práctica.
Y por si acaso algún día te falla el versionador hasta puedes hacerte un respaldo manual de este archivito en tu disco duro, aunque práctica no es lo mejor que puedes hacer, es para casos de contingencia, pues ya me pasó que alguna vez se cayó el servidor de versiones y ups!
Ahora comenzaremos, para esta guía utilizaremos Visual Studio 2008, y como versionador Team Foundation.
MANOS A LA OBRA
.PRIMER PASO: OBTENER EL MODELO LIMPIO
Cuando quieras regenerar el modelo, descarga la versión del archivo que lo contiene la versión en blanco del modelo, lleva a cabo ese proceso únicamete en el .edmx para no perder los cambios.
Si estás utlizando Team Foundation, solamente:
1. Ve al Explorador de Soluciones
2. Click con el botón derecho en el modelo .edmx
3. Click en el menú contextual “Get a Specific Version”
4. En el cuadro de diálogo”Get” que acaba de aparecer, se muestran los archivos que vas a descargar del versionador (unicamente debe ser uno) y abajo hay un combo con la etiqueta “Title”, generalmente se encuentra seleccionada la opción LastVersion, cambia a Changeset
5. Enseguida aparecerá a la derecha de este combo un cuadro de texto con la etiqueta “Changeset”, junto hay un botón (…) el cual debes clickear
6. Se abrirá una ventana con el título “Find Changes”, da click en el botón “Find” para que puedas ver todas las versiones del archivo.
7. Elige la versión que contenga el modelo limpio (como se menciona al principio)
8. Da click en el botón OK
9. Da click en el botón Get.
ACTUALIZANDO EL MODELO EDMX Y SFSEDMX
1. Abre el archivo .edmx dando doble click sobre el. Deberá aparecer el modelo en blanco.
2. Click derecho sobre cualquier área del archivo abierto y aparecerá un menú emergente en el que debes seleccionar la opción Update Model From Database.
3. Aparecerá un cuadro de diálogo “Update Wizard” con el rótulo Choose Your Database Objects. En la ficha Add seleccionar Tables, enseguida click en el botón Finish.
4. Aquí es muy importante dar Guardar los cambios en el archivo
5. Lo siguiente será dar click con el botón derecho en “Rename Entities”, que es parate del Add-In del SFSFramework
a. Si en modelo al que deseas actualizar tu solución incluye tablas que no estaban en el modelo anterior, da click en Get table names from Entity model y a continuación Generate Entity Names.
6. A continuación da click en Rename Entities.
7. Debido a que tienes abierto el modelo es muy probable que aparezca un cuadro de diálogo con la leyenda:
This file has been modified outside Editor. Do you want to reload it?
Da click en “Yes” y ahora espera un poco, ya que este proceso suele tardar unos minutos, lo cual es una buena señal.
PROPAGAR LOS CAMBIOS EN LAS CAPAS
Antes que nada, abre la vista Output del visual studio para visualizar mas fácial cuando se han generado las plantillas. Esto se hace en el menú View, la opción Output, o bien con las teclas Ctrl + W + O.
1. Si estás usando un versionador, en particular si usas el Team Explorer, recuerda que antes de hacer todo esto deberás de dar click derecho sobre toda la solución y elegir la opción “Check out for edit”, esto puede tardar un poco, pero es para que no recibas mensajes de error porque no tienes permisos de cambiar los archivos.
2. Expande el proyecto .BusinessObjects de tu arquitectura, recuerda que antes de esta etiqueta tendrá el nombre del proyecto y si tu así lo elegiste el nombre de la compañía, la capa puede llamarse por ejemplo SFS.Northwin.BusinessObjects.
3. Dentro de la solución busca el archivo SfsTemplate1.tt, da click derecho y elige la opción “Generate T4 Transformation”.
Si tienes abierto Output podrás ver el menage “Generation has been terminated” cuando la generación germine.
4. Da click con el botón derecho en el icono del proyecto SFS.Northwind.BusinessObjects dentro del Solution Explorer y elige la opción “Build”, si todo lo anterior está bien hecho recibirás un mensaje en la barra de estado que dice “Build Succed”.
5. El paso siguiente es hacer Build sobre el proyecto SFS.Northwind.BusinessObjects.EFPocoAdapter, de lo cual también debes obtener un “Build Succed”.
6. Ahora busca en la solución el proyecto SFS.Northwin.BR, está dentro de la carpeta 2. BR. Expándelo.
7. Dentro del proyecto BR hay un par de archivos de template (extención .tt) que son: SfsTemplate1.tt y SfsTemplate2.tt, al igual que lo hiciste en el paso anterior, sobre cada uno da click derecho y elige la opción “Generate T4 Transformation”, espera un poco, y tendrás generadas las plantillas.
8. Si todo esta bien y no hay ningún error da click con el botón derecho sobre el ícono del proyecto .BR y elige “Build”, nuevamente debes obtener un mensaje Build Succed.
9. La siguiente capa que deberás generar es el proyecto con terminación MVCP, aquí deberás buscar un archivo que se llama All.MVCP.tt, dale click derecho y luego elige “Generate T4 Transformation” en el menú emergente. Una vez hecho esto debes comprimir el proyecto y refrescarlo (click derecho y Refresh sobre el icono del proyecto), luego vulve a expandir el nodo, si tienes NUEVAS entidades, entonces se habrán generado nuevas carpetas, las cuales debes incluir en el proyecto ( click derecho e Include in Project), otra cosa que puede pasar es que hayas ELIMINADO alguna entidad en la base de datos, o bien la hayas renombrado, si hiciste esto busca la carpeta con el nombre de las entidades que ya no están y excluyelas del proyecto (click derecho y Exclude from Project)
Un error que se genera cuando no has eliminado los archivos sobrantes y compilas el proyecto es el siguiente:
"Error 115 The type or namespace name 'HostServiceInstances' does not exist in the namespace 'TravelSystem.MVCP' (are you missing an assembly reference?)...
Nota: Recuerda que tu proyecto debe tener oprimido el botón Show All Files en el Solution explorer
10. Ahora da click con el botón derecho en el nodo principal del proyecto MVCP y elige Build, deberás obtener un feliz “Build Succed”. Si no es así verifica que no hayas olvidado quitar ninguna entidad de las que ya no existan o cuyo nombre haya cambiado, es un error común cuando regeneramos esta capa.
11. El siguiente proyecto que deberás actualizar esl el que termina en .Web, que tiene el nombre de tu solución, es decir en este caso SFS.Northwind.Web. Para ello busca dentro de la carpeta WebForms un archivo llamado All.ASCX.tt, al igual que en los casos anteriores da click con el botón derecho y “Generate T4 Transformation”, una vez hecho esto refresca el proyecto, para ver si existen nuevas entidades, y si se han creado nuevas carpetas debes incluirlas en el proyecto. Una vez que las incluyas busca dentro de CADA UNA de ellas el archivo con la terminación .resx, que es un archivo de recursos de idioma, da click derecho sobre el y elige la opción “Run Custom Tool”, una vez hecho esto compila el proyecto (click derecho sobre el nodo principal y Build), y ahora y estas listo para correr tu aplicación.
Nota: Un error común que se genera por no utilizar "Run Custom Tool" es el siguiente:
Error 150 'TravelSystem.BusinessObjects.CustomerInfo' does not contain a definition for 'CustumerType' and no extension method 'CustumerType' accepting a first argument of type 'TravelSystem.BusinessObjects.CustomerInfo' could be found (are you missing a using directive or an assembly reference?)...
Y como dijera Porkey: Eso es to.. eso es to.. eso tooodo amigos….
SFSdotNet Add In
En este momento tal vez algunos de los lectores de este blog se esten preguntando ¿Qué es el SFS Add-in?... Para resolver su duda estoy yo aquí hoy =D ( o al menos eso intento ^_^')
Todos los desarrolladores sabemos que la mayoría de proyectos que hacemos tienen muchas cosas en común, y muchos de los programadores ( como yo ) habíamos optado hasta ahora en que cuando teniamos que iniciar un nuevo proyecto repetiamos muchas de las cosas desde el principio.
Algunos de nostros tal vez, si ya llevamos mucho tiempo trabajando sobre le mismo lenguaje, podemos tener tal vez algunos componentes ya creados que nos faciliten la vida, pero seguramente todos odiamos tener que pasar por la parte de hacer las clases de Acceso a datos y los clásico ABC de los catálogos.
Es cierto que para esto del reuso de código ya contamos con muchas herramientas en visual estudio, pero tal vez a nos gustaría saltarnos la parte repetitiva y asi agilizar nuestro trabajo, y creanme, a nuestros clientes o jefes les agradaría aun más ver resultados mas rápidos.
Seguramente les ha pasado que, en la fase de el planteamiento de diseño de la base de datos y planteamiento de la arquitectura del sistema, se tardan mas de una tercera parte del tiempo que lleva desarrollar el software en total, consideren que esta cifra la estoy tirando verdaderamente al aire, porque no me día la tarea de consultar este dato con el santo de los programadores, más bien me baso un poco en mi experiencia personal... pero retomando el tema, si alguna vez les ha sucedido que para hacer las cosas mejor se toman su buen tiempecito en el diseño de la Arquitectura del sistema, y luego otro buen tiempecito en escribir las clases base de esta, es muy probable que también les haya pasado que en ese tiempo no tienen nada que enseñarle a los futuros usuarios de su aplicación, y ustedes saben que han trabajado mucho, sin embargo es muy dificil en esta fase de desarrollo explicarles a personas que no son de nuestra area que rayos estamos haciendo, mucho menos es facil explicar esto a las personas a quienes no les gusta intentar aplicar mejores practicas en su desarrollo y no les interesa mucho hacer una arquitectura sino que simplemente se sueltan a tirar lineas de código y así entregan resultados rápidos, creo que la mayoría de nosotros incluso terminamos haciendo algo como esto.
Pues bien, ha llegado la solución a nuestros problemas para aquellos que desarrollamos en Visual Studio 2008 y utilizamos bases de datos en SQL. Con el Add-In de SFS, una vez que hayas creado tu base de datos, podrás tener una aplicación con una arquitectura n-tier (en capas) bastante robusta, y los ABC básicos de tus catálogos para web en cuestión de 10 minutos...
En este momento yo creo que estas diciendo "¿Qué cosa?.. Esta mujer miente", pues ¿Qué creen?... esta mujer si miente, pero no en esta ocasión...
Una vez que hayas instalado el Add-in de SFS, y tengas lista tu base de datos, puedes entrar a Visual Studio, crear un proyecto en blanco, y con un simple click derecho en el nodo principal, tu aplicación abrá comenzado a crearse. Si no me crees échale ojo al video que se encuentra en el siguiente enlace.
Akami on SFS
Espero que lo que yo pueda compartir sea de utilidad para todos ustedes, para ser breve sólo quiero decir que es un placer estar aquí y que empiece la función.... ¡¡¡sean todos Bienvenidos al mundo de Akami!!