Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas

lunes, 19 de marzo de 2012

Matemáticas musicales

Estoy viendo un documental por TV harto interesante. ¿De qué trata? Aplicación de algoritmos genéticos, probabilidades, estadísticas, predicción, aleatorización, matemáticas y computadoras... ya se que todo esto suena horrible y espantoso, que puede hacer correr a cualquiera. Pero... ¿cuál es el objetivo? Hacer que las máquinas puedan improvisar música, que reproduzcan sonidos según movimientos y simulaciones. Ya se que suena a algo muy lejano pero lo que estoy viendo es sorprendente. Inicia con un robot que reproduce lo que se toca, un robot que toca instrumentos de percusión, sigue con un robot capaz e tocar marimba y adaptarse a lo que "escucha" e improvisar. Lo que aplica este segundo robot es cálculo de probabilidades de lo que el músico toca ¿cuál tono sigue?, ¿cuál secuencia es la que toca? ¿qué velocidad? y con base en esa información elige qué tocar y qué ritmo. ¿resultado? una música de improvisación muy interesante. Luego, mostraron una aplicación de iphone que funciona con los acelerómetros para reproducir tonos y cambiando de instrumentos la persona tiene la oportunidad de ir desarrollando su creatividad. Y yo que siempre he considerado a la estadística y la probabilidad como un área de las matemáticas menos gratas para mí... ¡sorpresa que me llevé hoy! y qué bueno que fue así :) Y para quienes quieran entender más a fondo la situación, aquí les dejo unos enlaces (cortesía de Wikipedia y Robot living) Probabilidades de Markov Algoritmos genéticos Shimon, Robot jazzista Leer más...

viernes, 31 de julio de 2009

Función POWER T-SQL

Ja... qué sensible resultó la funcioncita de T-SQL para el cálculo de potencias...
¿sensible o "agarrada" (como decimos en México a los que no les gusta la idea de soltar un centavito)?

Pues nada, resulta que en el desarrollo de una aplicación de monitoreo climático de Puebla, uno de los cálculos requería logaritmos y potencias. Parecía que todo resultaba bien, pero a la hora de corroborar resultados, el dichoso (ni tanto) cálculo tenía un desfasamiento importante, entonces buscando y rebuscando nos dimos cuenta que la culpa era de la función POWER.

Resulta que esta función que recibe como parámetros una base y un exponente, cuando la base es entera, no importa que el exponente sea fraccionario (con punto decimal o flotante, que es lo mismo), el resultado que devuelve es entero ¿solución? un "casteo" o conversión a "float" de la base o agregarle un punto y tantos ceros como decimales queremos que nos regrese.

POWER(10, @ExponenteDecimal) ---------> resultado entero
POWER(CAST(10 as float), @ExponenteDecimal) ---------------> resultado con punto flotante
POWER(10.0, @ExponenteDecimal) -------------> resultado con 1 decimal luego del punto.

¿preguntas? Leer más...

miércoles, 15 de abril de 2009

RegEx (Expresiones Regulares)

Y seguirá creciendo...








CharacterDescriptionExample
Cualquier caracter excepto [\^$.|?*+()Excepto los mencionados, todos los caracteres se representan a sí mismos . { y } son caracteres literales, excepto si son parte de un elemento en una expresión regular (ej.: calficador {n}).
a coincide con a
\ (backslash)segido por un [\^$.|?*+(){}Un backslash Quita el significado a un caracter especial tratándolo como caracter común.\+ coincide con +
\Q...\ERelacional los caracteres entre \Q y \E literalmente, quitando el significado de los caracteres especiales.\Q+-*/\E coincide con +-*/
Leer más...

sábado, 17 de enero de 2009

y qué es UML? (Casos de Uso)

Es una secuencia de interacciones que se desarrollarán entre un sistema y sus actores en respuesta a un evento que inicia un actor principal sobre el propio sistema. Los diagramas de casos de uso sirven para especificar la comunicación y el comportamiento de un sistema mediante su interacción con los usuarios y/u otros sistemas. O lo que es igual, un diagrama que muestra la relación entre los actores y los casos de uso en un sistema. Una relación es una conexión entre los elementos del modelo, por ejemplo la especialización y la generalización son relaciones. Los diagramas de casos de uso se utilizan para ilustrar los requerimientos del sistema al mostrar como reacciona una respuesta a eventos que se producen en el mismo.

Relaciones de Casos de Uso

Inclusión (Include) o (use)

Es una forma de interacción, un caso de uso dado puede "incluir" otro. El primer caso de uso a menudo depende del resultado del caso de uso incluido. Esto es útil para extraer comportamientos verdaderamente comunes desde múltiples casos de uso a una descripción individual, desde el caso de uso que lo incluye hasta el caso de uso incluido, con la etiqueta "«include»". Este uso se asemeja a una expansión de una macro, donde el comportamiento del caso incluido es colocado dentro del comportamiento del caso de uso base. No hay parámetros o valores de retorno.

Extensión (Extend)

Es otra forma de interacción, un caso de uso dado, (la extensión) puede extender a otro. Esta relación indica que el comportamiento del caso de uso extensión puede ser insertado en el caso de uso extendido bajo ciertas condiciones. La notación, es una flecha de punta abierta con línea discontinua, desde el caso de uso extensión al caso de uso extendido, con la etiqueta «extend». Esto puede ser útil para lidiar con casos especiales, o para acomodar nuevos requisitos durante el mantenimiento del sistema y su extensión. La extensión se utiliza en casos de uso, un caso de uso a otro caso siempre debe tener extensión o inclusión.

"La extensión, es el conjunto de objetos a los que se aplica un concepto. Los objetos de la extensión son los ejemplos o instancias de los conceptos."

Generalización

En la tercera forma de relaciones entre casos de uso, existe una relación generalización/especialización. Un caso de uso dado puede estar en una forma especializada de un caso de uso existente. La notación es una línea solida terminada en un triángulo dibujado desde el caso de uso especializado al caso de uso general. Esto se asemeja al concepto orientado a objetos de sub-clases, en la práctica puede ser útil factorizar comportamientos comunes, restricciones al caso de uso general, describirlos una vez, y enfrentarse a los detalles excepcionales en los casos de uso especializados.

"Entonces la Generalización es la actividad de identificar elementos en común entre conceptos y definir las relaciones de una superclase (concepto general) y subclase (concepto especializado). Es una manera de construir clasificaciones taxonómicas entre conceptos que entonces se representan en jerarquías de clases. Las subclases conceptuales son conformes con las superclases conceptuales en cuanto a la intensión y extensión."

Leer más...

miércoles, 7 de enero de 2009

El futuro de mi preciadísimo Delphi

Si, ya sé algunos saben que tiene rato que no programo en Delphi, por cuestiones de trabajo me mudé (de momento) a VStudio, actualmente mi lenguaje "de caj´n" en este entorno es C# (en otro post pondré historia de este lenguaje para quienes no la conocemos del todo).

Digamos que estoy esperando a que la oruga se transforme en mariposa.

Aquí está el artículo original cortesía de Embarcadero.

En breve, insisten en que no se desecharán las estructuras y demás características de Delphi en los nuevos compiladores, harán una reestructuración para incluir otras nuevas mejoras. Leer más...

viernes, 2 de enero de 2009

Paradigmas de programación

  • La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.

    La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).

    Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado (Zoom).

    Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos presentados por el código de máquina en la creación de programas complejos.


  • Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales.

    Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).

    Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.


  • La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional.

    La programación lógica comprende dos paradigmas de programación: la programación declarativa y la programación funcional. La programación declarativa gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. El lenguaje de programación lógica por excelencia es Prolog, que cuenta con diversas variantes. La más importante es la programación lógica con restricciones (véase artículo sobre programación con restricciones), que posibilita la resolución de ecuaciones lineales además de la demostración de hipótesis.


  • La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.
Leer más...

Los libros de "El tigre" y "El dragón"... ¿mitología china?

Jústamente hoy que le dí una buena limpieza a mi PC fue que comencé a reorganizar este pequeño sitio y mientras navegaba me acordé algo... "¡El libro del dragón!... ¡El libro del tigre!"...

Suena a algo de kung-fu o algo que tiene que ver con la filosofía china, verdad?? pues resulta que esos libros son dos buenos libros sobre... COMPILADORES

Esos libros los llevé en mi curso de Compiladores mientras estudiaba la carrera. ¿por qué lo menciono? porque mis chavos, a los que doy clases, les estoy enseñando lo poco que sé de Linux y lo que recuerdo que me fue enseñado como tecnologías bajo ese sistema operativo, es a manera de "embarradita" de programación, solo para que sepan un poquito de lo que se puede hacer con un enfoque un poquito académico y de investigación más que de entretenimiento.

Aquí les pongo un enlace a lo que en ese curso utilizamos y a algunas herramientas extras. Chéquen este post con frecuencia.

http://dinosaur.compilertools.net/
http://fbielma.org/files/docs/compiladores.pdf
http://www.dynamics.unam.edu/users/mtrejo/cursos/compiladores/compilers.pdf Leer más...

Escritorios tridimensionales

Pues bien, entre las películas que últimamente he visto fueron Iron-Man, Crepúsculo, Viaje al centro de la Tierra y de estas, la que más me movió fue la de Iron-Man ¿a quién no le mueve el ver semejante despliegue de efectos y alarde de tecnología, aunque sea en algunos casos ficticia.

En mi caso, lo que me gustó más que la armadura o los efectos, fue la mesa de trabajo de Tonny, ese "escritorio" que mostraba holográficamente lo que fuera y pasar cosas de una pantalla a esa mesa o a otra pantalla con el movimiento de un apuntador. Y lo que pasa es que a mí me gusta la graficación tridimensional (últimamente la dejé bastante abandonadilla).

Así que aquí les presento algunos "escritorios" tridimensionales, algunos son más bien gestores de escritorios múltiples con efecto 3D al cambiar entre escritorios

Escritorio 3D (debería decir "caja de huevo" en vez de escritorio, me da la sensación de estar mirando dentro de una caja de cartón)
AltDesk Portable (debido a que primero lo ví en el Vista, diré que AltDesk se parece al efecto que tiene dicho sistema operativo al cambiar entre ventanas)
Leer más...

y qué es UML?

Ya antes comencé a poner un post al respecto, y en virtud de que muchos no lo manejamos de manera fluida y cuando nos lo mencionan ponemos cara de "y eso con qué se come?". Inicio una mini-serie de post referentes a UML de la cual, éste será algo así como el índice e introducción.

Pues... comenzamos!!

Leer más...