Tipo de Dato Bag

Nuevamente hace un rato que no escribía, ya se me había incluso quitado la costumbre, sobre todo porque el público objetivo del tutorial no lo leyó nunca ¬¬, pero bueno, mejor volver a la modalidad ecléctica donde escribo lo que se me ocurre y no me preocupo de mucho más, es más sano, que sea solo una catarsis  y una forma de dejar registro de las cosas que sean interesantes e importantes para mí. Luego del preámbulo aburrido y culposo clásico de cada periodo sin escribir ataquemos el punto, estructuras de datos.

Últimamente he estado leyendo el libre Algorithms, de Robert Sedgewick y Kevin Wayne, para refrescar conocimientos y repasar las materias ya añejadas en el inconsciente (esas cosas que siempre usas de una u otra forma pero no recuerdas al pie de la letra) y en la parte de las estructuras de datos me encontré con una que no conocía, así que para que no se me olvide la voy a escribir por acá, les presento el tipo de dato Bag (bolsa o bolsón sería en español).

Bag es un tipo de dato de colecciones de ítems cuya particularidad es que no soporta la eliminación de elementos, se puede instanciar un nuevo Bag, tiene un método para añadir un ítem al Bag, un método que pregunta si está vacío, uno que entrega el tamaño, y la posibilidad de iterar sobre todos los ítems, solo eso, no está ordenado, no deben los objetos ser iguales, no exige nada de eso. Por lo que una interfaz para este tipo de dato sería como la siguiente:

Este tipo de dato es muy útil para impedir que se eliminen ítems, ya que no implementa esta función y que no importe el orden en el cual se guardan los ítems en la estructura de datos. Un ejemplo de utilización puede ser por ejemplo cuando se quieren sacar datos estadísticos de un conjunto, con el conjunto definido no se quiere que se eliminen datos de este porque modifica los cálculos de la estadística y el orden en que ingresa no es importante ya que lo interesante es el resultado estadístico.

Eso, interesante, un tanto específico pero muy útil bien implementado.

Página MVC Embebida en dll

Ya, ayer fue básico hoy será un tópico avanzado para compensar, vamos a ver como con .Net MVC 4 se puede dejar una página web embebida, es decir vamos a crear un .dll con un controlador adentro y sus páginas web para poder posteriormente distribuirla solo como .dll e inyectarla de ser necesario.

No me voy a llevar el crédito solo, este ejemplo lo cree tomando como base el siguiente grupo de post en Los Techies

Code Chef

He estado un poco flojo este último tiempo y no he posteado nada de nada en los últimos días, como este blog no lo lee nadie la verdad como que da un poco lo mismo XD, pero lo importante es que me propuse escribir todos los días y no lo he echo, aunque la falta fue justificada igual no viene al caso y estoy en deuda, me pongo al día si o si esta semana, pero como no comenta nadie a veces a uno le da un poco de lata, bueno… comenten y me animaré mas.. si alguien lee esto :(

Bueno enfoquemos, hoy es martes, el día del link interesante, la semana pasada postie pex for fun, que es un enlace donde en línea se resuelve un problema, es tan bueno que un amigo lo usa como examen para las personas que entrevista cuando recluta personal, esta semana voy a poner otra opción de preguntas con un grado mayor de dificultad.

Code Chef, es una comunidad en línea que hace concursos de programación constantemente, en este caso se compite contra las demás personas de la comunidad y no contra una solución secreta, tiene el formato de las competencias de la ACM ICPC, con una entrada por la entrada estándar, que es básicamente leer por consola los datos de entrada, una salida con un formato por defecto, el programa se prueba contra muchas entradas y se ranquea si soluciona el problema en el tiempo determinado, los problemas como entrenamiento están clasificados y constantemente hay concursos, se están buscando una base de problemas para dar a personas que recién aprenden a programar o problemas complejos que se pueden solucionar con algoritmos avanzados, este es el lugar para encontrarlos, es muy bueno muy completo y no solo miden si la solución resuelve el set de problemas completo, si no si lo resuelve rápido y quien lo resuelve más rápido.

Eso, si quieren una base de problemas más complejo que se corrija en tiempo real, acá es su lugar, hay de todos los grados de complejidad, ojalá les guste.

 

Test de método privado estático C#

Hace 2 semanas escribí un post, sobre como testear métodos privados, no me percaté que con esta forma solo se podían escribir test unitarios para métodos de instancia, para los métodos estáticos privados se utiliza otra modalidad.

Supongamos que por alguna razón usted necesita métodos estáticos (que según yo, junto con la sentencia if, son el diablo, un cáncer que hay que aprender a vivir con el, pero intentar erradicarlo) y que por una razón aún más oscura se deben testear (como acotó Erwin en el post anterior, se debe testear comportamiento y no implementación), esto no debería suceder, pero supongamos.

Modifiquemos la clase matemática que teníamos antes para hacer la maldad de dejarla estática :’( … debo insistir…

Con esto se debe crear otro método de prueba para esta clase, esto quedaría de la forma

Como se ve, se crea un objeto para envolver la clase Matemática que es estática, este objeto es de tipo PrivateType, con este objeto creado y a través de ese objeto, se puede acceder al método InvokeStatic, entregando como parámetro el nombre del método estático privado que se quiere testear y hacia al lado los parámetros de entrada de dicho método estático, como resultado entrega un objeto de tipo object, que como la vez anterior debía ser convertido al tipo del resultado que entrega el método para hacer el assert.

Eso, se los dejo, espero sinceramente que nunca lo usen, pero si no hay de otra, acá como se hace.

Pex for fun!!

Ya como es costumbre toca compartir algo entretenido y diferente pero al mismo tiempo nerd, este martes le toca a Pex for fun.

Esta es una plataforma muy entretenida de programación en línea, es un juego donde hay una implementación secreta, y por medio de los test unitarios de esta implementación se debe llegar a programar la misma solución, o muy parecida que entregue la misma respuesta.

Esta plataforma no solo permite resolver los puzzles, si no además subir los tuyos, soporta tres lenguajes de programación C#, Visual Basic y F#, y tiene una sección donde se puede encontrar un tutorial para aprender a programar en cualquiera de estos lenguajes.

http://www.pex4fun.com/ Absolutamente recomendable y adictivo, si sabes programar y te gustan las ñoñadas, pero bueno, yo ando por ahí con un mediocre 44 que mejoraré… eventualmente.

El Mecanismo de Anticitera

Yo pensaba que los primeros artificios mecánicos que iniciaron la computación, fuera del muy conocido ábaco que es algo así como el mono de las computadoras en términos de evolución, se hicieron todos en por ahí por el 1600, hechos por Schickard, pero al parecer estaba equivocado, los griegos al parecer ya tenían ya artefactos mecánicos que funcionaban con la presión y complejidad de esas máquinas construidas por Schickard o quizás aún más complicados.

Descubierta en 1901, este artefacto completamente mecánico data aproximadamente del año 87 antes de Cristo y tiene como funciones ser, una calculadora de ciclos lunares y solares que permite predecir eclipses, además tiene incorporado un pequeño calendario de 4 años, que indica los ciclos olímpicos griegos, las manillas grandes corresponden a los ciclos solares y lunares, y las pequeñas a los ciclos de las olimpiadas.

En wikipedia se puede leer el artículo completo sobre este artefacto, aunque como de costumbre el artículo en ingles es mucho más completo. Además hay videos que realizó el museo de historia de la computación, que aunque están en ingles solamente si lo pueden ver lo recomiendo mucho, es muy corto dura solo 6 minutos y da un muy buen resumen sobre este artefacto.

Es increíble todo lo que podían hacer los griegos, y es terrible pensar en la cantidad de cosas que se pueden haber perdido durante el oscurantismo, aunque entiendo que el miedo y la ignorancia provoca cosas horribles, cada vez que me topo con algo sorprendente hecho por los griegos solo puedo pensar en la cantidad de cosas que se perdieron y me da una profunda rabia con la ceguera de la época medieval, siendo católico y todo pienso que es terrible la cantidad de conocimiento que se perdió, eso sin ahondar en las vidas humanas y atrocidades que se hicieron, pese a todo eso es sorprendente y emocionante pensar en un “eslabón perdido” de la computación.

Espero que les guste, para vean que ya los griegos hacían sus propias calculadoras y computadoras estelares, aunque con el lenguaje de programación de las ruedas dentadas, que para mi siempre ha estado muy subestimado.

Patrón Arquitectónico – Domain Model

Al igual que hoy, la semana pasada escribí sobre un patrón arquitectónico, transacción script, esta semana voy a comentar el patrón Domain model.
Este patrón, tiene como meta fundamental expresar el negocio a ser sostenido en términos de objetos, estos objetos tienen comportamiento y su interacción depende de los mensajes que se comunican entre ellos, es el patrón orientado a objetos por excelencia y hace que los objetos modelados estén en concordancia con el negocio, se hablé un lenguaje común con el cliente y se pueda expresar en forma más sencilla como interactúan los objetos en el flujo de negocio generar. Lo negativo de este patrón es que es muy costoso de implementar en términos conceptuales, el modelo de negocios debe estar mejor definido para que se refleje en el modelo conceptual que se forma, pese a esto último es más sencillo de modificar y alterar una vez en desarrollo que el patrón transaction script. Algunos errores que de cometen al tratar de implementarlo es modelar sólo objetos que serán persistidos como parte del modelo de dominio, un negocio no sólo consta de partes que se guardan si no además hay objetos que y procesos que pueden ser modelados y no necesariamente ser guardados en la base de datos, los fanáticos de este modelo lo utilizan siempre, aunque en situaciones donde el negocio es simple y con un flujo sin tanta decisión puede volverse muy engorroso de implementar.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 125 seguidores